Convertendo uma imagem EC2 AMI em vmdk

18

Cheguei bem perto de inicializar o Amazon Linux no VirtualBox, graças a esta resposta e a esses sites . Uma rápida visão geral das etapas que eu segui:

  1. Iniciar instância do EC2 com o Amazon Linux 2011.09 AMI de 64 bits
  2. ddo conteúdo do volume EBS sshpara um arquivo de imagem local.
  3. Monte o arquivo de imagem como um dispositivo de loopback e, em seguida, em um ponto de montagem local.
  4. Crie um novo arquivo de imagem de disco vazio, particione com um deslocamento para um carregador de inicialização e crie um sistema de arquivos ext4.
  5. Monte a partição da nova imagem e copie tudo da imagem do EC2.
  6. Instale o grub (usando o grub-legacy-ec2pacote do Ubuntu , não o grub2).
  7. Converta o arquivo de imagem em vmdk usando qemu-img.
  8. Crie uma nova VM do VirtualBox com o vmdk.

Agora a VM é inicializada, o grub é carregado e o kernel é encontrado. Mas falha ao tentar montar o dispositivo raiz:

dracut Warning: No root device "block:/dev/xvda1" found

dracut Warning: Boot has failed. To debug this issue add "rdshell" to the kernel command line.


dracut Warning: Signal caught!

dracut Warning: Boot has failed. To debug this issue add "rdshell" to the kernel command line.
Kernel panic - not syncing: Attempted to kill init!
Pid: 1, comm: init Not tainted 2.6.35.14-107.1.39.amzn1.x86_64 #1

Eu tentei mudar /boot/grub/menu.lstpara encontrar o dispositivo raiz por rótulo e UUID, mas nada funciona. Acho que o kernel xen não é compatível com o VirtualBox.

O raciocínio por trás de todo esse esforço é criar uma caixa do Vagrant o mais próximo possível do ambiente de produção, para que as implantações possam ser testadas localmente. Sei que é barato fazer testes no EC2, mas a falta de conectividade costuma arruinar a experiência. Além disso, seria muito bom ter uma máquina virtual com o ambiente de produção, para que os colegas de trabalho não precisem instalar tudo sob o sol apenas para começar a trabalhar com o desenvolvimento de aplicativos.

Se eu tentasse executar um kernel diferente, que kernel poderia ficar o mais próximo possível do Amazon Linux 2011.09?

Reed G. Law
fonte
Estava fazendo um trabalho semelhante ao seu e encontrei a solução em outro link .. compartilhando com você também. Testei isso e funcionou para mim ... blog.zorangagic.com/2015/03/…
Pratap

Respostas:

7

Eu tentei muito e estava desistindo, mas no final eu consegui!

Eu consegui inicializar com uma Amazon Linux AMI portada em vmware!

Eu sou quase um novato, mas fiz isso, após horas de testes, substituindo o kernel original da amazon por um vmlinuz-2.6.32-38-generic retirado de uma distribuição do ubuntu 64 10.04.

Eu recebo muitos erros porque a configuração amazon dentro da AMI está procurando algo em um endereço interno que obviamente não encontra. É o / usr / bin / cloud-init, eu acho.

Mas consigo entrar lá, e parece que tudo está funcionando!

Obrigado pela ajuda!!

Eu escrevi este post no blog com instruções passo a passo para migrar da AMI para o VMware.

Espero que isto ajude!

Emanuele Preda
fonte
BTW, Reed, cheguei exatamente no ponto em que afirmou (dracut dizendo "nenhum dispositivo raiz encontrada" ... fez você se move mais longe ??
Emanuele Preda
Cheguei basicamente à mesma solução que você: copiando o kernel do Ubuntu. Funciona, mas nesse momento não sei o desempenho do sistema com o AMI do Amazon Linux.
Reed G. Lei
Veja também a minha resposta aqui , que oferece 2 métodos alternativos atualizados para exportar para o VirtualBox / VMWare VMDK, bem como instruções sobre como usar o seu recém-criado VMDK com Vagrant
Código Bling
2

O kernel oficial Amazon derivou deles na distribuição 2011.09 , ou seja , 2.6.35.14.

Provavelmente você pode obter o pacote de origem do Amazon get_reference_source, mas eu não esperaria que ele funcionasse fora do Amazon.

Pierre Carrier
fonte
1

As pessoas do Cloudify compartilharam como criam uma caixa Vagrant pronta para o VirtualBox, sem acesso a máquinas bare metal - elas usam a AWS.

9 passos para o céu:

  • Crie uma imagem de origem (AMI) [...] usando o Packer.
  • Inicie uma instância de trabalho na AWS com a imagem instantânea ou de origem como um de seus discos.
  • Na imagem do trabalhador: Crie um volume de imagem bruto como um arquivo e crie uma partição ext4 nele.
  • Copie os dados do disco da imagem de origem para a partição ext4 criada anteriormente.
  • Instale o carregador de inicialização (extlinux) na partição ext4.
  • Converta a imagem bruta em um VMDK.
  • Agrupe o VMDK usando um descritor OVF e metadados do Vagrant e crie um arquivo tar com o conteúdo e a extensão .box.
  • Faça o upload para o S3 [ou o que você quiser].
  • Limpar.

Fonte : postagem do blog em http://www.developer.com/design/creating-a-reproducible-and-portable-development-environment.html com as 9 etapas acima

Código : https://github.com/cloudify-cosmo/cloudify-packager/tree/3.2m4/image-builder

Fredrik Wendt
fonte