Curso de Ubuntu 26.04 / Instalar Snap y gestionar permisos y actualizaciones

Los Snap de Ubuntu Server se gestionan mediante la línea de comandos, verificando la versión instalada, el proveedor, el canal, los permisos de conexión y el estado de actualización. Como se instalan por separado de los paquetes Deb de APT, incluso si se usa el mismo nombre de programa, se deben distinguir la ruta de ejecución, el formato de instalación y la ubicación de los datos.

Verificar primero el formato de la aplicación y el proveedor

Con snap info nombre_de_aplicación se leen el proveedor, la descripción y el canal, y con snap list se comparan los nombres instalados, la versión y el canal de seguimiento. La ruta de ejecución se verifica con el comando command -v. Tener el mismo nombre no significa que el mantenedor, la ruta de actualización y la ubicación de configuración sean iguales.

En la documentación de gestión de paquetes de Ubuntu Server se pueden verificar las rutas de instalación y gestión de APT y Snap.

snap list
snap changes
snap refresh --time

Se registran el nombre real, la versión y el canal de seguimiento de snap list. snap changes muestra el historial de operaciones como la instalación y la actualización. Que no haya actualizaciones en apt no significa que todas las aplicaciones Snap estén al día.

Probar con aplicaciones pequeñas para confirmar la instalación y ejecución

snap info hello-world
sudo snap install hello-world
hello-world

Compruebe antes si hello-world ya estaba instalado. Si lo estaba, conserve su instalación y canal. Revise el proveedor antes de instalar y observe la respuesta al ejecutar la aplicación. Si no aparece en PATH, compruebe /snap/bin y abra una sesión nueva si corresponde.

Comprender canales y niveles de aislamiento

Un canal puede combinar una línea de versiones (track), un nivel de riesgo y una rama temporal. Los niveles stable, candidate, beta y edge expresan distintos grados de preparación; no garantizan que una aplicación concreta esté libre de fallos. Empiece por el canal estable recomendado por su proveedor y registre el canal actual y una copia de sus datos antes de cambiarlo.

Los niveles de aislamiento de Snap delimitan el acceso al sistema. strict restringe recursos y habilita accesos específicos mediante interfaces; classic permite un acceso más amplio, semejante al de un paquete tradicional. devmode es un modo de desarrollo que permite accesos y registra problemas de interfaces. No añada --classic ni --devmode para resolver un fallo sin comprender qué acceso solicita la aplicación.

Verificar permisos de conexión y causas de fallos

Seleccione el nombre instalado en snap list y examine sus interfaces con snap connections NOMBRE_SNAP. Ante un problema con medios externos, revise tanto la interfaz como el montaje real y los permisos de archivos. Autorice solo el acceso necesario.

Después de verificar las interfaces necesarias en snap info NOMBRE_SNAP, snap connections NOMBRE_SNAP y en la documentación del proveedor, se conectan solo las mínimas y se prueba el nuevo acceso. Después de resolver problemas, se registra el estado original para poder desconectar solo las conexiones agregadas esta vez. Solo la conexión de interfaces no cambia los permisos de archivos del host.

Verificar las interfaces declaradas y restaurar solo las nuevas conexiones

Verifique en la documentación del proveedor qué interfaces son realmente necesarias en un Snap de servidor ya instalado. Compare la columna Plug·Slot de snap connections NOMBRE_SNAP con la salida de snap interface nombre_de_interfaz. El siguiente script recibe solo SNAP:PLUG y SLOT exactos de esa salida. Si no hay un plug declarado, no se adivinan permisos nuevos para conectarlos solo para práctica.

Guarde todo en ~/test-snap-interface.sh y ejecútelo con bash ~/test-snap-interface.sh SNAP_REAL:PLUG_REAL SLOT_REAL. No modifique las conexiones existentes y pruebe las nuevas conexiones documentadas en una terminal separada, luego presione Enter para desconectarlas. Las interfaces que permiten acceso a sistemas sensibles no se conectan en servidores en producción solo para prácticas.

