Criando sua Imagem de Cloud do Zero com Libvirt
Este método permite criar uma imagem customizada modificando uma imagem oficial de nuvem já existente.Utilizaremos o Libvirt e suas ferramentas (virt-manager) para este guia.
 
Neste exemplo, iremos modificar a imagem do Ubuntu 24.04 LTS e instalaremos o Gerenciador de Containers e máquinas virtuais Incus para simular uma aplicação de usuário.
Passo 1: Baixar a imagem base
- 
Primeiro, baixe a imagem oficial de cloud do Ubuntu. Em seguida, utilize o qemu-imgpara criar uma cópia da imagem base, que será o disco da sua nova máquina virtual. Você deve criar uma cópia para que a imagem original permaneça intacta.wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
 qemu-img create -f qcow2 -F qcow2 -b noble-server-cloudimg-amd64.img custom-ubuntu.qcow2
Passo 2: Crie um arquivo ISO com o user-data
- 
Para garantir que o cloud-init configure a sua máquina virtual com a sua chave SSH na primeira inicialização, você precisa criar um arquivo .iso com as informações do usuário. 
- 
A ferramenta padrão para essa tarefa é o genisoimage (ou mkisofs). 
- 
Em um diretório temporário, crie um arquivo chamado meta-data (que pode ficar vazio) e um arquivo chamado user-data com o seguinte conteúdo: DicaCertifique-se de substituir ssh-rsa AAA... pela sua chave SSH pública. #cloud-config
 users:
 - name: ubuntu
 groups: sudo
 sudo: ALL=(ALL) NOPASSWD:ALL
 ssh_authorized_keys:
 - ssh-rsa AAA...
- 
No exemplo usado, foi criado um diretório chamado cloud-init/contendo os arquivos mencionados acima:tree .
 .
 ├── cloud-init
 │ ├── meta-data
 │ └── user-data
 ├── custom-ubuntu.qcow2
 └── noble-server-cloudimg-amd64.img
 2 directories, 4 files
- 
Use o comando genisoimagepara criar o arquivo.isoa partir desses arquivos. A flag-rpreserva permissões de leitura, e a-Vdefine o rótulo do volume, que é importante para que o cloud-init o detecte. Exemplo:$ genisoimage -o user-data.iso -V cidata -r cloud-init/
- 
Para testar a imagem .iso gerada, podemos montar essa imagem em um diretório auxiliar e verificar o conteúdo: mkdir -p iso/
 sudo mount user-data.iso -o loop iso/
 cat iso/user-data
 #cloud-config
 users:
 - name: ubuntu
 groups: sudo
 sudo: ALL=(ALL) NOPASSWD:ALL
 ssh_authorized_keys:
 - ssh-rsa AAA...
- 
Este arquivo user-data.iso será utilizado como um disco anexado à sua VM na próxima etapa para que ela se configure automaticamente. 
Passo 3: Iniciar a VM no virt-manager
- 
Utilize o virt-installou a interface gráfica do virt-manager para iniciar uma máquina virtual usando a imagemcustom-ubuntu.qcow2como disco.
- 
O virt-installpermitirá que você injete uma chave SSH e configure o cloud-init na primeira inicialização da VM, tornando o processo de configuração inicial mais seguro e simples.
- 
Após abrir o virt-manager clique em “Create a new virtual machine”:   
- 
Em seguida selecione “Import existing disk image”:   
- 
Selecione o disco custom-ubuntu.qcow2criado nos passos anteriores:  
- 
No “step 3”, selecione a quantidade de RAM e de CPU’s a serem utilizados. Para o nosso exemplo 2GB de RAM e 2 vCPU são mais que suficientes:   
- 
Nesse momento iremos adicionar o arquivo user-data.isona VM. Para isso selecione a checkbox “Customize configuration before install” e clique em “Finish”:  
- 
Clique no botão “Add Hardware”, selecione “Storage, selecione a checkbox “Select or create a custom storage ”, clique em “Manage” e “Browse Local” para encontrar o arquivo user-data.isocriado nos passos anteriores.
- 
Altere o “Device type” para “CDROM device” e clique em “Finish”:   
- 
Para finalizar clique em “Begin Installation” no topo superior direito da aplicação:   
- 
Após esses passos a máquina virtual irá inicializar, e através do IP da máquina é possível se conectar a mesma via SSH:   
- 
(Opcional): Customização do sistema: Dentro da VM que acabou de ser criada, você pode instalar e configurar os pacotes necessários. Neste caso, para o gerenciador de containers e VMs Incus, execute os seguintes comandos no terminal da sua máquina virtual: sudo apt update
 sudo apt install -y incus
 sudo incus admin init --auto
Passo 4: Generalizar a imagem
- 
Essa é a etapa mais crítica do processo, pois a generalização remove informações específicas da máquina que poderiam causar conflitos quando a imagem for instanciada na Magalu Cloud. 
- 
Para generalizar a imagem, basta executar estes comandos na VM: # Remove SSH keys, logs, and temp data.
 $ sudo rm -f /etc/ssh/ssh_host_*
 $ sudo rm -f /root/.ssh/authorized_keys /home/ubuntu/.ssh/authorized_keys
 $ sudo rm -rf /tmp/* /var/tmp/* /var/lib/cloud/seed/nocloud-net/
 # Clean cloud-init logs
 $ sudo cloud-init clean --logs
 # Clean the /etc/machine-id files
 $ sudo sh -c 'echo -n > /etc/machine-id && rm -f /var/lib/dbus/machine-id'
 # Clean apt downloaded packages
 $ sudo apt-get clean
 $ sudo rm -rf /var/lib/apt/lists/*
 # Remove bash history
 $ sudo rm -f /root/.bash_history /home/ubuntu/.bash_history
 # Poweroff
 $ sudo systemctl poweroff
Passo 5: Converter para imagem final
- 
Após generalizar a imagem, e desligar a VM, execute o comando qemu-img convert para criar a imagem final, removendo o vínculo com a imagem de base e criando um arquivo .qcow2 final, otimizado para o ambiente de produção. qemu-img convert -f qcow2 -O qcow2 -o compat=1.1,lazy_refcounts=off custom-ubuntu.qcow2 final-incus-image.qcow2Agora sua imagem .qcow2está pronta para ser importada na Magalu Cloud.
Para garantir que sua imagem esteja compatível com a plataforma revise os Pré-requisitos obrigatórios de importação. Para otimizar desempenho, segurança e manutenção das suas imagens, consulte também o Guia de Boas Práticas de Imagens Customizadas.