28 Criando imagens atualizadas do SUSE Linux Micro com o Kiwi #
Esta seção explica como gerar imagens atualizadas do SUSE Linux Micro para usar com o Edge Image Builder, usando Cluster API (CAPI) + Metal3, ou como gravar a imagem do disco diretamente em um dispositivo em blocos. Esse processo é útil quando há necessidade de incluir os patches mais recentes nas imagens de inicialização do sistema inicial (para minimizar a transferência de patches após a instalação) ou quando a CAPI é usada, em que é preferível reinstalar o sistema operacional com uma nova imagem em vez de fazer upgrade dos hosts no local.
Esse processo usa o Kiwi para a criação da imagem. O SUSE Edge vem com uma versão conteinerizada que simplifica o processo geral com um utilitário auxiliar integrado, o que permite especificar o perfil de destino obrigatório. O perfil define o tipo de imagem de saída necessário, sendo os mais comuns relacionados a seguir:
"Base": uma imagem de disco do SUSE Linux Micro com um conjunto de pacotes reduzido (inclui o podman).
"Base-SelfInstall": uma imagem SelfInstall conforme a imagem "Base" acima.
"Base-RT": igual à imagem "Base" acima, mas usa o kernel em tempo real (rt) no lugar.
"Base-RT-SelfInstall": uma imagem SelfInstall conforme a "Base-RT" acima.
"Default": uma imagem de disco do SUSE Linux Micro conforme a "Base" acima, mas com algumas outras ferramentas, como pilha de virtualização, Cockpit e salt-minion.
"Default-SelfInstall": uma imagem SelfInstall conforme a imagem "Default" acima.
Consulte a documentação do SUSE Linux Micro 6.1 para obter mais detalhes.
Esse processo funciona nas duas arquiteturas AMD64/Intel 64 e AArch64, embora nem todos os perfis de imagem estejam disponíveis para ambas, por exemplo, no SUSE Edge 3.3, em que o SUSE Linux Micro 6.1 é usado, um perfil com kernel em tempo real (ou seja, "Base-RT" ou "Base-RT-SelfInstall") não está disponível para AArch64 no momento.
É necessário usar um host de build com a mesma arquitetura das imagens que estão sendo criadas. Em outras palavras, para criar uma imagem AArch64, é necessário usar um host de build AArch64, e vice-versa para AMD64/Intel 64. Não há suporte para builds cruzados no momento.
28.1 Pré-requisitos #
O construtor de imagens Kiwi requer o seguinte:
Um host SUSE Linux Micro 6.1 ("sistema de build") com a mesma arquitetura da imagem que está sendo criada.
O sistema de build já deve ter sido registrado pelo
SUSEConnect
(o registro é usado para obter os pacotes mais recentes dos repositórios SUSE).Uma conexão de Internet para obter os pacotes necessários. Se conectado por proxy, o host de build precisa ser pré-configurado.
É necessário desabilitar o SELinux no host de build (já que ocorre a rotulagem do SELinux no contêiner e isso pode entrar em conflito com a política do host).
Pelo menos 10 GB de espaço livre no disco para acomodar a imagem do contêiner, a raiz do build e uma ou mais imagens de saída resultantes.
28.2 Introdução #
Devido a algumas limitações, é necessário desabilitar o SELinux. Conecte-se ao host de build da imagem do SUSE Linux Micro 6.1 e confirme se o SELinux está desabilitado:
# setenforce 0
Crie um diretório de saída para compartilhar com o contêiner de build do Kiwi no qual salvar as imagens resultantes:
# mkdir ~/output
Extraia a imagem mais recente do construtor Kiwi do SUSE Registry:
# podman pull registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0
(...)
28.3 Criando a imagem padrão #
Este é o comportamento padrão do contêiner de imagens do Kiwi quando nenhum
argumento é inserido durante a execução da imagem do contêiner. O seguinte
comando executa o podman
com dois diretórios mapeados
para o contêiner:
O diretório do repositório de pacotes
/etc/zypp/repos.d
do SUSE Linux Micro do host subjacente.O diretório de saída
~/output
criado acima.
O contêiner de imagens do Kiwi requer a execução do script auxiliar
build-image
como:
# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
-it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image
(...)
Se você está executando o script pela primeira vez, é esperado que ocorra uma falha nele logo depois de ser iniciado com o erro: "ERROR: Early loop device test failed, please retry the container run." (ERRO: Falha no teste do dispositivo no ciclo inicial. Tente executar o contêiner novamente.). Trata-se de um sintoma em que os dispositivos que são criados em loop no sistema host subjacente não ficam imediatamente visíveis dentro da imagem do contêiner. Você apenas precisa executar o comando novamente, e ele deverá prosseguir sem problemas.
Após alguns minutos, as imagens estarão disponíveis no diretório de saída local:
(...)
INFO: Image build successful, generated images are available in the 'output' directory.
# ls -1 output/
SLE-Micro.x86_64-6.1.changes
SLE-Micro.x86_64-6.1.packages
SLE-Micro.x86_64-6.1.raw
SLE-Micro.x86_64-6.1.verified
build
kiwi.result
kiwi.result.json
28.4 Criando imagens com outros perfis #
Para criar perfis de imagens diferentes, é usada a opção de comando "-p" no script auxiliar da imagem do contêiner do Kiwi. Por exemplo, para criar a imagem ISO "Default-SelfInstall":
# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
-it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image -p Default-SelfInstall
(...)
Para evitar perda de dados, o Kiwi recusará a execução se houver imagens no
diretório output
. É necessário remover o conteúdo do
diretório de saída antes de prosseguir com o rm -f
output/*
.
Uma alternativa é criar a imagem ISO SelfInstall com o kernel RealTime ("kernel-rt"):
# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
-it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image -p Base-RT-SelfInstall
(...)
28.5 Criando imagens com tamanho de setor grande #
Alguns modelos de hardware exigem imagens com tamanho de setor grande, ou seja, 4096 bytes em vez do padrão de 512 bytes. O construtor Kiwi conteinerizado permite gerar imagens com tamanho de bloco grande especificando o parâmetro "-b". Por exemplo, para criar a imagem "Default-SelfInstall" com um tamanho de setor grande:
# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output \
-it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image -p Default-SelfInstall -b
(...)
28.6 Usando um arquivo de definição de imagem personalizado do Kiwi #
Para casos de uso avançados, é possível usar um arquivo de definição de
imagem personalizado do Kiwi (SL-Micro.kiwi
) junto com os
scripts necessários após a criação. Para isso, substitua as definições
padrão predefinidas pela equipe do SUSE Edge.
Crie e mapeie um novo diretório para a imagem do contêiner em que o script
auxiliar faz a busca (/micro-sdk/defs
):
# mkdir ~/mydefs/
# cp /path/to/SL-Micro.kiwi ~/mydefs/
# cp /path/to/config.sh ~/mydefs/
# podman run --privileged -v /etc/zypp/repos.d:/micro-sdk/repos/ -v ~/output:/tmp/output -v ~/mydefs/:/micro-sdk/defs/ \
-it registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0 build-image
(...)
Isso é necessário apenas em casos de uso avançados e pode causar problemas de suporte. Contate seu representante SUSE para receber mais conselhos e orientações.
Para acessar os arquivos de definição de imagem padrão do Kiwi incluídos no contêiner, use os seguintes comandos:
$ podman create --name kiwi-builder registry.suse.com/edge/3.3/kiwi-builder:10.2.12.0
$ podman cp kiwi-builder:/micro-sdk/defs/SL-Micro.kiwi .
$ podman cp kiwi-builder:/micro-sdk/defs/SL-Micro.kiwi.4096 .
$ podman rm kiwi-builder
$ ls ./SL-Micro.*
(...)