gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1572Shell 203Rust 109Markdown 993728 Definiciones

install-image: el wrapper PID1 montaba /store y el diario en `vda` CABLEADO — en hcloud es `sda`

El wrapper que `install-image.sh` escribe como `/sbin/init` monta las dos particiones dedicadas
antes de hacer `exec` del init real, y las nombraba `/dev/vda3` y `/dev/vda4`. Eso vale sólo donde
el disco es virtio-blk. **En una caja Hetzner Cloud la controladora es virtio-SCSI y el disco es
`sda`** (medido: el driver de `sda` es `sd` y `virtio_scsi` está cargado), así que los dos montajes
fallaban.

Y fallaban del peor modo posible: **el sistema arranca igual**. Sólo que `hammerd` —que la semilla
de arje lanza con `--store /store --journal /var/lib/hammer/journal`— queda sin store y sin diario,
con dos líneas de aviso perdidas en el arranque. Es exactamente la regla 3 de CLAUDE.md: un ausente
falla ruidosamente, un vacío llega hasta el final diciendo que todo fue bien.

Ahora el disco se DERIVA de dónde está montada la raíz (`/proc/mounts`), que es la única fuente que
no depende ni del nombre del dispositivo ni de udev. Probado en los dos sentidos con /proc/mounts
sintéticos: `/dev/sda2` → `/dev/sda3`, `/dev/vda2` → `/dev/vda3`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RomoxEGZUhaT4pob1QSX5x

5c26a76ba0ac71332ce18ab27f45f5a24827db94 · por Sergio · (hace 1 mes) · padre c809a1786 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +11 −3

diff --git a/scripts/install-image.sh b/scripts/install-image.sh
index 711be9c9..bb3798b7 100755
--- a/scripts/install-image.sh
+++ b/scripts/install-image.sh
@@ -100,9 +100,17 @@ CFG
 rm -f "$ROOT_TREE/sbin/init"
 cat > "$ROOT_TREE/sbin/init" <<'INIT'
 #!/bin/sh
-# Wrapper PID1 (Etapa E/B3): el kernel monta vda2 como /; montamos las particiones dedicadas.
-/bin/busybox mount -t ext4 /dev/vda3 /store          || echo "init: no pude montar /store (/dev/vda3)"
-/bin/busybox mount -t ext4 /dev/vda4 /var/lib/hammer || echo "init: no pude montar /var/lib/hammer (/dev/vda4)"
+# Wrapper PID1 (Etapa E/B3): el kernel montó la raíz; montamos las particiones dedicadas.
+#
+# El disco NO se cablea. Decía `/dev/vda3` y `/dev/vda4`, y eso vale sólo donde el disco es virtio-blk:
+# en una caja Hetzner Cloud la controladora es virtio-SCSI y el disco es `sda`, así que los dos
+# montajes fallaban —el sistema arrancaba igual, pero hammerd quedaba SIN /store y SIN diario, que es
+# el modo de fallo que llega hasta el final diciendo que todo fue bien—. Se deriva de dónde está
+# montada la raíz, que es la única fuente que no depende del nombre del dispositivo ni de udev.
+_root=$(/bin/busybox awk '$2=="/" {print $1; exit}' /proc/mounts)
+_disk=${_root%[0-9]}
+/bin/busybox mount -t ext4 "${_disk}3" /store          || echo "init: no pude montar /store (${_disk}3)"
+/bin/busybox mount -t ext4 "${_disk}4" /var/lib/hammer || echo "init: no pude montar /var/lib/hammer (${_disk}4)"
 exec /usr/bin/arje-zero
 INIT
 chmod +x "$ROOT_TREE/sbin/init"