On 11/1/25 08:13, Alyssa Ross wrote:
Demi Marie Obenour <demiobenour@gmail.com> writes:
On 10/29/25 07:36, Alyssa Ross wrote:
Demi Marie Obenour <demiobenour@gmail.com> writes:
Busybox provides a broken fdisk that doesn't support GPT, only MBR. The systemd built against musl doesn't include systemd-pull, so systemd-sysupdate doesn't work. Therefore, use all of util-linux's command-line tools, and use systemd built against glibc.
That's a problem that's going to need to be fixed. We're not mixing two different libcs on the host.
Unfortunately, systemd-pull can't be built with musl libc. That leaves four options:
1. Try to fix the build problem, knowing that it could come back. 2. Mix two libcs on the host. 3. Try to fix the build (but this could take quite a while to upstream). 4. Use glibc on the host.
I don't think we should ship with option 2, but I think it might be acceptable until the underlying problem is solved.
Depends how hard it is to fix I suppose. What's the actual issue?
The problem went away in your recent Nixpkgs update. It’s only a problem with the older Nixpkgs. I'll keep using glibc systemd for testing but will not include it in subsequent versions.
diff --git a/host/rootfs/default.nix b/host/rootfs/default.nix index 0d79f7ca54ccc86eb0fa6e743f2011237d365f24..00052222507077b9e94a5ed0a3fbddd27caeefc3 100644 --- a/host/rootfs/default.nix +++ b/host/rootfs/default.nix @@ -4,20 +4,20 @@
import ../../lib/call-package.nix ( { callSpectrumPackage, spectrum-build-tools, src -, pkgsMusl, pkgsStatic, linux_latest +, pkgsMusl, pkgsStatic, linux_latest, systemd }: pkgsStatic.callPackage (
{ busybox, cloud-hypervisor, cryptsetup, dbus, erofs-utils, execline , inkscape, inotify-tools, iproute2, jq, lib, mdevd, nixos , runCommand, s6, s6-linux-init, s6-rc, socat, spectrum-host-tools -, stdenvNoCC, util-linuxMinimal, virtiofsd, writeClosure +, stdenvNoCC, util-linux, virtiofsd, writeClosure
util-linuxMinimal = util-linux.override { cryptsetupSupport = false; nlsSupport = false; ncursesSupport = false; pamSupport = false; shadowSupport = false; systemdSupport = false; translateManpages = false; };
So how come we need the non-minimal version?
I didn't check.
Let's stick with the minimal one until there's a need, then.
Will fix in v2.
+ # clobber any conflicting files from busybox + ln -sft "$out/usr/bin" ${escapeShellArg util-linux}/bin/*
The approach we've taken so far is to disable those tools in Busybox, and avoid conflicting symlinks, and I like that better. Alternatively, if you want to figure out which Busybox tools are actually needed, we could switch to a minimal build and enable only what we use.
I don't want to block on either of those, and I'd rather not risk breaking the build whenever util-linux adds a new tool. It's pretty clear that util-linux is to be preferred over Busybox in the event of a conflict.
This does add bloat, but there are far *more* sources of bloat right now, so I think that should be part of a more general debloating effort.
How would disabling the conflicting tools in Busybox like we've done so far block? It wouldn't. I thought it would be too much work, but thankfully one can save the errors to a text file and run some vim commands to turn them into something one can paste into host/rootfs/default.nix. -- Sincerely, Demi Marie Obenour (she/her/hers)