summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2022-10-10 23:28:46 +0000
committerAlyssa Ross <hi@alyssa.is>2023-02-26 19:12:43 +0000
commitbf36d81385314ba454125c9c6909a6d3cf70fca9 (patch)
tree8c08afd17d495e3b5925028f32e818b390160b2e
parentbdbc835e57c1d287bfb7596b8cfaa61986451d30 (diff)
downloadspectrum-bf36d81385314ba454125c9c6909a6d3cf70fca9.tar
spectrum-bf36d81385314ba454125c9c6909a6d3cf70fca9.tar.gz
spectrum-bf36d81385314ba454125c9c6909a6d3cf70fca9.tar.bz2
spectrum-bf36d81385314ba454125c9c6909a6d3cf70fca9.tar.lz
spectrum-bf36d81385314ba454125c9c6909a6d3cf70fca9.tar.xz
spectrum-bf36d81385314ba454125c9c6909a6d3cf70fca9.tar.zst
spectrum-bf36d81385314ba454125c9c6909a6d3cf70fca9.zip
img/app: add support for testing virtiofs
Signed-off-by: Alyssa Ross <hi@alyssa.is>
Message-Id: <20221010232909.1953738-7-hi@alyssa.is>
-rw-r--r--.gitignore5
-rw-r--r--img/app/Makefile16
-rw-r--r--img/app/shell.nix6
-rw-r--r--lib/common.mk4
4 files changed, 26 insertions, 5 deletions
diff --git a/.gitignore b/.gitignore
index a97f309..802df73 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,10 @@
 # SPDX-License-Identifier: CC0-1.0
-# SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is>
+# SPDX-FileCopyrightText: 2021-2022 Alyssa Ross <hi@alyssa.is>
 
 /config.nix
 build/
 result
 result-*
+
+# s6-ipcserver-socketbinder creates lockfiles for sockets.
+*.sock.lock
diff --git a/img/app/Makefile b/img/app/Makefile
index 9649403..b697135 100644
--- a/img/app/Makefile
+++ b/img/app/Makefile
@@ -82,25 +82,35 @@ build/etc/s6-rc: $(VM_S6_RC_FILES)
 	    s6-rc-compile $@ $$dir; \
 	    exit=$$?; rm -r $$dir; exit $$exit
 
-run-qemu: build/host/appvm/blk/root.img
+start-virtiofsd:
+	$(S6_IPCSERVER_SOCKETBINDER) -B virtiofsd.sock \
+	    $(BACKGROUND) $(VIRTIOFSD) --fd 0 --shared-dir . ""
+.PHONY: start-virtiofsd
+
+run-qemu: build/host/appvm/blk/root.img start-virtiofsd
 	$(QEMU_KVM) -m 128 -cpu host -machine q35,kernel=$(KERNEL) -vga none \
 	  -drive file=build/host/appvm/blk/root.img,if=virtio,format=raw,readonly=on \
 	  -drive file=$(RUN_IMG),if=virtio,format=raw,readonly=on \
 	  -append "console=ttyS0 root=PARTLABEL=root" \
 	  -netdev user,id=net0 \
 	  -device virtio-net,netdev=net0,mac=0A:B3:EC:00:00:00 \
+	  -chardev socket,id=virtiofsd,path=virtiofsd.sock \
+	  -device vhost-user-fs-pci,chardev=virtiofsd,tag=virtiofs0 \
+	  -object memory-backend-memfd,id=mem,size=128M,share=on \
+	  -numa node,memdev=mem \
 	  -chardev vc,id=virtiocon0 \
 	  -device virtio-serial-pci \
 	  -device virtconsole,chardev=virtiocon0
 .PHONY: run-qemu
 
-run-cloud-hypervisor: build/host/appvm/blk/root.img
+run-cloud-hypervisor: build/host/appvm/blk/root.img start-virtiofsd
 	$(CLOUD_HYPERVISOR) \
 	    --api-socket path=vmm.sock \
-	    --memory size=128M \
+	    --memory size=128M,shared=on \
 	    --disk path=build/host/appvm/blk/root.img,readonly=on \
 	           path=$(RUN_IMG),readonly=on \
 	    --net tap=tap0,mac=0A:B3:EC:00:00:00 \
+	    --fs tag=virtiofs0,socket=virtiofsd.sock \
 	    --kernel $(KERNEL) \
 	    --cmdline "console=ttyS0 root=PARTLABEL=root" \
 	    --console tty \
diff --git a/img/app/shell.nix b/img/app/shell.nix
index 9fe6031..6952a26 100644
--- a/img/app/shell.nix
+++ b/img/app/shell.nix
@@ -11,7 +11,11 @@ with config.pkgs;
 
 {
   nativeBuildInputs = nativeBuildInputs ++ [
-    cloud-hypervisor jq qemu_kvm reuse
+    # Both QEMU and virtiofsd come with a virtiofsd executable,
+    # so we have to list virtiofsd first.
+    virtiofsd
+
+    cloud-hypervisor execline jq qemu_kvm reuse s6
   ];
 
   KERNEL = "${passthru.kernel.dev}/vmlinux";
diff --git a/lib/common.mk b/lib/common.mk
index efa04a0..61d5105 100644
--- a/lib/common.mk
+++ b/lib/common.mk
@@ -8,6 +8,8 @@
 # QEMU_KVM = qemu-system-x86_64 -enable-kvm.
 QEMU_KVM = qemu-kvm
 
+BACKGROUND = background
+CLOUD_HYPERVISOR = cloud-hypervisor
 CLOUD_HYPERVISOR = cloud-hypervisor
 CPIO = cpio
 CPIOFLAGS = --reproducible -R +0:+0 -H newc
@@ -15,10 +17,12 @@ MCOPY = mcopy
 MKFS_FAT = mkfs.fat
 MMD = mmd
 OBJCOPY = objcopy
+S6_IPCSERVER_SOCKETBINDER = s6-ipcserver-socketbinder
 TAR = tar
 TAR2EXT4 = tar2ext4
 TRUNCATE = truncate
 VERITYSETUP = veritysetup
+VIRTIOFSD = virtiofsd
 
 .SUFFIXES: .ext4 .tar
 .tar.ext4: