Commit Graph

320 Commits

Author SHA1 Message Date
Daniel Barlow a8f98ccfe7 use linuxArch instead of case statement 2023-11-25 18:16:20 +00:00
Daniel Barlow 3f0f621809 openwrt patches for mvebu (armv7l) 2023-11-24 22:43:58 +00:00
Daniel Barlow 5ba14fd915 add levitate package
sets up a chroot system in tmpfs that will be executed on the next
reboot to enable system maintenance without the regular filesystems
mounted
2023-11-23 22:21:03 +00:00
Daniel Barlow c8b2d58dd3 exit 0 on service down even if no outputs to delete 2023-11-21 17:25:50 +00:00
Daniel Barlow f9f4d97bb8 convert flash params to int 2023-11-12 20:39:06 +00:00
Daniel Barlow abfb35a231 and entryPoint 2023-11-12 18:50:47 +00:00
Daniel Barlow 315907de98 convert hardware loadAddress to int 2023-11-12 18:47:31 +00:00
Daniel Barlow 6489a39424 qemu armv7 2023-11-05 23:19:11 +00:00
Daniel Barlow c40eef25d6 qemu: use phram instead of block2mtd 2023-11-05 19:13:51 +00:00
Daniel Barlow c5c5f1687a patch qemu to load uncompressed ARM kernels at correct offset 2023-11-05 11:32:47 +00:00
Daniel Barlow 824536f9b3 in uimage FIT, honour ${arch} 2023-11-05 11:31:28 +00:00
Daniel Barlow c3ccee6506 preinit: print errno (in hex, it's easier) for failures 2023-11-05 11:27:57 +00:00
Daniel Barlow 6db982f25f preinit: pause before exiting
as explained in the comment, this is to give us a
chance to see error messages before the kernel panics
2023-11-05 11:27:57 +00:00
Daniel Barlow 86a5224f3c preinit: fix compiler warnings 2023-11-05 11:27:43 +00:00
Daniel Barlow 155a29d9b3 preinit: strip trailing newline(s) on /proc/cmdline 2023-11-05 11:27:34 +00:00
Daniel Barlow d2f517a4e9 preinit.c: reindent 2023-10-19 21:02:18 +01:00
Daniel Barlow 0f38ee0e9c remove PREINIT_USE_LIBC option as it is now the only option 2023-10-19 18:59:02 +01:00
Daniel Barlow 61dc5beca8 preinit: parse rootfstype from kernel command line 2023-10-19 18:56:09 +01:00
Daniel Barlow 8798ee9830 partial fix for timeout handling
1) "Unknown transfer id" message was because the local variable "tid"
is not a transfer id, it is a sequence number  - so the check was
actually comparing expected vs actual acknowledged sequence number,
not TID.  It's still a problem if we get the wrong one, but it
indicates a lost packet (so we should resend) not a packet that was
sent from somewhere else.

2) if the ACK packet has not been received, our retry should involve
_resending_ it, not just trying to wait for it again.

