Se você deseja criar uma distribuição Linux baseada no openSUSE, como o Linux Kamarada, precisa conhecer o KIWI.
O KIWI é uma ferramenta de código aberto desenvolvida pelo Projeto openSUSE que permite criar imagens de sistema no Linux, baseadas principalmente no openSUSE e no SUSE Linux Enterprise, mas também em outras distribuições. Com o KIWI, você pode criar imagens em diferentes formatos para diferentes casos de uso, incluindo:
- Live ISOs (como LiveCDs, LiveDVDs, LiveUSBs);
- Máquinas virtuais (como QEMU, KVM, VirtualBox, VMware, Xen, WSL);
- Nuvem (Amazon EC2, Google Compute Engine, Microsoft Azure);
- Contêineres (Podman, Docker, Containerd);
- Dispositivos embarcados (Raspberry Pi, Pinephone);
- e mais (como PXE).
A criação de imagens com o KIWI é feita de forma automatizada – o KIWI em si é um conjunto de scripts em Python e Bash – e não requer interação humana – toda a informação que o KIWI precisa é passada principalmente por arquivos XML e scripts. Ele também pode ser integrado com o Open Build Service (OBS). Tudo isso torna o KIWI ideal para DevOps. Se você precisa criar ambientes sob demanda ou distribuir sistemas pré-configurados, o KIWI pode te ajudar bastante.
Conceitos básicos
Uma imagem de sistema (geralmente chamada apenas de “imagem”) é uma instalação completa de um sistema operacional Linux dentro de um arquivo. Esse arquivo pode ser uma imagem ISO para ser gravada em um CD/DVD, ou uma imagem de disco virtual VDI para ser usado no VirtualBox, um arquivo .raw
para ser extraído para um cartão de memória a ser inserido no Raspberry Pi, etc.
Dentre os conceitos do KIWI, existe também o conceito de aplicação (appliance), que é um sistema pré-configurado criado para um propósito específico. Inclui um conjunto de pacotes e configurações otimizadas para uma determinada finalidade. Uma aplicação pode ter diversos tipos de imagens, que podem ser usadas, como vimos, em máquinas físicas, virtuais ou na nuvem.
Por exemplo, o Linux Kamarada seria uma aplicação, um sistema criado para ser usado por iniciantes em Linux. No momento, o Linux Kamarada gera apenas imagens ISO que podem ser usadas em desktops e notebooks, mas poderia gerar também imagens para Raspberry Pi, Pinephone, WSL, etc.
Etapas da construção de imagens com o KIWI
O processo de construção de imagens com o KIWI é dividido em duas etapas principais.
A primeira é a etapa de preparação (prepare step), na qual o KIWI cria o sistema de arquivos raiz da imagem. Nessa etapa, o KIWI instala pacotes e aplica personalizações ao sistema, como scripts de configuração e adição de arquivos. Ao final dessa etapa, você pode, se quiser, fazer um chroot para testar o sistema (mas note que isso não é recomendado, tampouco fazer modificações manuais, menciono a possibilidade apenas para que você entenda o que é o resultado final dessa etapa).
A segunda é a etapa de criação (create step), na qual o KIWI empacota o sistema de arquivos gerado na etapa de preparação e gera a imagem pronta para ser usada – por exemplo, uma imagem ISO, ou uma imagem de disco virtual VDI, ou um arquivo .raw
, etc. Nessa etapa, o KIWI também pode aplicar personalizações à imagem – por exemplo, adicionar um manual em PDF à imagem ISO, de modo que o usuário final poderá consultá-lo sem precisar dar boot pelo CD/DVD/USB.
Normalmente, se tudo ocorre bem, o KIWI não pausa após a etapa de preparação e já prossegue diretamente à etapa de criação. Mas é possível invocar o KIWI para executar apenas a etapa de preparação e, depois, invocá-lo novamente para executar apenas a etapa de criação.
Caso algo dê errado, ter conhecimento dessas duas etapas ajuda a identificar onde está acontecendo o erro com base na mensagem que é apresentada pelo KIWI.
Pré-requisitos
Para usar o KIWI, seu sistema precisa atender aos seguintes requisitos:
- uma distribuição Linux recente, atualizada e, de preferência (mas não necessariamente) a mesma distribuição da imagem (por exemplo, se você vai usar o KIWI para criar uma imagem do openSUSE Leap, é recomendado que esteja usando também o openSUSE Leap para rodar o KIWI);
- Python versão 3.5 ou superior (pacote python311);
- espaço livre em disco suficiente para preparar e criar a imagem, o mínimo recomendado são 15 GB, mas, dependendo do que você quer fazer, pode precisar de 40 GB (para compilar o Linux Kamarada, por exemplo) ou mais;
- Git (pacote git), para clonar repositórios (não é realmente necessário para rodar o KIWI, mas usaremos neste tutorial para obter os exemplos); e
- qualquer tecnologia de virtualização para testar a imagem (também não é realmente necessário para rodar o KIWI, mas usaremos neste tutorial, e eu recomendo que você instale o VirtualBox).
Instalando o KIWI
Os pacotes mais atualizados do KIWI podem ser encontrados no openSUSE Build Service no projeto Virtualization:Appliances:Builder. Obtê-los de lá é a forma recomendada de instalar o KIWI.
Para instalar o KIWI no openSUSE Leap 15.6 dessa forma, execute:
1
2
# zypper addrepo http://download.opensuse.org/repositories/Virtualization:/Appliances:/Builder/openSUSE_Leap_15.6 kiwi
# zypper --gpg-auto-import-keys install python311-kiwi
Para testar se o KIWI foi instalado corretamente, execute:
1
$ kiwi -v
Esse comando deve informar a versão do KIWI instalada:
1
KIWI (next generation) version 10.2.16
O KIWI também pode ser instalado de outras formas. Se precisar de mais informações, consulte a documentação do KIWI.
Exemplos de descrições de imagens do KIWI
Há dois repositórios do GitHub onde você pode obter exemplos oficiais de descrições de imagens do KIWI:
- No repositório oficial do
kiwi
, na pastabuild-tests
; e - No repositório de exemplos mantidos pela comunidade
kiwi-descriptions
.
As imagens live do openSUSE Leap 15.6 não são mais listadas no site get.opensuse.org, mas eu as encontrei “escondidas” aqui. Os códigos-fonte dessas imagens podem ser encontrados no openSUSE Build Service no projeto openSUSE:Leap:15.6:Images.
Você também pode usar como exemplo o Linux Kamarada. O código-fonte da imagem está disponível no GitLab, no repositório Linux-Kamarada-GNOME
.
Se você souber de mais imagens do KIWI cujo código-fonte é público e podem servir de exemplos, por favor, me indique nos comentários.
Criando sua primeira imagem com o KIWI
Para demonstrar o funcionamento do KIWI e usá-lo pela primeira vez, vamos criar uma imagem com base em um exemplo.
Comece instalando o Git, caso você ainda não o tenha:
1
# zypper in git
Então, obtenha o código-fonte do KIWI:
1
$ git clone https://github.com/OSInside/kiwi.git
O código-fonte é clonado para a pasta kiwi
e os exemplos estão na pasta build-tests
, dentro dela. Você pode listar os exemplos com o comando a seguir:
1
$ tree -L 3 kiwi/build-tests
Escolhi usar o exemplo da imagem live baseada no openSUSE Leap 15.6 (x86/leap/test-image-live
), mas fique à vontade para escolher outro exemplo.
Portanto, de onde estamos, o caminho para esse exemplo é: kiwi/build-tests/x86/leap/test-image-live
.
Para preparar e criar a imagem com base nesse exemplo, invoque o comando kiwi da seguinte forma:
1
2
3
4
$ sudo kiwi system build \
--description kiwi/build-tests/x86/leap/test-image-live \
--set-repo https://download.opensuse.org/distribution/leap/15.6/repo/oss \
--target-dir /tmp/myimage
O KIWI começa a rodar, o processo pode demorar alguns minutos:
Ao final, o KIWI indica o caminho para a imagem ISO produzida:
Para testar a imagem ISO, crie uma máquina virtual do VirtualBox, insira a imagem ISO no leitor de DVD virtual e inicie a máquina virtual:
Para entrar no sistema, o usuário é root
e a senha é linux
:
Feito! Você criou sua primeira imagem com o KIWI. E ela foi testada e está funcionando!
Note que o KIWI gerou mais alguns arquivos na pasta /tmp/myimage
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ tree -L 2 /tmp/myimage/
/tmp/myimage/
├── build
│ ├── image-root
│ └── image-root.log
├── kiwi.result
├── kiwi.result.json
├── kiwi-test-image-live.x86_64-1.15.3.changes
├── kiwi-test-image-live.x86_64-1.15.3.iso
├── kiwi-test-image-live.x86_64-1.15.3.packages
└── kiwi-test-image-live.x86_64-1.15.3.verified
2 directories, 7 files
A pasta build/image-root
contém o sistema de arquivos raiz da imagem, foi onde o sistema foi instalado durante a etapa de preparação.
O arquivo build/image-root.log
é o log produzido pelo KIWI durante todo o processo de construção. Contém todas as mensagens que foram exibidas no terminal e possivelmente mais informações. Você pode abri-lo pra conferir se tudo ocorreu bem ou se alguma mensagem de erro foi apresentada.
O arquivo com extensão .packages
contém uma lista dos pacotes instalados na imagem. Pode ser útil também.
Continua…
Agora que você criou e iniciou com sucesso sua primeira imagem, pode começar a ajustá-la para atender às suas necessidades.
No próximo post, veremos como fazer isso.
Siga o Linux Kamarada nas redes sociais para saber quando for publicado.
Continue sua leitura por aqui.