A libvirt pode verificar se a máquina virtual é totalmente inicializada? Pode outra ferramenta?

5

Atualmente eu tenho uma pequena VM para fazer certos testes (ela tem vários benefícios - como testar em outra distribuição, o Fedora 15, bem como executar make distcheck sem o problema de poluir / ).

No entanto, eu gostaria de automatizar testes e gostaria de poder programaticamente (por exemplo, usando sh, python, c, ...) fazer o seguinte:

  • Inicialize sem interrupção uma VM ( qemu ) da imagem local
  • Espere até que a VM seja totalmente inicializada (essa é a parte mais difícil - inicialmente eu pensei sobre o sono mágico)
  • Sincronize o repositório entre host e guest (não necessário neste momento)
  • Executar ./autogen && make && sudo make install && sudo make distcheck na máquina
  • Faça o download dos tarballs gerados a partir da máquina

Eu comecei a ler sobre libvirt e pode permitir que eu use uma API para isso. Enquanto isso exigiria suporte de convidado e não posso encontrar documentação sobre ele, essa capacidade parece ser um elemento lógico de libvirt .

É possível verificar se a máquina foi totalmente inicializada? Existe uma ferramenta pronta para fazer isso?

EDITAR: Por inicialização completa, quero dizer que os scripts do sistema rc terminaram a execução / todos os serviços do systemd que deveriam ser iniciados. Eu sei que qemu não pode saber quando isso acontece, mas eu assumo o apoio no lado do convidado.

    
por Maciej Piechotka 16.09.2011 / 09:19

4 respostas

7

Afaik, libvirt não sabe o que "totalmente inicializado" significa (nem eu). Você poderia fazer um serviço que se conecte ao seu host (ou outra máquina) durante a inicialização. Ou você pode tentar se conectar em um loop ao seu convidado, por exemplo, com ssh.

Outra solução seria confiar em um serviço existente que se comunica com o host, como o vdagent. Você poderia facilmente escrever um script python spice-gtk que esperaria até que o canal do agente Spice estivesse conectado (veja o exemplo spicy.c, a barra de status indica a presença do agente)

Note que o teste "make distcheck" não deve poluir / e não deve precisar de sudo. Em caso afirmativo, parece um problema no seu makefile.

    
por 16.09.2011 / 11:57
3

porque não basta criar um script rc que seja executado após os outros e registre uma mensagem "FULLY BOOTED". Em seguida, faça o syslog encaminhar para o host vm e aguarde até que a mensagem apareça nos arquivos de log no host.

é o que eu faria, de qualquer forma.

    
por 16.09.2011 / 13:55
2

Você pode instalar essa ferramenta em vm: link    O Qemu_guest_agent avisará quando a vm estiver totalmente inicializada.

Você também pode instalar o agente guest de especiaria em vm. Se o agente de convidado de especiaria tiver iniciado, vm será totalmente inicializado.

    
por 15.08.2013 / 08:13
0

Isto pode não estar relacionado ao libvirt. Para um convidado totalmente inicializado, pode haver alguma porta ouvida, no Linux, pode ser 22, para o Windows, pode ser alguma porta listada aqui . Você pode usar nc para testar se a porta é ouvida no guest.

Some times nc is not the best choice(the timeout option of nc does not work), write a simple TCP client to connect the port is more convenient.

    
por 17.04.2017 / 05:26