Invocar um script dentro de um guest KVM, antes que a rede esteja disponível?

2

Com o PowerCLI da VMware, você pode invocar um script dentro de um convidado, mesmo antes de o convidado ter a rede, usando o Cmdlet Invoke-VMScript (requer que o vmtools esteja instalado).

Existe um mecanismo semelhante disponível para invocar scripts dentro de convidados do KVM, antes que a rede esteja disponível?

Eu preciso para personalizações pós-implantação.

Como solução alternativa, pensei em montar a imagem do disco e o chrooting, mas estou procurando uma maneira mais "programável" e direta.

Obrigado.

    
por BlackBeret 20.11.2012 / 12:24

3 respostas

2

Fornecemos a cada convidado um dispositivo de bloco secundário, somente leitura, anexado a um arquivo simples no host. O host da VM pode usar esse canal para transmitir informações específicas do convidado para o convidado de uma maneira unidirecional segura: em nossa instalação, é apenas um arquivo tar com personalizações do sistema de arquivos & scripts de inicialização. A superfície de ataque do host guest > é mínima e não temos que lidar com a sobrecarga significativa imposta pela libguestfs.

Aqui está o snippet XML de convidado libvirt que usamos:

<disk type='file' device='disk'>
  <driver name='qemu' type='raw' cache='none' io='native'/>
  <source file='/vm/hostconf/testhost.hostconf.tar'/>
  <target dev='vdb' bus='virtio'/>
  <readonly/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>

No convidado, um pequeno script de inicialização descompacta o arquivo tar e faz as alterações necessárias.

    
por 26.02.2013 / 20:40
1

Existe uma maneira muito padrão de executar scripts em qualquer distro Linux antes de a rede aparecer, que é colocá-los na seqüência de inicialização antes do início da rede. Por exemplo, na minha caixa do CentOS 6, a rede é iniciada por /etc/rc3.d/S10network . Então, se eu quisesse rodar alguma coisa antes do surgimento da rede, eu poderia colocá-la como /etc/rc3.d/S05myscript .

Para distribuições que consumiram o upstart ou systemd coolaid, haverá outras maneiras mais complexas de fazer isso; mas o ponto ainda se aplica.

Editar : é exatamente isso que você quis dizer com "antes de trabalhar em rede", não é exatamente o que você quis dizer com "invocar um script". Você quer invocar o script de em outro lugar que não seja a própria máquina (nesse caso, do host KVM), o que é bom, e eu concordo que a minha solução não ajuda - mas você deve realmente revisar sua pergunta para tornar suas necessidades mais claras!

Por acaso, não sei como fazer isso com o KVM.

    
por 20.11.2012 / 13:11
1

Portanto, existem três opções aqui:

  1. Use a API libvirtd para obter acesso ao console e executar comandos dessa maneira. Eu não aconselho isso como é um pouco de um hack sujo. A menos que você desabilite a rede de iniciar imediatamente por padrão, você terá que
  2. Use libguestfs para montar o disco e ajustar as configurações antes de inicializar. Isto é o que o sistema que eu projetei faz, é realmente muito fácil de fazer e não é complicado de gerenciar. Usamos perl e o Sys :: GuestFS nos permite criar comandos de script sem muitos problemas.
  3. Configure a máquina para trazer a rede via dhcp e execute um servidor dhcpd que lhe dê um endereço IP temporário, então conecte via ssh e ajuste a configuração de rede e recarregue-a. Esta é a solução mais robusta, mas requer que você faça o script de um servidor dhcpd. Espero que ajude.
por 22.11.2012 / 16:21