Compare commits

..

No commits in common. "d5ccecf0384a51f3b6c0a2c4c952d9100d30edeb" and "1b1aa9de76d9ea504a10931b15d24757ba6d2a72" have entirely different histories.

12 changed files with 75 additions and 137 deletions

View File

@ -75,7 +75,7 @@ Sun Sep 25 20:56:28 BST 2022
TODO - bugs, missing bits, other infelicities as they occur to me:
DONE 1) shutdown doesn't work as its using the busybox one not s6.
1) shutdown doesn't work as its using the busybox one not s6.
2) perhaps we shouldn't have process-based services like dhcp, ppp
implement "address provider interface" - instead have a separate
@ -102,7 +102,7 @@ look for obvious wastes of space
8) some of configuration.nix (e.g. defining routes) should be moved into
tools
DONE 9) split tools up instead of having it all one file
9) split tools up instead of having it all one file
10) is it OK to depend on squashfs pseudofiles if we might want to
switch to ubifs? will there always be a squashfs underneath? might
@ -120,12 +120,10 @@ we want to change the pseudofiles in an overlay?
is that specified or fluke?
16) tighten up the module specs. (DONE) services.foo should be a s6-rc
service, (DONE) kernel config should be checked in some way
service, kernel config should be checked in some way
DONE 17) rename nixwrt references in kernel builder
18) maybe stop suffixing all the service names with .service
19) syslogd - use busybox or s6?
chat -s -S ogin:--ogin: root / "ip address show dev ppp0 | grep ppp0" 192.168.100.1 "/nix/store/*-s6-linux-init-*/bin/s6-linux-init-hpr -p"

View File

@ -39,7 +39,7 @@ let
};
s6-pseudofiles = pkgs.s6-init-files;
profile = writeScript ".profile" ''
PATH=${lib.makeBinPath (with pkgs; [ s6-init-bin busybox execline s6-linux-init s6-rc])}
PATH=${lib.makeBinPath (with pkgs; [busybox execline s6-linux-init s6-rc])}
export PATH
'';
pseudofiles = writeText "pseudofiles" ''
@ -60,7 +60,7 @@ let
/sys d 0555 root root
/dev/pts d 0755 0 0
/etc/init.d d 0755 0 0
/bin/init s 0755 0 0 ${pkgs.s6-init-bin}/bin/init
/bin/init s 0755 0 0 /etc/s6-linux-init/current/bin/init
/bin/sh s 0755 0 0 ${pkgs.pkgsStatic.busybox}/bin/sh
/bin/busybox s 0755 0 0 ${pkgs.busybox}/bin/busybox
/etc/s6-rc d 0755 0 0

View File

@ -15,15 +15,8 @@ in {
services = mkOption {
type = types.attrsOf type_service;
};
kernel = {
config = mkOption {
# mostly the values are y n or m, but sometimes
# other strings are also used
type = types.attrsOf types.nonEmptyStr;
};
checkedConfig = mkOption {
type = types.attrsOf types.nonEmptyStr;
};
kernel = mkOption {
type = types.anything;
};
};
}

View File

@ -2,14 +2,9 @@ final: prev: {
pseudofile = final.callPackage ./pkgs/pseudofile {};
s6-init-files = final.callPackage ./pkgs/s6-init-files {};
strace = prev.strace.override { libunwind = null; };
liminix = {
services = final.callPackage ./pkgs/liminix-tools/services {};
networking = final.callPackage ./pkgs/liminix-tools/networking {};
};
liminix = final.callPackage ./pkgs/liminix-tools {};
writeAshScript = final.callPackage ./pkgs/write-ash-script {};
s6-init-bin = final.callPackage ./pkgs/s6-init-bin {};
pppoe = prev.rpPPPoE.overrideAttrs (o: {
# use newer rp-pppoe, it builds cleanly
src = final.fetchFromGitHub {

View File

@ -5,10 +5,8 @@
, busybox
, callPackage
, writeAshScript
}:
let
} :let
inherit (builtins) concatStringsSep;
output = service: name: "/run/service-state/${service.name}/${name}";
longrun = {
name
, run
@ -63,6 +61,33 @@ let
builder = ./builder.sh;
};
bundle = { name, ... } @args : target (args // { name = "${name}.bundle";});
in {
inherit target bundle oneshot longrun output;
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}";
};
}

View File

@ -1,39 +0,0 @@
{
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 {};
route = { name, target, via, dependencies }:
oneshot {
inherit name;
up = ''
ip route add ${target} via ${via}
'';
down = ''
ip route del ${target} via ${via}
'';
inherit dependencies;
};
}

View File

@ -1,33 +0,0 @@
{
s6-linux-init
, execline
, writeScript
, stdenvNoCC
, lib
, busybox
, s6-rc
}:
let
hpr = name: arg: writeScript name ''
#!${execline}/bin/execlineb -S0
${s6-linux-init}/bin/s6-linux-init-hpr ${arg} \$@
'';
init = writeScript "init" ''
#!${execline}/bin/execlineb -S0
${s6-linux-init}/bin/s6-linux-init -c /etc/s6-linux-init/current -m 0022 -p ${lib.makeBinPath [busybox execline s6-linux-init s6-rc]}:/usr/bin:/bin -d /dev -- "\$@"
'';
in stdenvNoCC.mkDerivation {
name = "s6-init-bin";
phases = ["installPhase"];
installPhase = ''
bin=$out/bin
mkdir -p $bin
cd $bin
ln -s ${s6-linux-init}/bin/s6-linux-init-shutdown shutdown
ln -s ${s6-linux-init}/bin/s6-linux-init-telinit telinit
ln -s ${hpr "reboot" "-r"} reboot
ln -s ${hpr "poweroff" "-p"} poweroff
ln -s ${hpr "halt" "-h"} halt
ln -s ${init} init
'';
}

View File

@ -23,6 +23,18 @@ let
};
dir = contents: { type = "d"; inherit contents; };
symlink = target: { type = "s"; inherit target; };
hpr = arg: "#!${execline}/bin/execlineb -S0\n${s6-linux-init}/bin/s6-linux-init-hpr ${arg} \$@";
bin = dir {
shutdown = symlink "${s6-linux-init}/bin/s6-linux-init-shutdown";
telinit = symlink "${s6-linux-init}/bin/s6-linux-init-telinit";
reboot = { type="f"; file = hpr "-r"; mode="0755"; };
poweroff = { type="f"; file = hpr "-p"; mode="0755"; };
halt = { type="f"; file = hpr "-h"; mode="0755"; };
init = {
type="f"; mode="0755";
file = "#!${execline}/bin/execlineb -S0\n${s6-linux-init}/bin/s6-linux-init -c /etc/s6-linux-init/current -m 0022 -p ${lib.makeBinPath [busybox execline s6-linux-init s6-rc]}:/usr/bin:/bin -d /dev -- \"\\$@\"";
};
};
scripts = symlink "${initscripts}/scripts";
env = dir {};
run-image = dir {
@ -138,7 +150,7 @@ let
uncaught-logs = (dir {}) // {mode = "2750";};
};
structure = { etc = dir { s6-linux-init = dir { current = dir {
inherit scripts env run-image;
inherit bin scripts env run-image;
};};};};
in pseudofile "pseudo.s6-init" structure

