KVM Guest instalado desde la consola. ¿Pero cómo llegar a la consola del invitado?

28

Estoy tratando de instalar un invitado totalmente virtualizado (Fedora 14 x86_64) en KVM (RHEL 6), usando solo la línea de comandos (tanto el hipervisor como el invitado). Va sin errores y sin un resultado tangible. Me gustaría saber cómo hacer una instalación de solo texto.

Entonces, esto es lo que he hecho:

# 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 ^]
ÿ

¿Ahora que? Según tengo entendido después de buscar en Google durante un par de días, debería ver el resultado del invitado de la instalación de texto, pero no sucede nada. virt-viewer no puede conectarse a él, sugiriendo amablemente que explore todas las opciones agregando --help (lo cual hice). Si me vuelvo a conectar con virsh, veo esto:

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 ^]

Esto muestra que VM se está ejecutando

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

Registro de 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

Salida 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 me estoy perdiendo algo que muchos otros no, pero ¿qué es? Gracias de antemano!

obispo
fuente
3
¿Cómo pudiste hacer que el interruptor --extra-args funcionara con --cdrom? Según la página de manual de virt-install --extra-args solo funciona con --location?
slm
44
He quitado --network bridge:br0, cambiado cdroma location, y extra-argsa --extra-args='console=tty0 console=ttyS0,115200n8 serial'y funcionó!
Algunos
2
Solo cambié cdrom a ubicación y agregué "args extra". No es necesario eliminar las opciones de red.
twan163
1
Por alguna razón --cdrom, no funciona con argumentos extra pero --location(o -l) sí. Mismo camino y todo.
Rick Chatham

Respuestas:

9

Copié en --extra-args='console=ttyS0'algún lugar de Internet la última vez, ¡funciona!

  • No hay necesidad de dos comandos de "consola", eso solo abre dos consolas en lugar de una
  • No es necesario especificar manualmente la velocidad en baudios.
  • La opción "--serial" ha quedado en desuso
  • El dispositivo de consola RedHat es "/ dev / ttyS0", no "/ dev / tty0"

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

Brayden
fuente
7

--nographicsse usa y no tiene una consola configurada en el invitado, además de la consola tty0. Si desea una consola gráfica, especialmente disponible de forma remota, necesitaría habilitar vga y vnc, o qxl y spice. Este es un ejemplo: 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 o http://ubuntuforums.org/showpost.php?p=9610421&postcount=7 también es una solución.

dyasny
fuente
Gracias por responder, dyasny. Cómo elegir sus puntos: 1. No, NO quiero una consola gráfica (vea mi publicación) 2. Sí, he estado probando esta y otras soluciones similares. No me funcionó.
badbishop
Intentaría preguntar en linux-kvm.org o en la lista de correo de libvirt
dyasny
6

Tuve un problema similar al intentar realizar una instalación de CentOS de solo texto. Todo se reduce a agregar argumentos del kernel para especificar la consola de salida en serie console=ttyS0para que luego pueda conectarse a ella cuando --graphics noneo --nographicsse use. Del virt-installmanual de:

--graphics ninguno

No se asignará una consola gráfica para el invitado. Los invitados totalmente virtualizados (Xen FV o QEmu / KVM) deberán tener una consola de texto configurada en el primer puerto serie del invitado (esto se puede hacer a través de la opción --extra-args). Xen PV configurará esto automáticamente. El comando 'virsh console NAME' se puede usar para conectarse al dispositivo serie.

He logrado resolverlo de dos maneras:

  1. modificando la imagen iso y usando la --cdromopción
  2. exponiendo la imagen iso como NFS share y usando la --locationopción con--extra-args

1. Modificar la imagen

Para modificar los parámetros del kernel en el disco de instalación iso:

  1. Obtenga un programa que permita manipular imágenes, por ejemplo, isomaster .
  2. Vaya al isolinux/isolinux.cfgarchivo en la imagen, ábralo, encuentre la primera línea con initrd=él y añádalo console=ttyS0a él y a todas las demás líneas que tengan el parámetro mencionado.
  3. Guarda el archivo y la imagen.
  4. Use la imagen modificada virt-installcomo de costumbre, por ejemplo:

    $ 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
    

Hecho.

