liminix

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

commit e46abbccca2063f887b2b9eab7d3a93b1262843e
parent 4eea1b1f189f810c918e9e6056c8a8e5d844f5e3
Author: Daniel Barlow <dan@telent.net>
Date:   Thu, 22 Sep 2022 11:10:41 +0100

put liminix-tools in package overlay

Diffstat:
Mdefault.nix | 1-
Moverlay.nix | 1+
Rtools/builder.sh -> pkgs/liminix-tools/builder.sh | 0
Apkgs/liminix-tools/default.nix | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apkgs/liminix-tools/networking/udhcpc.nix | 10++++++++++
Mtests/smoke/configuration.nix | 6+++---
Dtools/default.nix | 87-------------------------------------------------------------------------------
7 files changed, 99 insertions(+), 91 deletions(-)

diff --git a/default.nix b/default.nix @@ -11,7 +11,6 @@ let }; config = baseConfig // (import <liminix-config>) { config = baseConfig; - tools = nixpkgs.pkgs.callPackage ./tools {}; inherit (nixpkgs) pkgs; }; finalConfig = config // { diff --git a/overlay.nix b/overlay.nix @@ -2,4 +2,5 @@ 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 {}; } diff --git a/tools/builder.sh b/pkgs/liminix-tools/builder.sh diff --git a/pkgs/liminix-tools/default.nix b/pkgs/liminix-tools/default.nix @@ -0,0 +1,85 @@ +{ + stdenvNoCC +, s6-rc +, lib +, busybox +, callPackage +} :let + inherit (builtins) concatStringsSep; + longrun = { + name + , run + , outputs ? [] + , dependencies ? [] + } @ args: stdenvNoCC.mkDerivation { + name = "${name}.service"; + type = "longrun"; + buildInputs = dependencies; + dependencies = builtins.map (d: d.name) dependencies; + shell = "${busybox}/bin/sh"; + inherit run; + 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"; + type = "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"; + inherit up down; + dependencies = builtins.map (d: d.name) dependencies; + builder = ./builder.sh; + }; + target = { + name + , contents ? [] + , dependencies ? [] + , ... + }: stdenvNoCC.mkDerivation { + inherit name; + type = "bundle"; + contents = builtins.map (d: d.name) contents; + buildInputs = dependencies ++ (lib.debug.traceSeqN 2 contents 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, addr } @ args: oneshot { + dependencies = [ interface ]; + name = "${interface.device}.addr.${addr}"; + up = "ip address add ${addr} dev ${interface.device} "; + down = "ip address del ${addr} dev ${interface.device} "; + }; + udhcpc = callPackage ./networking/udhcpc.nix {}; + odhcpc = interface: { ... } @ args: longrun { + name = "${interface.device}.odhcp"; + run = "odhcpcd ${interface.device}"; + }; + }; + services = { + inherit longrun oneshot bundle target; + output = service: name: "/run/services/outputs/${service.name}/${name}"; + }; +} diff --git a/pkgs/liminix-tools/networking/udhcpc.nix b/pkgs/liminix-tools/networking/udhcpc.nix @@ -0,0 +1,10 @@ +{ + liminix +, busybox +} : +let inherit (liminix.services) longrun; +in +interface: { ... } @ args: longrun { + name = "${interface.device}.udhcp"; + run = "${busybox}/bin/udhcpc -f -i ${interface.device}"; +} diff --git a/tests/smoke/configuration.nix b/tests/smoke/configuration.nix @@ -1,7 +1,7 @@ -{ config, tools, pkgs } : +{ config, pkgs } : let - inherit (tools.networking) interface address udhcpc odhcpc; - inherit (tools.services) oneshot longrun bundle target output; + inherit (pkgs.liminix.networking) interface address udhcpc odhcpc; + inherit (pkgs.liminix.services) oneshot longrun bundle target output; in rec { services.loopback = let iface = interface { type = "loopback"; device = "lo";}; diff --git a/tools/default.nix b/tools/default.nix @@ -1,87 +0,0 @@ -{ - stdenvNoCC -, s6-rc -, lib -, busybox -} :let - inherit (builtins) concatStringsSep; - longrun = { - name - , run - , outputs ? [] - , dependencies ? [] - } @ args: stdenvNoCC.mkDerivation { - name = "${name}.service"; - type = "longrun"; - buildInputs = dependencies; - dependencies = builtins.map (d: d.name) dependencies; - shell = "${busybox}/bin/sh"; - inherit run; - 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"; - type = "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"; - inherit up down; - dependencies = builtins.map (d: d.name) dependencies; - builder = ./builder.sh; - }; - target = { - name - , contents ? [] - , dependencies ? [] - , ... - }: stdenvNoCC.mkDerivation { - inherit name; - type = "bundle"; - contents = builtins.map (d: d.name) contents; - buildInputs = dependencies ++ (lib.debug.traceSeqN 2 contents 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, addr } @ args: oneshot { - dependencies = [ interface ]; - name = "${interface.device}.addr.${addr}"; - up = "ip address add ${addr} dev ${interface.device} "; - down = "ip address del ${addr} dev ${interface.device} "; - }; - udhcpc = interface: { ... } @ args: longrun { - name = "${interface.device}.udhcp"; - run = "${busybox}/bin/udhcpc -f -i ${interface.device}"; - }; - odhcpc = interface: { ... } @ args: longrun { - name = "${interface.device}.odhcp"; - run = "odhcpcd ${interface.device}"; - }; - }; - services = { - inherit longrun oneshot bundle target; - output = service: name: "/run/services/outputs/${service.name}/${name}"; - }; -}