Skip to content
Draft
Show file tree
Hide file tree
Changes from 211 commits
Commits
Show all changes
235 commits
Select commit Hold shift + click to select a range
21ddab3
script-generator: support explicit manifest/config roots and wire all…
vxtls Feb 18, 2026
6fcb8f4
bootstrap: add stage0 image reuse for guix and simplify guix handoff …
vxtls Feb 18, 2026
71efe6b
script-generator: remove grammar that M2-Planet didn't support
vxtls Feb 18, 2026
6e19398
script-generator: fix env SRCDIR to jump to steps-guix folder and do …
vxtls Feb 19, 2026
0b16d6d
fix(steps-guix/binutils): compile from top-level Makefile in pass1
vxtls Feb 20, 2026
8564386
steps-guix: add gcc-15.2.0 pass1 for kernel toolchain bootstrap
vxtls Feb 21, 2026
62078d5
steps-guix: disable thread-dependent runtime pieces in gcc-15.2.0 pass1
vxtls Feb 21, 2026
e86bbab
steps-guix: add argp-standalone-1.4.1 kernel-toolchain step
vxtls Feb 21, 2026
c54da75
mirror.sh: add steps-guix dir
vxtls Feb 21, 2026
2f22444
steps-guix/argp-standalone-1.4.1/sources: newline at end of file
vxtls Feb 21, 2026
6022208
steps-guix: build argp-standalone natively into /kernel-toolchain
vxtls Feb 21, 2026
548f45e
rootfs: refresh stage0-image mirrors in bootstrap.cfg at runtime
vxtls Feb 21, 2026
0a922a2
steps-guix/argp-standalone: fix out-of-tree build include path for te…
vxtls Feb 21, 2026
e727bcc
fix(argp-standalone): install argp artifacts manually into /kernel-to…
vxtls Feb 21, 2026
92afa6f
feat(musl-fts): add steps-guix musl-fts-1.2.7 build step and wire it …
vxtls Feb 22, 2026
afd79c2
musl-fts-1.2.7: update checksum
vxtls Feb 22, 2026
9515d30
feat(elfutils): add steps-guix elfutils-0.194 pass1 with autotools re…
vxtls Feb 22, 2026
cb1a8a6
fix(elfutils): switch to native compiler for pass1 while keeping fts/…
vxtls Feb 22, 2026
bcd3be0
fix(elfutils): avoid configure runtime probe failure by dropping glob…
vxtls Feb 22, 2026
51d4773
feat(musl-obstack): add steps-guix musl-obstack-1.2.3 step with verif…
vxtls Feb 22, 2026
fee7d7d
fix(elfutils): build static-only to avoid libelf.so TEXTREL failures …
vxtls Feb 22, 2026
280eaba
fix(elfutils): enforce static linking via LDFLAGS env in configure an…
vxtls Feb 22, 2026
d0f7f6f
fix(elfutils): drop static LDFLAGS, keep configure-time toolchain pat…
vxtls Feb 22, 2026
0066bbd
fix(elfutils): add --disable-textrelcheck
vxtls Feb 22, 2026
8f29302
fix(elfutils): add FNM_EXTMATCH compatibility patch across strip, elf…
vxtls Feb 22, 2026
8703b08
fix(elfutils): resolve libdw transitive fts/obstack linkage in src_co…
vxtls Feb 22, 2026
6b10401
feat(steps-guix): build linux64 kernel and switch via jump with backup
vxtls Feb 23, 2026
e821a06
fix(linux-6.12.74): keep host tools on /usr/bin and avoid cross ld co…
vxtls Feb 23, 2026
156cd66
fix(steps-guix): remove forced ext3 rootfstype in linux64 handover
vxtls Feb 23, 2026
55be03a
refactor(steps-guix): use improve-based linux64 handover to keep /ini…
vxtls Feb 23, 2026
6c2fd50
feat(steps-guix): add default libgpg-error-1.59 build script
vxtls Feb 23, 2026
0b53827
refactor(steps-guix): align linux64 handover with upstream jump flow …
vxtls Feb 23, 2026
faeff8a
fix(steps-guix): bring network up after linux64 jump before fetching…
vxtls Feb 23, 2026
e931553
fix(steps-guix): bootstrap guile-gcrypt configure with autoreconf and…
vxtls Feb 23, 2026
636edeb
fix(steps-guix): make guile-gcrypt use statically derived PREFIX/LIBD…
vxtls Feb 24, 2026
642ef88
fix(steps-guix): resolve guile-gcrypt libgcrypt lookup via configured…
vxtls Feb 24, 2026
ae840fa
fix(steps-guix): run final after stage to prevent pid1 exit panic
vxtls Feb 24, 2026
ffce902
fix(steps-guix): ensure /etc/mtab exists before delegating to global …
vxtls Feb 24, 2026
685f8ae
fix(steps-guix): run finalize_fhs after linux64 jump and drop ad-hoc …
vxtls Feb 24, 2026
3bea5b5
fix(steps-guix): initialize /proc and mtab before delegating finalize…
vxtls Feb 24, 2026
7ed755a
fix(steps-guix): source finalize_fhs instead of exec to keep init con…
vxtls Feb 24, 2026
ddbe55b
fix(steps-guix/git): add static-libcurl build path with configure che…
vxtls Feb 24, 2026
1933332
fix(steps-guix): add cmake bootstrap build and libgit2 cmake-based bu…
vxtls Feb 25, 2026
494b08c
fix(steps-guix/libtasn1): bootstrap with local gnulib bundle via GNUL…
vxtls Feb 25, 2026
25b755a
fix(steps-guix/libtasn1): align gnulib git ref with expected bundle p…
vxtls Feb 25, 2026
eb9a9f4
fix(libtasn1): correct gnulib source URL and verify tarball checksum
vxtls Feb 25, 2026
33bb0bb
update hash
vxtls Feb 25, 2026
d4d6f6b
fix(steps-guix): replace p11-kit with gnutls and add static-only guil…
vxtls Feb 26, 2026
ee0f481
guntls: update url
vxtls Feb 26, 2026
ef7127b
fix(bootstrap): fix guile-gnutls static libtool target and make init …
vxtls Feb 26, 2026
a05880e
fix(guile-gnutls): enable shared build to avoid libtool static .la na…
vxtls Feb 26, 2026
5d63dc3
fix(guile-gnutls): force CROSS_COMPILING_VARIABLE in make to prevent …
vxtls Feb 26, 2026
8f60091
fix(steps-guix): add unzip/sqlite/guile-sqlite3 build scripts and ena…
vxtls Feb 27, 2026
8300147
fix(unzip): avoid musl time prototype conflicts by skipping legacy gm…
vxtls Feb 27, 2026
bb24692
fix(unzip): fix autoconf dir API probe to prevent false NO_DIR on mod…
vxtls Feb 28, 2026
8b2d63f
feat(steps-guix): add guile-zlib and guile-lzlib build steps and wire…
vxtls Feb 28, 2026
95b34d3
feat(steps-guix): add guile-avahi, guile-git, guile-json steps
vxtls Feb 28, 2026
6762e8b
fix(steps-guix): add avahi-0.8 before guile-avahi to provide avahi-cl…
vxtls Feb 28, 2026
1ada5d4
fix(steps-guix): add libevent-2.1.12 before avahi dependency chain
vxtls Feb 28, 2026
8990eaa
fix(steps-guix): add dbus-1.16.2 step before avahi in guix manifest
vxtls Feb 28, 2026
de73fe6
fix(steps-guix): add expat-2.7.4 before dbus and pin dbus cmake searc…
vxtls Feb 28, 2026
1c75638
fix(steps-guix): add gdbm-1.8.3 before avahi and enable avahi dbm sup…
vxtls Feb 28, 2026
e700df3
fix(gdbm): patch C23-incompatible fatal_err prototypes and K&R defini…
vxtls Feb 28, 2026
faf86ef
fix(steps-guix): add libdaemon-0.14 before avahi with autotools build…
vxtls Feb 28, 2026
5c242b0
fix(guile-avahi): force AVAHI_GUILE_CROSS_COMPILING during build/inst…
vxtls Feb 28, 2026
53223ce
fix(steps-guix/guile-json-4.7.3): fix source link
vxtls Feb 28, 2026
34e201a
fix(guile-git): update checksum
vxtls Feb 28, 2026
c9d129b
fix(steps-guix/guile-json-4.7.3): fix source tag name
vxtls Feb 28, 2026
7840891
fix(guile-json): update checksum
vxtls Feb 28, 2026
fb146bb
fix(steps-guix/manifest): add some comments
vxtls Feb 28, 2026
3178f1f
Add Guix step including bootstrap bin, build guix, build iso and fix …
vxtls Mar 1, 2026
c8a9d23
fix(argp-standalone): correct sources entry spacing to keep URL/hash/…
vxtls Mar 1, 2026
564ad87
fix(libdaemon): let configure auto-detect triplet for legacy musl-inc…
vxtls Mar 1, 2026
7f6be11
fix(avahi): use gdbm backend and disable conflicting dbm option
vxtls Mar 1, 2026
9db4095
fix(kexec-fiwix): humm, not sure, harden initrd metadata checks and k…
vxtls Mar 1, 2026
d588f4d
fix(kexec-fiwix): NOT TESTED, JUST A TRY compute entry point from PT_…
vxtls Mar 1, 2026
57cd56a
fix(avahi): export dbus pkg-config flags and libdir for header discovery
vxtls Mar 1, 2026
11c4dd8
fix(kexec-fiwix): restore stable entry translation and keep interrupt…
vxtls Mar 1, 2026
f30c20b
fix(kernel-bootstrap): restore kexec-fiwix baseline and move post-fiw…
vxtls Mar 1, 2026
e08abd6
fix(payload-import): replace unsupported kaem elif with nested if for…
vxtls Mar 1, 2026
aa36ef0
fix(dbus): use relative CMake install dirs so dbus-1.pc exports valid…
vxtls Mar 1, 2026
9fc53eb
fix(payload-import): remove early-stage test/elif usage and use kaem-…
vxtls Mar 1, 2026
1b01d22
fix(payload-import): run import after bash+device-node setup and remo…
vxtls Mar 1, 2026
500bce6
fix(payload-import): build static binary to remove /mes/loader runtim…
vxtls Mar 2, 2026
e20afe6
fix(gawk): patch bundled getopt prototypes to match modern libc decla…
vxtls Mar 2, 2026
beb9fb1
refactor+docs(payload.img, payload.img discovery): split offline dist…
vxtls Mar 2, 2026
5e4c887
fix(gawk-4.2.1): add C23-compatible readfunc prototype patch
vxtls Mar 2, 2026
5eac7ed
fix(guix-bootstrap): wire mes seeds into bootstrap.scm and align xz s…
vxtls Mar 2, 2026
17e88a8
fix(payload-discovery): mount proc and probe devices from /proc/parti…
vxtls Mar 2, 2026
45ba6a3
fix(gawk): add typed read_func prototype patch and validate with dry-…
vxtls Mar 2, 2026
6b37393
fix(payload-import): remove mount(8) dependency and import by kernel-…
vxtls Mar 2, 2026
c37acaa
fix(gawk): patch mpfr callback prototype to match mpfr function signa…
vxtls Mar 2, 2026
25f8311
fix(payload-import): align with pre-util-linux toolchain by removing …
vxtls Mar 2, 2026
de83785
fix(import-payload): detect payload strictly from /proc/partitions ma…
vxtls Mar 2, 2026
96765e2
fix(gawk): patch legacy strtod declaration to modern prototype in node.c
vxtls Mar 2, 2026
38f8769
fix(payload-import): mount proc via syscall in payload-import and enu…
vxtls Mar 2, 2026
e821482
fix(payload-import): add precise read/write/truncation diagnostics an…
vxtls Mar 2, 2026
197f175
fix(manifest): run import_payload after move_disk so payload extracti…
vxtls Mar 2, 2026
e19f13f
fix(gawk): make strtod patch apply cleanly by dropping obsolete decla…
vxtls Mar 2, 2026
f2a151e
fix(payload-import): ASM only enable for i386 fiwix/linux, undefined …
vxtls Mar 2, 2026
6dfc8d5
fix(bzip2): install artifacts to both /usr and bootstrap-seeds
vxtls Mar 2, 2026
afec884
fix(guix-bzip2): enforce static install and validate runnable bzip2 d…
vxtls Mar 3, 2026
9192004
fix(guix-bzip2): install via DESTDIR-prefixed PREFIX to avoid empty p…
vxtls Mar 3, 2026
85c3890
fix(kernel-bootstrap): unify external raw container flow and remove d…
vxtls Mar 3, 2026
95b25af
fix(kernel-bootstrap): place pre-network distfiles back into init ima…
vxtls Mar 3, 2026
b1642d6
refactor(generator): enforce manifest-only distfile copy in kernel-bo…
vxtls Mar 3, 2026
d1b466c
fix(generator): enforce stage-bounded distfile sets before curl/impor…
vxtls Mar 3, 2026
1009bfa
fix(bash-4.4.23-1): add C23 list function prototype patch and enable …
vxtls Mar 3, 2026
4e67035
fix(bash-4.4.23-1): make SIGRETURN robust on linux when VOID_SIGHANDL…
vxtls Mar 3, 2026
7253e3f
feat(qemu-ci): scope internal breakpoints as steps:NAME or steps-guix…
vxtls Mar 3, 2026
b733cf2
fix(stage0-resume): avoid false /init guix handoff check and preserve…
vxtls Mar 3, 2026
35a570b
fix(mirror): bind file mirror server to 0.0.0.0 for qemu guest access…
vxtls Mar 4, 2026
8440096
fix(stage0-resume): wrap jump-resume init with dhcpcd bring-up before…
vxtls Mar 4, 2026
f11bbe6
refactor(resume-init): move network bring-up into generated jump init…
vxtls Mar 4, 2026
1d9c9b9
fix(bash-4.4.23-1): update mkbuiltins prototypes and definitions for C23
vxtls Mar 4, 2026
9d1870c
refactor(stage0-image): remove python-side resume network patching logic
vxtls Mar 4, 2026
f21234e
fix(bash-4.4.23-1): complete mkbuiltins prototype fixes for C23
vxtls Mar 4, 2026
1d73a27
feat(steps-guix): upgrade bootstrap bash seed from 4.4.23 to 5.3
vxtls Mar 4, 2026
d344675
chore(steps-guix): remove deprecated bash-4.4.23-1 step
vxtls Mar 4, 2026
2778fe4
fix(env): include /bin in PATH so steps-guix script chaining can find…
vxtls Mar 4, 2026
82124df
refactor(stage0-breakpoint): use deterministic steps-guix refresh pol…
vxtls Mar 4, 2026
0669db4
fix(steps-guix): install bash-5.3-1 to /usr/bin in addition to seed p…
vxtls Mar 4, 2026
893a320
fix(network): deterministically restore qemu networking before src_ge…
vxtls Mar 4, 2026
ea69ae9
fix(steps-guix): support explicit build dir for source-less seed pack…
vxtls Mar 4, 2026
4f0f503
fix(steps-guix): make seed packaging scripts create their own build d…
vxtls Mar 4, 2026
8160430
fix(steps-guix): add libffi build before guile-2.2.4 and wire explici…
vxtls Mar 4, 2026
c29c92b
fix(steps-guix): add libunistring and gc builds before guile-2.2.4
vxtls Mar 4, 2026
74ff570
fix(stage0-image): always refresh steps trees into stage0-work image …
vxtls Mar 4, 2026
886d5a5
fix(stage0-image): sync steps trees in-place to preserve generated re…
vxtls Mar 4, 2026
d5fc082
fix(stage0-image): preserve runtime /steps/env while syncing step sou…
vxtls Mar 4, 2026
6d8c5da
fix(guile-2.2.4): use off_t for sendfile offset to match off_t* API
vxtls Mar 4, 2026
8ad179e
fix(steps-guix): build mes-minimal seed from canonical /usr/bin/mes-m…
vxtls Mar 4, 2026
c90d9da
fix(boot): add minimal early mounts for /dev and /proc in stage0 resu…
vxtls Mar 4, 2026
af44f12
fix(guix-hash-compat): generate runtime config and invoke guix hash v…
vxtls Mar 5, 2026
3d35277
fix(guix-hash-compat): replace fragile guile wrapper with determinist…
vxtls Mar 5, 2026
4abc97d
fix(steps-guix): merge guix-1.5.0 improve stage into pass1 build path
vxtls Mar 5, 2026
5cea0ba
fix(guix-1.5.0): split unstable mes hunks into dedicated patch and re…
vxtls Mar 5, 2026
bd208bf
fix(guix-1.5.0): set deterministic pkg-config and guile-3.0 flags in …
vxtls Mar 5, 2026
3f01d14
fix(guix-runtime): pin guile/gnutls runtime search paths and drop sta…
vxtls Mar 5, 2026
451fdc6
fix(guix-gnutls): align guile-gnutls build flags and pin GNUTLS exten…
vxtls Mar 5, 2026
9205c2b
fix(guile-gnutls): use static guile pkg-config libs for configure lin…
vxtls Mar 5, 2026
ac79f9e
fix(guile-gnutls): make gnutls integration fully static by initializi…
vxtls Mar 5, 2026
75e153d
fix(guile-gnutls): pass explicit guile/gnutls cflags to make and fail…
vxtls Mar 5, 2026
51019e2
fix(guile-gnutls): accept empty gnutls pkg-config cflags and continue…
vxtls Mar 5, 2026
d150b48
refactor(guile-gnutls): use default compile/install while preserving …
vxtls Mar 5, 2026
bbd4804
fix(guile-gnutls): use deterministic shared/static init gating via bu…
vxtls Mar 5, 2026
c2ecd88
fix stupid gnutls
vxtls Mar 5, 2026
56f5154
fix(guile-gnutls): move static guile/artifact generation into automak…
vxtls Mar 5, 2026
2cb4ec5
fix(guile-gnutls): make static profile build-system native by disabli…
vxtls Mar 5, 2026
7783577
fix(guile-gnutls): keep guile include flags available for snarf in st…
vxtls Mar 5, 2026
a3acfbe
fix(guile-gnutls): inline static gnutls.scm sed rules to avoid make r…
vxtls Mar 5, 2026
9055660
fix(guile-git): link against static libgit2 explicitly
vxtls Mar 5, 2026
bbe8099
debug(guix): for debugging surface raw guile module probe failures be…
vxtls Mar 5, 2026
442e3a2
fix(guile): build shared libgit2 for guile-git runtime loading
vxtls Mar 5, 2026
079b6fd
fix(guile): validate guile-gcrypt before guix configure, fix
vxtls Mar 6, 2026
913ebb3
fix(guix): avoid broken guile-gcrypt sha256 configure probe
vxtls Mar 6, 2026
f812212
fix(guix): keep guile-gcrypt check semantics unchanged
vxtls Mar 6, 2026
e9c2946
fix(init): drop to rescue shell instead of panicking on build failure
vxtls Mar 6, 2026
29695ad
fix(guix): patch release configure for guile-gcrypt check
vxtls Mar 6, 2026
ba7aec9
fix(guix): minimize guile-gcrypt configure probe
vxtls Mar 6, 2026
65314bc
fix(network): gate dhcp on get_network state across boots
vxtls Mar 6, 2026
c4666a1
fix(guile-modules): pin guile package install dirs to target libdir
vxtls Mar 6, 2026
567f4af
debug(guix): probe guile zlib before configure
vxtls Mar 6, 2026
786844a
fix(zlib): build shared and static libraries for guile-zlib
vxtls Mar 6, 2026
a1881ad
debug(guix): preprobe guile lzlib before configure
vxtls Mar 6, 2026
a1f3068
fix(rootfs): allow break-after checkpoints on first qemu kernel-boots…
vxtls Mar 6, 2026
c55f989
fix(rootfs): restrict break-after to stage0-image resume path and res…
vxtls Mar 6, 2026
c921403
fix(rootfs): reuse stage0 work-image flow for fresh qemu break-after …
vxtls Mar 6, 2026
666d979
fix(rootfs): support fresh qemu break-after by injecting manifest jum…
vxtls Mar 6, 2026
5d12893
fix(zlib): keep bootstrap static and build shared zlib in steps-guix
vxtls Mar 7, 2026
be9b32b
feat(steps-guix): add guile-semver dependency required by guix before…
vxtls Mar 7, 2026
076a709
fix(resume): regenerate step scripts on stage0-image boot so manifest…
vxtls Mar 7, 2026
b18cba4
fix(resume): regenerate and realign guix script entrypoint; suffix du…
vxtls Mar 7, 2026
adcd73b
fix(resume): preserve stage0-image incremental continuation by remapp…
vxtls Mar 7, 2026
c124c08
refactor(rootfs): [MAY BRAKE]stage0 resume updater to deterministic i…
vxtls Mar 7, 2026
aea0e5c
fix(guix-1.5.0): force generic autotools commands instead of version-…
vxtls Mar 7, 2026
6d0db68
fix(guix-1.5.0): regenerate autotools files and wire kernel-toolchain…
vxtls Mar 8, 2026
bab05bb
fix(guix-1.5.0): use static guile pkg-config libs and stable libs ord…
vxtls Mar 8, 2026
74da573
fix(rootfs): persist semantic internal-ci resume target instead of re…
vxtls Mar 8, 2026
49537b4
fix(guile-avahi): build static Guile bindings instead of dlopenable a…
vxtls Mar 8, 2026
aa72935
fix(guix): set FHS local state path for daemon socket
vxtls Mar 8, 2026
2b16d6d
fix(runtime): mount devpts for pty support
vxtls Mar 8, 2026
4e12d7a
fix(runtime): verify tty and devpts before running guix
vxtls Mar 8, 2026
f8b6d25
fix(guix-pull): rebuild local patched channel and use actual git branch
vxtls Mar 9, 2026
754aa8c
chore(guile-lzlib): upgrade to 0.3.0
vxtls Mar 9, 2026
66a6665
fix(guile-semver): use git-generated tarball checksum
vxtls Mar 9, 2026
6b8aa73
fix(guile): preserve gnutls init in final static guile wrapper
vxtls Mar 9, 2026
d0c97c1
fix(boot): avoid ext3 rootfstype and remount root readonly before kexec
vxtls Mar 9, 2026
7715b0b
fix(guile-lzlib): remove useless checking
vxtls Mar 9, 2026
62478d4
fix: remove useless checnks
vxtls Mar 10, 2026
173db71
fix(guix-pull): pass explicit channels file to avoid missing guix cha…
vxtls Mar 11, 2026
a3878a9
fix(guix): add --disable-authentication
vxtls Mar 11, 2026
132a43d
fix(guile-gnutls): drop static-only patches and rely on shared bindings
vxtls Mar 11, 2026
0a00b29
fix(guile-3.0.11): enable shared libs
vxtls Mar 11, 2026
7c42824
fix(guix-1.5.0): link against shared libguile for guile-gnutls runtim…
vxtls Mar 12, 2026
fc1cf31
fix(guix-bootstrap): allow offline distfiles in perform-download
vxtls Mar 12, 2026
f786342
fix(guix-pull): create /etc/services before daemon startup
vxtls Mar 12, 2026
85a0ff7
fix(guix-1.5.0): make local-download patch compatible with default -p…
vxtls Mar 13, 2026
1950175
fix(guix-bootstrap): serve local distfiles via fixed localhost HTTP m…
vxtls Mar 13, 2026
96c2cfb
Merge branch 'fosslinux:master' into live-bootstrap-to-guix
vxtls Mar 13, 2026
4324f23
fix(guix): add dedicated build step to compile and run loopback bind …
vxtls Mar 14, 2026
20eb963
fix(guile-bootstrap): force static linking for guile 2.2.4 seed
vxtls Mar 14, 2026
b8785e3
fix(guile-bootstrap): mirror guix static guile link strategy
vxtls Mar 14, 2026
c742563
fix(payload): switch raw payload metadata fields from u32 to u64
vxtls Mar 15, 2026
c0e84ad
docs(payload): specify UTF-8 filename encoding and define name_len as…
vxtls Mar 15, 2026
8779eb4
fix(seed): update script-generator x86 checksum to new digest
vxtls Mar 15, 2026
c75e951
fix(mirror): generalize sources scan to steps-* extension points
vxtls Mar 15, 2026
4dc0135
refactor(rootfs): [not tested, big change]replace guix-specific flag …
vxtls Mar 15, 2026
8917b7b
refactor(extra-builds): remove build_guix_also flag and legacy compat…
vxtls Mar 15, 2026
81815f3
fix(loopback-bind-127001): override src_get/src_unpack for source-les…
vxtls Mar 17, 2026
962bc74
fix(network): run IP bringup for all non-chroot boots
vxtls Mar 18, 2026
277de65
fix(linux-6.12.74): use files/config.txt as .config instead of defconfig
vxtls Mar 18, 2026
67384bf
fix(steps-guix): reopen interactive console after linux64 kexec
vxtls Mar 18, 2026
80f4061
fix(linux64-jump): disable console blanking after kexec
vxtls Mar 18, 2026
3583176
fix(loopback-bind-127001): enable feature macros for net ifreq symbols
vxtls Mar 18, 2026
6c83ef3
fix(tar-1.30): use execvp(sh, argv) in system.c for /bin/sh-less Guix…
vxtls Mar 18, 2026
8bed6f4
fix(guile-2.2.4): make scm_system use execvp(sh,-c,cmd) for /bin/sh-i…
vxtls Mar 19, 2026
6a5ba94
fix(guile-2.2.4): harden scm_system execvp(sh) path and preserve wait…
vxtls Mar 19, 2026
a20351b
fix(guile-2.2.4): add fallback WAIT_ANY and LC_* constants in posix.c…
vxtls Mar 19, 2026
2816e89
fix(guile-2.2.4): remove fixnums range-guard assertion blocks in rnrs…
vxtls Mar 19, 2026
00e3f91
fix(argp): remove debugging code
vxtls Mar 19, 2026
4f66a58
fix(bash): remove debugging code
vxtls Mar 19, 2026
8c41939
refactor(guix-1.5.0): drop redundant post-sed and post-patch grep che…
vxtls Mar 19, 2026
ef6abd5
refactor(guile-2.2.4): remove redundant post-sed grep assertions in p…
vxtls Mar 19, 2026
ea9c3d6
fix(guix-hash): chenge build sequence
vxtls Mar 19, 2026
d709331
fix(failure-flow): keep interactive shell handling in script-generato…
vxtls Mar 19, 2026
4af0359
refactor(script-generator): move resume init mount/network logic into…
vxtls Mar 19, 2026
3dcc4ec
fix(guix-daemon-and-pull): remove unneccessary dryrun
vxtls Mar 19, 2026
8bb3da9
refactor(guix-1.5.0): [not tested]split seed prep into improve step a…
vxtls Mar 19, 2026
4674fc5
fix(steps-guix/jump): remove check
vxtls Mar 19, 2026
c55fd54
fix(steps/break): remove debug code
vxtls Mar 19, 2026
a170296
fix(guix-daemon-and-pull): remove extra check
vxtls Mar 20, 2026
eb44754
fix(linux-6.12.74): Pass env vars to make as args instead of exporting
vxtls Mar 20, 2026
3817181
fix(steps-guix-jump): harden linux64 kexec handoff
vxtls Mar 20, 2026
c0e18b0
fix: install bash back
vxtls Mar 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions Payload_img_design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# live-bootstrap

