liminix

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Moverlay.nix | 5++++-
Dpkgs/liminix-tools/default.nix | 93-------------------------------------------------------------------------------
Apkgs/liminix-tools/networking/default.nix | 28++++++++++++++++++++++++++++
Rpkgs/liminix-tools/builder.sh -> pkgs/liminix-tools/services/builder.sh | 0
Apkgs/liminix-tools/services/default.nix | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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; +}