Convidado KVM instalado a partir do console. Mas como chegar ao console do hóspede?


28

Estou tentando instalar um convidado totalmente virtualizado (Fedora 14 x86_64) no KVM (RHEL 6), usando apenas a linha de comando (hipervisor e convidado). Vai sem erros e sem um resultado tangível. Gostaria de saber como fazer uma instalação somente de texto.

Então, aqui está o que eu fiz:

# virt-install \
--name=FE --ram=756 --vcpus=1 \
--file=/var/lib/libvirt/images/FE.img  --network bridge:br0 \
--nographics --os-type=linux  \
--extra-args='console=tty0' -v \
--cdrom=/media/usb/Fedora-14-x86_64-Live-Desktop.iso 


Starting install...
Creating domain...                                                                                                                                                        |    0 B     00:00     
Connected to domain FE
Escape character is ^]
ÿ

O que agora? Pelo que entendi, depois de pesquisar no Google por alguns dias, eu deveria ver a saída do convidado da instalação de texto, mas nada acontece. o virt-viewer não pode se conectar a ele, sugerindo gentilmente que eu explore todas as opções adicionando --help (o que fiz). Se eu me reconectar com o virsh, vejo o seguinte:

Domain installation still in progress. You can reconnect to 
the console to complete the installation process.
[root@v ~]
# virsh console FEConnected to domain FE
Escape character is ^]

Isso mostra que a VM está sendo executada

# virsh list
 Id Name                 State
----------------------------------
  8 FE                   running

Log do Qemu:

LC_ALL=C PATH=/sbin:/usr/sbin:/bin:/usr/bin /usr/libexec/qemu-kvm -S -M rhel6.0.0 -enable-kvm -m 756 -smp 1,sockets=1,cores=1,threads=1 -name FE -uuid 6989d008-7c89-424c-d2d3-f41235c57a18 -nographic -nodefconfig -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/FE.monitor,server,nowait -mon chardev=monitor,mode=control -rtc base=utc -no-reboot -boot d -drive file=/var/lib/libvirt/images/FE.img,if=none,id=drive-ide0-0-0,format=raw,cache=none -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -drive file=/media/usb/Fedora-14-x86_64-Live-Desktop.iso,if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev tap,fd=20,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:0a:65:8d,bus=pci.0,addr=0x2 -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -usb -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 
char device redirected to /dev/pts/1

Saída de /etc/libvirt/qemu/FE.xml

# cat /etc/libvirt/qemu/FE.xml 
<domain type='kvm'>
  <name>FE</name>
  <uuid>6989d008-7c89-424c-d2d3-f41235c57a18</uuid>
  <memory>774144</memory>
  <currentMemory>774144</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='x86_64' machine='rhel6.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source file='/var/lib/libvirt/images/FE.img'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' unit='0'/>
    </disk>
    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:0a:65:8d'/>
      <source bridge='br0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target port='0'/>
    </console>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Obviamente, estou sentindo falta de algo que muitos outros não, mas o que é? Thanx antecipadamente!


3
Como você conseguiu que a opção --extra-args funcionasse com --cdrom? De acordo com a página de manual virt-install --extra-args só funciona com --location?
SLM

4
Eu removi --network bridge:br0, mudei cdrompara locatione extra-argspara --extra-args='console=tty0 console=ttyS0,115200n8 serial'e funcionou!
alguns

2
Mudei apenas o cdrom para o local e adicionei "extra-args". Não é necessário remover as opções --network.
precisa

1
Por qualquer motivo --cdrom, não funciona com argumentos extras, mas --location(ou -l) funciona. Mesmo caminho e tudo.
Rick Chatham

Respostas:


9

Copiei em --extra-args='console=ttyS0'algum lugar da Internet da última vez, funciona!

  • Não há necessidade de dois comandos "console", que apenas abrem dois consoles em vez de um
  • Não há necessidade de especificar manualmente a taxa de transmissão.
  • A opção "--serial" foi descontinuada
  • O dispositivo do console RedHat é "/ dev / ttyS0", não "/ dev / tty0"

Consulte: http://anaconda-installer.readthedocs.io/en/latest/boot-options.html


7

--nographicsé usado e você não possui um console configurado no convidado, além do console tty0. Se você deseja um console gráfico, especialmente disponível remotamente, precisará ativar o vga e o vnc, ou o qxl e o spice. este é um exemplo: http://www.linux-kvm.com/content/tip-how-run-headless-guest-machine-using-vnc-kvm

http://www.linux-kvm.com/content/running-kvm-nographics-no-console-output ou http://ubuntuforums.org/showpost.php?p=9610421&postcount=7 também é uma solução.


Obrigado por responder, dyasny. Escolhendo seus pontos: 1. Não, NÃO quero um console gráfico (veja meu post) 2. Sim, tenho tentado esta e outras soluções semelhantes. Não funcionou para mim.
badbishop

Eu tentaria perguntar sobre linux-kvm.org ou na lista de discussão libvirt
dyasny

6

Eu tive um problema semelhante ao tentar executar uma instalação somente de texto do CentOS. Tudo se resume a adicionar argumentos do kernel para especificar o console de saída serial, console=ttyS0para que você possa se conectar a ele quando --graphics noneou --nographicsfor usado. Do virt-installmanual:

--gráficos nenhum

Nenhum console gráfico será alocado para o convidado. Convidados totalmente virtualizados (Xen FV ou QEmu / KVM) precisarão ter um console de texto configurado na primeira porta serial do convidado (isso pode ser feito através da opção --extra-args). O Xen PV configurará isso automaticamente. O comando 'virsh console NAME' pode ser usado para conectar-se ao dispositivo serial.

Consegui resolvê-lo de duas maneiras:

  1. modificando a imagem iso e usando a --cdromopção
  2. expondo a imagem iso como compartilhamento NFS e usando a --locationopção com--extra-args

1. Modificando a imagem

Para modificar os parâmetros do kernel no disco de instalação iso:

  1. Obtenha um programa que permita manipular imagens, por exemplo, isomaster .
  2. Vá para o isolinux/isolinux.cfgarquivo na imagem, abra-a, encontre a primeira linha initrd=nela e inclua- console=ttyS0a e todas as outras linhas que possuem o parâmetro mencionado.
  3. Salve o arquivo e a imagem.
  4. Use a imagem modificada virt-installcomo de costume, por exemplo:

    $ sudo virt-install --name centos-vm --ram 1024 --disk path=/home/user/domains/centos-vm --cdrom /home/user/images/centos-modified.iso --os-type linux --nographics --accelerate
    

Feito.

2. Usando um compartilhamento NFS

  1. Monte a imagem:

    $ sudo mount -o loop,unhide -t iso9660 -r /home/user/images/CentOS.iso /home/user/mnt/cdrom
    
  2. Inicie o serviço NFS se não estiver em execução: service nfs start

  3. Adicione a seguinte linha /etc/exportspara disponibilizá-la aos clientes:

    /home/user/mnt/cdrom    *(ro,insecure,all_squash)
    
  4. Atualize a tabela de exportação do sistema com:

    $ exportfs -r
    
  5. Use o compartilhamento virt-installpara garantir a inclusão --extra-args, por exemplo:

    $ sudo virt-install --name centos-vm --ram 1024 --disk path=/home/user/domains/centos-vm --location /home/user/mnt/cdrom --os-type linux --nographics --accelerate --extra-args="console=ttyS0"
    
  6. Durante a instalação do CentOS, você recebe uma solicitação perguntando sobre a localização dos arquivos de instalação. Você precisa digitar o endereço da sua máquina e o caminho completo para o compartilhamento.

Feito.


Eu tentei o seu segundo método para montar o arquivo iso, mas recebi este erro Iniciando a instalação ... Recuperando arquivo .treeinfo ... | 552 B 00:00:00 ERRO Nenhuma opção 'kernel' na seção: 'images-x86_64' eu montei o arquivo iso no / mnt e uso --location / mnt no virt-install
public_name

@public_name Tente não montar o iso, mas apenas especifique o caminho para o iso depois do --locationlike --location /tmp/centos6.iso.
Rick Chatham

Trabalhou no Ubuntu 16, editando isolinux / txt.cfg em vez de isolinux / isolinux.cfg.
John McGehee

2

Você precisa executar o instalador do Fedora no modo de texto. Tente adicionar 'texto' aos argumentos extras. Como alternativa, você pode tentar adicionar "vnc", o que permitirá que você se conecte ao instalador pelo VNC assim que for iniciado


1
Verifiquei, para uma nova libvirt, você não pode usar -x e --cdrom. Tente montar a algum lugar cdrom na rede e usando --location somewhere.com/mounted-iso --graphics nenhum --extra-args "console = ttyS0,115200 decapitado texto"
Katriel

1

Eu venho fazendo minhas instalações há um tempo agora usando sapateiro e koan. Dentro do sapateiro, defino minhas opções do kernel da seguinte maneira no meu perfil Centos60-x86_64:

Kernel Options: serial console=ttyS0,115200
Kernel Options (Post Install): console=ttyS0,115200

Após a inicialização, você pode usar console = tty0 console = ttS0,115200 para obter o console para mostrar em dois dispositivos; isso não funciona para instalação. Se você editar as opções do grub em / etc / grub e gerar novamente o grub.conf, as configurações do console serial sobreviverão à atualização do kernel. Adicione "texto" à linha de comando do kernel para impedir que o instalador inicie uma GUI.

Quando minhas instâncias de convidado KVM são iniciadas, eu me conecto a elas enquanto estiver logado no host KVM e me conecto ao console de um convidado como este:

[root@vmhost ~]# virsh console guestvm

Eu vejo isso no meu shell:

Connected to domain guestvm
Escape character is ^]

CentOS Linux release 6.0 (Final)
Kernel 2.6.32-71.el6.x86_64 on an x86_64

guestvm login: 

Uma observação final, quando digo ao koan para começar a construir um dos meus convidados KVM, chamo-o com a opção --nogfx da seguinte maneira:

koan --server 192.168.1.1 --virt --nogfx --system=guestvm

1

Eu acho que você está vendo um console mal configurado.

Talvez tente isso ou algo semelhante:

Primeiro, adiciono a linha do console à minha configuração do grub, por exemplo, para um convidado do Arch: kernel / vmlinuz26 root = / dev / vda2 ro console = ttyS0,115200 Em seguida, edito o / etc / inittab para ativar o ttyS0 (o mesmo convidado do Arch): co: 23 : respawn: / sbin / agetty -8 115200 ttyS0 linux. E certifique-se de ter ttyS0 em seu / etc / securetty.

Mais informações aqui: ` http://www.linux-kvm.com/content/running-kvm-nographics-no-console-output

--editar--

Você pode tentar console=ttyS0,115200verificar outros parâmetros possíveis do console, talvez.


O BTW também --extra-args=leva outras configurações do console diretamente.
Jonathan Ross

De acordo com o texto que você citou, preciso modificar o / etc / inittab no guest. O problema é: como interajo com o convidado? Desculpe, não estou entendendo.
badbishop

Desculpe, veja editar, eu não estava muito claro.
Jonathan Ross

Sim, eu tentei --extra-args = 'console = ttyS0' também antes de postar a pergunta.
badbishop

Desculpe, eu quis dizer console=ttyS0,115200e, presumivelmente, existem outros parâmetros para isso que você pode tentar. Eu ainda acho que você tem um console mal configurado de alguma descrição.
Jonathan Ross
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.