Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Administrando o SLE Micro com o comando transactional-update

Administrando o SLE Micro com o comando transactional-update

Data de Publicação: 12/12/2024
O QUE É?

O comando transactional-update permite modificar um sistema de arquivos apenas leitura. As modificações são executadas em um instantâneo separado e não influenciam o sistema em execução até você inicializar o instantâneo.

POR QUÊ?

Para administrar o SLE Micro e gerenciar suas atualizações, minimizando o risco de tempo de inatividade do sistema devido a falhas de atualização e, ao mesmo tempo, garantindo rollbacks fáceis.

DEDICAÇÃO

Leva menos de 30 minutos para entender o comando transactional-update.

META

Você entenderá como o transactional-update funciona e como usá-lo para administrar seu sistema.

REQUISITOS
  • Uma instância em execução do SLE Micro

  • Privilégios de root

1 Atualizações transacionais

1.1 O que são atualizações transacionais?

Para manter o sistema operacional base estável e consistente, o SLE Micro usa um sistema de arquivos raiz apenas leitura. Portanto, você não pode fazer mudanças diretas no sistema de arquivos raiz, por exemplo, usando o comando zypper. Em vez disso, o SLE Micro lança atualizações transacionais que permitem aplicar uma ou mais mudanças ao sistema de arquivos raiz.

O comportamento padrão do transactional-update é criar um novo instantâneo do sistema de arquivos raiz atual após cada mudança. Para aplicar as mudanças, você precisa reinicializar o host. Não é possível executar o comando transactional-update várias vezes sem reinicialização para adicionar mais mudanças ao instantâneo. Essa ação cria instantâneos independentes separados que não incluem mudanças de instantâneos anteriores.

1.2 Como funcionam as atualizações transacionais?

Sempre que você chama o comando transactional-update para mudar o sistema, seja para instalar um pacote, executar uma atualização ou aplicar um patch, as seguintes ações ocorrem:

Procedimento 1: Modificando o sistema de arquivos raiz
  1. Um novo instantâneo de leitura-gravação é criado com base no sistema de arquivos raiz atual ou em um instantâneo especificado.

  2. Todas as mudanças são aplicadas (atualizações, patches ou instalação de pacote).

  3. O instantâneo é revertido para o modo apenas leitura.

  4. Se as mudanças forem aplicadas com êxito, o novo instantâneo do sistema de arquivos raiz será definido como padrão.

  5. Após a reinicialização, o sistema será inicializado no novo instantâneo.

1.3 Benefícios das atualizações transacionais

  • Elas são atômicas: a atualização é aplicada apenas se for concluída com êxito.

  • As mudanças são aplicadas a um instantâneo separado e, portanto, não influenciam o sistema em execução.

  • As mudanças podem ser revertidas facilmente.

1.4 Ambiente no comando transactional-update

Cada vez que você executa o comando transactional-update, as mudanças são feitas em um novo instantâneo. O ambiente no instantâneo pode ser diferente daquele no shell do qual você executa o comando transactional-update. Por exemplo, o diretório de trabalho atual ($PWD) não está definido como o diretório do qual você executa o transactional-update, mas está definido como /.

De dentro do instantâneo, você não pode acessar o diretório /var. Esse diretório também não está incluído no instantâneo. No entanto, alguns diretórios não estão incluídos no instantâneo, mas podem ser acessados dentro do ambiente do transactional-update, por exemplo, o diretório /root.

2 Uso do comando transactional-update

O comando transactional-update permite a instalação ou remoção atômica de atualizações. As atualizações serão aplicadas apenas se todas puderem ser instaladas com êxito. O transactional-update cria um instantâneo do seu sistema e usa-o para atualizar o sistema. Posteriormente, você poderá restaurar esse instantâneo. Todas as mudanças se tornarão ativas apenas após a reinicialização.

A sintaxe do comando transactional-update é a seguinte:

transactional-update [option] [general_command] [package_command] standalone_command
Nota
Nota: Executando transactional-update sem argumentos

Se você não especificar nenhum comando ou opção ao executar o comando transactional-update, o sistema se atualizará.

Os parâmetros de comando possíveis estão descritos mais adiante.

Opções do transactional-update
--interactive, -i

Pode ser usada junto com um comando de pacote para ativar o modo interativo.

--non-interactive, -n

Pode ser usada junto com um comando de pacote para ativar o modo não interativo.

--continue [number], -c

A opção --continue faz várias mudanças no sistema de arquivos raiz sem reinicializar. Consulte a Seção 3, “Aplicando várias mudanças sem reinicialização” para obter mais detalhes.