2. Usando un recurso compartido NFS

  1. Monta la imagen:

    $ sudo mount -o loop,unhide -t iso9660 -r /home/user/images/CentOS.iso /home/user/mnt/cdrom
    
  2. Inicie el servicio NFS si no se está ejecutando: service nfs start

  3. Agregue la siguiente línea /etc/exportspara que esté disponible para los clientes:

    /home/user/mnt/cdrom    *(ro,insecure,all_squash)
    
  4. Actualice la tabla de exportación del sistema con:

    $ exportfs -r
    
  5. Use el virt-installrecurso compartido asegurándose de incluir --extra-args, por ejemplo:

    $ 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 la instalación de CentOS, aparece un mensaje preguntando sobre la ubicación de los archivos de instalación. Debe escribir la dirección de su máquina y la ruta completa al recurso compartido.

Hecho.

Johnny Baloney
fuente
He intentado su segundo método para montar el archivo iso pero recibí este error Iniciando la instalación ... Recuperando el archivo .treeinfo ... | 552 B 00:00:00 ERROR No hay opción 'kernel' en la sección: 'images-x86_64' monte el archivo iso en / mnt y uso --location / mnt en virt-install
public_name
@public_name Intenta no montar la iso sino simplemente especificar la ruta a la iso después de --locationlike --location /tmp/centos6.iso.
Rick Chatham
Trabajó en Ubuntu 16, editando isolinux / txt.cfg en lugar de isolinux / isolinux.cfg.
John McGehee
2

Necesita ejecutar el instalador de Fedora en modo texto. Intente agregar 'texto' a los argumentos adicionales. Alternativamente, puede intentar agregar "vnc" que le permitirá conectarse al instalador a través de VNC una vez que se inicie

katriel
fuente
1
Lo comprobé, para una nueva libvirt, no puedes usar -x y --cdrom. Intente montar el cdrom en algún lugar de la red y use --location somewhere.com/mounted-iso --graphics none --extra-args "console = ttyS0,115200 text headless"
katriel
1

He estado haciendo mis instalaciones por un tiempo usando zapatero y koan. Dentro de cobbler configuré las opciones de mi kernel de esta manera en mi perfil Centos60-x86_64:

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

Después del arranque, puede usar console = tty0 console = ttS0,115200 para que la consola se muestre en dos dispositivos; Esto no funciona para la instalación. Si edita las opciones de grub en / etc / grub y regenera grub.conf, la configuración de la consola serie sobrevivirá a una actualización del kernel. Agregue "texto" a la línea de comando del núcleo para evitar que el instalador inicie una GUI.

Cuando comienzan mis instancias de invitado KVM, me conecto a ellas mientras estoy conectado al host KVM y me conecto a la consola de un invitado de esta manera:

[root@vmhost ~]# virsh console guestvm

Entonces veo esto en mi caparazón:

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: 

Una nota final, cuando le digo a koan que comience a construir uno de mis invitados KVM, lo llamo con el interruptor --nogfx de esta manera:

koan --server 192.168.1.1 --virt --nogfx --system=guestvm
slm
fuente
1

Supongo que estás viendo una consola mal configurada.

Tal vez intente esto o similar:

Primero agrego la línea de consola a mi configuración de grub, por ejemplo, para un invitado de Arch: kernel / vmlinuz26 root = / dev / vda2 ro console = ttyS0,115200 Luego edito / etc / inittab para habilitar ttyS0 (mismo invitado de Arch): co: 23 : reaparecer: / sbin / agetty -8 115200 ttyS0 linux. Y asegúrese de tener ttyS0 en su / etc / securetty.

Más información aquí: ` http://www.linux-kvm.com/content/running-kvm-nographics-no-console-output

--editar--

Podría intentar console=ttyS0,115200y verificar otros posibles parámetros de la consola tal vez.

Jonathan Ross
fuente
Por cierto, también --extra-args=toma otras configuraciones de consola directamente.
Jonathan Ross
Según el texto que ha citado, necesito modificar / etc / inittab en el invitado. Todo el problema es: ¿cómo interactúo con el invitado? Lo siento, no lo entiendo.
Badbishop
Lo siento ver editar, no estaba muy claro.
Jonathan Ross
Sí, también probé --extra-args = 'console = ttyS0' antes de publicar la pregunta.
Badbishop
Lo siento, quise decir console=ttyS0,115200y presumiblemente hay otros parámetros para esto que puedes probar. Todavía supongo que tienes una consola mal configurada de alguna descripción.
Jonathan Ross el