Skip to content

Live bootstrap to guix#578

Draft
vxtls wants to merge 262 commits intofosslinux:masterfrom
vxtls:live-bootstrap-to-guix
Draft

Live bootstrap to guix#578
vxtls wants to merge 262 commits intofosslinux:masterfrom
vxtls:live-bootstrap-to-guix

Conversation

@vxtls
Copy link
Copy Markdown

@vxtls vxtls commented Mar 15, 2026

No description provided.

vxtls added 30 commits February 21, 2026 14:56
…stsuite

argp-standalone pass1 builds in a separate build directory. Its testsuite
compiles sources that include <argp.h>, but without an explicit include path
the header in the source root is not found and build fails.

Set:
- CPPFLAGS=-I/Users/luoyanpan/CLionProjects/guix/live-bootstrap/..

in src_configure so testsuite objects can resolve argp.h during the normal
 phase.
…al LIBS and setting host/build + kernel-toolchain env
…hs, and disable unused-but-set-variable as error
feat(steps-guix): add libgcrypt-1.12.1 default build with gcc-detected host and pkg-config path
feat(steps-guix): add guile-gcrypt-0.5.0 with dynamic libgcrypt prefix and ld library path
@vxtls
Copy link
Copy Markdown
Author

vxtls commented Apr 6, 2026

