- Início
- Criando sua Imagem de Cloud do Zero com Libvirt
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.imgqemu-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-configusers:- name: ubuntugroups: sudosudo: ALL=(ALL) NOPASSWD:ALLssh_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.img2 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-configusers:- name: ubuntugroups: sudosudo: ALL=(ALL) NOPASSWD:ALLssh_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 updatesudo apt install -y incussudo 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.