Instalar un tema visual como WhiteSur (estilo macOS) en XFCE es una tarea de bajo riesgo. Al fin y al cabo, los scripts solo escriben en la carpeta de usuario (~/.themes). Si algo sale mal, basta con borrar la carpeta y elegir otro tema en Apariencia.
Sin embargo, esta instalación es la excusa perfecta para aprender y practicar dos herramientas vitales en FreeBSD con ZFS: los snapshots (fotografías del sistema) y los Boot Environments (entornos de arranque). Dominar esto te salvará el día antes de un freebsd-update, un cambio de controladores o una actualización de paquetes.
Nivel 1: Snapshots ZFS (El "deshacer" instantáneo)
Un snapshot en ZFS es una copia de solo lectura del estado de un dataset en un momento exacto. Son instantáneos, no duplican la información y son tu primera línea de defensa.
1. Crear el snapshot (antes de instalar el tema)
Como el tema se instala en tu directorio personal, basta con hacer un snapshot solo del home. Es rápido y quirúrgico:
sudo zfs snapshot -r zroot/usr/home@antes-whitesur
Si prefieres proteger absolutamente todo el sistema, puedes hacer un snapshot recursivo del pool (aunque para un tema no es necesario):
sudo zfs snapshot -r zroot@antes-whitesur
2. La trampa del rollback recursivo
Aquí hay un matiz que confunde a mucha gente: zfs snapshot -r sí es recursivo (baja a todos los hijos), pero zfs rollback -r no lo es. En el rollback, la opción -r solo destruye snapshots intermedios del mismo dataset, no se aplica a los hijos.
Por lo tanto, si hiciste el snapshot solo del home, revertir es tan sencillo como:
sudo zfs rollback -r zroot/usr/home@antes-whitesur
Reinicia XFCE (o el equipo) y tu carpeta personal volverá al estado exacto anterior a la instalación del tema.
zroot y quieres revertir todo, tendrás que hacerlo dataset por dataset (raíz, home, etc.). En el anexo final te dejo un script que automatiza esta tarea.
Nivel 2: Boot Environments (El "arranque seguro")
Los Snapshots son geniales, pero si el problema afecta al sistema base (por ejemplo, un fallo de arranque), necesitas algo más potente. Aquí entran los Boot Environments (BE): clones completos y arrancables de tu sistema raíz.
En FreeBSD 14.5 no necesitas instalar nada: bectl ya viene incluido en el sistema base. (Aunque existe beadm en los repositorios de paquetes, bectl es la opción nativa y más directa).
1. Crear un entorno de arranque
Antes de aplicar cambios arriesgados (o instalar tu tema), crea un BE:
sudo bectl create antes-whitesur
Puedes verificar que se ha creado y cuál está activo:
bectl list
2. Simulacro de desastre y recuperación
- Instalas el tema y, por lo que sea, el entorno gráfico se rompe o el sistema no arranca.
- Reinicias el equipo.
- En el menú de arranque de FreeBSD (el cargador), seleccionas el entorno
antes-whitesur. ¡Listo! El sistema arranca exactamente como estaba antes. - Si quieres que este sea el entorno por defecto de ahora en adelante, ejecuta:
sudo bectl activate antes-whitesur
El BE con el tema roto seguirá ahí por si quieres arrancarlo para investigar, hasta que decidas eliminarlo con sudo bectl destroy.
El flujo de trabajo recomendado (Paso a paso)
Si quieres tener ambas redes de seguridad antes de personalizar tu sistema:
- Snapshot rápido:
sudo zfs snapshot -r zroot/usr/home@antes-whitesur - Red de seguridad total:
sudo bectl create antes-whitesur - Instala y configura tu tema WhiteSur.
- Si solo falla la apariencia: Haz un rollback del home (
zfs rollback) y reinicia XFCE. - Si el sistema entero se vuelve inestable: Reinicia y elige el BE
antes-whitesuren el menú de arranque.
Anexo: Script para rollback recursivo de ZFS
Si alguna vez necesitas revertir un snapshot recursivo de todo el pool ZFS (por ejemplo, antes de una actualización mayor del sistema), hacerlo dataset por dataset a mano es un tedio. Aquí tienes un pequeño script en sh que lista los datasets, comprueba si tienen el snapshot y los revierte uno por uno, con modo de simulación (--dry-run) para ver qué hará antes de tocar nada.
#!/bin/sh
# Guarda esto como rollback-zfs.sh y dale permisos: chmod +x rollback-zfs.sh
# Uso: sudo ./rollback-zfs.sh zroot antes-whitesur [--dry-run]
set -u
POOL="${1:-}"
SNAP_NAME="${2:-}"
DRY_RUN="no"
for arg in "$@"; do
[ "$arg" = "--dry-run" ] && DRY_RUN="si"
done
if [ -z "$POOL" ] || [ -z "$SNAP_NAME" ]; then
echo "Uso: $0 <pool> <nombre_snapshot> [--dry-run]"
exit 1
fi
DATASETS=$(zfs list -H -r -o name "$POOL" 2>/dev/null)
if [ -z "$DATASETS" ]; then
echo "Error: No se encontraron datasets en '$POOL'."
exit 1
fi
if [ "$DRY_RUN" = "si" ]; then
echo "=== MODO SIMULACIÓN (dry-run) ==="
else
echo "=== MODO REAL ==="
fi
echo "Pool: $POOL | Snapshot: @$SNAP_NAME"
echo ""
# Fase 1: Mostrar plan
PLAN_OK=0
for ds in $DATASETS; do
SNAP_FULL="${ds}@${SNAP_NAME}"
if zfs list -H -t snapshot -o name "$SNAP_FULL" >/dev/null 2>&1; then
echo "[PLAN] zfs rollback -r $SNAP_FULL"
PLAN_OK=$((PLAN_OK + 1))
else
echo "[SALTADO] ${ds} (no tiene el snapshot)"
fi
done
if [ "$DRY_RUN" = "si" ]; then
echo ""
echo "=== Simulación finalizada. ==="
exit 0
fi
# Fase 2: Confirmación y ejecución
printf "\n¿Ejecutar rollback real? [s/N]: "
read RESPUESTA
case "$RESPUESTA" in
s|S|si|SI) ;;
*) echo "Cancelado."; exit 0 ;;
esac
echo ""
for ds in $DATASETS; do
SNAP_FULL="${ds}@${SNAP_NAME}"
if zfs list -H -t snapshot -o name "$SNAP_FULL" >/dev/null 2>&1; then
echo -n "Revirtiendo ${ds} ... "
if zfs rollback -r "$SNAP_FULL" 2>/dev/null; then
echo "OK"
else
echo "FALLO (posible clonación o uso activo)"
fi
fi
done
echo "=== Proceso finalizado. Reinicia el equipo. ==="
zroot/ROOT/default), asegúrate de hacerlo desde el modo single-user (opción 2 del cargador de FreeBSD) para evitar conflictos con procesos activos.
No hay comentarios:
Publicar un comentario