bootstrap: empaquetar el builder con cpio --owner=root:root (copy-up de overlay)
El run en la VM, ya con overlay cargado, fallaba en `bwrap: Can't mkdir /opt/zig: Permission denied`. Diagnóstico (el rootfs resultó ser tmpfs, no ramfs, así que no era el fs): los ficheros del builder viajaban con el uid del que lo armó (1000). En la VM corren como root (0); el userns de bwrap mapea sólo 0→0, así que el 1000 queda SIN mapear y el copy-up de overlay no puede preservar el owner del /opt copiado ⇒ EACCES. En el host funciona porque bwrap mapea 1000→0. Fix: empaquetar el initramfs con `cpio --owner=root:root` (runbook §8c). Revierte el staging-a-tmpfs (era una hipótesis ramfs equivocada); rebuild-stage1 vuelve a HAMMER_ROOTFS=/toolchain y documenta el requisito de ownership. 28 tests verdes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
cf15995623
commit
890a37b473
@@ -512,6 +512,9 @@ export PATH=/toolchain/usr/bin:/toolchain/usr/sbin:/toolchain/bin:/toolchain/sbi
|
||||
# build (bwrap --tmp-overlay) lo exige ⇒ ENODEV sin esto. Lo cargamos del toolchain (insmod=kmod,
|
||||
# vermagic del kernel destino). Idempotente: si ya está, insmod falla y lo ignoramos.
|
||||
insmod /toolchain/lib/overlay.ko 2>/dev/null || true
|
||||
# NOTA: el initramfs debe empaquetarse con `cpio --owner=root:root`. Si los ficheros del toolchain
|
||||
# quedan con el uid del que armó el builder (p. ej. 1000), ese uid no está mapeado en el userns de
|
||||
# bwrap (que mapea sólo 0→0) y el copy-up de overlay falla con EACCES al crear /opt/zig. Ver §8c.
|
||||
export HAMMER_ROOTFS=/toolchain # el sandbox de build: el toolchain (variante a, desde Alpine)
|
||||
export HAMMER_WORK=/work
|
||||
export HAMMER_CACHE=
|
||||
|
||||
@@ -301,7 +301,10 @@ Sin `--work-cache`, el rebuild fetchea por red (la seed card trae `networking: f
|
||||
`scripts/boot-builder-vm.sh` encapsula esto (kernel, MEM, KVM configurables):
|
||||
|
||||
```sh
|
||||
( cd work/builder-rootfs && find . -print0 | cpio --null -o -H newc | gzip -1 ) > work/builder.cpio.gz
|
||||
# --owner=root:root es OBLIGATORIO: si los ficheros viajan con el uid del que armó el builder
|
||||
# (p. ej. 1000), ese uid no está mapeado en el userns de bwrap (mapea 0→0) y el copy-up de overlay
|
||||
# del sandbox falla con EACCES (`Can't mkdir /opt/zig: Permission denied`).
|
||||
( cd work/builder-rootfs && find . -print0 | cpio --null -o -H newc --owner=root:root | gzip -1 ) > work/builder.cpio.gz
|
||||
./scripts/boot-builder-vm.sh # o el qemu crudo:
|
||||
qemu-system-x86_64 -m 6144 -no-reboot -nographic -cpu Broadwell \
|
||||
-kernel /boot/vmlinuz-linux -initrd work/builder.cpio.gz -append "console=ttyS0 rdinit=/sbin/init"
|
||||
|
||||
Reference in New Issue
Block a user