forked from DGNum/liminix
make s6-init-files into a module
This commit is contained in:
parent
85f7f7293d
commit
797aa30c47
10 changed files with 161 additions and 172 deletions
|
@ -8,10 +8,10 @@ let
|
||||||
./modules/base.nix
|
./modules/base.nix
|
||||||
({ lib, ... } : { config = { inherit (device) kernel; }; })
|
({ lib, ... } : { config = { inherit (device) kernel; }; })
|
||||||
<liminix-config>
|
<liminix-config>
|
||||||
./modules/s6-rc.nix
|
./modules/s6
|
||||||
] nixpkgs.pkgs;
|
] nixpkgs.pkgs;
|
||||||
finalConfig = config // {
|
finalConfig = config // {
|
||||||
packages = (with nixpkgs.pkgs; [ s6-init-files s6-rc ]) ++
|
packages = (with nixpkgs.pkgs; [ s6-rc ]) ++
|
||||||
config.systemPackages ++
|
config.systemPackages ++
|
||||||
(builtins.attrValues config.services);
|
(builtins.attrValues config.services);
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
, callPackage
|
, callPackage
|
||||||
, pseudofile
|
, pseudofile
|
||||||
, runCommand
|
, runCommand
|
||||||
, s6-init-files
|
|
||||||
, writeText
|
, writeText
|
||||||
} : config :
|
} : config :
|
||||||
let
|
let
|
||||||
|
@ -39,7 +38,6 @@ let
|
||||||
# depend on are also added
|
# depend on are also added
|
||||||
storeContents = [
|
storeContents = [
|
||||||
pseudofiles
|
pseudofiles
|
||||||
s6-init-files
|
|
||||||
config-pseudofiles
|
config-pseudofiles
|
||||||
] ++ config.packages ;
|
] ++ config.packages ;
|
||||||
};
|
};
|
||||||
|
@ -49,6 +47,6 @@ in runCommand "frob-squashfs" {
|
||||||
cp ${storefs} ./store.img
|
cp ${storefs} ./store.img
|
||||||
chmod +w store.img
|
chmod +w store.img
|
||||||
mksquashfs - store.img -no-recovery -quiet -no-progress -root-becomes store -p "/ d 0755 0 0"
|
mksquashfs - store.img -no-recovery -quiet -no-progress -root-becomes store -p "/ d 0755 0 0"
|
||||||
mksquashfs - store.img -no-recovery -quiet -no-progress -root-becomes nix -pf ${pseudofiles} -pf ${s6-init-files} -pf ${config-pseudofiles}
|
mksquashfs - store.img -no-recovery -quiet -no-progress -root-becomes nix -pf ${pseudofiles} -pf ${config-pseudofiles}
|
||||||
cp store.img $out
|
cp store.img $out
|
||||||
''
|
''
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
{ config, pkgs, ... }:
|
|
||||||
let
|
|
||||||
s6-rc-db = pkgs.s6-rc-database.override {
|
|
||||||
services = builtins.attrValues config.services;
|
|
||||||
};
|
|
||||||
inherit (pkgs.pseudofile) dir symlink;
|
|
||||||
inherit (pkgs) s6-init-bin;
|
|
||||||
in {
|
|
||||||
config = {
|
|
||||||
environment = dir {
|
|
||||||
etc = dir {
|
|
||||||
s6-rc = dir {
|
|
||||||
compiled = symlink "${s6-rc-db}/compiled";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
bin = dir {
|
|
||||||
init = symlink "${s6-init-bin}/bin/init";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
158
modules/s6/default.nix
Normal file
158
modules/s6/default.nix
Normal file
|
@ -0,0 +1,158 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
inherit (pkgs)
|
||||||
|
busybox
|
||||||
|
execline
|
||||||
|
s6
|
||||||
|
s6-init-bin
|
||||||
|
s6-linux-init
|
||||||
|
stdenvNoCC;
|
||||||
|
inherit (pkgs.pseudofile) dir symlink;
|
||||||
|
|
||||||
|
s6-rc-db = pkgs.s6-rc-database.override {
|
||||||
|
services = builtins.attrValues config.services;
|
||||||
|
};
|
||||||
|
s6-init-scripts = stdenvNoCC.mkDerivation {
|
||||||
|
name = "s6-scripts";
|
||||||
|
src = ./scripts;
|
||||||
|
phases = ["unpackPhase" "installPhase" ];
|
||||||
|
buildInputs = [busybox];
|
||||||
|
installPhase = ''
|
||||||
|
mkdir $out
|
||||||
|
cp -r $src $out/scripts
|
||||||
|
chmod -R +w $out
|
||||||
|
patchShebangs $out/scripts
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
service = dir {
|
||||||
|
s6-linux-init-runleveld = dir {
|
||||||
|
notification-fd = { file = "3"; };
|
||||||
|
run = {
|
||||||
|
file = ''
|
||||||
|
#!${execline}/bin/execlineb -P
|
||||||
|
${execline}/bin/fdmove -c 2 1
|
||||||
|
${execline}/bin/fdmove 1 3
|
||||||
|
${s6}/bin/s6-ipcserver -1 -a 0700 -c 1 -- s
|
||||||
|
${s6}/bin/s6-sudod -dt30000 -- "/etc/s6-linux-init/current"/scripts/runlevel
|
||||||
|
'';
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
s6-linux-init-shutdownd = dir {
|
||||||
|
fifo = {
|
||||||
|
type = "i";
|
||||||
|
subtype = "f";
|
||||||
|
mode = "0600";
|
||||||
|
};
|
||||||
|
run = {
|
||||||
|
file = ''
|
||||||
|
#!${execline}/bin/execlineb -P
|
||||||
|
${s6-linux-init}/bin/s6-linux-init-shutdownd -c "/etc/s6-linux-init/current" -g 3000
|
||||||
|
'';
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
s6-svscan-log = dir {
|
||||||
|
fifo = {
|
||||||
|
type = "i";
|
||||||
|
subtype = "f";
|
||||||
|
mode = "0600";
|
||||||
|
};
|
||||||
|
notification-fd = { file = "3"; };
|
||||||
|
run = {
|
||||||
|
file = ''
|
||||||
|
#!${execline}/bin/execlineb -P
|
||||||
|
${execline}/bin/redirfd -w 1 /dev/null
|
||||||
|
${execline}/bin/redirfd -rnb 0 fifo
|
||||||
|
${s6}/bin/s6-log -bpd3 -- t /run/uncaught-logs
|
||||||
|
'';
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
getty = dir {
|
||||||
|
run = {
|
||||||
|
file = ''
|
||||||
|
#!${execline}/bin/execlineb -P
|
||||||
|
${busybox}/bin/getty -l ${busybox}/bin/login 38400 /dev/console
|
||||||
|
'';
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
".s6-svscan" =
|
||||||
|
let
|
||||||
|
quit = message: ''
|
||||||
|
#!${execline}/bin/execlineb -P
|
||||||
|
${execline}/bin/redirfd -w 2 /dev/console
|
||||||
|
${execline}/bin/fdmove -c 1 2
|
||||||
|
${execline}/bin/foreground { ${s6-linux-init}/bin/s6-linux-init-echo -- ${message} }
|
||||||
|
${s6-linux-init}/bin/s6-linux-init-hpr -fr
|
||||||
|
'';
|
||||||
|
shutdown = action: ''
|
||||||
|
#!${execline}/bin/execlineb -P
|
||||||
|
${s6-linux-init}/bin/s6-linux-init-hpr -a #{action} -- now
|
||||||
|
'';
|
||||||
|
empty = "#!${execline}/bin/execlineb -P\n";
|
||||||
|
in dir {
|
||||||
|
crash = {
|
||||||
|
file = quit "s6-svscan crashed. Rebooting.";
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
finish = {
|
||||||
|
file = quit "s6-svscan exited. Rebooting.";
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
SIGINT = {
|
||||||
|
file = shutdown "-r";
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
SIGPWR = {
|
||||||
|
file = shutdown "-p";
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
SIGQUIT = {
|
||||||
|
file = empty;
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
SIGTERM = {
|
||||||
|
file = empty;
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
SIGUSR1 = {
|
||||||
|
file = shutdown "-p";
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
SIGUSR2 = {
|
||||||
|
file = shutdown "-h";
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
SIGWINCH = {
|
||||||
|
file = empty;
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
config = {
|
||||||
|
environment = dir {
|
||||||
|
etc = dir {
|
||||||
|
s6-rc = dir {
|
||||||
|
compiled = symlink "${s6-rc-db}/compiled";
|
||||||
|
};
|
||||||
|
s6-linux-init = dir {
|
||||||
|
current = dir {
|
||||||
|
scripts = symlink "${s6-init-scripts}/scripts";
|
||||||
|
env = dir {};
|
||||||
|
run-image = dir {
|
||||||
|
uncaught-logs = (dir {}) // {mode = "2750";};
|
||||||
|
inherit service;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
bin = dir {
|
||||||
|
init = symlink "${s6-init-bin}/bin/init";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,15 +1,12 @@
|
||||||
final: prev: {
|
final: prev: {
|
||||||
pseudofile = final.callPackage ./pkgs/pseudofile {};
|
pseudofile = final.callPackage ./pkgs/pseudofile {};
|
||||||
s6-init-files = final.callPackage ./pkgs/s6-init-files {};
|
|
||||||
strace = prev.strace.override { libunwind = null; };
|
strace = prev.strace.override { libunwind = null; };
|
||||||
liminix = {
|
liminix = {
|
||||||
services = final.callPackage ./pkgs/liminix-tools/services {};
|
services = final.callPackage ./pkgs/liminix-tools/services {};
|
||||||
networking = final.callPackage ./pkgs/liminix-tools/networking {};
|
networking = final.callPackage ./pkgs/liminix-tools/networking {};
|
||||||
};
|
};
|
||||||
writeAshScript = final.callPackage ./pkgs/write-ash-script {};
|
writeAshScript = final.callPackage ./pkgs/write-ash-script {};
|
||||||
|
|
||||||
s6-init-bin = final.callPackage ./pkgs/s6-init-bin {};
|
s6-init-bin = final.callPackage ./pkgs/s6-init-bin {};
|
||||||
|
|
||||||
s6-rc-database = final.callPackage ./pkgs/s6-rc-database {};
|
s6-rc-database = final.callPackage ./pkgs/s6-rc-database {};
|
||||||
|
|
||||||
pppoe = prev.rpPPPoE.overrideAttrs (o: {
|
pppoe = prev.rpPPPoE.overrideAttrs (o: {
|
||||||
|
|
|
@ -1,143 +0,0 @@
|
||||||
{
|
|
||||||
execline
|
|
||||||
, s6
|
|
||||||
, s6-linux-init
|
|
||||||
, s6-rc
|
|
||||||
, pseudofile
|
|
||||||
, lib
|
|
||||||
, stdenvNoCC
|
|
||||||
, busybox
|
|
||||||
} :
|
|
||||||
let
|
|
||||||
initscripts = stdenvNoCC.mkDerivation {
|
|
||||||
name = "s6-scripts";
|
|
||||||
src = ./scripts;
|
|
||||||
phases = ["unpackPhase" "installPhase" ];
|
|
||||||
buildInputs = [busybox];
|
|
||||||
installPhase = ''
|
|
||||||
mkdir $out
|
|
||||||
cp -r $src $out/scripts
|
|
||||||
chmod -R +w $out
|
|
||||||
patchShebangs $out/scripts
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
inherit (pseudofile) dir symlink;
|
|
||||||
scripts = symlink "${initscripts}/scripts";
|
|
||||||
env = dir {};
|
|
||||||
run-image = dir {
|
|
||||||
service = dir {
|
|
||||||
s6-linux-init-runleveld = dir {
|
|
||||||
notification-fd = { file = "3"; };
|
|
||||||
run = {
|
|
||||||
file = ''
|
|
||||||
#!${execline}/bin/execlineb -P
|
|
||||||
${execline}/bin/fdmove -c 2 1
|
|
||||||
${execline}/bin/fdmove 1 3
|
|
||||||
${s6}/bin/s6-ipcserver -1 -a 0700 -c 1 -- s
|
|
||||||
${s6}/bin/s6-sudod -dt30000 -- "/etc/s6-linux-init/current"/scripts/runlevel
|
|
||||||
'';
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
s6-linux-init-shutdownd = dir {
|
|
||||||
fifo = {
|
|
||||||
type = "i";
|
|
||||||
subtype = "f";
|
|
||||||
mode = "0600";
|
|
||||||
};
|
|
||||||
run = {
|
|
||||||
file = ''
|
|
||||||
#!${execline}/bin/execlineb -P
|
|
||||||
${s6-linux-init}/bin/s6-linux-init-shutdownd -c "/etc/s6-linux-init/current" -g 3000
|
|
||||||
'';
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
s6-svscan-log = dir {
|
|
||||||
fifo = {
|
|
||||||
type = "i";
|
|
||||||
subtype = "f";
|
|
||||||
mode = "0600";
|
|
||||||
};
|
|
||||||
notification-fd = { file = "3"; };
|
|
||||||
run = {
|
|
||||||
file = ''
|
|
||||||
#!${execline}/bin/execlineb -P
|
|
||||||
${execline}/bin/redirfd -w 1 /dev/null
|
|
||||||
${execline}/bin/redirfd -rnb 0 fifo
|
|
||||||
${s6}/bin/s6-log -bpd3 -- t /run/uncaught-logs
|
|
||||||
'';
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
getty = dir {
|
|
||||||
run = {
|
|
||||||
file = ''
|
|
||||||
#!${execline}/bin/execlineb -P
|
|
||||||
${busybox}/bin/getty -l ${busybox}/bin/login 38400 /dev/console
|
|
||||||
'';
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
".s6-svscan" =
|
|
||||||
let
|
|
||||||
quit = message: ''
|
|
||||||
#!${execline}/bin/execlineb -P
|
|
||||||
${execline}/bin/redirfd -w 2 /dev/console
|
|
||||||
${execline}/bin/fdmove -c 1 2
|
|
||||||
${execline}/bin/foreground { ${s6-linux-init}/bin/s6-linux-init-echo -- ${message} }
|
|
||||||
${s6-linux-init}/bin/s6-linux-init-hpr -fr
|
|
||||||
'';
|
|
||||||
shutdown = action: ''
|
|
||||||
#!${execline}/bin/execlineb -P
|
|
||||||
${s6-linux-init}/bin/s6-linux-init-hpr -a #{action} -- now
|
|
||||||
'';
|
|
||||||
empty = "#!${execline}/bin/execlineb -P\n";
|
|
||||||
in dir {
|
|
||||||
crash = {
|
|
||||||
file = quit "s6-svscan crashed. Rebooting.";
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
finish = {
|
|
||||||
file = quit "s6-svscan exited. Rebooting.";
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
SIGINT = {
|
|
||||||
file = shutdown "-r";
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
SIGPWR = {
|
|
||||||
file = shutdown "-p";
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
SIGQUIT = {
|
|
||||||
file = empty;
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
SIGTERM = {
|
|
||||||
file = empty;
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
SIGUSR1 = {
|
|
||||||
file = shutdown "-p";
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
SIGUSR2 = {
|
|
||||||
file = shutdown "-h";
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
SIGWINCH = {
|
|
||||||
file = empty;
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
||||||
uncaught-logs = (dir {}) // {mode = "2750";};
|
|
||||||
};
|
|
||||||
structure = { etc = dir { s6-linux-init = dir { current = dir {
|
|
||||||
inherit scripts env run-image;
|
|
||||||
};};};};
|
|
||||||
|
|
||||||
in pseudofile.write "pseudo.s6-init" structure
|
|
Loading…
Reference in a new issue