Criação da imagem QCOW2 base para o LAB
1. Objetivo
Antes de criar as máquinas do laboratório, precisamos de uma imagem-base comum.
A proposta é criar uma imagem Alpine Linux mínima que possa ser utilizada por todas as VMs do projeto. Essa imagem deve conter somente o que é comum a todas as máquinas, enquanto as configurações específicas de cada função serão aplicadas posteriormente por scripts externos.
2.1. Preparação do ambiente
Primeiro, baixar a imagem ISO do Alpine Linux destinada a ambientes virtualizados.
wget https://dl-cdn.alpinelinux.org/alpine/v3.24/releases/x86_64/alpine-virt-3.24.1-x86_64.iso2.2 Criação do disco QCOW2
Criar o disco que será utilizado para instalar o sistema:
qemu-img create -f qcow2 base_alpine.qcow2 1G2.3. Primeira inicialização do QEMU
A VM é iniciada utilizando o disco recém-criado e a ISO do Alpine:
#!/bin/bash
qemu-system-x86_64 \
-enable-kvm \
-m 256 \
-smp 1 \
-drive file=base_alpine.qcow2,format=qcow2 \
-nic user,id=rt0,model=virtio,mac=52:54:00:00:01:01 \
-cdrom alpine-virt-3.24.1-x86_64.iso \
-boot d2.4. Instalação do Alpine
Com o Alpine iniciado, configurei apenas o teclado para o padrão ABNT, o repositorio para o mais rapido e instalei o sistema no disco.
setup-keymap
setup-apkrepos
setup-disk2.5. Primeiro marco da imagem
Depois da instalação, a VM é desligada.
Nesse momento temos o primeiro estado estável da imagem:
base_alpine.qcow2
- Alpine instalado
- teclado configurado
- repositórios configurados
- sistema inicial funcionando
Então criamos o primeiro snapshot interno:
qemu-img snapshot -c snapshot_01 base_alpine.qcow2Esse snapshot representa o primeiro marco do desenvolvimento da imagem.
A partir daqui, o laboratório passa a ter uma referência do estado inicial funcional do sistema.
2.6. Separação entre sistema e configuração
Fiz a configuração voltada a executar scripts externos montados internamente via virtio-9p. Criei o script principal que irá execurar os outros realizando todas as configurações ao iniciar a VM. Em vez de colocar todos os scripts de configuração diretamente dentro da imagem, eles ficam fora da imagem, no diretório do laboratório.
vi /etc/local.d/00_config.start#!/bin/sh
mount -t 9p -o trans=virtio scripts_config /mnt/config
/mnt/config/config.sh
umount /mnt/config
mkdir -p /mnt/configchmod +x /etc/local.d/00_config.start
Habilitei o serviço que inicia os scripts após o boot
rc-update add local defaultAgora todos os scripts externos com as configuraçoes serão executados internamente, o objetivo é ter um sistema onde posso errar e consertar as configuraçoes apenas alterando o script de configuraçoes externo e reiniciando a VM. A persistencia das configuraçoes existem apenas no script externo, isso me permite ter 30 VMs rodando ao mesmo tempo com a mesma imagem QCOW2.
2.7 Finalização da imagem
E agora um segundo snapshot fechando esse ciclo de criação da imagem base
qemu-img snapshot -c snapshot_02 base_alpine.qcow2Exemplo do script base da VM.
#!/bin/bash
qemu-system-x86_64 \
-enable-kvm \
-m 256 \
-smp 1 \
-drive file=base_alpine.qcow2,format=qcow2 \
-nic user,id=rt0,model=virtio,mac=52:54:00:00:01:01 \
-virtfs local,path=.,mount_tag=scripts_config,security_model=none \
--snapshotEsse modelo permite executar múltiplas VMs simultaneamente utilizando a mesma imagem-base, já que as alterações de cada execução são mantidas separadamente e não são gravadas no QCOW2 original. Como todo o LAB é tentativa e erro acredito que ainda possam existir novas alterações na imagem base, com melhorias e atualizações, pois o parametro --snapshot no script de execução da VM gera um consumo de RAM mais alto e muitas alterações em uma unica inicialização podem tornar meus 16GB insuficientes.