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

Alyssa Ross
2025-11-01T12:13:15Z

[-- Attachment #1: Type: text/plain, Size: 3207 bytes --]

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?

>>> 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.

>>> + # 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?

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]