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:
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}";
- };
-}