Files
sergio 762bf95dfd feat(arje): arje-absorb — absorbe otros inits a una Semilla brahman
Nuevo crate `crates/init/arje-absorb`: lee la configuración de un init
clásico y la traduce a una Tarjeta Semilla (Card JSON) con cada
servicio como hija genesis de arje-zero. El paso «absorber» de la
migración a arje — para no perder los servicios al cambiar de init.

- Absorbers: sysvinit (/etc/inittab), runit (runsvdir o /etc/sv),
  dinit (/etc/dinit.d), openrc (/etc/runlevels). Autodetección.
- Modelo intermedio ForeignService → Card vía brahman-card (validado).
- `--with-carmen`: agrega carmen-dm (gestor de login gráfico).
- CLI: --from/--root/--output/--label/--with-carmen. 24 tests, clippy
  limpio.

`scripts/migrate-to-arje.sh`: orquesta absorber → validar → (carmen:
compila+instala mirada dinámico) → install-arje-as-init.sh. El init
viejo queda intacto; arje se elige en GRUB. --dry-run no toca nada.

systemd no se absorbe (units no son texto trivial) — para systemd
sigue la capa de shims + seeds/arje-host.card.json.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 00:40:34 +00:00
..

arje-absorb

Absorbe la configuración de otro init y la traduce a una Tarjeta Semilla brahman: una Card JSON con cada servicio como hija genesis de arje-zero.

Es el paso «absorber» de la migración a arje — para no perder los servicios del sistema al cambiar de init. Lo usa scripts/migrate-to-arje.sh.

Inits soportados

init qué lee servicio → Card
sysvinit /etc/inittab respawn → daemon supervisado; wait/once/sysinit → one-shot
runit el runsvdir activo (o /etc/sv) cada script run → daemon supervisado (calce 1:1)
dinit /etc/dinit.d/* type=process/bgprocess → daemon; scripted → one-shot
openrc /etc/runlevels/{sysinit,boot,default} /etc/init.d/<svc> start → one-shot

systemd no se absorbe — sus units no son un formato de texto trivial. Para systemd ya existe la capa de shims (crates/compat/) y la seed seeds/arje-host.card.json.

Uso

# autodetecta el init y emite la Semilla a stdout
arje-absorb

# explícito, a un archivo, agregando el gestor de login gráfico
arje-absorb --from openrc --output /ente/seed.card.json --with-carmen

# absorber otra raíz (un chroot, una imagen montada)
arje-absorb --root /mnt/sistema --from runit

Opciones: --from <init> (def. auto), --root <dir> (def. /), --output <f> (def. - = stdout), --label <s>, --with-carmen.

Lo que NO hace

La Semilla absorbida conserva el comportamiento del init viejo: los servicios corren sin aislar (namespaces en false, FS read-write, red full). No endurece el sandbox — eso se hace después, Card por Card.

La absorción de OpenRC es superficial: envuelve /etc/init.d/<svc> start como one-shot (los scripts de OpenRC son shell completo, no se parsean — el daemon lo deja en segundo plano OpenRC mismo, no arje). runit y dinit, en cambio, dan supervisión real porque su run/command es un proceso en primer plano.

Revisá la Semilla antes de instalarla como /ente/seed.card.json.