This repository uses [`README.rst`](./README.rst) as the canonical main documentation.

## Kernel-bootstrap raw `external.img`

`external.img` is a raw container disk used in kernel-bootstrap mode when
`--external-sources` is set and `--repo` is unset.

### Why not put everything in the initial image?

In kernel-bootstrap mode, the first boot image is consumed by very early
runtime code before the system reaches the normal bash-based build stage.
That early stage has tight assumptions about memory layout and file table usage.

When too many distfiles are packed into the initial image, those assumptions can
be exceeded, which leads to unstable handoff behavior (for example, failures
around the Fiwix transition in QEMU or on bare metal).

So the design is intentionally split:

- Initial image: only what is required to reach `improve: import_payload`
- `external.img`: the rest of distfiles

This is not a patch-style workaround. It is a two-phase transport design that
keeps early boot deterministic and moves bulk data import to a stage where the
runtime is robust enough to process it safely.

### Why import from an external image and copy into main filesystem?

Because the bootstrap still expects distfiles to end up under the normal local
path (`/external/distfiles`) for later steps. `external.img` is used as a
transport medium only.

The flow is:

1. Boot minimal initial image.
2. Reach `improve: import_payload`.
3. Detect the external container disk by magic (`LBPAYLD1`) across detected block devices.
4. Copy payload files into `/external/distfiles`.
5. Continue the build exactly as if files had been present locally all along.

