Ir al contenidoIr a la navegación de la página: página anterior [tecla de acceso p]/página siguiente [tecla de acceso n]
documentation.suse.com / Administración de SLE Micro mediante el comando transactional-update

Administración de SLE Micro mediante el comando transactional-update

Fecha de publicación: 12 Dic 2024
DESCRIPCIÓN

El comando transactional-update permite modificar un sistema de archivos de solo lectura. Las modificaciones se realizan en una instantánea independiente y no influyen en el sistema en ejecución hasta que se arranca en la instantánea.

INTENCIÓN

Desea administrar SLE Micro y gestionar sus actualizaciones, minimizando el riesgo de tiempo de inactividad del sistema debido a fallos de actualización y garantizando una fácil reversión.

ESFUERZO

Se tardan menos de 30 minutos en comprender el comando transactional-update.

OBJETIVO

Comprender cómo funciona transactional-update y cómo puede utilizarlo para administrar el sistema.

REQUISITOS
  • Una instancia en ejecución de SLE Micro

  • Privilegios de root

1 Actualizaciones transaccionales

1.1 ¿Qué son las actualizaciones transaccionales?

Para mantener el sistema operativo base estable y coherente, SLE Micro utiliza un sistema de archivos raíz de solo lectura. Por lo tanto, no puede realizar cambios directos en el sistema de archivos raíz, por ejemplo, mediante el comando zypper. En su lugar, SLE Micro introduce actualizaciones transaccionales que permiten aplicar uno o más cambios al sistema de archivos raíz.

El comportamiento por defecto de transactional-update es crear una nueva instantánea desde el sistema de archivos raíz actual después de cada cambio. Para aplicar los cambios, debe rearrancar el host. No es posible ejecutar el comando transactional-update varias veces sin volver a arrancar para añadir más cambios a la instantánea. Esta acción crea instantáneas independientes que no incluyen cambios de las instantáneas anteriores.

1.2 ¿Cómo funcionan las actualizaciones transaccionales?

Cada vez que llame al comando transactional-update para cambiar el sistema, ya sea para instalar un paquete, realizar una actualización o aplicar un parche, se llevarán a cabo las siguientes acciones:

Procedimiento 1: Modificación del sistema de archivos raíz
  1. Se crea una nueva instantánea de lectura y escritura a partir del sistema de archivos raíz actual o de una instantánea que haya especificado.

  2. Se aplican todos los cambios (actualizaciones, parches o instalación de paquetes).

  3. La instantánea vuelve al modo de solo lectura.

  4. Si los cambios se han aplicado correctamente, la nueva instantánea del sistema de archivos raíz se establece como instantánea por defecto.

  5. Después de rearrancar, el sistema arranca en la nueva instantánea.

1.3 Ventajas de las actualizaciones transaccionales

  • Son atómicas: la actualización se aplica solo si se completa correctamente.

  • Los cambios se aplican en una instantánea independiente, por lo que no influyen en el sistema en ejecución.

  • Los cambios se pueden deshacer fácilmente.

1.4 Entorno dentro del comando transactional-update

Cada vez que se ejecuta el comando transactional-update, los cambios se realizan en una nueva instantánea. El entorno de la instantánea puede ser distinto al de la shell desde la que se ejecuta el comando transactional-update. Por ejemplo, el directorio de trabajo actual ($PWD) no se define en el directorio desde el que se ejecuta transactional-update, sino que se define como /.

Desde la instantánea, no es posible acceder al directorio /var. Este directorio tampoco se incluye en la instantánea. Sin embargo, algunos directorios no se incluyen en la instantánea, pero se puede acceder a ellos dentro del entorno transactional-update; por ejemplo, el directorio /root.

2 Uso del comando transactional-update

El comando transactional-update permite la instalación atómica o la eliminación de actualizaciones. Las actualizaciones se aplican solo si se pueden instalar todas correctamente. transactional-update crea una instantánea del sistema y la utiliza para actualizar el sistema. Más adelante podrá restaurar esta instantánea. Todos los cambios se activan solo después de rearrancar.

