240 lines
7.1 KiB
Markdown
240 lines
7.1 KiB
Markdown
# 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:
|
|
|
|
1. the remaining required checkout-time Guile modules can be built successfully on FreeBSD against the fixed local Guile build
|
|
2. `configure --with-courage` now succeeds when run with `MAKE=gmake`
|
|
3. `gmake scripts/guix` also succeeds
|
|
4. 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:
|
|
|
|
```sh
|
|
sudo pkg install -y libgcrypt lzlib
|
|
```
|
|
|
|
Installed host packages included:
|
|
|
|
- `libgcrypt` `1.12.0`
|
|
- `libgpg-error` `1.59`
|
|
- `lzlib` `1.16`
|
|
|
|
The host already had:
|
|
|
|
- `sqlite3` `3.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-sqlite3` `0.1.3`
|
|
- `guile-gcrypt` `0.5.0`
|
|
- `guile-zlib` `0.2.2`
|
|
- `guile-lzlib` `0.3.0`
|
|
- `guile-semver` `0.2.0`
|
|
|
|
Resolved Git commits recorded by the harness:
|
|
|
|
- `guile-sqlite3` tag `v0.1.3`
|
|
- `9405dda61347ff26c57e3be7531dc9dc5a19cf40`
|
|
- `guile-gcrypt` tag `v0.5.0`
|
|
- `1b637955d40b206d2bdebed5443a545a0412f813`
|
|
- `guile-semver` tag `v0.2.0`
|
|
- `607ca84c24b8950fdb5aca73e9d53d924e49fc24`
|
|
|
|
Verified tarball hashes:
|
|
|
|
- `guile-zlib` `0.2.2`
|
|
- Guix nix-base32: `04p9lb3bq5y0k358s8agpksx9x68vzx330cb8jkn4qp3qj7cmnx2`
|
|
- SHA256: `a2dbca8ec4e36262a7448b8131fadfc8f4d4f5bc4f218dca98c017bcc6a2e912`
|
|
|
|
## 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:
|
|
|
|
```text
|
|
--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:
|
|
|
|
```text
|
|
https://codeberg.org/guile-compression/guile-lzlib/archive/0.3.0.tar.gz
|
|
```
|
|
|
|
produced this SHA256 on the host:
|
|
|
|
```text
|
|
6a2847a303a141bb95b1b5d1a4b975b4dbff9cc590eba377cc8072682e7637ec
|
|
```
|
|
|
|
but the current Guix package definition expects:
|
|
|
|
```text
|
|
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:
|
|
|
|
```text
|
|
MAKE=gmake
|
|
```
|
|
|
|
allowed `configure --with-courage` to complete successfully on FreeBSD.
|
|
|
|
## Validation commands
|
|
|
|
### Build the remaining required Guile modules
|
|
|
|
```sh
|
|
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
|
|
|
|
```sh
|
|
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:
|
|
|
|
```text
|
|
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:
|
|
|
|
```text
|
|
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:
|
|
|
|
1. `configure` without `--with-courage` still fails on the explicit unsupported-platform gate
|
|
2. `configure --with-courage` now succeeds when run with `MAKE=gmake`
|
|
3. `gmake scripts/guix` succeeds
|
|
4. `./pre-inst-env guix --version` prints the version banner but exits with a Scheme runtime error
|
|
|
|
Observed failure signature:
|
|
|
|
```text
|
|
ice-9/eval.scm:619:8: Wrong type to apply: #<syntax-transformer leave-on-EPIPE>
|
|
```
|
|
|
|
The command still printed the expected banner first:
|
|
|
|
```text
|
|
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
|
|
|
|
- `configure` now reports these required modules as available and recent enough:
|
|
- Guile-JSON
|
|
- Guile-SQLite3
|
|
- Guile-Gcrypt
|
|
- Guile-Git
|
|
- Guile-zlib
|
|
- Guile-lzlib
|
|
- Guile-semver
|
|
- `Guile-Lib` still does not satisfy the optional versioned requirement, but that remains a warning rather than a blocker
|
|
- `Guile-SSH` is still unavailable and reported as such during configure, but it also does not block this checkout path here
|
|
- using `/frx/store` continues to produce the expected warning that substitutes from `gnu.org` will not be usable
|
|
|
|
## What this step demonstrates
|
|
|
|
This step demonstrates that:
|
|
|
|
1. the Guix checkout has now progressed beyond the long sequence of missing mandatory Guile module prerequisites on FreeBSD
|
|
2. the next blocker is now in actual execution of the checkout command path rather than in missing configure-time dependencies
|
|
3. the current FreeBSD boundary has advanced from “cannot configure” to “configures and builds `scripts/guix`, but `./pre-inst-env guix --version` fails 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.
|