View File

@ -1,6 +1,6 @@
{ config, pkgs, ... } :
let
inherit (pkgs.liminix.networking) interface address pppoe route;
inherit (pkgs.liminix.networking) interface address pppoe;
inherit (pkgs.liminix.services) oneshot longrun bundle target output;
in rec {
services.loopback =
@ -40,32 +40,24 @@ in rec {
];
};
services.defaultroute4 = route {
name = "defautlrote";
via = "$(cat ${output services.pppoe "address"})";
target = "default";
dependencies = [ services.pppoe ];
};
services.packet_forwarding =
let
iface = services.pppoe;
filename = "/proc/sys/net/ipv4/conf/$(cat ${output iface "ifname"})/forwarding";
services.defaultroute4 =
let iface = services.pppoe;
in oneshot {
name = "let-the-ip-flow";
up = "echo 1 > ${filename}";
down = "echo 0 > ${filename}";
name = "defaultroute4";
up = ''
ip route add default via $(cat ${output iface "address"})
echo "1" > /proc/sys/net/ipv4/conf/$(cat ${output iface "ifname"}/forwarding)
'';
down = ''
ip route del default via $(cat ${output iface "address"})
echo "0" > /proc/sys/net/ipv4/conf/$(cat ${output iface "ifname"}/forwarding)
'';
dependencies = [iface];
};
services.default = target {
name = "default";
contents = with services; [
loopback
defaultroute4
packet_forwarding
syslogd
];
contents = with services; [ loopback defaultroute4 syslogd ];
};
systemPackages = [ pkgs.hello ] ;

View File

@ -12,7 +12,6 @@ while { $FINISHED < 5 } {
expect {
"192.168.100.1" { set FINISHED 10; set EXIT 0; }
"can't find device" { send_user "waiting ..." ; send "\r\n"; sleep 3 }
"DOWN" { send_user "waiting ..." ; send "\r\n"; sleep 2 }
}
set FINISHED [ expr $FINISHED + 1 ]
}

View File

@ -1,6 +1,6 @@
{ config, pkgs, ... } :
let
inherit (pkgs.liminix.networking) interface address udhcpc odhcpc route;
inherit (pkgs.liminix.networking) interface address udhcpc odhcpc;
inherit (pkgs.liminix.services) oneshot longrun bundle target output;
in rec {
services.loopback =
@ -40,22 +40,18 @@ in rec {
dependencies = [services.dhcpv4];
};
services.defaultroute4 = route {
name = "defautlrote";
via = "$(cat ${output services.dhcpv4 "address"})";
target = "default";
dependencies = [ services.dhcpv4 ];
};
services.packet_forwarding =
let
iface = services.dhcpv4;
filename = "/proc/sys/net/ipv4/conf/$(cat ${output iface "ifname"})/forwarding";
services.defaultroute4 =
let inherit (services) dhcpv4;
in oneshot {
name = "let-the-ip-flow";
up = "echo 1 > ${filename}";
down = "echo 0 > ${filename}";
dependencies = [iface];
name = "defaultroute4";
up = ''
ip route add default gw $(cat ${output dhcpv4 "address"})
echo "1" > /sys/net/ipv4/$(cat ${output dhcpv4 "ifname"})
'';
down = ''
ip route del default gw $(cat ${output dhcpv4 "address"})
echo "0" > /sys/net/ipv4/$(cat ${output dhcpv4 "ifname"})
'';
};
services.default = target {