The approach of having a template service for each virtiofsd comes from the work I need on Wayland support for Unikie, hence the Unikie copyright in etc/s6-rc/ext-rc-init/up. Signed-off-by: Alyssa Ross <hi@alyssa.is> --- host/rootfs/Makefile | 3 +++ host/rootfs/default.nix | 4 ++-- host/rootfs/etc/s6-rc/ext-rc-init/up | 11 +++++++++++ host/rootfs/etc/template/fs/notification-fd | 1 + host/rootfs/etc/template/fs/notification-fd.license | 2 ++ host/rootfs/etc/template/fs/run | 11 +++++++++++ host/rootfs/etc/template/fs/type | 1 + host/rootfs/etc/template/fs/type.license | 2 ++ 8 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 host/rootfs/etc/template/fs/notification-fd create mode 100644 host/rootfs/etc/template/fs/notification-fd.license create mode 100755 host/rootfs/etc/template/fs/run create mode 100644 host/rootfs/etc/template/fs/type create mode 100644 host/rootfs/etc/template/fs/type.license diff --git a/host/rootfs/Makefile b/host/rootfs/Makefile index 31f76d2..249af6d 100644 --- a/host/rootfs/Makefile +++ b/host/rootfs/Makefile @@ -28,6 +28,9 @@ FILES = \ etc/mdev/wait \ etc/parse-devname \ etc/passwd \ + etc/template/fs/notification-fd \ + etc/template/fs/run \ + etc/template/fs/type \ etc/s6-linux-init/run-image/service/getty-tty1/run \ etc/s6-linux-init/run-image/service/getty-tty2/run \ etc/s6-linux-init/run-image/service/getty-tty3/run \ diff --git a/host/rootfs/default.nix b/host/rootfs/default.nix index 4788628..7932845 100644 --- a/host/rootfs/default.nix +++ b/host/rootfs/default.nix @@ -7,7 +7,7 @@ pkgs.pkgsStatic.callPackage ( { lib, stdenvNoCC, nixos, runCommand, writeReferencesToFile, s6-rc, tar2ext4 , busybox, cloud-hypervisor, cryptsetup, execline, jq, kmod -, mdevd, s6, s6-linux-init, socat, util-linuxMinimal, xorg +, mdevd, s6, s6-linux-init, socat, util-linuxMinimal, virtiofsd, xorg }: let @@ -45,7 +45,7 @@ let packages = [ cloud-hypervisor execline jq kmod mdevd s6 s6-linux-init s6-rc socat - start-vm + start-vm virtiofsd (cryptsetup.override { programs = { diff --git a/host/rootfs/etc/s6-rc/ext-rc-init/up b/host/rootfs/etc/s6-rc/ext-rc-init/up index 1aec7fb..53ab127 100644 --- a/host/rootfs/etc/s6-rc/ext-rc-init/up +++ b/host/rootfs/etc/s6-rc/ext-rc-init/up @@ -1,5 +1,6 @@ # SPDX-License-Identifier: EUPL-1.2+ # SPDX-FileCopyrightText: 2021-2022 Alyssa Ross <hi@alyssa.is> +# SPDX-FileCopyrightText: 2022 Unikie if { mkdir -p /run/s6-rc.ext.src } @@ -15,6 +16,16 @@ if { if { redirfd -w 1 ${name}/notification-fd echo 3 } if { ln -s -- /bin/start-vm ${name}/run } + if { + elglob -0 paths ${dir}/shared-dirs/* + forx -pE path { $paths } + backtick -E fsname { basename -- $path } + if { cp -R -- /etc/template/fs ${name}-fs-${fsname} } + if { mkdir -- ${name}-fs-${fsname}/data ${name}-fs-${fsname}/env } + if { cp -P -- ${path}/dir ${name}-fs-${fsname}/data/shared-dir } + touch -- ${name}/dependencies.d/${name}-fs-${fsname} + } + elglob -0 paths /ext/svc/data/${name}/providers/net/* forx -pE path { $paths } backtick -E dep { basename -- $path } diff --git a/host/rootfs/etc/template/fs/notification-fd b/host/rootfs/etc/template/fs/notification-fd new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/host/rootfs/etc/template/fs/notification-fd @@ -0,0 +1 @@ +3 diff --git a/host/rootfs/etc/template/fs/notification-fd.license b/host/rootfs/etc/template/fs/notification-fd.license new file mode 100644 index 0000000..5a40633 --- /dev/null +++ b/host/rootfs/etc/template/fs/notification-fd.license @@ -0,0 +1,2 @@ +SPDX-License-Identifier: CC0-1.0 +SPDX-FileCopyrightText: 2022 Alyssa Ross <hi@alyssa.is> diff --git a/host/rootfs/etc/template/fs/run b/host/rootfs/etc/template/fs/run new file mode 100755 index 0000000..5ca214a --- /dev/null +++ b/host/rootfs/etc/template/fs/run @@ -0,0 +1,11 @@ +#!/bin/execlineb -P +# SPDX-License-Identifier: EUPL-1.2+ +# SPDX-FileCopyrightText: 2021-2022 Alyssa Ross <hi@alyssa.is> + +s6-ipcserver-socketbinder -a 0700 -B env/virtiofsd.sock + +if { fdmove 1 3 echo } +fdclose 3 + +export TMPDIR /run +virtiofsd --fd 0 --shared-dir data/shared-dir diff --git a/host/rootfs/etc/template/fs/type b/host/rootfs/etc/template/fs/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/host/rootfs/etc/template/fs/type @@ -0,0 +1 @@ +longrun diff --git a/host/rootfs/etc/template/fs/type.license b/host/rootfs/etc/template/fs/type.license new file mode 100644 index 0000000..5a40633 --- /dev/null +++ b/host/rootfs/etc/template/fs/type.license @@ -0,0 +1,2 @@ +SPDX-License-Identifier: CC0-1.0 +SPDX-FileCopyrightText: 2022 Alyssa Ross <hi@alyssa.is> -- 2.37.1