commit 676c94782bb1590baeaf74e4415e488a2ad2b763
parent 4bfba331701f32f8b5a2d601dce045b9d32f1d08
Author: Daniel Barlow <dan@telent.net>
Date: Mon, 26 Sep 2022 12:26:54 +0100
separate files for networking and services
Diffstat:
5 files changed, 100 insertions(+), 94 deletions(-)
diff --git a/overlay.nix b/overlay.nix
@@ -2,7 +2,10 @@ final: prev: {
pseudofile = final.callPackage ./pkgs/pseudofile {};
s6-init-files = final.callPackage ./pkgs/s6-init-files {};
strace = prev.strace.override { libunwind = null; };
- liminix = final.callPackage ./pkgs/liminix-tools {};
+ liminix = {
+ services = final.callPackage ./pkgs/liminix-tools/services {};
+ networking = final.callPackage ./pkgs/liminix-tools/networking {};
+ };
writeAshScript = final.callPackage ./pkgs/write-ash-script {};
pppoe = prev.rpPPPoE.overrideAttrs (o: {
diff --git a/pkgs/liminix-tools/default.nix b/pkgs/liminix-tools/default.nix
@@ -1,93 +0,0 @@
-{
- stdenvNoCC
-, s6-rc
-, lib
-, busybox
-, callPackage
-, writeAshScript
-} :let
- inherit (builtins) concatStringsSep;
- 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 {
- networking = {
- interface = { type, device } @ args: oneshot {
- name = "${device}.link";
- up = "ip link set up dev ${device}";
- down = "ip link set down dev ${device}";
- } // {
- inherit device;
- };
- address = interface: { family, prefixLength, address } @ args:
- let inherit (builtins) toString;
- in oneshot {
- dependencies = [ interface ];
- name = "${interface.device}.addr.${address}";
- up = "ip address add ${address}/${toString prefixLength} dev ${interface.device} ";
- down = "ip address del ${address}/${toString prefixLength} dev ${interface.device} ";
- };
- udhcpc = callPackage ./networking/udhcpc.nix {};
- odhcpc = interface: { ... } @ args: longrun {
- name = "${interface.device}.odhcp";
- run = "odhcpcd ${interface.device}";
- };
- pppoe = callPackage ./networking/pppoe.nix {};
- };
- services = {
- inherit longrun oneshot bundle target;
- output = service: name: "/run/service-state/${service.name}/${name}";
- };
-}
diff --git a/pkgs/liminix-tools/networking/default.nix b/pkgs/liminix-tools/networking/default.nix
@@ -0,0 +1,28 @@
+{
+ callPackage
+, liminix
+}:
+let inherit (liminix.services) oneshot longrun;
+in {
+ interface = { type, device } @ args: oneshot {
+ name = "${device}.link";
+ up = "ip link set up dev ${device}";
+ down = "ip link set down dev ${device}";
+ } // {
+ inherit device;
+ };
+ address = interface: { family, prefixLength, address } @ args:
+ let inherit (builtins) toString;
+ in oneshot {
+ dependencies = [ interface ];
+ name = "${interface.device}.addr.${address}";
+ up = "ip address add ${address}/${toString prefixLength} dev ${interface.device} ";
+ down = "ip address del ${address}/${toString prefixLength} dev ${interface.device} ";
+ };
+ udhcpc = callPackage ./udhcpc.nix {};
+ odhcpc = interface: { ... } @ args: longrun {
+ name = "${interface.device}.odhcp";
+ run = "odhcpcd ${interface.device}";
+ };
+ pppoe = callPackage ./pppoe.nix {};
+}
diff --git a/pkgs/liminix-tools/builder.sh b/pkgs/liminix-tools/services/builder.sh
diff --git a/pkgs/liminix-tools/services/default.nix b/pkgs/liminix-tools/services/default.nix
@@ -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;
+}