Re: [PATCH 1/7] host/rootfs: Use full util-linux and systemd

Demi Marie Obenour
2025-11-06T09:15:54Z

[-- Attachment #1.1.1: Type: text/plain, Size: 3798 bytes --]

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)

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 7253 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]