liminix

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

commit 6e3bfa90294b853304e2e6d578db0fa13f46ae0c
parent 78e4d3012016878370bdd7f1bba3b481218f19cd
Author: Daniel Barlow <dan@telent.net>
Date:   Tue,  4 Nov 2025 00:28:26 +0000

think

Diffstat:
MTHOUGHTS.txt | 117+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 117 insertions(+), 0 deletions(-)

diff --git a/THOUGHTS.txt b/THOUGHTS.txt @@ -8284,3 +8284,120 @@ the interim solution doesn't seem to actually work :-( I am guessing that oneshots don't get restarted on failure as longruns do + +Sun Nov 2 10:34:03 GMT 2025 + +Sometimes we need to restart or signal a service when the output of +some other service has changed, so that it can reread its config + +Sometimes the upness of a servive depends on some state + - output of another service + - other state like sysfs or netlink + +These are different things: the first case doesn't actually affect the +service tree (except momentarily, if a whole tree is restarted) +whereas the second case grafts/prunes things in and out of it. + +Is the first case a _subset_ of the second? + +there's difference in the responsibilities, because a service can't +(in this scheme) decide for itself that it should be started or +stopped - that decision rests with a parent. However, it can +decide to restart itself + +If we accept that dhcp acquisition shouldn't block the service lock, +it follows that services can't depend on "dhcpc is running" to +signify "we have a lease". + +dhcp-lease-watcher: looks for outputs from dhcp and starts/stops +dhcp-lease-acquired when that happens. + +Everything else depends on dhcp-lease-acquired instead of just dhcp + +*the issue*: there's logic/policy in dhcp-lease-watcher: rules for +when to start/stop the controlled service tree based on the +outputs being watched. This means we can't use watch-outputs +unchanged, because it signals the subscriber on _every_ change. + +As far as I can tell/remember, every extant controller service is a +handcrafted longrun + +How would it look if dhcp-lease-watcher were in fennel? A lot like +modules/dhcp6c/acquire-wan-address.fnl + +longrun { + name = "watch-${name}"; + run = pkgs.runCommand "fennelc" {} "fennelc -o $out ${./dhcp-watcher.fnl}"; +} + +Sun Nov 2 23:32:01 GMT 2025 + +services.dhcp-lease-acquired is being started at boot instead of when +its controller starts it + +# s6-rc-db -d dependencies default |grep int.link-lease-acquired +int.link-lease-acquired + +seems wrong. but yet: + +# s6-rc-db -d dependencies controlled +int.link-lease-acquired + +====== + +# s6-rc-db all-dependencies int.link-lease-acquired +controlled +int.link-lease-acquired +int.link-lease-acquired-log +s6rc-fdholder +s6rc-oneshot-runner +# s6-rc-db -d all-dependencies int.link-lease-acquired +certifix-C=GB-ST=London-O=Telent-OU=devices-CN=outsdie +resolvconf +route-37a8eec1ce19-eb94cb82bf2a +int.link-lease-acquired +log-shipper-backfill-source +ntp +log-shipper-live +log-shipper-backfill-sink + +the 'default' service transitively depends on int.link-lease-acquired +presumably because log-shipper is in the default service list. but +why? + +Mon Nov 3 18:39:21 GMT 2025 + +logshipper is a bundle, and bundles don't have +dependencies. defaultStart needs to also exclude any service which is +a bundle and has a controlled service in its contents + +we need to + +- move the dhcp watcher into the dhcpc code not the wap profile + +- fix the ipv6 duplicate local route + +# ip -6 route +2001:8b0:de3a:40de::/64 dev lan metric 256 expires 5926sec +2001:8b0:de3a:40de::/64 dev int metric 256 expires 5925sec + +assumption: we're getting these routes with RA and they're not +being removed when the lan link is added to the int bridge + +Mon Nov 3 22:05:17 GMT 2025 + +It does actually work to flush the routes (as in c5e0567) but it just +takes a very long time for the bridge to notice another RA packet. + +---- + +I think we should +(1) make ipv4 dhcp client a regular module like the ipv6 one +(2) hide the services for the daemon and the watcher, and provide only +the lease-acquired service as a thing (copy the outputs to it) +(3) find out if we can use the nixos "deprecated" stuff to warn people + off using the original dhcp4 service + +---- + +yay