set -eu
if [ "$#" -ne 2 ]; then
    printf 'Usage: bash test-snap-interface.sh SNAP:PLUG SLOT\n' >&2; exit 2
fi
plug=$1
slot=$2
app=${plug%%:*}
case "$plug" in *:*) ;; *) printf 'Use the exact Plug from snap connections.\n' >&2; exit 2 ;; esac
case "$slot" in *:*) ;; *) printf 'Use the exact Slot from snap connections.\n' >&2; exit 2 ;; esac
snap list "$app"
connections=$(LC_ALL=C snap connections "$app")
printf '%s\n' "$connections"
previous_slot=$(printf '%s\n' "$connections" | awk -v p="$plug" '$2 == p {print $3}')
case "$previous_slot" in
    -) ;;
    '') printf 'Declared plug not found; stop.\n' >&2; exit 1 ;;
    *) printf 'Already connected to %s; preserve it.\n' "$previous_slot"; exit 0 ;;
esac
restore() {
    original_status=$?
    trap - EXIT HUP INT TERM
    if ! connections=$(LC_ALL=C snap connections "$app"); then
        printf 'Cannot inspect the connection; verify restoration manually.\n' >&2; exit 1
    fi
    current_slot=$(printf '%s\n' "$connections" | awk -v p="$plug" '$2 == p {print $3}')
    case "$current_slot" in
        "$previous_slot") ;;
        "$slot")
            if ! sudo snap disconnect "$plug" "$slot"; then
                printf 'Restoration failed; inspect the connection.\n' >&2; exit 1
            fi
            ;;
        *) printf 'Unexpected connection state; inspect before disconnecting.\n' >&2; exit 1 ;;
    esac
    if ! connections=$(LC_ALL=C snap connections "$app"); then
        printf 'Cannot verify restoration; inspect the connection.\n' >&2; exit 1
    fi
    printf '%s\n' "$connections"
    restored_slot=$(printf '%s\n' "$connections" | awk -v p="$plug" '$2 == p {print $3}')
    if [ "$restored_slot" != "$previous_slot" ]; then
        printf 'Original connection state was not restored.\n' >&2; exit 1
    fi
    exit "$original_status"
}
trap restore EXIT
trap 'exit 129' HUP
trap 'exit 130' INT
trap 'exit 143' TERM
sudo snap connect "$plug" "$slot"
snap connections "$app"
read -r -p 'Run your documented app test in another terminal; press Enter to restore: ' answer

Confirme que la columna Slot cambia de - a la conexión solicitada y vuelve a - al terminar. El script desconecta únicamente ese destino y comprueba el estado restaurado. Si falla la desconexión o su verificación, devuelve un estado distinto de cero; también conserva el fallo de la práctica. Intenta restaurar ante Ctrl+C y señales de terminación, pero no puede garantizarlo ante un apagado o una terminación forzada. Registre el Plug, el Slot y el comando de restauración para revisarlos manualmente si hace falta.

Puede consultar los comandos de conexión y liberación en la guía oficial de uso de Snap.

Comprobar los datos después de actualizar, restaurar o eliminar

Puede solicitar sudo snap refresh NOMBRE_SNAP tras revisar el impacto en las aplicaciones y servicios activos. Según la documentación de actualizaciones y reversión de Snap, volver a una revisión puede restaurar datos asociados a ella, pero los datos compartidos entre revisiones pueden conservarse. No presuponga compatibilidad inversa del formato ni sustituya una copia de seguridad por snap revert.

Para limpiar solo la aplicación de práctica recién instalada, utilice sudo snap remove hello-world. Las instantáneas automáticas de datos que pueden generarse durante la eliminación normal se verifican con snap saved y se sigue una política de conservación separada. La eliminación de aplicaciones, la conservación de instantáneas y la eliminación de todos los archivos del directorio de inicio no son la misma operación.