aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJohannes Stoelp <johannes.stoelp@gmail.com>2022-04-17 00:00:05 +0200
committerJohannes Stoelp <johannes.stoelp@gmail.com>2022-04-17 00:00:05 +0200
commit9bdc2b4fec2f5d11c9648916f362206d31ab6e0d (patch)
treefa06a961c280a0a40167efcf42f5c09ec4c59f45
parent0730e22f17dbbdcc8559d743494b20d5ca782b35 (diff)
downloadblog-9bdc2b4fec2f5d11c9648916f362206d31ab6e0d.tar.gz
blog-9bdc2b4fec2f5d11c9648916f362206d31ab6e0d.zip
virtio: add script and make target to build ext2 device
-rw-r--r--content/2021-12-02-toying-with-virtio.md15
-rw-r--r--content/2021-12-02-toying-with-virtio/Makefile7
-rwxr-xr-xcontent/2021-12-02-toying-with-virtio/build_ext2.sh7
3 files changed, 19 insertions, 10 deletions
diff --git a/content/2021-12-02-toying-with-virtio.md b/content/2021-12-02-toying-with-virtio.md
index a46fb2a..56c34de 100644
--- a/content/2021-12-02-toying-with-virtio.md
+++ b/content/2021-12-02-toying-with-virtio.md
@@ -132,11 +132,7 @@ Next we are creating the ext2 filesystem image. This we'll do by creating an
`128M` blob and format it with ext2 afterwards. Then we can mount the image
via a `loop` device and populate the filesystem.
```sh
-dd if=/dev/zero of=rootfs.ext2 bs=1M count=128
-mkfs.ext2 rootfs.ext2
-mount -t ext2 -o loop rootfs.ext2 /mnt
-echo world > /mnt/hello
-umount /mnt
+{{ include_range(path="content/2021-12-02-toying-with-virtio/build_ext2.sh", start=3, end=7) }}
```
Before booting the guest we will attach the virtio block device to the VM.
@@ -145,7 +141,7 @@ Therefore we add the `-drive` configuration to our previous qemu invocation.
```sh
qemu-system-x86_64 \
...
- -drive if=virtio,file=rootfs.ext2,format=raw
+ -drive if=virtio,file=fs.ext2,format=raw
```
The `-drive` option is a shortcut for a `-device (front-end) / -blockdev
@@ -339,6 +335,7 @@ following files:
- [Makefile][makefile]
- [build_initramfs.sh][build-initramfs]
- [build_kernel.sh][build-kernel]
+- [build_ext2.sh][build-ext2]
Then run the following steps to build everything. The prefix `[H]` and `[C]`
indicate whether this command is run on the host or inside the container
@@ -355,9 +352,8 @@ respectively.
# Build kernel and initramfs.
[C]: make
-# Create the rootfs.ext2 disk image as described in the virtio blk
-# section above, or remove the drive from the qemu command line
-# in the make `run` target.
+# Build ext2 fs as virtio blkdev backend.
+[H]: make ext2
# Start qemu guest.
[H]: make run
@@ -365,6 +361,7 @@ respectively.
[build-initramfs]: https://git.memzero.de/johannst/blog/src/branch/main/content/2021-12-02-toying-with-virtio/build_initramfs.sh
[build-kernel]: https://git.memzero.de/johannst/blog/src/branch/main/content/2021-12-02-toying-with-virtio/build_kernel.sh
+[build-ext2]: https://git.memzero.de/johannst/blog/src/branch/main/content/2021-12-02-toying-with-virtio/build_ext2.sh
[makefile]: https://git.memzero.de/johannst/blog/src/branch/main/content/2021-12-02-toying-with-virtio/Makefile
[dockerfile]: https://git.memzero.de/johannst/blog/src/branch/main/content/2021-12-02-toying-with-virtio/Dockerfile
[initramfs]: https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt
diff --git a/content/2021-12-02-toying-with-virtio/Makefile b/content/2021-12-02-toying-with-virtio/Makefile
index 4009862..d4286af 100644
--- a/content/2021-12-02-toying-with-virtio/Makefile
+++ b/content/2021-12-02-toying-with-virtio/Makefile
@@ -6,6 +6,7 @@ help:
@echo "Build targets:"
@echo "* init - Build busybox based initramfs."
@echo "* kernel - Build minimal linux kernel."
+ @echo " ext2 - Build minimal ext2 fs as virtio blkdev backend (uses sudo)."
@echo " clean - Cleanup downloads & builds."
@echo ""
@echo "Run targets:"
@@ -27,6 +28,9 @@ kernel:
init:
./build_initramfs.sh
+ext2:
+ ./build_ext2.sh
+
run:
qemu-system-x86_64 \
-nographic \
@@ -38,7 +42,7 @@ run:
-device virtio-serial-pci \
-device virtconsole,chardev=vcon,name=console.0 \
-chardev socket,id=vcon,ipv4=on,host=localhost,port=2222,server,telnet=on,wait=off \
- -drive format=raw,if=virtio,file=rootfs.ext2 \
+ -drive format=raw,if=virtio,file=blk.ext2 \
-nic user,model=virtio-net-pci
vcon:
@@ -48,6 +52,7 @@ clean:
$(RM) initramfs.cpio.gz
$(RM) -r busybox-*
$(RM) -r linux-$(VER)*
+ $(RM) blk.ext2
docker:
DOCKER_BUILDKIT=1 docker build --build-arg UID=$(shell id -u) -t virtio-dev .
diff --git a/content/2021-12-02-toying-with-virtio/build_ext2.sh b/content/2021-12-02-toying-with-virtio/build_ext2.sh
new file mode 100755
index 0000000..6e6bff8
--- /dev/null
+++ b/content/2021-12-02-toying-with-virtio/build_ext2.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+dd if=/dev/zero of=blk.ext2 bs=1M count=128
+mkfs.ext2 blk.ext2
+sudo mount -t ext2 -o loop blk.ext2 /mnt
+echo world | sudo tee /mnt/hello
+sudo umount /mnt