From fcd4c80bf0181e1179fdf7e7d49586ff14001b39 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Sat, 19 Dec 2020 15:12:04 +0000 Subject: spectrumPackages.rootfs: add s6-rc support This allows specifying s6-rc services (which can have dependencies, and be taken up and down) in the same way that s6 services (which are merely supervised) are declared. This removes the spectrumcmd mechanism to clean up the boot process -- it could be reintroduced as an s6-rc service if required. Message-Id: <20210411115740.29615-9-hi@alyssa.is> Reviewed-by: Cole Helbling --- pkgs/os-specific/linux/spectrum/rootfs/default.nix | 43 ++++++++++++++++++---- pkgs/os-specific/linux/spectrum/rootfs/generic.nix | 15 +++++--- .../linux/spectrum/rootfs/rc-services.nix | 26 +++++++++++++ pkgs/os-specific/linux/spectrum/rootfs/stage1.nix | 22 +++-------- 4 files changed, 77 insertions(+), 29 deletions(-) create mode 100644 pkgs/os-specific/linux/spectrum/rootfs/rc-services.nix (limited to 'pkgs/os-specific/linux/spectrum') diff --git a/pkgs/os-specific/linux/spectrum/rootfs/default.nix b/pkgs/os-specific/linux/spectrum/rootfs/default.nix index 6f46ad8054b..70ddac4c545 100644 --- a/pkgs/os-specific/linux/spectrum/rootfs/default.nix +++ b/pkgs/os-specific/linux/spectrum/rootfs/default.nix @@ -35,17 +35,44 @@ makeRootfs { ${busybox}/bin/getty -i -n -l ${login} 38400 ttyS0 ''; - run = '' - if { chown user /dev/wl0 } + rcServices.ok-all = { + type = writeText "ok-all-type" '' + bundle + ''; + contents = writeText "ok-all-contents" '' + wayfire + ''; + }; - s6-applyuidgid -u 1000 -g 1000 - export XDG_RUNTIME_DIR /run/user/1000 + rcServices.wayfire = { + type = writeText "wayfire-type" '' + longrun + ''; + run = writeScript "wayfire-run" '' + #! ${execline}/bin/execlineb -S0 - export PATH ${lib.makeBinPath path} + s6-applyuidgid -u 1000 -g 1000 - ${sommelier}/bin/sommelier - wayfire -c ${wayfireConfig} - ''; + export HOME / + export PATH ${lib.makeBinPath path} + export XDG_RUNTIME_DIR /run/user/1000 + + ${sommelier}/bin/sommelier + wayfire -c ${wayfireConfig} + ''; + dependencies = writeText "wayfire-dependencies" '' + wl0 + ''; + }; + + rcServices.wl0 = { + type = writeText "wl0-type" '' + oneshot + ''; + up = writeText "wl0-run" '' + chown user /dev/wl0 + ''; + }; fonts = [ source-code-pro ]; } diff --git a/pkgs/os-specific/linux/spectrum/rootfs/generic.nix b/pkgs/os-specific/linux/spectrum/rootfs/generic.nix index 81fb80a614f..4122abf80c6 100644 --- a/pkgs/os-specific/linux/spectrum/rootfs/generic.nix +++ b/pkgs/os-specific/linux/spectrum/rootfs/generic.nix @@ -1,14 +1,14 @@ { runCommandNoCC, writeScript, writeReferencesToFile, makeFontsConf, lib -, dash, execline, s6, s6-portable-utils, s6-linux-utils, s6-linux-init, busybox +, dash, execline, s6, s6-rc, s6-portable-utils, s6-linux-utils, s6-linux-init, busybox , mesa, squashfs-tools-ng }: -{ services, run, fonts ? [], path ? [] }: +{ services, rcServices ? {}, fonts ? [], path ? [] }: let - makeStage1 = import ./stage1.nix { + stage1 = import ./stage1.nix { inherit writeScript lib - execline s6 s6-portable-utils s6-linux-utils s6-linux-init busybox mesa + execline s6 s6-rc s6-portable-utils s6-linux-utils s6-linux-init busybox mesa path; }; @@ -16,6 +16,10 @@ let inherit runCommandNoCC writeScript lib execline; }; + makeRcServicesDir = import ./rc-services.nix { + inherit runCommandNoCC lib s6-rc; + }; + fontsConf = makeFontsConf { fontDirectories = fonts; }; squashfs = runCommandNoCC "root-squashfs" {} '' @@ -34,7 +38,7 @@ let mkdir bin sbin dev proc run sys tmp ln -s ${dash}/bin/dash bin/sh - ln -s ${makeStage1 { inherit run; }} sbin/init + ln -s ${stage1} sbin/init cp -r ${./etc} etc chmod u+w etc @@ -43,6 +47,7 @@ let touch etc/login.defs cp -r ${makeServicesDir { inherit services; }} etc/service + cp -r ${makeRcServicesDir { services = rcServices; }} etc/s6-rc ''; in rootfs diff --git a/pkgs/os-specific/linux/spectrum/rootfs/rc-services.nix b/pkgs/os-specific/linux/spectrum/rootfs/rc-services.nix new file mode 100644 index 00000000000..4c942189c5e --- /dev/null +++ b/pkgs/os-specific/linux/spectrum/rootfs/rc-services.nix @@ -0,0 +1,26 @@ +{ runCommandNoCC, lib, s6-rc }: + +{ services ? [] }: + +let + inherit (lib) concatStrings escapeShellArg mapAttrsToList optionalString; + + source = runCommandNoCC "s6-services-source" {} '' + mkdir $out + ${concatStrings (mapAttrsToList (name: attrs: '' + mkdir $out/${name} + ${concatStrings (mapAttrsToList (key: value: '' + cp ${value} $out/${name}/${key} + '') attrs)} + '') services)} + ''; + + s6RcCompile = { fdhuser ? null }: source: + runCommandNoCC "s6-rc-compile" {} '' + ${s6-rc}/bin/s6-rc-compile \ + ${optionalString (fdhuser != null) "-h ${escapeShellArg fdhuser}"} \ + $out ${source} + ''; +in + +s6RcCompile {} source diff --git a/pkgs/os-specific/linux/spectrum/rootfs/stage1.nix b/pkgs/os-specific/linux/spectrum/rootfs/stage1.nix index 6caf9ff93b8..13de2d09876 100644 --- a/pkgs/os-specific/linux/spectrum/rootfs/stage1.nix +++ b/pkgs/os-specific/linux/spectrum/rootfs/stage1.nix @@ -1,13 +1,11 @@ { writeScript, lib -, execline, s6, s6-portable-utils, s6-linux-utils, s6-linux-init, busybox, mesa +, execline, s6, s6-rc, s6-portable-utils, s6-linux-utils, s6-linux-init, busybox, mesa , path ? [] }: -{ run ? "true" }: - let path' = path ++ [ - s6 s6-portable-utils s6-linux-utils s6-linux-init busybox execline + s6 s6-rc s6-portable-utils s6-linux-utils s6-linux-init busybox execline ]; in @@ -16,8 +14,6 @@ writeScript "init-stage1" '' export PATH ${lib.makeBinPath path'} ${s6}/bin/s6-setsid -qb -- - importas -i spectrumcmd spectrumcmd - umask 022 if { s6-mount -t tmpfs -o mode=0755 tmpfs /run } if { s6-hiercopy /etc/service /run/service } @@ -25,6 +21,9 @@ writeScript "init-stage1" '' background { s6-setsid -- + + if { s6-rc-init -c /etc/s6-rc /run/service } + if { s6-mkdir -p /run/user/0 /dev/pts /dev/shm } if { install -o user -g user -d /run/user/1000 } if { s6-mount -t devpts -o gid=4,mode=620 none /dev/pts } @@ -33,16 +32,7 @@ writeScript "init-stage1" '' if { s6-mount -t sysfs none /sys } if { s6-ln -s ${mesa.drivers} /run/opengl-driver } - export HOME / - export XDG_RUNTIME_DIR /run/user/0 - foreground { - ifelse { test -n $spectrumcmd } - { pipeline { heredoc 0 $spectrumcmd base64 -d } /bin/sh } - ${run} - } - importas -i ? ? - if { s6-echo STATUS: $? } - s6-svscanctl -6 /run/service + s6-rc change ok-all } unexport ! -- cgit 1.4.1