From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on atuin.qyliss.net X-Spam-Level: X-Spam-Status: No, score=-4.5 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 Received: by atuin.qyliss.net (Postfix, from userid 496) id 5EE7D6035; Sun, 11 Apr 2021 11:59:35 +0000 (UTC) Received: from [127.0.0.1] (localhost [IPv6:::1]) by atuin.qyliss.net (Postfix) with ESMTP id 7BF075CCF; Sun, 11 Apr 2021 11:58:34 +0000 (UTC) Received: by atuin.qyliss.net (Postfix, from userid 496) id BEE965D24; Sun, 11 Apr 2021 11:58:32 +0000 (UTC) Received: from out4-smtp.messagingengine.com (out4-smtp.messagingengine.com [66.111.4.28]) by atuin.qyliss.net (Postfix) with ESMTPS id 020D65B30 for ; Sun, 11 Apr 2021 11:57:58 +0000 (UTC) Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 69FFD5C00E5 for ; Sun, 11 Apr 2021 07:57:57 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 11 Apr 2021 07:57:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alyssa.is; h= from:to:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=QilL03vNKWkPK jEmC+sDxXfQVM58GP779Huf7weWUuQ=; b=I9qLvu+YbmHnD6je4frMcWoAGe9vn bBmOKEwivNNDlOlgVtBTHBG2FdTKbcET4uwKXJ1jeIVE47hgi4oR1XwKLDgh786G ANzE/SfHvEbCH1L99k3gq1rHM0oOAzstCHpObq2Rb+onzh0adnP2liVEyUGdJ9M9 FVsgZ73sl06s0zQtBnz2aeNa+muRFPdskjF157NjcHm8Fk4d0/Fs0faS62ihSfpa ysv9hHYKQwXmTNb89FpiWXaToUfM7It7cEbCSVcgXAgQVU8kDtdikqZTw/Tf5l+u TlgEjRNqa1HtUqjqzvLPh7bxXIq+1IusTcjnKTR9XrDUHba0pv/AMzpvA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=QilL03vNKWkPKjEmC+sDxXfQVM58GP779Huf7weWUuQ=; b=ZvvyPoN+ Uw9H+P8Durl7BCUuCM1a/o6feTRZNvW2qNOWz1WUgBj039pYpgt4MZnMkk9XsjpP 8XP/UybFlIMAd2S7tyDY+aga9+KKMQCFUsrnsJcOoYZc4XFNxQm1HylzOYzXac7V 7YIMruh+f+KiuXtrab3NHSI2yf6HVbKhbNj89WELVH3zehySs6XdBUI6KBR0Z/+W 5AeU/SfPj/I3Na1VooockRoS1NsaWMPvwOXfYT8RLPwSUobG5UiJmKZjp4sTZODF Q0vSVw+e6PhQXI1Z7IgvIL2Uchw97f+w9Lsae206RY4t5SOjJnzsIDGH6+ylrylc cE6UNQAUGKzt8Q== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudekgedgudejhecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhephffvufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpeetlhihshhsrgcutfhoshhsuceohhhisegrlhihshhsrgdr ihhsqeenucggtffrrghtthgvrhhnpefgfedukedvleeileeludefveehgeelgfegvdduje dvtdffueeuveffheeljeekvdenucfkphepjeelrddvfeehrdduudelrddutdejnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepqhihlhhishhsse igvddvtddrqhihlhhishhsrdhnvght X-ME-Proxy: Received: from x220.qyliss.net (p4feb776b.dip0.t-ipconnect.de [79.235.119.107]) by mail.messagingengine.com (Postfix) with ESMTPA id 2F996108005F for ; Sun, 11 Apr 2021 07:57:57 -0400 (EDT) Received: by x220.qyliss.net (Postfix, from userid 1000) id C7EE618FA; Sun, 11 Apr 2021 11:57:55 +0000 (UTC) From: Alyssa Ross To: devel@spectrum-os.org Subject: [PATCH nixpkgs 08/16] spectrumPackages.rootfs: add s6-rc support Date: Sun, 11 Apr 2021 11:57:32 +0000 Message-Id: <20210411115740.29615-9-hi@alyssa.is> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210411115740.29615-1-hi@alyssa.is> References: <20210411115740.29615-1-hi@alyssa.is> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: G4KGDOJOWY5KISS44K66LJRIMJUI3PW3 X-Message-ID-Hash: G4KGDOJOWY5KISS44K66LJRIMJUI3PW3 X-MailFrom: qyliss@x220.qyliss.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.3.1 Precedence: list List-Id: Patches and low-level development discussion Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: 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. --- .../linux/spectrum/rootfs/default.nix | 43 +++++++++++++++---- .../linux/spectrum/rootfs/generic.nix | 15 ++++--- .../linux/spectrum/rootfs/rc-services.nix | 26 +++++++++++ .../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 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 ! -- 2.30.0