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-img
para 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 genisoimage para criar o arquivo
.iso
a partir desses arquivos. A flag\-r
preserva permissões de leitura, e a\-V
define 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-install
ou a interface gráfica do virt-manager para iniciar uma máquina virtual usando a imagemcustom-ubuntu.qcow2
como disco. -
O
virt-install
permitirá 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.qcow2
criado 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.iso
na 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.iso
criado 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.qcow2
Agora sua imagem
.qcow2
está 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.