7.1 KiB
Phase 1.2 follow-up: remaining Guix checkout Guile prerequisites built on FreeBSD; next blocker is ./pre-inst-env guix --version
Date: 2026-04-01
Summary
This step cleared the remaining mandatory Guile module prerequisites needed by a Guix checkout configure --with-courage run on FreeBSD, and then pushed the checkout investigation past configuration into the next executable boundary.
Added/updated files:
tests/guix/build-local-guile-configure-deps.sh- updated
tests/guix/run-derivation-generation-investigation.sh
The result is:
- the remaining required checkout-time Guile modules can be built successfully on FreeBSD against the fixed local Guile build
configure --with-couragenow succeeds when run withMAKE=gmakegmake scripts/guixalso succeeds- the next concrete blocker is no longer a missing Guile module; it is a runtime failure from
./pre-inst-env guix --version
Inputs used
Local Guile
The same fixed local Guile build was used:
/tmp/guile-freebsd-validate-install/bin/guile
Shared local dependency prefix
This step continued using the shared local prefix already created by earlier prerequisite work:
/tmp/guile-gnutls-freebsd-validate-install
At this point the prefix contains at least:
- Guile-GnuTLS
- Guile bytestructures
- Guile-Git
- Guile-JSON
- Guile-SQLite3
- Guile-Gcrypt
- Guile-zlib
- Guile-lzlib
- Guile-semver
Host-side packages installed for this step
This step installed the missing C library dependencies required by the remaining Guile extension stack:
sudo pkg install -y libgcrypt lzlib
Installed host packages included:
libgcrypt1.12.0libgpg-error1.59lzlib1.16
The host already had:
sqlite33.50.4
Guix source-of-truth package definitions used
This step used the current Guix package definitions in:
~/repos/guix/gnu/packages/guile.scm~/repos/guix/gnu/packages/gnupg.scm~/repos/guix/gnu/packages/guile-xyz.scm
Packages built:
guile-sqlite30.1.3guile-gcrypt0.5.0guile-zlib0.2.2guile-lzlib0.3.0guile-semver0.2.0
Resolved Git commits recorded by the harness:
guile-sqlite3tagv0.1.39405dda61347ff26c57e3be7531dc9dc5a19cf40
guile-gcrypttagv0.5.01b637955d40b206d2bdebed5443a545a0412f813
guile-semvertagv0.2.0607ca84c24b8950fdb5aca73e9d53d924e49fc24
Verified tarball hashes:
guile-zlib0.2.2- Guix nix-base32:
04p9lb3bq5y0k358s8agpksx9x68vzx330cb8jkn4qp3qj7cmnx2 - SHA256:
a2dbca8ec4e36262a7448b8131fadfc8f4d4f5bc4f218dca98c017bcc6a2e912
- Guix nix-base32:
Important FreeBSD-specific findings
1. guile-gcrypt needed an explicit libgcrypt prefix on this host
guile-gcrypt configure failed initially because its libgcrypt-config --libs parsing logic derived an unusable dynamic library name on FreeBSD when /usr/local/bin/libgcrypt-config emitted both -lgcrypt and -lgpg-error.
For local validation, configuring with:
--with-libgcrypt-prefix=/usr/local
resolved that issue cleanly.
2. Current guile-lzlib source URL no longer matches the Guix hash
The current upstream tarball at:
https://codeberg.org/guile-compression/guile-lzlib/archive/0.3.0.tar.gz
produced this SHA256 on the host:
6a2847a303a141bb95b1b5d1a4b975b4dbff9cc590eba377cc8072682e7637ec
but the current Guix package definition expects:
a7f99c8d2a143e05ea22db2dc8b9ce6c27cae942162b45ee3015ed9027af0ff2
To continue local validation, the harness fell back to the upstream Git tag matching version 0.3.0 and recorded:
- fallback commit
474cee42116295bc0bd2acf12d4d6a766043090e
This is useful independent evidence that the currently served upstream tarball has drifted relative to the hash recorded in Guix.
3. MAKE=gmake is required for the Guix checkout configure/build path here
Once the remaining Guile modules were available, the Guix checkout no longer failed on missing modules. However, configuration still failed unless it was run with GNU make selected explicitly.
Using:
MAKE=gmake
allowed configure --with-courage to complete successfully on FreeBSD.
Validation commands
Build the remaining required Guile modules
ENV_OUT=/tmp/guile-configure-deps-env.sh \
METADATA_OUT=/tmp/guile-configure-deps-metadata.txt \
./tests/guix/build-local-guile-configure-deps.sh
Re-run the checkout investigation
GUILE_EXTRA_PREFIX=/tmp/guile-gnutls-freebsd-validate-install \
METADATA_OUT=/tmp/guix-derivation-investigation-next-boundary.txt \
./tests/guix/run-derivation-generation-investigation.sh
The investigation still used the requested experimental directories:
- store:
/frx/store - local state:
/frx/var - sysconf:
/frx/etc
Module validation results
The remaining module checks all succeeded:
sqlite3 module check: ok
gcrypt module check: ok
zlib module check: ok
lzlib module check: ok
semver module check: ok
The prefix also still satisfied the earlier requirements:
Existing (gnutls) module in prefix: present
Existing (git) module in prefix: present
Existing (json) module in prefix: present
Updated checkout investigation result
After these module builds, the Guix checkout now behaves as follows on FreeBSD:
configurewithout--with-couragestill fails on the explicit unsupported-platform gateconfigure --with-couragenow succeeds when run withMAKE=gmakegmake scripts/guixsucceeds./pre-inst-env guix --versionprints the version banner but exits with a Scheme runtime error
Observed failure signature:
ice-9/eval.scm:619:8: Wrong type to apply: #<syntax-transformer leave-on-EPIPE>
The command still printed the expected banner first:
guix (GNU Guix) 1.5.0.7351-62b61
So the current boundary has moved past checkout configuration and script generation into runtime behavior of the uninstalled Guix command itself.
Additional observations
configurenow reports these required modules as available and recent enough:- Guile-JSON
- Guile-SQLite3
- Guile-Gcrypt
- Guile-Git
- Guile-zlib
- Guile-lzlib
- Guile-semver
Guile-Libstill does not satisfy the optional versioned requirement, but that remains a warning rather than a blockerGuile-SSHis still unavailable and reported as such during configure, but it also does not block this checkout path here- using
/frx/storecontinues to produce the expected warning that substitutes fromgnu.orgwill not be usable
What this step demonstrates
This step demonstrates that:
- the Guix checkout has now progressed beyond the long sequence of missing mandatory Guile module prerequisites on FreeBSD
- the next blocker is now in actual execution of the checkout command path rather than in missing configure-time dependencies
- the current FreeBSD boundary has advanced from “cannot configure” to “configures and builds
scripts/guix, but./pre-inst-env guix --versionfails at runtime”
Recommended next step
Investigate the leave-on-EPIPE runtime failure in the uninstalled Guix command path, while also completing the remaining Phase 1.3 syscall-interface mapping/documentation work needed to close out Phase 1 foundations.