forked from DGNum/liminix
week source
This commit is contained in:
parent
a5630c1f30
commit
e0bd64b80f
1 changed files with 139 additions and 0 deletions
139
THOUGHTS.txt
139
THOUGHTS.txt
|
@ -1233,3 +1233,142 @@ Sat Mar 18 18:02:26 GMT 2023
|
|||
What if: we added derivations for "apply openwrt changes" as packages,
|
||||
which could then be called from the kernel derivation's extraPatchPhase?
|
||||
There could be one for generic and one for each openwrt targetop
|
||||
|
||||
Mon Mar 20 18:40:53 GMT 2023
|
||||
|
||||
- kexec patch is sent to mailing list, keep an eye for replies
|
||||
- watchdog
|
||||
- ntp
|
||||
- rebuild images for live devices
|
||||
- can we build a static busybox with flashcp applet and scp it
|
||||
to arhcive etc?
|
||||
- [DONE] install mailman and hyperkitty on myhtic, create mailing list
|
||||
|
||||
Tue Mar 21 22:59:54 GMT 2023
|
||||
|
||||
I haven't found a way to arm the watchdog before userland runs, which
|
||||
would be really nice: although there's WATCHDOG_HANDLE_BOOT_ENABLED
|
||||
and WATCHDOG_OPEN_TIMEOUT it doesn't seem to be sufficient, Maybe
|
||||
those options work only when the hardware watchdog is already
|
||||
armed. It might not be completely awful insofar as any failure to
|
||||
mount root usually results in panic anyway, so provided we start
|
||||
watching early in boot then there's not a big window for anything
|
||||
to go wrong
|
||||
|
||||
What should the watchdog service do? Ideally we want something that
|
||||
"ratchets" : can be started in early boot and signals health as long
|
||||
as the system is starting up, then once the system is in "steady
|
||||
state" it stops pinging as soon as any part of that steady state
|
||||
becomes unhealthy. This feels like a refinement for a much later
|
||||
phase though.
|
||||
|
||||
Maybe the health criteria might be
|
||||
(sshd and lan services are running) or (time since boot < 120s)
|
||||
|
||||
Thu Mar 23 00:11:23 GMT 2023
|
||||
|
||||
tftpboot and (kexecboot || flashable) have incompatible DTB-finding
|
||||
strategies which is painful if you add both modules and then
|
||||
expect tftp booting to still work
|
||||
|
||||
Maybe we could patch the kernel to use some better strategy for when
|
||||
to use/ignore the bootloader command line: e.g "only if it
|
||||
contains the string 'liminix'". Could do this by patching
|
||||
arch/mips/kernel/setup.c bootcmdline_init to
|
||||
|
||||
if(strstr(arcs_cmdline, "liminix") == NULL) arcs_cmdline[0] = '\0'
|
||||
and then defining CONFIG_MIPS_CMDLINE_DTB_EXTEND. The
|
||||
bootloader command line then needs to specify only the
|
||||
_additional_ parameters that weren't in the DTB
|
||||
|
||||
(later: that turned out to be quite straighforward)
|
||||
|
||||
Fri Mar 24 23:45:12 GMT 2023
|
||||
|
||||
- add ntp support
|
||||
- [DONE] expose hydra to internet
|
||||
- check MAC address weirdness?
|
||||
- call Task 1 "done"
|
||||
|
||||
Sun Mar 26 00:19:15 GMT 2023
|
||||
|
||||
Would be nice to have a flash.sh built in outputs.flashable
|
||||
|
||||
Sun Mar 26 15:27:14 BST 2023
|
||||
|
||||
Let's think about services and modules.
|
||||
|
||||
Module
|
||||
+ can change global config
|
||||
* add users, groups etc
|
||||
* change kernel config
|
||||
* change busybox config
|
||||
+ well-typed parameters
|
||||
- is a "singleton": can't have the same module included twice
|
||||
with different config. e.g. can't have two hostap modules running on
|
||||
different wlan radios.
|
||||
- can't express dependencies: a depends on b
|
||||
|
||||
suppose:
|
||||
|
||||
* modules add service functions to the config? then there's no
|
||||
way to define a service while forgetting to import the module
|
||||
|
||||
* we use the lib.types stuff for service function arguments
|
||||
|
||||
* maybe we stop naming services.foo for every damn thing
|
||||
|
||||
* but remember, s6 services do need unique names
|
||||
|
||||
|
||||
imports = [ ../modules/dhcp4 ];
|
||||
|
||||
services.dhcp4 = config.services.udhcp {
|
||||
interface = lan.device;
|
||||
options = {
|
||||
foo = true;
|
||||
bar = 42;
|
||||
};
|
||||
depends = [ services.some_other_thing ];
|
||||
}
|
||||
|
||||
modules/dhcp4 udhcp fn needs to define a type for its argument, then
|
||||
use something like
|
||||
|
||||
if arg_type.check def.value then res
|
||||
else throw "The option value `${showOption loc}' in `${def.file}' is not a ${arg_type.name}.")
|
||||
|
||||
(where def comes from I don't know yet)
|
||||
|
||||
Tue Mar 28 10:44:40 BST 2023
|
||||
|
||||
we should reserve the name "service" for actual instantiated
|
||||
services. This means we need a name for the functions that
|
||||
make services. "class", "template", "fn", "maker", "factory"?
|
||||
And a namespace name so they're not interleaved with real
|
||||
services, which sort of suggests they are packages
|
||||
|
||||
if we want to do services = {
|
||||
foo = longrun { ... };
|
||||
bar = longrun { ... };
|
||||
}
|
||||
|
||||
without repeating the `name` as an attribute of the longrun,
|
||||
then longrun can't return a derivation: it has to return some
|
||||
function that accepts `name` as a parameter.
|
||||
|
||||
where services.a depends on services.b, at the time its builder is run
|
||||
it needs to know what name s6-rc will use for service b
|
||||
|
||||
maybe an s6 service definition should be an attrset not a derivation.
|
||||
|
||||
maybe this is outside scope for phase 2
|
||||
|
||||
Tue Mar 28 13:22:06 BST 2023
|
||||
|
||||
Reading nixos/doc/manual/development/building-parts.chapter.md it
|
||||
suggests to me that we should rename config.outputs to
|
||||
config.system.outputs. The more general question here is whether it's
|
||||
good to be augmenting a variable called "config" with all this
|
||||
generated stuff that is patently not configuration - perhaps putting
|
||||
it under a "system" key will keep it all in one place
|
||||
|
|
Loading…
Reference in a new issue