Vários consoles convidados virsh / kvm sem gráficos

1

Eu tenho um console serial trabalhando para um convidado centos7 sem gráficos, que eu acesso com virsh console vm . O convidado tem o parâmetro apropriado da linha de comando do kernel console=ttyS0,115200n8 para ele.

É possível configurar consoles adicionais, para que eu possa dizer virsh console vm --devname vc1 e obter um prompt de login?

Instintivamente, eu estava pensando em conectar de alguma forma os dispositivos de personagens dos primeiros 6 consoles virtuais do convidado; Eu procurei no formato de domínio libvirt e virtio-serial como parecia que eu deveria ir nessa direção, mas não consegui fazê-lo funcionar.

Histórico: Tivemos problemas de rede que levaram um tempo significativo para consertar, durante os quais precisávamos de um membro da equipe para trabalhar em problemas de rede e o outro para continuar seu trabalho na VM ininterruptamente, portanto, a necessidade de vários consoles sem rede. p>

Estou ciente de que ter

<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>
  <listen type='address' address='127.0.0.1'/>
</graphics>

ativa o acesso VNC com 6 terminais virtuais, eu estava simplesmente imaginando se é possível ter esses 6 terminais virtuais via sintaxe virsh console <domain> --device <device> de qualquer maneira razoável, simplesmente porque virsh console é muito mais conveniente.

Software:

# cat /etc/fedora-release # host
Fedora release 24 (Twenty Four)
# virsh --version
1.3.3.3
# qemu-system-x86_64 --version
QEMU emulator version 2.6.2 (qemu-2.6.2-8.fc24), Copyright (c) 2003-2008 Fabrice Bellard

# cat /etc/centos-release # guest
CentOS Linux release 7.3.1611 (Core)
    
por Irfy 02.08.2017 / 16:10

1 resposta

1

Eu freqüentemente uso vários "consoles" em minhas VMs - uma para um console interativo mostrando a inicialização e terminando com um prompt de login e outra para registrar tudo isso em um arquivo de texto (geralmente /var/lib/libvirt/consoles/<domain>.log )

Não sei se você pode ter vários " interactive " consoles "em uma VM, mas pode adicionar quantas portas seriais desejar e, em seguida, executar getty sobre eles na VM para o prompt de login.

Essas portas seriais na VM podem ser conectadas a, por exemplo, um arquivo ou um soquete, ou uma porta TCP no host que fala telnet protocol. O mais fácil de trabalhar é provavelmente uma porta telnet.

por exemplo. para adicionar uma porta serial serial ttyS1 que pode ser acessada via telnet , salve o seguinte fragmento XML em /tmp/serial1.xml :

<serial type='tcp'>
  <source mode='bind' host='127.0.0.1' service='4555' tls='no'/>
  <protocol type='telnet'/>
  <target port='1'/>
  <alias name='serial1'/>
</serial>

Em seguida, execute virsh attach-device --config <domain> /tmp/serial1.xml .

Isso adicionará um dispositivo de porta serial à VM, que será ativado na próxima vez em que a VM for reiniciada. (Pode haver alguma maneira de adicioná-lo como um dispositivo USB hot-pluggable ao invés de uma porta serial não-USB, e evitar a necessidade de reiniciar a VM. Eu nunca me importei o suficiente para descobrir).

Após a reinicialização da VM, execute um getty na porta. por exemplo. com sysvinit, edite /etc/inittab e execute telinit q .

com o systemd:

systemctl enable [email protected]
systemctl start [email protected]

Para conectar-se à porta serial da VM a partir do host KVM, execute telnet 127.0.0.1 4555 .

Você pode criar quantas portas seriais quiser, cada uma escutando em uma porta diferente. Basta alterar o número da porta tcp ( service= ), a porta de destino e o nome do alias no fragmento XML.

Se você precisar acessá-lo de outra máquina, poderá fazê-lo ouvir em um endereço IP diferente (embora provavelmente você queira tls='yes' nesse caso e usar um cliente telnet habilitado para tls para se conectar, o que requer a configuração de um certificado para qemu usar).

Por exemplo, adicionei duas portas seriais a uma máquina Debian Stretch:

Primeiro, ttyS1 no host local: 4555

$ telnet localhost 4555
Trying 127.0.0.1...
Connected to localhost.mydomain.
Escape character is '^]'.

Debian GNU/Linux 9 stretch ttyS1

stretch login: 
telnet> quit
Connection closed.

Então ttyS2 no localhost: 4556

$ telnet localhost 4556
Trying 127.0.0.1...
Connected to localhost.mydomain.
Escape character is '^]'.

Debian GNU/Linux 9 stretch ttyS2

stretch login: 
telnet> quit
Connection closed.
    
por 04.08.2017 / 03:31