separate files for networking and services

This commit is contained in:
Daniel Barlow
2022-09-26 12:26:54 +01:00
parent 4bfba33170
commit 676c94782b
4 changed files with 36 additions and 30 deletions

View File

@@ -0,0 +1,19 @@
source $stdenv/setup
mkdir -p $out/${name}
echo $serviceType > $out/${name}/type
mkdir -p $out/${name}/dependencies.d
echo $buildInputs > $out/buildInputs
test -n "$dependencies" && for d in $dependencies; do
touch $out/${name}/dependencies.d/$d
done
test -n "$contents" && for d in $contents; do
mkdir -p $out/${name}/contents.d
touch $out/${name}/contents.d/$d
done
test -n "$run" && (echo -e "#!$shell\n$run" > $out/${name}/run)
test -n "${notificationFd}" && (echo ${notificationFd} > $out/${name}/notification-fd)
test -n "$up" && (echo -e "#!$shell\n$up" > $out/${name}/up)
test -n "$down" && (echo -e "#!$shell\n$down" > $out/${name}/down)
for i in $out/${name}/{down,up,run} ; do test -f $i && chmod +x $i; done
true
# (echo $out/${name} && cd $out/${name} && find . -ls)

View File

@@ -0,0 +1,68 @@
{
stdenvNoCC
, s6-rc
, lib
, busybox
, callPackage
, writeAshScript
}:
let
inherit (builtins) concatStringsSep;
output = service: name: "/run/service-state/${service.name}/${name}";
longrun = {
name
, run
, outputs ? []
, notification-fd ? null
, dependencies ? []
} @ args: stdenvNoCC.mkDerivation {
name = "${name}.service";
serviceType = "longrun";
buildInputs = dependencies;
dependencies = builtins.map (d: d.name) dependencies;
shell = "${busybox}/bin/sh";
inherit run;
notificationFd = notification-fd;
builder = ./builder.sh;
};
oneshot = {
name
, up
, down
, outputs ? []
, dependencies ? []
, ...
} @ args: stdenvNoCC.mkDerivation {
# stdenvNoCC is to avoid generating derivations with names
# like foo.service-mips-linux-musl
name = "${name}.service";
serviceType = "oneshot";
# does this suffice to make sure dependencies are included
# even though the built output has no references to their
# store directories?
buildInputs = dependencies;
shell = "${busybox}/bin/sh";
# up and down for oneshots are pathnames not scripts
up = writeAshScript "${name}-up" {} up;
down = writeAshScript "${name}-down" {} down;
dependencies = builtins.map (d: d.name) dependencies;
builder = ./builder.sh;
};
target = {
name
, contents ? []
, dependencies ? []
, ...
}: stdenvNoCC.mkDerivation {
inherit name;
serviceType = "bundle";
contents = builtins.map (d: d.name) contents;
buildInputs = dependencies ++ contents;
dependencies = builtins.map (d: d.name) dependencies;
shell = "${busybox}/bin/sh";
builder = ./builder.sh;
};
bundle = { name, ... } @args : target (args // { name = "${name}.bundle";});
in {
inherit target bundle oneshot longrun output;
}