La sintaxis del comando transactional-update es la siguiente:

transactional-update [option] [general_command] [package_command] standalone_command
Nota
Nota: ejecución de transactional-update sin argumentos

Si no especifica ningún comando ni opción mientras ejecuta el comando transactional-update, el sistema se actualiza automáticamente.

Aquí se describen los posibles parámetros del comando.

Opciones de transactional-update
--interactive, -i

Se puede utilizar junto con un comando de paquete para activar el modo interactivo.

--non-interactive, -n

Se puede utilizar junto con un comando de paquete para activar el modo no interactivo.

--continue [number], -c

La opción --continue permite realizar varios cambios en el sistema de archivos raíz sin rearrancar. Consulte la Sección 3, “Aplicación de varios cambios sin rearrancar” para obtener más información.

Otra función útil de la opción --continue es que puede seleccionar cualquier instantánea existente como base para la nueva instantánea. En el siguiente ejemplo se muestra cómo se ejecuta transactional-update para instalar un paquete nuevo en una instantánea basada en la instantánea 13 y, a continuación, se vuelve a ejecutar para instalar otro paquete:

> sudo transactional-update pkg install package_1
> sudo transactional-update --continue 13 pkg install package_2
--no-selfupdate

Inhabilita la actualización automática de transactional-update.

--drop-if-no-change, -d

Descarta la instantánea creada por transactional-update si no se han realizado cambios en el sistema de archivos raíz. Si hay cambios en el directorio /etc, esos cambios se vuelven a fusionar en el sistema de archivos actual.

--quiet

El comando transactional-update no da como resultado stdout.

--help, -h

Imprime la ayuda para el comando transactional-update.

--version

Muestra la versión del comando transactional-update.

2.1 Comandos generales

En esta sección se muestran los comandos de propósito general de transactional-update.

grub.cfg

Use este comando para reconstruir el archivo de configuración del cargador de arranque GRUB.

bootloader

El comando vuelve a instalar el cargador de arranque.

initrd

Utilice el comando para reconstruir initrd.

kdump

En caso de que realice cambios en el hardware o el almacenamiento, es posible que deba reconstruir el archivo initrd de Kdump.

shell

Abre una shell de lectura y escritura en la nueva instantánea antes de salir. El comando se utiliza normalmente con fines de depuración.

reboot

El sistema se rearranca cuando se completa el comando transactional-update.

run <comando>

Ejecuta el comando proporcionado en una nueva instantánea.

setup-selinux

Instala y habilita la directiva SELinux de destino.

3 Aplicación de varios cambios sin rearrancar

El comando transactional-update aplica los cambios al sistema de archivos raíz en un sistema transaccional. El comportamiento por defecto es crear una nueva instantánea desde el sistema de archivos raíz actual después de cada cambio y rearrancar para aplicar los cambios.

Para realizar varios cambios en el sistema de archivos raíz sin rearrancar, tiene varias opciones que se describen en las siguientes secciones:

3.1 La opción transactional-update --continue

Utilice el comando transactional-update junto con la opción --continue para realizar varios cambios sin rearrancar. Se crea una instantánea independiente en cada ejecución que contiene todos los cambios de la instantánea anterior, además de los cambios nuevos. La instantánea final incluye todos los cambios. Para aplicarlos, rearranque el sistema y la instantánea final se convertirá en el nuevo sistema de archivos raíz.

3.2 El comando transactional-update run

El comando transactional-update run normalmente ejecuta solo un comando. Sin embargo, puede utilizarlo para ejecutar varios comandos en una sesión transaccional concatenándolos dentro de una shell de comandos como bash, por ejemplo:

> sudo transactional-update run bash -c 'ls && date; if [ true ]; then echo -n "Hello "; echo '\''world'\''; fi'
Nota
Nota

El comando transactional-update run tiene las mismas limitaciones que el comando transactional-update shell descrito en la Sección 3.3, “La shell transactional-update, excepto que los comandos introducidos se registran en el archivo /var/log/transactional-update.log.