Got through the bootstrap proper (had to restart once because one of guile-3.0.9's checks locked up - AFAIK this is a known sporadic issue, I seem to remember seeing it before when trying to bootstrap Guix on various platforms), but then immediately after "Computing Guix derivation", as it tries to switch from the "installed" Guix to the one in local-channels, it dies with the familiar system() "No such file or directory" error.

The fix is simple: apply remove-environment-variables-system-call.patch also in guix-daemon-and-pull.sh. With that fixed, the build is now proceeding agian.

So, has this issue been resolved or not?

@Googulator
Copy link
Copy Markdown
Collaborator

Resolved, yes. Now, there's a new issue: one of the tests for util-linux, related to user namespace handling, is failing. The cause: CONFIG_USER_NS disabled in the kernel configuration. I'm gonna set it to Y, and try again.

@Googulator
Copy link
Copy Markdown
Collaborator

With CONFIG_USER_NS=y in kconfig, util-linux's tests now pass, and Guix moves on to building Valgrind.

@vxtls
Copy link
Copy Markdown
Author

vxtls commented Apr 6, 2026

With CONFIG_USER_NS=y in kconfig, util-linux's tests now pass, and Guix moves on to building Valgrind.

Wait, what stage are you at right now? Are you on guix pull or guix system image?

@Googulator
Copy link
Copy Markdown
Collaborator

guix pull still, but past the initial bootstrap AKA commencement.scm

@Googulator
Copy link
Copy Markdown
Collaborator

Googulator commented Apr 8, 2026

Ran into and debugged another issue: when building guix-manual, I get the following error:

In unknown file:
           0 (copy-file "/gnu/store/1n4lagn25hylvrn9x9v2qjf0r0dj9sby-doc/os-config-desktop.texi" "./os-config-desktop.texi")

ERROR: In procedure copy-file:
In procedure copy-file: Permission denied

The cause: when this call is executed, ./os-config-desktop.texi already exists in the build directory, with read-only permissions.
That copy is generated from /gnu/store/fcw6rj38k5g3cwhdqqr4yfwlhfjzr81q-examples/desktop.tmpl, which in turn comes from subdirectory gnu/system/examples/ of the local repository created in preparation for calling guix pull, using the contents of the Guix 1.5.0 tarball. The upstream Guix repository also contains this file. So this copy is fine.

However, /gnu/store/1n4lagn25hylvrn9x9v2qjf0r0dj9sby-doc, on a normal Guix installation, contains no os-config-desktop.texi. Normally, the Guix channel being pulled is a fork of Guix's upstream repository in one way or the other, and that repository has an explicit gitignore set for this file. But in our case, we initialize the channel repository with the contents of the tarball, which contains some pregenerated documentation & other files, included for user convenience. And that happens to include a copy of os-config-desktop.texi in doc, which ends up conflicting with the one generated from desktop.tmpl.

Fix, option 1: in guix-daemon-and-pull.sh, insert rm doc/os-config*; rm doc/*.??*.*; rm doc/version*.texi; rm doc/stamp*; rm doc/*.1; rm doc/*.info; rm doc/guix.info*; rm doc/images/*.eps doc/images/*.pdf doc/images/bootstrap-*.png doc/images/coreutils-bag-graph.png doc/images/coreutils-graph.png doc/images/gcc-core-mesboot0-graph.png doc/images/service-graph.png doc/images/shepherd-graph.png before git init. (Ideally, do a more thorough cleanup of pregenerated files.)

Fix, option 2: Use a clone or snapshot of the Guix Git repository, rather than a release tarball intended for human use, to prepare the local channel. (Preferably I would also switch the actual build of the Guix package to be based on a Git repository, although live-bootstrap has a preference for release tarballs.)

For now, I have locally implemented option 1, and guix pull seems to be proceeding fine.

@Googulator
Copy link
Copy Markdown
Collaborator

Googulator commented Apr 8, 2026

Successful guix pull - moving on to ISO build.

EDIT: "disable-authentication: unrecognized option" - See Googulator/guix@ca0114e for a workaround; unfortunately this causes it to rerun the entire bootstrap :(

@Googulator
Copy link
Copy Markdown
Collaborator

Before the ISO build, one also needs to cp /var/guix/profiles/per-user/root/current-guix/manifest /usr/manifest - otherwise it won't be able to find the local channel.

@vxtls
Copy link
Copy Markdown
Author

vxtls commented Apr 8, 2026

cp /var/guix/profiles/per-user/root/current-guix/manifest /usr/manifest

just to make sure, what I need to do is add this before iso build in guix-build-iso.sh? copy it to the live-bootstrap's /usr dir?

@Googulator
Copy link
Copy Markdown
Collaborator

Googulator commented Apr 8, 2026

Yes, exactly.

One more thing: "--disable-authentication" on "guix system image" is invalid, and will error out unless removed.

@Googulator
Copy link
Copy Markdown
Collaborator

During the ISO build, I got an error complaining about a missing aux-files/logo.txt file. It's in gnu/installer in the tarball & channel repo, so before building the ISO, one needs to test -d /usr/share/guile/site/3.0/gnu/installer/aux-files || cp -r /var/lib/guix/local-channels/guix/gnu/installer/aux-files /usr/share/guile/site/3.0/gnu/installer/

@Googulator
Copy link
Copy Markdown
Collaborator

Googulator commented Apr 8, 2026

In the "build-native-utils-earlier" patch, the procedure mesboot0-package needs to read ˙(supported-systems '("i686-linux" "x86_64-linux")) instead of just (supported-systems '("i686-linux")), otherwise ISO generation will fail, thinking that there is no way to build 64-bit packages on the bootstrapped system.

It might also be necessary to change the target in the guix pull script to x86_64-linux, to avoid running the Guix bootstrap twice.

EDIT: Oops...

@Googulator
Copy link
Copy Markdown
Collaborator

Googulator commented Apr 8, 2026

And... bitrot strikes.

Guix tries to download 0001-unordered-fix-copy-assign.patch from boost.org, and then check it against a specific hash. But Boost decided to "clean up" their copy of this patch, removing trailing whitespace - breaking the hash.

The original one with the right hash can still be found @ https://cdn.jsdelivr.net/npm/@openziti/ziti-sdk-nodejs@0.14.2/vcpkg/ports/boost-unordered/0001-unordered-fix-copy-assign.patch - manually copying it to /gnu/store/chzch29xi2gzdxbzk77sb432klkddra1-boost-0001-unordered-fix-copy-assign.patch seems to work (EDIT: it doesn't).

@vxtls
Copy link
Copy Markdown
Author

vxtls commented Apr 8, 2026

The original one with the right hash can still be found @ https://cdn.jsdelivr.net/npm/@openziti/ziti-sdk-nodejs@0.14.2/vcpkg/ports/boost-unordered/0001-unordered-fix-copy-assign.patch - manually copying it to /gnu/store/chzch29xi2gzdxbzk77sb432klkddra1-boost-0001-unordered-fix-copy-assign.patch seems to work.

Should we patch Guix to fix this problem? Just like the bootstrap binary, use a local web server to serve this file

@Googulator
Copy link
Copy Markdown
Collaborator

A local web server is probably a good idea, yes.

@vxtls
Copy link
Copy Markdown
Author

vxtls commented Apr 8, 2026

Wait a minute, what do you mean by "it doesn't", you mean, the file didn't match or we can't copy it to /gnu/store?

@Googulator
Copy link
Copy Markdown
Collaborator

Copying to the store directly didn't work. Modifying the package definition to use the alternative URL did.

But now, I'm facing a new problem, where one of the "module-import-compiled" packages fails to build, apparently because contents of the host Guile (3.0.11) leak into the Guix environment, where the local Guile (3.0.9) can't execute them. I'm still working on solving this.

@vxtls
Copy link
Copy Markdown
Author

vxtls commented Apr 9, 2026

But now, I'm facing a new problem, where one of the "module-import-compiled" packages fails to build, apparently because contents of the host Guile (3.0.11) leak into the Guix environment, where the local Guile (3.0.9) can't execute them. I'm still working on solving this.

What's the status of this issue? One thing that puzzles me is, aren't all Guix builds supposed to run in a chroot or namespace environment?
EDIT: can i have the log?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants