provisionar um console serial em uma VM para o dispositivo virtual usando o virt-install

2

Eu tenho um dispositivo virtual ( qcow2 image) que requer o console serial em uma VM. Em outras palavras, não preciso instalar nada. Eu simplesmente preciso inicializar a VM a partir desse disco qcow2 e acessar o dispositivo virtual via interface serial. É possível fazer isso com virt-install ? Quando eu adiciono o --extra-args="console=ttyS0,115200" ao virt-install , ele requer que eu especifique um --location . Existe uma solução alternativa para inicializar uma máquina virtual com serial habilitada usando virt-install , mas não especificando uma fonte de instalação de árvore de distribuição?

    
por Martin 24.09.2018 / 16:35

1 resposta

2

Sim, isso é possível, embora haja várias etapas para adicionar um console serial.

--extra-args só pode ser usado em combinação com --location . Como você está trabalhando a partir de uma imagem de disco local qcow2 , --location não é realmente o mecanismo que você está procurando.

Em vez disso, você está procurando por --console :

console:

--console
  Connect a text console between the guest and host. Certain guest and 
  hypervisor combinations can automatically set up a getty in the guest, so an
  out of the box text login can be provided (target_type=xen for xen paravirt
  guests, and possibly target_type=virtio in the future).

Na prática, isso é adicionado da seguinte forma (em um sistema Linux moderno):

--console pty,target_type=virtio 

Nota : pode obter mais opções sobre as configurações disponíveis aqui: link

Como eu já tinha preparado um appliance baseado em QCOW2, pude testá-lo da seguinte maneira:

virt-install --name thing --memory 512 \
    --console pty,target_type=virtio --disk appliance.qcow2 --boot hd

Nos bastidores, isso está realizando diversas adições ao "domínio" (um arquivo XML que armazena a configuração do host). Por exemplo:

<controller type='virtio-serial' index='0'>
  <alias name='virtio-serial0'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</controller>

<console type='pty' tty='/dev/pts/14'>
  <source path='/dev/pts/14'/>
  <target type='virtio' port='0'/>
  <alias name='console0'/>
</console>

<channel type='spicevmc'>
  <target type='virtio' name='com.redhat.spice.0' state='disconnected'/>
  <alias name='channel0'/>
  <address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>

Se isso não funcionar, você também pode fazer isso editando as opções de inicialização dentro do appliance com uma ferramenta como guestfish ( link ) ou especificando a localização do kernel, initrd e fornecendo as opções manualmente com --boot . No caso do guestfish, existe até uma receita para conseguir o que você está procurando: guestfish-recipies: Edite a configuração do grub em uma VM .

boot:

--boot 
  Optionally specify the post-install VM boot configuration. This option
  allows specifying a boot device order, permanently booting off
  kernel/initrd with option kernel arguments, and enabling a BIOS boot menu
  (requires libvirt 0.8.3 or later)

       --boot kernel=KERNEL,initrd=INITRD,kernel_args="console=/dev/ttyS0"
           Have guest permanently boot off a local kernel/initrd pair, with the 
           specified kernel options.
    
por 01.10.2018 / 19:58

Tags