3.3 La shell transactional-update

El comando transactional-update shell abre una shell en el entorno transactional-update. En la shell, puede introducir casi cualquier comando de Linux para realizar cambios en el sistema de archivos, por ejemplo, instalar varios paquetes con el comando zypper o realizar cambios en los archivos que forman parte del sistema de archivos de solo lectura. También puede verificar que los cambios realizados anteriormente con el comando transactional-update sean correctos.

Importante
Importante

La shell transaccional tiene varias limitaciones. Por ejemplo, no es posible iniciar o detener servicios mediante comandos systemd, ni modificar la partición /var porque no está montada. Además, los comandos introducidos durante una sesión de shell no se registran en el archivo /transactional-update.log.

Todos los cambios que realice en el sistema de archivos forman parte de una sola instantánea. Cuando termine de realizar cambios en el sistema de archivos y salga de la shell con el comando exit, deberá reiniciar el host para aplicar los cambios.

4 Realización de la limpieza de instantáneas

Puede utilizar transactional-update para limpiar las instantáneas no utilizadas del sistema de archivos y los directorios de superposición /etc a los que no se hace referencia.

transactional-update reconoce los siguientes comandos de limpieza:

cleanup-snapshots

El comando marca todas las instantáneas no utilizadas para que Snapper las elimine.

cleanup-overlays

El comando elimina todas las capas de superposición de /etc no utilizadas del directorio /var/lib/overlay.

cleanup

El comando combina los comandos cleanup-snapshots y cleanup-overlays.

4.1 Cómo funciona la limpieza

Si ejecuta el comando transactional-update cleanup, se asignará un algoritmo de limpieza a todas las instantáneas antiguas que no tengan ninguno. También se marcan todas las instantáneas importantes. El comando también elimina todos los directorios de superposición /etc a los que no se hace referencia (y, por lo tanto, que no se utilizan) en /var/lib/overlay.

Las instantáneas con el algoritmo de limpieza number definido se suprimirán según las reglas configuradas en /etc/snapper/configs/root con los siguientes parámetros:

NUMBER_MIN_AGE

Define la antigüedad mínima que debe tener una instantánea (en segundos) para que se pueda eliminar automáticamente.

NUMBER_LIMIT/NUMBER_LIMIT_IMPORTANT

Define el número máximo de instantáneas almacenadas. Los algoritmos de limpieza suprimen las instantáneas por encima del valor máximo especificado, sin tener en cuenta la instantánea ni el espacio del sistema de archivos. Los algoritmos también suprimen las instantáneas por encima del valor mínimo hasta que se alcanzan los límites de instantáneas y del sistema de archivos.

systemd también realiza regularmente una limpieza de instantáneas.

5 Registro de productos

Puede utilizar el comando transactional-update register para gestionar todas las tareas relacionadas con el registro de productos y la gestión de suscripciones. Puede proporcionar las siguientes opciones:

--list-extensions

Con esta opción, el comando muestra las extensiones disponibles para el sistema. Puede utilizar el resultado para buscar un identificador de producto para la activación del producto.

-p, --product

Utilice esta opción para especificar un producto para la activación. El identificador de producto tiene el siguiente formato: <nombre>/<versión>/<arquitectura>, por ejemplo, sle-module-live-patching/15.3/x86_64. El comando correspondiente tiene el formato siguiente:

> sudo transactional-update register -p sle-module-live-patching/15.3/x86_64
-r, --regcode

Registra el sistema con el código de registro proporcionado. El comando registra la suscripción y habilita los repositorios de software.

-d, --de-register

La opción anula el registro del sistema o, si se utiliza junto con la opción -p, anula el registro de una extensión.

-e, --email

Especifica una dirección de correo electrónico que se utiliza en el Centro de servicios al cliente de SUSE para el registro.

--url

Especifica la URL de su servidor de registro. La URL se almacena en la configuración y se utiliza en las siguientes invocaciones de comandos. Por ejemplo:

> sudo transactional-update register --url https://scc.suse.com
-s, --status

Muestra el estado de registro actual en formato JSON.

--write-config

Escribe el valor de las opciones proporcionadas en el archivo de configuración /etc/SUSEConnect.

--cleanup

Elimina las credenciales antiguas del sistema.

--version

Imprime la versión.

--help

Muestra cómo se usa el comando.

6 Gestión de paquetes de software

Puede utilizar transactional-update para instalar, actualizar o eliminar paquetes de software.

SLE Micro obtiene los paquetes de software de los repositorios que están disponibles después del registro del producto.

transactional-update utiliza los siguientes comandos para gestionar los paquetes de software.

Sugerencia
Sugerencia: el comando pkg y las opciones de Zypper

Con los comandos de transactional-update pkg, puede utilizar cualquier opción de Zypper que corresponda al subcomando utilizado. Por ejemplo, transactional-update pkg install comprende todas las opciones que entiende zypper install.

pkg install

Instala paquetes individuales de los canales disponibles mediante el comando zypper install. Este comando también se puede utilizar para instalar archivos RPM de corrección temporal del programa (PTF). La opción por defecto para este comando es --interactive.

> sudo transactional-update pkg install package_name

O bien

> sudo transactional-update pkg install rpm1 rpm2

O bien, para instalar un patrón de software:

> sudo transactional-update pkg install -t pattern pattern_name
pkg remove

Elimina paquetes individuales de la instantánea activa mediante el comando zypper remove. Este comando también se puede usar para eliminar archivos RPM de PTF. La opción por defecto para este comando es --interactive.

> sudo transactional-update pkg remove package_name
pkg update

Actualiza paquetes individuales desde la instantánea activa mediante el comando zypper update. Solo se pueden actualizar los paquetes que forman parte de la instantánea del sistema de archivos base. La opción por defecto para este comando es --interactive.

> sudo transactional-update pkg update package_name
patch

Comprueba los parches disponibles y los instala. La opción por defecto para este comando es --non-interactive.

dup

Realiza una actualización del sistema. La opción por defecto para este comando es --non-interactive.

up

Actualiza los paquetes instalados a versiones más recientes. La opción por defecto para este comando es --non-interactive.

migration

El comando migra el sistema a un destino seleccionado. Normalmente, se utiliza para actualizar el sistema si se ha registrado mediante el Centro de servicios al cliente de SUSE.

7 Realización de una reversión del sistema

GRUB 2 permite el arranque desde instantáneas Btrfs y, por lo tanto, permite utilizar cualquier instantánea funcional anterior en caso de que la nueva no funcione correctamente.

Al arrancar una instantánea, las partes del sistema de archivos incluidas en la instantánea se montan como de solo lectura; todos los demás sistemas de archivos y partes que se excluyen de las instantáneas se montan con derechos de lectura y escritura y se pueden modificar.

Sugerencia
Sugerencia: reversión a un estado de instalación específico

Al final de la instalación inicial del sistema, se crea una instantánea inicial que se puede arrancar. Puede volver a ese estado en cualquier momento arrancando esta instantánea. La instantánea se puede identificar por la descripción first root file system.

Existen dos métodos para realizar una reversión del sistema.

Si la instantánea actual funciona, puede utilizar el siguiente procedimiento para revertir el sistema.

Procedimiento 2: Reversión desde un sistema en ejecución
  1. Identifique la instantánea que debe definirse como la instantánea por defecto y anote su número.

    > sudo snapper list
  2. Defina la instantánea como la opción por defecto.

    > sudo transactional-update rollback snapshot_number

    Si omite snapshot number, la instantánea actual se establecerá por defecto.

    Sugerencia
    Sugerencia: definición de la última instantánea de trabajo

    Para definir la última instantánea de trabajo como la predeterminada, ejecute rollback last.

  3. Rearranque el sistema para arrancar con la nueva instantánea por defecto.