### Format

- Magic: `LBPAYLD1` (8 bytes)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why a custom format, rather than tar, wim or something similar?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reduce TCB, therefore, a pure byte stream is used

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's TCB?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trusted Computing Base, Google's explanation: refers to the totality of hardware, firmware, and software components critical to a system's security, enforcing its security policy. If any TCB component is compromised, the system's integrity is jeopardized. It includes kernels, memory, and trusted processes, shielded by a security perimeter
So, clearly, this includes file systems and the tools used to create them.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As above - we already have a dependency on tar, so I don't see how having the payload be a tarball would be TCB-relevant.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's our dependency on tar?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The source code we use comes in tarballs, the repo package format is tar-based, etc.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, yes, but the system preparing live-bootstrap doesn't need tar, and theoretically we could not use tarballs...

- Then: little-endian `u64` file count
- Repeated entries:
- little-endian `u64` name length
- little-endian `u64` file size
- file name string, encoded as UTF-8 bytes (no terminator)
- file bytes

`name length` is the number of bytes in the UTF-8 encoded file name (not the number of Unicode code points).

The importer probes detected block devices and selects the one with magic `LBPAYLD1`.

### Manual creation without Python

Prepare `external.list` as:

```text
<archive-name> <absolute-path-to-archive>
```

Then:

```sh
cat > make-payload.sh <<'SH'
#!/bin/sh
set -e
out="${1:-external.img}"
list="${2:-external.list}"

write_u64le() {
v="$1"
printf '%016x' "$v" | sed -E 's/(..)(..)(..)(..)(..)(..)(..)(..)/\8\7\6\5\4\3\2\1/' | xxd -r -p
}

count="$(wc -l < "${list}" | tr -d ' ')"
: > "${out}"
printf 'LBPAYLD1' >> "${out}"
write_u64le "${count}" >> "${out}"

while read -r name path; do
[ -n "${name}" ] || continue
size="$(wc -c < "${path}" | tr -d ' ')"
name_len="$(printf '%s' "${name}" | wc -c | tr -d ' ')"
write_u64le "${name_len}" >> "${out}"
write_u64le "${size}" >> "${out}"
printf '%s' "${name}" >> "${out}"
cat "${path}" >> "${out}"
done < "${list}"
SH
chmod +x make-payload.sh
./make-payload.sh external.img external.list
```

Attach `external.img` as an extra raw disk in QEMU, or as the second disk on bare metal.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we support this as a partition on the same disk as the srcfs, rather than requiring a second physical disk?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would be a fairly invasive change, and should certainly not be in this PR.

(I think this can/should be done, but it will require a fair bit of careful effort)


