Administrando o SUSE Linux Micro com o transactional-update
- 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 SUSE Linux 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 SUSE Linux 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 SUSE Linux 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 SUSE Linux 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:
Um novo instantâneo de leitura-gravação é criado com base no sistema de arquivos raiz atual ou em um instantâneo especificado.
Todas as mudanças são aplicadas (atualizações, patches ou instalação de pacote).
O instantâneo é revertido para o modo apenas leitura.
Se as mudanças forem aplicadas com êxito, o novo instantâneo do sistema de arquivos raiz será definido como padrão.
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 o utiliza 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
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.
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 dotransactional-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 parastdout
.-
--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.
-
reboot
O comportamento do
reboot
depende da configuração e das mudanças realizadas no sistema. Sesoft-reboot
estiver habilitado, apenas o espaço do usuário poderá ser reiniciado sem reinicializar o hardware e o kernel. A descrição de como habilitar e configurar osoft-reboot
está disponível na Seção 2.2, “Configuração dosoft-reboot
”.-
run <command>
Executa o comando fornecido em um novo instantâneo.
-
shell
Abre um shell de leitura-gravação no novo instantâneo antes de sair. Normalmente, o comando é usado para fins de depuração.
-
setup-fips
O comando executa todas as mudanças necessárias para habilitar o FIPS no sistema.
-
setup-selinux
Instala e habilita a política do SELinux desejada.
2.2 Configuração do soft-reboot
#
2.2.1 Habilitando/Desabilitando o soft-reboot
#
Para habilitar o soft-reboot
no transactional-update
, faça o seguinte:
Crie um diretório
/etc/tukit.conf.d/
>
sudo
mkdir /etc/tukit.conf.d/Crie um arquivo
/etc/tukit.conf.d/soft-reboot.conf
com o seguinte conteúdo:REBOOT_ALLOW_SOFT_REBOOT=true
Por exemplo, executando o seguinte comando:
>
sudo
echo "REBOOT_ALLOW_SOFT_REBOOT=true" > /etc/tukit.conf.d/soft-reboot.conf
Para desabilitar soft-reboot
, mude true
para false
no arquivo /etc/tukit.conf.d/soft-reboot.conf
.
2.2.2 Configuração do soft-reboot
#
Você pode definir quais pacotes exigem tipos específicos de reinicialização no arquivo /usr/etc/zypp/zypp-boot-plugin.conf
. Para fazer mudanças, copie esse arquivo para /etc/zypp/zypp-boot-plugin.conf
, que é gravável e não é substituído durante as atualizações. O arquivo /etc/zypp/zypp-boot-plugin.conf
também tem uma prioridade mais alta do que /usr/etc/zypp/zypp-boot-plugin.conf
, portanto, sua configuração é preferível à padrão.
No arquivo /etc/zypp/zypp-boot-plugin.conf
, na seção [main]
, há três opções de reinicialização:
- reboot
Aqui você especifica os pacotes que exigem reinicialização do hardware quando são modificados.
- kexec
Fornece uma lista de pacotes com mudanças que exigem a reinicialização do kernel. No entanto, a reinicialização do hardware não ocorre, e o GRUB2 não é acionado.
- soft-reboot
Especifica os pacotes com mudanças que exigem apenas a reinicialização do espaço do usuário.
As entradas podem ser uma lista separada por vírgulas de nomes de pacotes ou uma lista de todos os pacotes que fornecem um determinado aplicativo ou componente do sistema. É possível usar também expressões regulares. Veja um exemplo:
soft-reboot = glibc, dbus-broker
Ou usar a declaração provides
:
soft-reboot = provides: dbus
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'
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.
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
ecleanup-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 SUSE Linux Micro obtém pacotes de software de repositórios que estão disponíveis após o registro do produto. Exceto pelo repositório principal, o SUSE Linux Micro pode acessar um repositório extra com uma coleção de pacotes sem suporte fornecidos como uma comodidade para os clientes, principalmente para fins de teste e desenvolvimento.
O transactional-update
usa os comandos a seguir para gerenciar pacotes de software.
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.
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.
Em um sistema em execução, você pode definir o instantâneo padrão. Leia mais no Procedimento 2, “Rollback de um sistema em execução”.
Especialmente nos casos em que o instantâneo atual está corrompido, você pode inicializar no novo instantâneo e defini-lo como padrão. Para obter informações detalhadas, consulte o Procedimento 3, “Rollback para um instantâneo de trabalho”.
Se o instantâneo atual estiver funcionando, você poderá seguir o procedimento abaixo para fazer rollback do sistema.
Identifique o instantâneo que deve ser definido como padrão e anote o número dele.
>
sudo
snapper listDefina o instantâneo como padrão.
>
sudo
transactional-update rollback snapshot_numberSe você omitir o snapshot number, o instantâneo atual será definido como padrão.
Dica: Definindo o último instantâneo de trabalhoPara definir o último instantâneo de trabalho como padrão, execute
rollback last
.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.
Reinicialize o sistema e selecione
Start bootloader from a read-only snapshot
.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.
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.
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:
Instalar os pacotes necessários, se não estiverem presentes no sistema. Para obter informações detalhadas, consulte a Seção 8.2.1, “Instalando os pacotes necessários”.
Configurar o serviço
systemd-status-mail
. Para obter informações detalhadas, consulte a Seção 8.2.2, “Configurando o serviçosystemd-status-mail
”.
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.
Para abrir a janela de configuração, execute o comando:
>
sudo
jeos-config status_mailNa caixa de diálogo, configure os itens de acordo com as suas necessidades.
Confirme com
.
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'"
9 Informações legais #
Copyright © 2006-2025 SUSE LLC e colaboradores. Todos os direitos reservados.
Permissão concedida para copiar, distribuir e/ou modificar este documento sob os termos da Licença GNU de Documentação Livre, Versão 1.2 ou (por sua opção) versão 1.3; com a Seção Invariante sendo estas informações de copyright e a licença. Uma cópia da versão 1.2 da licença está incluída na seção intitulada “GNU Free Documentation License” (Licença GNU de Documentação Livre).
Para ver as marcas registradas da SUSE, visite https://www.suse.com/company/legal/. Todas as marcas comerciais de terceiros pertencem a seus respectivos proprietários. Os símbolos de marca registrada (®, ™ etc.) indicam marcas registradas da SUSE e de suas afiliadas. Os asteriscos (*) indicam marcas registradas de terceiros.
Todas as informações deste manual foram compiladas com a maior atenção possível aos detalhes. Entretanto, isso não garante uma precisão absoluta. A SUSE LLC, suas afiliadas, os autores ou tradutores não serão responsáveis por possíveis erros nem pelas consequências resultantes de tais erros.