El siguiente procedimiento se utiliza en caso de que la instantánea actual esté dañada y no pueda arrancar en ella.

Procedimiento 3: Reversión a una instantánea de trabajo
  1. Rearranque el sistema y seleccione Start bootloader from a read-only snapshot.

  2. Elija una instantánea para arrancar. Las instantáneas se ordenan según la fecha de creación, con la última en la parte superior.

  3. Inicie sesión en su sistema y compruebe si todo funciona como se espera. Los datos escritos en los directorios excluidos de las instantáneas no se modificarán.

  4. Si la instantánea en la que arrancó no es adecuada para la reversión, rearranque el sistema y elija otra.

    Si la instantánea funciona como se espera, puede realizar la reversión ejecutando el siguiente comando:

    > sudo transactional-update rollback

    Y rearranque después.

8 Gestión de actualizaciones transaccionales automáticas

Las actualizaciones automáticas se controlan mediante systemd.timer una vez al día. Esto aplica todas las actualizaciones e informa a rebootmgrd de que el equipo debe rearrancarse. Puede ajustar la hora a la que se ejecuta la actualización; consulte la documentación de systemd.timer(5).

8.1 Inhabilitación de las actualizaciones automáticas

Las actualizaciones automáticas están habilitadas por defecto. Sin embargo, puede inhabilitarlas con este comando:

> sudo systemctl --now disable transactional-update.timer

8.2 Configuración de notificaciones de actualizaciones fallidas

Cuando falla el comando transactional-update automático, se suprime la instantánea fallida. Mientras tanto, el sistema podría rearrancarse y, después, no podría descubrir que la última actualización automática ha fallado. Por lo tanto, puede configurar un servicio de systemd que le informe sobre el fallo del comando transactional-update automático. El procedimiento para hacerlo se puede resumir en los siguientes pasos:

8.2.1 Instalación de los paquetes necesarios

Los paquetes mailx y systemd-status-mail son necesarios para configurar las notificaciones. Están presentes en el sistema por defecto. Sin embargo, si no los tiene instalados, puede instalarlos ejecutando el siguiente comando:

> sudo transactional-update pkg in systemd-status-mail mailx

Rearranque el sistema.

8.2.2 Configuración del servicio systemd-status-mail

Para configurar el servicio systemd-status-mail, puede crear un archivo de configuración o utilizar la herramienta jeos-config.

8.2.2.1 Configuración del servicio mediante jeos-config

Para configurar las notificaciones por correo electrónico, puede utilizar las herramientas jeos-config como se describe a continuación.

  1. Para abrir la ventana de configuración, ejecute el comando:

    > sudo jeos-config status_mail
  2. En el cuadro de diálogo, configure los elementos según sus necesidades.

  3. Confirme haciendo clic en Aceptar.

8.2.2.2 Configuración del servicio mediante la edición de un archivo de configuración

El archivo de configuración por defecto se encuentra en /usr/etc/default/systemd-status-mail. Para modificarlo, cree una copia en /etc/default/ y edite los siguientes elementos:

ADDRESS

Es una entrada obligatoria. Especifique la dirección de correo electrónico a la que se va a enviar la notificación. Por ejemplo:

ADDRESS=“tux@example.com”
FROM

El correo electrónico del remitente del correo de notificación. Asegúrese de que la dirección sea válida. Por ejemplo:

FROM=“geeko@example.com”
MAILER

El tipo de aplicación de correo para enviar notificaciones. Utilice el valor mailx de la siguiente manera:

MAILER=“mailx”
RELAYHOST

Especifique el relé de correo utilizado por mailx.

RELAYHOST=“mail.example.com:587”
MAILX_OPTIONS

Especifique las opciones necesarias para asegurarse de que el proveedor de correo aceptará el correo de notificación.

MAILX_OPTIONS="-Sverbose -Ssmtp-use-starttls -Ssmtp-auth=login -Ssmtp-auth-user='tux@example.com' -Ssmtp-auth-password='TopSecret'"