### When it is used

- Used in kernel-bootstrap with `--external-sources` and without `--repo`.
- Not used with `--repo` (that path still uses an ext filesystem disk).
- Without `--external-sources` and without `--repo`, there is no second disk:
the initial image only includes distfiles needed before `improve: get_network`,
and later distfiles are downloaded from mirrors.
- `--extra-builds=guix` increases container contents (includes post-early `steps-guix`
sources), but does not change the mechanism.
83 changes: 76 additions & 7 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -63,17 +63,86 @@ Without using Python:

* *Only* copy distfiles listed in ``sources`` files for ``build:`` steps
manifested before ``improve: get_network`` into this disk.
* Optionally (if you don't do this, distfiles will be network downloaded):

* On the second image, create an MSDOS partition table and one ext3
partition.
* Copy ``distfiles/`` into this disk.
* Run QEMU, with 4+G RAM, optionally SMP (multicore), both drives (in the
order introduced above), a NIC with model E1000
* In kernel-bootstrap mode with ``--external-sources`` (and no ``--repo``),
use the second image as ``external.img``.
``external.img`` is a raw container (not a filesystem) used to carry the
distfiles that are not needed before ``improve: import_payload``.
In other words, the first image only carries the minimal set needed to
reach the importer; the rest of the distfiles live in ``external.img``.

* Header magic: ``LBPAYLD1`` (8 bytes).
* Then: little-endian ``u64`` file count.
* Repeated for each file: little-endian ``u64`` name length,
little-endian ``u64`` file size, UTF-8 encoded file name bytes
(no terminator), raw file bytes.
* ``name length`` is the number of UTF-8 bytes (not Unicode code points).

* With ``--repo``, the second disk remains an ext3 distfiles/repo disk.
* Without ``--external-sources`` and without ``--repo``, no second disk is
used: the initial image includes only pre-network distfiles, and later
distfiles are downloaded from configured mirrors after networking starts.
* Run QEMU, with 4+G RAM, optionally SMP (multicore), both drives (main
builder image plus external image, when a second image is used), a NIC with model E1000
(``-nic user,model=e1000``), and ``-machine kernel-irqchip=split``.
c. **Bare metal:** Follow the same steps as QEMU, but the disks need to be
two different *physical* disks, and boot from the first disk.

Manual raw ``external.img`` preparation
---------------------------------------

The following script creates a raw ``external.img`` from a manually prepared
file list. This is equivalent to what ``rootfs.py`` does for kernel-bootstrap
with ``--external-sources`` (and no ``--repo``).

1. Prepare an ``external.list`` with one file per line, formatted as:
``<archive-name> <absolute-path-to-archive>``.
2. Run:

::

cat > make-payload.sh <<'EOF'
#!/bin/sh
set -e
out="${1:-external.img}"
list="${2:-external.list}"

write_u64le() {
v="$1"
printf '%016x' "$v" | sed -E 's/(..)(..)(..)(..)(..)(..)(..)(..)/\8\7\6\5\4\3\2\1/' | xxd -r -p
}

count="$(wc -l < "${list}" | tr -d ' ')"
: > "${out}"
printf 'LBPAYLD1' >> "${out}"
write_u64le "${count}" >> "${out}"

while read -r name path; do
[ -n "${name}" ] || continue
size="$(wc -c < "${path}" | tr -d ' ')"
name_len="$(printf '%s' "${name}" | wc -c | tr -d ' ')"
write_u64le "${name_len}" >> "${out}"
write_u64le "${size}" >> "${out}"
printf '%s' "${name}" >> "${out}"
cat "${path}" >> "${out}"
done < "${list}"
EOF
chmod +x make-payload.sh
./make-payload.sh external.img external.list

3. Attach ``external.img`` as an additional raw disk when booting in QEMU, or
as the second physical disk on bare metal.

Notes:

* ``external.img`` raw container mode is used with ``--external-sources`` (and
no ``--repo``). With ``--extra-builds=guix``, the container content is larger
because it also includes post-early sources from ``steps-guix``.
* Without ``--external-sources`` and without ``--repo``, there is no second
image. The initial image only includes distfiles needed before
``improve: get_network``; later distfiles are downloaded from mirrors.
* The runtime importer identifies the correct disk by checking the magic
``LBPAYLD1`` on each detected block device, not by assuming a device name.

Mirrors
-------

Expand Down
Loading
Loading