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!

badbishop
fonte
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

Brayden
fonte
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.

dyasny
fonte
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.

Johnny Baloney
fonte
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

katriel
fonte
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
slm
fonte
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.

Jonathan Ross
fonte
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