Outro recurso útil da opção --continue é que você pode selecionar um instantâneo existente como base para o seu novo instantâneo. O seguinte exemplo demonstra a execução do transactional-update para instalar um novo pacote em um instantâneo com base no instantâneo 13 e, em seguida, uma nova execução para instalar outro pacote:

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

Desabilita a autoatualização de transactional-update.

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

Descarta o instantâneo criado por transactional-update se não houver mudanças no sistema de arquivos raiz. Se houver mudanças no diretório /etc, elas serão fundidas novamente no sistema de arquivos atual.

--quiet

O comando transactional-update não gera saída para stdout.

--help, -h

Imprime a ajuda para o comando transactional-update.

--version

Exibe a versão do comando transactional-update.

2.1 Comandos gerais

Esta seção lista os comandos de finalidade geral de transactional-update.

grub.cfg

Use esse comando para reconstruir o arquivo de configuração do carregador de boot GRUB.

bootloader

O comando reinstala o carregador de boot.

initrd

Use o comando para reconstruir o initrd.

kdump

Caso você faça mudanças no hardware ou no armazenamento, talvez seja necessário reconstruir o initrd do Kdump.

shell

Abre um shell de leitura-gravação no novo instantâneo antes de sair. Normalmente, o comando é usado para fins de depuração.

reboot

O sistema é reinicializado após a conclusão do comando transactional-update.

run <command>

Executa o comando fornecido em um novo instantâneo.

setup-selinux

Instala e habilita a política do SELinux de destino.

3 Aplicando várias mudanças sem reinicialização

O comando transactional-update aplica as mudanças ao sistema de arquivos raiz em um sistema transacional. O comportamento padrão é criar um novo instantâneo do sistema de arquivos raiz atual após cada mudança e reinicializar para aplicar as mudanças.

Para fazer várias mudanças ao sistema de arquivos raiz sem reinicialização, você tem diversas opções, que estão descritas nas seções a seguir:

3.1 A opção transactional-update --continue

Use o comando transactional-update junto com a opção --continue para fazer várias mudanças sem reinicializar. Um instantâneo separado é criado a cada execução, incluindo todas as mudanças do instantâneo anterior, além das novas mudanças. O instantâneo final inclui todas as mudanças. Para aplicá-las, reinicialize o sistema, e o instantâneo final se tornará o novo sistema de arquivos raiz.

3.2 O comando transactional-update run

Normalmente, o comando transactional-update run executa apenas um único comando. No entanto, você pode usá-lo para executar vários comandos em uma sessão transacional, concatenando-os em um shell de comando, como bash, por exemplo:

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

O comando transactional-update run tem as mesmas limitações que o comando transactional-update shell descrito na Seção 3.3, “O shell de transactional-update, com exceção de que os comandos inseridos são registrados no arquivo /var/log/transactional-update.log.

3.3 O shell de transactional-update

O comando transactional-update shell abre um shell no ambiente de transactional-update. No shell, você pode inserir praticamente qualquer comando do Linux para fazer mudanças no sistema de arquivos, por exemplo, instalar vários pacotes com o comando zypper ou fazer mudanças em arquivos que fazem parte do sistema de arquivos apenas leitura. Você também pode verificar se as mudanças já feitas com o comando transactional-update estão corretas.

Importante
Importante

O shell transacional tem várias limitações. Por exemplo, você não pode operar ações de iniciar ou parar serviços usando os comandos systemd, nem modificar a partição /var porque ela não está montada. Além disso, os comandos inseridos durante uma sessão de shell não são registrados no arquivo /transactional-update.log.

Todas as mudanças feitas no sistema de arquivos fazem parte de um único instantâneo. Após concluir as mudanças no sistema de arquivos e sair do shell com o comando exit, você precisará reinicializar o host para aplicar as mudanças.

4 Executando a limpeza de instantâneos

Você pode usar transactional-update para limpar instantâneos não utilizados do sistema de arquivos e diretórios de sobreposição /etc não referenciados.

O transactional-update reconhece os seguintes comandos de limpeza:

cleanup-snapshots

O comando marca todos os instantâneos não utilizados para remoção pelo Snapper.

cleanup-overlays

O comando remove todas as camadas de sobreposição não utilizadas de /etc do diretório /var/lib/overlay.

cleanup

O comando combina os comandos cleanup-snapshots e cleanup-overlays.

4.1 Como funciona a limpeza

Se você executar o comando transactional-update cleanup, todos os instantâneos antigos sem um algoritmo de limpeza terão um definido. Todos os instantâneos importantes também serão marcados. O comando também remove todos os diretórios de sobreposição /etc não referenciados (e, portanto, não utilizados) de /var/lib/overlay.

