48e41331a1
- ente-journalctl: bin nuevo en ente-journald-compat. Lee ~/.local/share/ente/journal/index.log, parse timestamp:source:unit:sha, filtra --unit/--source/--since/--grep/--tail, restituye blobs desde CAS y formatea (pretty | --json). Default extrae MESSAGE de journald native. - compat-machined: org.freedesktop.machine1.Manager con ListMachines/GetMachine/Register/Terminate. Lista vacía + NotFound — apps que llaman al boot ya no quedan en timeout. - compat-polkit: query_policy() consulta el bus interno por el cap POLKIT_DECISION_IFACE con blob (pid_be|uid_be|action_id_utf8). Si hay proveedor su byte de respuesta gobierna; si no, default-allow. Anuncia POLKIT_SERVICE_IFACE (separado para evitar recursión). - docs/gnome-boot-test.md: procedimiento end-to-end para arrancar GNOME con ente-zero como PID 1 en QEMU. scripts/build-rootfs.sh overlaya binarios + symlink /init. scripts/run-vm.sh boot QEMU con KVM y GTK. docs/seed-gnome-test.k Card Semilla con genesis para 8 shims + dbus-daemon + NetworkManager + gdm. 8 compat-shims operativos en paralelo cubriendo: logind, hostnamed, timedated, localed, journald, resolved, polkit, machined. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
106 lines
3.1 KiB
Bash
Executable File
106 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# build-rootfs.sh — overlay del workspace sobre una imagen base.
|
|
#
|
|
# Inputs:
|
|
# $1 — path al rootfs (directorio montado o chroot pre-existente)
|
|
# $2 — path opcional a Card Semilla custom (.k o .json)
|
|
#
|
|
# Output: el rootfs queda con /init → ente-zero, binarios en
|
|
# /usr/local/bin, y la Semilla en /ente/seed.card.k.
|
|
|
|
set -euo pipefail
|
|
|
|
ROOTFS="${1:-}"
|
|
SEED_CARD="${2:-}"
|
|
|
|
if [[ -z "$ROOTFS" || ! -d "$ROOTFS" ]]; then
|
|
echo "Uso: $0 <rootfs-dir> [seed-card-path]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
WORKSPACE="$(cd "$(dirname "$0")/.." && pwd)"
|
|
echo "Workspace: $WORKSPACE"
|
|
echo "Rootfs: $ROOTFS"
|
|
|
|
# 1. Build release
|
|
echo "==> cargo build --workspace --release"
|
|
cd "$WORKSPACE"
|
|
cargo build --workspace --release
|
|
|
|
# 2. Copia binarios
|
|
echo "==> copiando binarios a $ROOTFS/usr/local/bin/"
|
|
mkdir -p "$ROOTFS/usr/local/bin"
|
|
BINS=(
|
|
ente-zero
|
|
ente-logind-compat
|
|
ente-hostnamed-compat
|
|
ente-timedated-compat
|
|
ente-localed-compat
|
|
ente-journald-compat
|
|
ente-resolved-compat
|
|
ente-polkit-compat
|
|
ente-machined-compat
|
|
ente-echo
|
|
ente-journalctl
|
|
)
|
|
for bin in "${BINS[@]}"; do
|
|
src="target/release/$bin"
|
|
if [[ ! -x "$src" ]]; then
|
|
echo "WARN: $src no existe, skip" >&2
|
|
continue
|
|
fi
|
|
cp "$src" "$ROOTFS/usr/local/bin/"
|
|
echo " + $bin"
|
|
done
|
|
|
|
# brainctl viene del example
|
|
if [[ -x "target/release/examples/brainctl" ]]; then
|
|
cp "target/release/examples/brainctl" "$ROOTFS/usr/local/bin/"
|
|
echo " + brainctl (example)"
|
|
fi
|
|
if [[ -x "target/release/examples/busctl" ]]; then
|
|
cp "target/release/examples/busctl" "$ROOTFS/usr/local/bin/ente-busctl"
|
|
echo " + ente-busctl (example, renombrado para no chocar con systemd-busctl)"
|
|
fi
|
|
|
|
# 3. Backup del init original
|
|
if [[ -e "$ROOTFS/sbin/init" && ! -L "$ROOTFS/sbin/init" ]]; then
|
|
if [[ ! -e "$ROOTFS/sbin/init.systemd" ]]; then
|
|
echo "==> backup /sbin/init → /sbin/init.systemd"
|
|
mv "$ROOTFS/sbin/init" "$ROOTFS/sbin/init.systemd"
|
|
fi
|
|
fi
|
|
|
|
# 4. /init y /sbin/init apuntan a ente-zero
|
|
echo "==> /init → ente-zero"
|
|
ln -sf /usr/local/bin/ente-zero "$ROOTFS/init"
|
|
ln -sf /usr/local/bin/ente-zero "$ROOTFS/sbin/init"
|
|
|
|
# 5. Card Semilla
|
|
mkdir -p "$ROOTFS/ente"
|
|
if [[ -n "$SEED_CARD" && -f "$SEED_CARD" ]]; then
|
|
cp "$SEED_CARD" "$ROOTFS/ente/seed.card.k"
|
|
echo "==> Semilla custom: $SEED_CARD"
|
|
else
|
|
cp "$WORKSPACE/docs/seed-gnome-test.k" "$ROOTFS/ente/seed.card.k" 2>/dev/null \
|
|
|| echo "WARN: docs/seed-gnome-test.k no existe; ente-zero sintetizará dev seed"
|
|
fi
|
|
|
|
# 6. Mascara servicios systemd que vamos a sustituir
|
|
echo "==> systemctl mask de servicios sustituidos (si systemd presente)"
|
|
chroot "$ROOTFS" systemctl mask \
|
|
systemd-logind.service \
|
|
systemd-hostnamed.service \
|
|
systemd-timedated.service \
|
|
systemd-localed.service \
|
|
systemd-journald.service \
|
|
systemd-resolved.service \
|
|
systemd-machined.service \
|
|
polkit.service \
|
|
2>/dev/null || echo " (chroot mask falló — OK si la imagen no tiene systemd)"
|
|
|
|
echo "==> rootfs listo en $ROOTFS"
|
|
echo
|
|
echo "Próximo paso:"
|
|
echo " scripts/run-vm.sh <imagen-base.qcow2>"
|