#!/usr/bin/env bash # migrate-to-arje.sh — migra una máquina de su init actual a arje, # absorbiendo su configuración de servicios. # # QUÉ HACE: # 1. Compila arje-absorb (host). # 2. Autodetecta el init actual (o --from) y absorbe sus servicios en # una Tarjeta Semilla (out/arje-absorbed.card.json por default). # 3. (--with-carmen) agrega carmen-dm —el gestor de login gráfico— a # la Semilla y compila+instala mirada-compositor y mirada-greeter. # 4. Pasa la Semilla a install-arje-as-init.sh, que instala arje en # paralelo a tu init actual, con su propia entrada GRUB. # # Tu init actual queda INTACTO y sigue siendo el default — arje se elige # en GRUB. Revertir: sudo scripts/uninstall-arje.sh # # systemd NO se absorbe (sus units no son un formato de texto trivial); # para systemd usá install-arje-as-init.sh con seeds/arje-host.card.json. # Este script cubre sysvinit / runit / dinit / OpenRC. # # USO: # sudo scripts/migrate-to-arje.sh [opciones] # --from sysvinit|runit|dinit|openrc|auto (def: auto) # --with-carmen agrega el escritorio carmen como gestor de login # --seed-out dónde escribir la Semilla absorbida # (def: out/arje-absorbed.card.json) # --dry-run absorbe y valida, sin instalar nada (no necesita root) set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" FROM="auto" WITH_CARMEN=0 DRY_RUN=0 SEED_OUT="$REPO_DIR/out/arje-absorbed.card.json" while [ "$#" -gt 0 ]; do case "$1" in --from) FROM="${2:?--from necesita un valor}"; shift 2 ;; --with-carmen) WITH_CARMEN=1; shift ;; --seed-out) SEED_OUT="${2:?--seed-out necesita un valor}"; shift 2 ;; --dry-run) DRY_RUN=1; shift ;; -h|--help) cat <<'USAGE' migrate-to-arje.sh — migra una máquina a arje absorbiendo su init actual. --from sysvinit|runit|dinit|openrc|auto (def: auto) --with-carmen agrega el escritorio carmen como gestor de login --seed-out dónde escribir la Semilla absorbida --dry-run absorbe y valida sin instalar (no necesita root) USAGE exit 0 ;; *) echo "[migrate] opción desconocida: $1 (usá --help)" >&2; exit 2 ;; esac done cd "$REPO_DIR" if [ "$DRY_RUN" -eq 0 ] && [ "$(id -u)" -ne 0 ]; then echo "[migrate] hace falta root para instalar — o corré con --dry-run" >&2 exit 1 fi echo "[migrate] paso 1/4: compilar arje-absorb" cargo build --quiet --release -p arje-absorb ABSORB="$REPO_DIR/target/release/arje-absorb" echo "[migrate] paso 2/4: absorber el init actual (--from $FROM)" mkdir -p "$(dirname "$SEED_OUT")" ABSORB_ARGS=(--from "$FROM" --output "$SEED_OUT" --label "arje.seed.migrated") [ "$WITH_CARMEN" -eq 1 ] && ABSORB_ARGS+=(--with-carmen) "$ABSORB" "${ABSORB_ARGS[@]}" echo "[migrate] Semilla escrita en: $SEED_OUT" bash "$REPO_DIR/seeds/validate.sh" "$SEED_OUT" if [ "$DRY_RUN" -eq 1 ]; then cat <