Os instantâneos com o algoritmo de limpeza number definido serão apagados de acordo com as regras configuradas em /etc/snapper/configs/root pelos seguintes parâmetros:

NUMBER_MIN_AGE

Define a duração mínima de um instantâneo (em segundos) que pode ser removido automaticamente.

NUMBER_LIMIT/NUMBER_LIMIT_IMPORTANT

Define a contagem máxima de instantâneos armazenados. Os algoritmos de limpeza apagam os instantâneos acima do valor máximo especificado, sem levar em conta o instantâneo e o espaço no sistema de arquivos. Os algoritmos também apagam os instantâneos acima do valor mínimo até que os limites do instantâneo e do sistema de arquivos sejam atingidos.

A limpeza de instantâneos também é realizada regularmente pelo systemd.

5 Registrando produtos

Você pode usar o comando transactional-update register para administrar todas as tarefas relacionadas ao registro do produto e seu gerenciamento de assinatura. Você pode especificar as seguintes opções:

--list-extensions

Com essa opção, o comando lista as extensões disponíveis para o seu sistema. Você pode usar a saída para localizar um identificador de produto para ativação do produto.

-p, --product

Use essa opção para especificar um produto para ativação. O identificador de produto tem o seguinte formato: <nome>/<versão>/<arquitetura>, por exemplo, sle-module-live-patching/15.3/x86_64. O comando correspondente tem o seguinte formato:

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

Registre seu sistema com o código de registro fornecido. O comando registra a assinatura e habilita os repositórios de software.

-d, --de-register

A opção cancela o registro do sistema ou, quando usada junto com a opção -p, cancela o registro de uma extensão.

-e, --email

Especifique um endereço de e-mail que seja usado no SUSE Customer Center para registro.

--url

Especifique o URL do servidor de registro. O URL é armazenado na configuração e usado nas chamadas de comando subsequentes. Por exemplo:

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

Exibe o status do registro atual no formato JSON.

--write-config

Grava o valor das opções fornecidas no arquivo de configuração /etc/SUSEConnect.

--cleanup

Remove credenciais antigas do sistema.

--version

Imprime a versão.

--help

Exibe o uso do comando.

6 Gerenciando pacotes de software

Você pode usar transactional-update para instalar, atualizar ou remover pacotes de software.

O SLE Micro obtém pacotes de software de repositórios que estão disponíveis após o registro do produto.

O transactional-update usa os comandos a seguir para gerenciar pacotes de software.

Dica
Dica: O comando pkg e as opções do Zypper

Com os comandos transactional-update pkg, você pode usar qualquer opção do Zypper que corresponda ao subcomando usado. Por exemplo, transactional-update pkg install reconhece todas as opções que zypper install reconhece.

pkg install

Instala pacotes individuais dos canais disponíveis usando o comando zypper install. Também é possível usar esse comando para instalar arquivos RPM de Correção Temporária do Programa (PTF, Program Temporary Fix). A opção padrão para esse comando é --interactive.

> sudo transactional-update pkg install package_name

ou

> sudo transactional-update pkg install rpm1 rpm2

ou, para instalar um padrão de software:

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

Remove pacotes individuais do instantâneo ativo usando o comando zypper remove. Também é possível usar esse comando para remover arquivos RPM de PTF. A opção padrão para esse comando é --interactive.

> sudo transactional-update pkg remove package_name
pkg update

Atualiza pacotes individuais do instantâneo ativo usando o comando zypper update. Apenas os pacotes que fazem parte do instantâneo do sistema de arquivos base podem ser atualizados. A opção padrão para esse comando é --interactive.

> sudo transactional-update pkg update package_name
patch

Verifica se há patches disponíveis e os instala. A opção padrão para esse comando é --non-interactive.

dup

Faz upgrade do seu sistema. A opção padrão para esse comando é --non-interactive.

up

Atualiza os pacotes instalados para versões mais recentes. A opção padrão para esse comando é --non-interactive.

migration

O comando migra seu sistema para um destino selecionado. Normalmente, ele é usado para fazer upgrade do sistema se ele tiver sido registrado no SUSE Customer Center.

7 Fazendo rollback do sistema

O GRUB 2 permite a inicialização de instantâneos btrfs e, portanto, permite usar qualquer instantâneo funcional mais antigo caso o novo instantâneo não funcione corretamente.

Ao inicializar um instantâneo, as partes do sistema de arquivos incluídas no instantâneo são montadas como apenas leitura; todos os outros sistemas de arquivos e partes excluídos dos instantâneos são montados como leitura-gravação e podem ser modificados.