3) I have removed the timeout condition for terminating the resend
loop, because in practice (assuming both ends have the same timeout
setting) all it did was ensure that the loop only ran once. The
timeout is supposed to regulate how long we wait for before retrying
(it doesn't do this, we wait indefinitely), not how long we wait for
before giving up.
2023-10-18 23:35:23 +01:00
Daniel Barlow 629914f65e initial support for ubifs 2023-10-16 19:55:17 +01:00
Daniel Barlow 0693cf23d8 preinit: improve error logging for fork_exec 2023-10-12 19:00:57 +01:00
Daniel Barlow c341eb46b6 use hostPlatform.linuxArch in kernel derivation 2023-10-12 18:59:45 +01:00
Daniel Barlow 1a369ff3bf preinit: remove no-longer-used mips assembly 2023-10-12 18:57:54 +01:00
Daniel Barlow bd20f3e419 uimage: make fit optional 2023-10-09 19:47:57 +01:00
Daniel Barlow c18f07f02f aarch64: make tftpboot work
- patch dtb to add reserved-memory stanza for the phram device to use
  (aarch64 does not accept memmap= command line option)

- patch phram driver to use memremap() instead of ioremap() as
  ioremap can't be used for system ram on arm devices
2023-10-09 19:47:57 +01:00
Daniel Barlow 269e972970 use FIT images not appended DTB for aarch64 uimage 2023-10-07 22:52:09 +01:00
Daniel Barlow 2a5669c2cd enable openwrt mediatek family patches 2023-10-07 22:42:31 +01:00
Daniel Barlow b01840fa7f add support for mt7915, mt7615 in mac80211 package
mt7915 additionally requires working MTD, so that it can
read calibration data from flash
2023-10-07 22:29:38 +01:00
Daniel Barlow abd01a7809 apply mtdpslit patch only for openwrt kernel
it doesn't apply to mainline because there's no mtdsplit
in mainline
2023-09-26 18:40:22 +01:00
Daniel Barlow dfe7228b99 fix jffs2 mtd partition splitting on little-endian CPU 2023-09-26 16:43:03 +01:00
Daniel Barlow 3205a38ac9 mac80211 use correct arch 2023-09-24 00:17:32 +01:00
Daniel Barlow 119d6ad379 pkgconfig is now pkg-config 2023-09-21 12:25:35 +01:00
Daniel Barlow be22fbbb0a bootable aarch64 liminux with qemu
I may have broken the run-liminix-vm command a bit for MIPS due to
necessary changes in how we pass the command line.  If CI isn't green
for this commit and youre trying the worked examples, I suggest
reverting to the commit before this one.
2023-09-20 22:55:51 +01:00
Daniel Barlow 57eb55de58 found another mips-vm to rename 2023-09-20 19:13:04 +01:00
Daniel Barlow 4389fa15f7 rename mips-vm as run-liminix-vm 2023-09-20 18:33:20 +01:00
Daniel Barlow 4f29bdd3ed detect arch in kernel and uimage
also move kernel builder to pkgs/

FIXME we need to straighten out the mess in calling
dtb.nix/uimage.nix
2023-09-20 18:26:33 +01:00
Daniel Barlow f7b30939b5 remove service-state when service exits 2023-09-13 22:49:00 +01:00
Daniel Barlow 106a429b3d odhcp-script only write addresses if there are any 2023-09-13 17:51:07 +01:00
Daniel Barlow b3e505abf4 anoia.system print command if it failed 2023-09-13 17:50:40 +01:00
Daniel Barlow 8f97c5bf3c anoia service :events method behaves as iterator 2023-09-12 20:46:52 +01:00
Daniel Barlow 7904c6bfe9 anoia users now need lfs
... and we need to figure out how to do transitive
dependencies, because this is not a great experience
2023-09-12 18:46:04 +01:00
Daniel Barlow 343d3b6508 writeFennel is writeFennelScript with knobs on
The second parameter is now an options attrset, wherein we will pile
all kinds of cool stuff.

Right now the only cool bit is `mainFunction`, which allows you to
compile a fennel module into a lua script and name the function that
should be executed when the script runs. This makes it easier to
write testable Fennel code, because the test script can require the
module and call stuff in it.
2023-09-12 17:45:18 +01:00
Daniel Barlow 96e19767e9 odhcpc-script don't require fennel at runtime 2023-09-12 17:39:06 +01:00
Daniel Barlow d49cbbb8ed test for acquire-wan-address 2023-09-11 00:07:49 +01:00
Daniel Barlow 3ff55d3aad odhcp-script: unique subdirectory names for each parsed address 2023-09-10 12:15:34 +01:00
Daniel Barlow 22275f311c anoia: add simple hash function and base64 encoder 2023-09-10 12:14:39 +01:00
Daniel Barlow 870da62a1e anoia.svc outputs may be directories (read as table) 2023-09-09 00:30:02 +01:00
Daniel Barlow 0312f7a999 fennelrepl look for .fnl before .lua
this means fennelrepl in nix-shell will prefer local
source files to generated lua files, making it easier
to change library code without restarting the shell
2023-09-09 00:11:35 +01:00
Daniel Barlow 9dd3cf23b4 anoia.fs.mktree replaces mkdir
This uses lfs to make the tree in-process instead of
shelling out to the mkdir command
2023-09-08 21:17:42 +01:00
Daniel Barlow 4e9227dff3 move rmtree to anoia library 2023-09-08 21:03:18 +01:00
Daniel Barlow eaa45906ff fennelrepl runs with --correlate
this is so that error message line numbers match up
2023-09-08 21:02:26 +01:00
Daniel Barlow 12e25722fa odhcp-script: delete stale dirs from previous runs
This requires adding LFS as a dependency because native Lua has
no way to iterate a directory, but it seems to be Not Huge and
hopefully we'll have other uses for it
2023-09-08 20:48:01 +01:00
Daniel Barlow 09fe21260e rename fn 2023-09-08 20:48:01 +01:00
Daniel Barlow 4bd3ccc8fd inline write-{addresses,prefixes} 2023-09-08 20:48:01 +01:00
Daniel Barlow 3e163d4253 remove unused fn 2023-09-08 20:47:55 +01:00
Daniel Barlow 9487cb2567 DRY near-duplicate code between parse-{addresses,prefixces} 2023-09-08 20:47:55 +01:00
Daniel Barlow b25103be2e test script for odhcp6-script 2023-09-08 20:47:55 +01:00
Daniel Barlow 353a199ab2 odhcpc script: parse ADDRESSES and PREFIXES
so downstream doesn't have to
2023-09-05 22:42:25 +01:00
Daniel Barlow 535eb70bb9 convert all route defns to module-based-service 2023-08-31 23:52:59 +01:00
Daniel Barlow 44c1fb7632 delete now-unused (pkgs.liminix.network) interface address 2023-08-31 18:30:22 +01:00
Daniel Barlow aecbe08f08 add o+x permission on service-state directories
this is needed for resolvconf, which writes resolv.conf as
an output and wants to make it world-readable
2023-08-28 22:02:28 +01:00
Daniel Barlow 1580857fde extract common "interface up" code to a string
so that bridge service can use it
2023-08-28 22:02:28 +01:00
Daniel Barlow 540a1dfd76 remove interface.device
build-time uses can mostly be replaced with interface.name

for runtime uses, switch to $(output ${interface} name)
2023-08-28 22:02:28 +01:00
Daniel Barlow 6da0e67621 create outputs for network interface 2023-08-27 22:41:26 +01:00
Daniel Barlow 485ecc03b0 serviceDefn build function handles dependencies
in a bit of a hacky way, we culd clean this up
2023-08-27 22:40:54 +01:00
Daniel Barlow 81b56fb6a3 new type for interface (presently just alias to service) 2023-08-27 22:39:37 +01:00
Daniel Barlow 2ad203ce1f delete unused functoins in liminix-tools 2023-08-21 19:29:00 +01:00
Daniel Barlow 6f92f8fa8b merge bridge services into one 2023-08-16 23:29:53 +01:00
Daniel Barlow fbb2c04132 move module-based-service parameter types into service
This is in preparation for writing something that extracts them
into documentation.

user configurations now call config.system.service.foo.build { ...params }
instead of config.system.service.foo

the parameter type definitions themselves now move into the
config stanza of the module referencing the service

new helper function  liminix.callService

The only service moved so far is dnsmasq
2023-08-04 20:39:29 +01:00
Daniel Barlow 648ea5613b use module-based-service for hostapd 2023-07-16 17:51:50 +01:00
Daniel Barlow 669af24247 make a module for dnsmasq 2023-07-14 23:18:21 +01:00
Daniel Barlow df6cfe1cd5 move pppoe service derivation into ppp module dir 2023-07-14 21:35:59 +01:00
Daniel Barlow 682183a88d move typeChecked into pkgs.liminix.lib 2023-07-14 20:22:29 +01:00
Daniel Barlow 69e6eb5a89 accept attr args to pppoe service, and typecheck them
We use (abuse, arguably) the nixos module system for typechecking.  Un
the plus side, it gives us documentation of the options and their
expected types. On the downside, the error message doesn't tell us
the file in which the error was encountered.

(This is subject to change, if I can find a better way)
2023-07-14 16:53:36 +01:00
Daniel Barlow a19d12d6d7 fennelrepl add PREFIX/?/init.lua to lua load path 2023-07-08 23:08:25 +01:00
Daniel Barlow b5cd0cc2d5 fennelrepl: fix bug which introduced whitespace in package.path 2023-07-08 23:08:24 +01:00
Daniel Barlow 0c41e9305c extract service output watcher to fennel module 2023-07-08 23:08:24 +01:00
Daniel Barlow 708350711b allow running scripts using fennelrepl
e.g.

FENNEL_PATH=pkgs/?/init.fnl\;pkgs/?.fnl nix-shell --run "fennelrepl ./examples/acquire-delegated-prefix.fnl /tmp/boo eth1"
2023-07-08 23:08:24 +01:00
Daniel Barlow 2de4d7a8f9 fennel: extract some common functions into a shareable module 2023-07-05 20:23:27 +01:00
Daniel Barlow c3bb33c9ce add fennelrepl package
Runs fennel using a Lua compiled with the same options as the
host system, and with packages set up so it can find all the local
Lua packages

To shorten the dev feedback loop further, allows FENNEL_PATH to be set
on the command line so you can point directly it at the Fennel sources
for some library you're working against instead of having to run
nix-build and compile them to Lua
2023-07-04 22:58:51 +01:00
Daniel Barlow 24befe6bf7 install fennel from source as a package
nixos lua packaging is giving me a headache
2023-07-04 22:56:17 +01:00
Daniel Barlow 41687e916d rename luaSmall package to lua 2023-07-02 18:19:54 +01:00
Daniel Barlow 3900683413 simplify protocol for watchers of service output directories
Previously: the service wrote a timestamp and the receiver
read and parsed it to see if there was new data

Now: the service writes and removes a .lock file to prevent
the receiver reading partial data. The receiver is responsible
for remembering the *previous* state and only updating if it's changed
2023-07-02 12:09:13 +01:00
Daniel Barlow 9aa5ff6ed1 make a package for odhcpc-script 2023-06-30 20:02:03 +01:00
Daniel Barlow b6e72504d6 ipv6 default route
needs to specify the ppp0 *peer* address not the local address
2023-06-30 10:17:33 +01:00
Daniel Barlow c595ae0ccb firewallgen: make nft shebang work 2023-06-27 21:26:23 +01:00
Daniel Barlow 6101f3f3d8 load necessary kernel modules for firewall 2023-06-27 21:18:09 +01:00
Daniel Barlow 591bd78509 extract writeKconfig to its own file 2023-06-26 20:49:43 +01:00
Daniel Barlow 6bc45c2b55 preinit: null-terminate argv array for execve 2023-06-22 09:29:44 +01:00
Daniel Barlow d79a1e15bb get fennel from source instead of luarocks 2023-06-20 20:19:11 +01:00
Daniel Barlow a7e7146887 preinit: disable nolibc
- it stopped working with 22.11->23.05
- linking statically against musl is about 17k, so
  this is costing us 11k or so
2023-06-18 23:04:26 +01:00
Daniel Barlow d66f5901a2 fix nftables syntax 2023-06-18 22:18:44 +01:00
Daniel Barlow 80639a7256 add firewallgen package, which creates an nft script 2023-06-18 17:40:16 +01:00
Daniel Barlow 3f4dbfcfd3 ipv6 prefix delegation for rotuer
much tidying needed, but it works
2023-05-31 23:29:05 +01:00
Daniel Barlow fdffdbb22a add writeFennelScript function, make ifwait use it 2023-05-29 20:20:12 +01:00
Daniel Barlow 447f068569 partly support getting IPv6 addresses
- gets interface id from ppp
- runs odhcpc to get RA and prefix delegation
- doesn't do anything useful with the data yet
2023-05-24 23:01:50 +01:00
Daniel Barlow 339c2d9873 upgrade to ppp 2.5.0 2023-05-22 23:31:57 +01:00
Daniel Barlow 39b09df4d7 liminix-rebuild: test if nix-build succeeds 2023-05-20 22:30:22 +01:00
Daniel Barlow ea2f48cfc9 liminix-rebuild copy nix-store-paths to /persist 2023-05-20 21:55:37 +01:00
Daniel Barlow b0098f1c8e move min-list-garbage into min-collect-garbage pkg
we don't want it in the same package as min-copy-closure as
that depends on bash
2023-05-20 21:55:23 +01:00
Daniel Barlow 68ab6faeb3 write etc/nix-store-paths in systemConfiguration 2023-05-19 23:57:50 +01:00
Daniel Barlow 00aeb81811 min-list-garbage: check all store paths against file
this is step 1 of min-collect-garbage, no point implementing
deletion ourselves when rm -r exists

(arguably no point in implementing any of it, but this is the bit we
can't do efficiently in bourne shell - it means we're reading the
store-paths list once instead of grepping it afresh for every entry in
/nix/store/)
2023-05-19 23:49:11 +01:00
Daniel Barlow a809c28dde liminix-rebuild source /etc/profile to get PATH for reboot 2023-05-18 22:43:08 +01:00
Daniel Barlow 292a4c4d46 liminix-rebuild: put activate in /persist 2023-05-17 22:49:10 +01:00
Daniel Barlow b1f4db00a0 add liminix-rebuild command 2023-05-17 15:38:22 +01:00
Daniel Barlow ddd7b68b30 min-copy-closure: remove verbose output 2023-05-11 23:52:13 +01:00
Daniel Barlow cc6c790746 set up path for min-copy-closure 2023-05-07 22:51:10 +01:00
Daniel Barlow bcf5dac5d7 min-copy-closure: honour $SSH_COMMAND env var 2023-05-07 22:07:35 +01:00
Daniel Barlow 1c002c4065 min-copy-closure: improve output 2023-05-07 22:06:49 +01:00
Daniel Barlow 74f2aa6247 initramfs-peek: an initramfs image with a shell, for debugging 2023-05-06 23:03:51 +01:00
Daniel Barlow 888a0d5f74 mips-vm: allow env var to override la network interface
this is handy if you want to connect to it from the host
for e.g. seeing if min-copy-closure works
2023-05-06 23:01:56 +01:00
Daniel Barlow 30153a2d4e add min-copy-closure, a minimal nix-copy-closure substitute 2023-05-06 22:47:03 +01:00
Daniel Barlow 28264febdb add smaller-than-gnu "hello world" package 2023-04-23 20:56:20 +01:00
Daniel Barlow 65dfbad365 systemconfig: chown files if uid/gid > 0 2023-04-15 22:53:28 +01:00
Daniel Barlow 5dd0c6e3c0 rewrite preinit as very small C program
By using the kernel "nolibc" header to avoid requiring a C library, we
can bring the initramfs size to around 4k

This does involve a tiny bit of inline mips assembly which I'm not
sure about. gcc seems unwilling to generate the code to load $gp at
function entry of main(), so we do it by hand - but I'd rather find
out why gcc doesn't.
2023-04-15 18:27:39 +01:00
Daniel Barlow 11f2715d18 mips-vm: enlarge mtd 2023-04-15 17:22:35 +01:00
Daniel Barlow 1cc0b13b57 rewrite systemconfig in C and link statically
systemconfig (a.k.a "activate") is run from the initramfs. Converting
it from a shell script to an executable means it doesn't depend on
there being a shell in the initramfs
2023-04-15 17:21:27 +01:00
Daniel Barlow c744ef8c17 systemconfig: accept uid and gid options
all we do with them is assert they're zero, to unbreak CI.
This code is getting rewritten anyway
2023-04-14 23:19:56 +01:00
Brian McKenna fb796e61e0 pseudofile: allow setting uid and gid of files
Necessary for Dropbear to accept non-root authorized_keys files.
2023-04-14 23:12:52 +01:00
Daniel Barlow 2e15acd61c whitespace 2023-04-10 17:46:39 +01:00
Daniel Barlow 54a1ab3529 support jffs2, with initramfs
the jffs2 filesystem contains only /nix/store and a script which is
run in early init (initramfs) and is responsible for recreating
"traditional" directories (/bin /etc/**/* /var &c) based on the
configuration.

this is tested only in qemu so far and could use some cleanup
2023-04-04 23:35:49 +01:00
Daniel Barlow 25d9da967c remove support for sockets in pseudofiles
(1) we can't make them on a real filesystem except by running
something that calls socket()
(2) whyever would we want to?
2023-04-04 23:23:22 +01:00
Daniel Barlow aa1a2e5d75 package gen_init_cpio, tool for making an initramfs 2023-04-04 22:54:20 +01:00
Daniel Barlow f02efa3fe3 refactor 2023-04-04 21:11:28 +01:00
Daniel Barlow 342c87b256 qemu: boot from mtd using mtd2block
doesn't make much difference for squashfs but this will make it much
simpler to test jffs2/ubifs
2023-04-04 21:07:02 +01:00
Daniel Barlow 07e7d63ade fixup 98243d43da 2023-04-02 18:46:27 +01:00
Daniel Barlow 98243d43da add mtdutils mkfs.jffs2 --graft option
we'd like a bit more of the convenience of mksquashfs
(never thought I'd say _that_) for jffs2, in particular
not having to copy all the desired store paths into a
single directory just so we can create an image from them
2023-03-31 23:42:13 +01:00
Daniel Barlow a172180be8 don't set lua5_3 in overlay
sphinx depends on lua5_3, so overriding it globally means rebuilding
that - which isn't really necessary
2023-03-24 23:43:13 +00:00
Daniel Barlow 3608cc5e33 add kenrel command line cookie to mips-vm script 2023-03-24 18:48:38 +00:00
Daniel Barlow a5cfa37ed3 unify kernel command line handling
We now use MIPS_CMDLINE_DTB_EXTEND for all boot varieties
(tftpboot, flash boot, kexec) with the addition of
MIPS_BOOTLOADER_CMDLINE_REQUIRE_COOKIE - local patch -
so that the bootloader args are ignored unless they
contain the string "liminix"
2023-03-23 22:24:44 +00:00
Daniel Barlow 4b19568f1b add kexecboot
This allows booting a new image from a running OS, creating a
phram mtd for the root squashfs

* enable CONFIG_KEXEC
* add modules/kexecboot
* patch kexec-tools to add --map-file option for the squashfs
* patch kernel kexec code to call new kernel with DTB
2023-03-19 20:25:43 +00:00
Daniel Barlow 429ffa8e7d make applyPatches work for ramips 2023-03-19 20:25:23 +00:00
Daniel Barlow efd878dc5e extract common code for patching kernel source fdorm openwrt 2023-03-18 19:17:58 +00:00
Daniel Barlow a4e1dcedd3 redirect stderr 2023-03-10 23:39:53 +00:00
Daniel Barlow 225fc6fe51 configurable busybox
allows modules to add to the busybox applets and change config
2023-03-10 18:40:45 +00:00
Daniel Barlow 91c0147919 set hostname before dhcp client runs 2023-03-08 22:11:59 +00:00
Daniel Barlow 70f8f5ecfd remove hostapd debugging flag 2023-03-07 19:11:25 +00:00
Daniel Barlow e86e9430fc vlans and mt300a wired network interfaces 2023-03-07 19:10:12 +00:00
Daniel Barlow 06687a819a udhcpc notify when ready 2023-03-07 19:06:40 +00:00
Daniel Barlow f9f9720ba7 ${!foo} doesn't work in ash, switch to printenv 2023-03-07 19:05:58 +00:00
Daniel Barlow 1565a8414d remove inadvertant references to bash 2023-03-06 17:48:31 +00:00
Daniel Barlow 83e56a3a90 add swconfig package 2023-03-05 22:32:56 +00:00
Daniel Barlow 2787e6a230 reformat qprint substitutions 2023-03-05 21:33:51 +00:00
Daniel Barlow a8cb872859 add service name to log lines 2023-03-04 23:08:25 +00:00
Daniel Barlow 5427456c21 rename notificationFd to notification-fd
it's perfectly valid syntax and consistent with the s6 spelling
2023-03-04 21:19:30 +00:00
Daniel Barlow 25a46dcb2c escape $ in pseudofile
this is needed to write /etc/passwd when it contains $5$....
strings
2023-03-04 00:23:21 +00:00
Daniel Barlow 38756af1c1 add in_outputs shell function which ensures umask is set 2023-03-03 23:07:03 +00:00
Daniel Barlow fd500041fa move new packages to pkgs/default.nix 2023-03-03 22:21:27 +00:00
Daniel Barlow adc198b3af WIP push to see what passes 2023-03-01 22:24:58 +00:00
Daniel Barlow fc4f726dd6 make hostapd service depend on its interface 2023-03-01 18:16:01 +00:00