Dica
Dica: Voltando para um estado da instalação específico

Um instantâneo inicializável inicial é criado no fim da instalação inicial do sistema. É possível voltar para esse estado a qualquer momento inicializando o instantâneo. É possível identificar o instantâneo pela descrição first root file system.

Há dois métodos para executar rollback do sistema.

Se o instantâneo atual estiver funcionando, você poderá seguir o procedimento abaixo para fazer rollback do sistema.

Procedimento 2: Rollback de um sistema em execução
  1. Identifique o instantâneo que deve ser definido como padrão e anote o número dele.

    > sudo snapper list
  2. Defina o instantâneo como padrão.

    > sudo transactional-update rollback snapshot_number

    Se você omitir o snapshot number, o instantâneo atual será definido como padrão.

    Dica
    Dica: Definindo o último instantâneo de trabalho

    Para definir o último instantâneo de trabalho como padrão, execute rollback last.

  3. Reinicialize o sistema para inicializar no novo instantâneo padrão.

O procedimento a seguir é usado caso o instantâneo atual esteja corrompido e você não consiga inicializá-lo.

Procedimento 3: Rollback para um instantâneo de trabalho
  1. Reinicialize o sistema e selecione Start bootloader from a read-only snapshot.

  2. Escolha um instantâneo para inicializar. Os instantâneos são classificados de acordo com a data de criação, com o mais recente na parte superior.

  3. Efetue login no sistema e verifique se tudo funciona como esperado. Os dados gravados nos diretórios excluídos dos instantâneos permanecerão inalterados.

  4. Se o instantâneo no qual você inicializou não for adequado para rollback, reinicialize o sistema e escolha outro.

    Se o instantâneo funcionar como esperado, você poderá fazer rollback executando o seguinte comando:

    > sudo transactional-update rollback

    E reinicializar na sequência.

8 Gerenciando atualizações transacionais automáticas

As atualizações automáticas são controladas pelo systemd.timer que é executado uma vez por dia. Ele é aplicado a todas as atualizações e informa o rebootmgrd de que a máquina deve ser reinicializada. Você pode ajustar o horário de execução da atualização. Consulte a documentação do systemd.timer(5).

8.1 Desabilitando atualizações automáticas

As atualizações automáticas estão habilitadas por padrão. No entanto, você pode desabilitá-las com este comando:

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

8.2 Configurando notificações de atualizações com falha

Quando há falha em um comando transactional-update automático, o instantâneo com falha é apagado. Nesse período, o sistema pode ser reinicializado, e você talvez não saiba que a última atualização automática falhou. Portanto, você pode configurar um serviço systemd, que o informará sobre a falha do comando automático transactional-update. O procedimento para fazer isso pode ser resumido nas seguintes etapas:

8.2.1 Instalando os pacotes necessários

Os pacotes mailx e systemd-status-mail são necessários para configurar as notificações. Eles estão presentes no sistema por padrão. No entanto, se eles não estiverem instalados, instale os pacotes executando o seguinte comando:

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

Reinicialize o sistema.

8.2.2 Configurando o serviço systemd-status-mail

Para configurar o serviço systemd-status-mail, você pode criar um arquivo de configuração ou usar a ferramenta jeos-config.

8.2.2.1 Configurando o serviço com jeos-config

Para configurar as notificações por e-mail, você pode usar as ferramentas jeos-config conforme descrito abaixo.

  1. Para abrir a janela de configuração, execute o comando:

    > sudo jeos-config status_mail
  2. Na caixa de diálogo, configure os itens de acordo com as suas necessidades.

  3. Confirme com OK.

8.2.2.2 Configurando o serviço por meio da edição de um arquivo de configuração

O arquivo de configuração padrão está em /usr/etc/default/systemd-status-mail. Para modificá-lo, crie uma cópia em /etc/default/ e edite os seguintes itens:

ADDRESS

Uma entrada obrigatória. Especifique o endereço de e-mail para o qual a notificação será enviada. Por exemplo:

ADDRESS=“tux@example.com”
FROM

O e-mail do remetente do e-mail de notificação. Verifique se o endereço é válido. Por exemplo:

FROM=“geeko@example.com”
MAILER

O tipo de aplicativo de e-mail para enviar notificações. Use o valor mailx da seguinte maneira:

MAILER=“mailx”
RELAYHOST

Especifique a retransmissão de e-mail usada pelo mailx.

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

Especifique as opções necessárias para garantir que o provedor de e-mail aceitará o e-mail de notificação.

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