KVM Guest installato dalla console. Ma come raggiungere la console degli ospiti?


28

Sto cercando di installare un guest completamente virtualizzato (Fedora 14 x86_64) su KVM (RHEL 6), usando solo la riga di comando (sia hypervisor che guest). Va senza errori e senza un risultato tangibile. Vorrei sapere come eseguire un'installazione di solo testo.

Quindi, ecco cosa ho fatto:

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

E adesso? Come ho capito dopo aver cercato su Google per un paio di giorni, dovrei vedere l'output dell'ospite dall'installazione del testo, ma non succede nulla. virt-viewer non può connettersi ad esso, suggerendo gentilmente di esplorare tutte le opzioni aggiungendo --help (cosa che ho fatto). Se mi riconnetto con virsh, vedo questo:

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

Questo dimostra che la VM è in esecuzione

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

Registro 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

Output di /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>

Mi manca ovviamente qualcosa che molti altri non fanno, ma che cos'è? Grazie in anticipo!


3
Come sei riuscito a far funzionare il commutatore --extra-args con --cdrom? Secondo la pagina man di virt-install --extra-args funziona solo con --location?
slm,

4
Ho rimosso --network bridge:br0, modificato cdromin location, e extra-argsin --extra-args='console=tty0 console=ttyS0,115200n8 serial'e ha funzionato!
un po '

2
Ho cambiato solo cdrom in posizione e ho aggiunto "extra-args". Non è necessario rimuovere le opzioni --network.
twan163,

1
Per qualunque motivo --cdromnon funziona con gli extra-arg ma --location(o -l) funziona. Stesso percorso e tutto il resto.
Rick Chatham,

Risposte:


9

Ho copiato --extra-args='console=ttyS0'da qualche parte da Internet l'ultima volta, funziona!

  • Non sono necessari due comandi "console", che aprono solo due console anziché una
  • Non è necessario specificare manualmente la velocità di trasmissione.
  • L'opzione "--serial" è stata deprecata
  • Il dispositivo console RedHat è "/ dev / ttyS0", non "/ dev / tty0"

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


7

--nographicsviene utilizzato e non è stata impostata alcuna console nel guest, oltre alla console tty0. Se si desidera una console grafica, disponibile in particolare da remoto, è necessario abilitare vga e vnc o qxl e spice. questo è un esempio: http://www.linux-kvm.com/content/tip-how-run-headless-guest-machine-using-vnc-kvm

Anche http://www.linux-kvm.com/content/running-kvm-nographics-no-console-output o http://ubuntuforums.org/showpost.php?p=9610421&postcount=7 è anche una soluzione.


Grazie per aver risposto, Dyasny. Scegli i tuoi punti: 1. No, NON voglio una console grafica (vedi il mio post) 2. Sì, ho provato questa e altre soluzioni simili. Non ha funzionato per me.
badbishop

Proverei a chiedere su linux-kvm.org o sulla mailing list di libvirt
dyasny,

6

Ho avuto un problema simile durante il tentativo di eseguire un'installazione di solo testo di CentOS. Tutto si riduce all'aggiunta di argomenti del kernel per specificare la console di output seriale in console=ttyS0modo da poter quindi connettersi ad esso quando --graphics noneo --nographicsviene utilizzato. Dal virt-installmanuale:

--graphics none

Nessuna console grafica verrà assegnata per l'ospite. I guest completamente virtualizzati (Xen FV o QEmu / KVM) dovranno avere una console di testo configurata sulla prima porta seriale nel guest (questo può essere fatto tramite l'opzione --extra-args). Xen PV lo imposterà automaticamente. Il comando 'virsh console NAME' può essere utilizzato per connettersi al dispositivo seriale.

Sono riuscito a risolverlo in due modi:

  1. modificando l'immagine iso e usando l' --cdromopzione
  2. esponendo l'immagine iso come condivisione NFS e usando l' --locationopzione con--extra-args

1. Modifica dell'immagine

Per modificare i parametri del kernel sul disco di installazione iso:

  1. Ottieni un programma che consenta di manipolare le immagini, ad esempio isomaster .
  2. Vai al isolinux/isolinux.cfgfile sull'immagine, aprilo, trova la prima riga con initrd=su di esso e aggiungi console=ttyS0ad esso e tutte le altre righe che hanno il parametro menzionato.
  3. Salva il file e l'immagine.
  4. Usa l'immagine modificata con virt-installcome al solito, ad esempio:

    $ 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
    

Fatto.

2. Utilizzo di una condivisione NFS

  1. Montare l'immagine:

    $ sudo mount -o loop,unhide -t iso9660 -r /home/user/images/CentOS.iso /home/user/mnt/cdrom
    
  2. Avviare il servizio NFS se non in esecuzione: service nfs start

  3. Aggiungi la seguente riga /etc/exportsper renderla disponibile per i client:

    /home/user/mnt/cdrom    *(ro,insecure,all_squash)
    
  4. Aggiorna la tabella di esportazione del sistema con:

    $ exportfs -r
    
  5. Usa la condivisione virt-installassicurandoti di inserire --extra-args, ad esempio:

    $ 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 l'installazione di CentOS viene visualizzato un messaggio che richiede la posizione dei file di installazione. Devi digitare l'indirizzo della tua macchina e il percorso completo per la condivisione.

Fatto.


ho provato il tuo secondo metodo per montare il file ISO ma ho riscontrato questo errore Avvio dell'installazione ... Recupero del file .treeinfo ... | 552 B 00:00:00 ERRORE Nessuna opzione 'kernel' nella sezione: 'images-x86_64' monto il file iso su / mnt e utilizzo --location / mnt in virt-install
nome_pubblica

@public_name Prova a non montare l'iso ma semplicemente specificando il percorso dell'iso dopo mi --locationpiace --location /tmp/centos6.iso.
Rick Chatham,

Ha funzionato su Ubuntu 16, modificando isolinux / txt.cfg invece di isolinux / isolinux.cfg.
John McGehee,

2

Devi eseguire il programma di installazione Fedora in modalità testo. Prova ad aggiungere "testo" agli argomenti aggiuntivi. In alternativa, potresti provare ad aggiungere "vnc" che ti permetterà di connetterti al programma di installazione su VNC una volta avviato


1
Controllato, per una nuova libreria, non puoi usare -x e --cdrom. Prova a montare il cdrom da qualche parte sulla rete e usando --location somewhere.com/mounted-iso --graphics none --extra-args "console = ttyS0,115200 text headless"
katriel

1

Faccio le mie installazioni da un po 'di tempo usando il calzolaio e il koan. All'interno del calzolaio ho impostato le opzioni del mio kernel in questo modo nel mio profilo Centos60-x86_64:

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

Dopo l'avvio è possibile utilizzare console = tty0 console = ttS0,115200 per visualizzare la console su due dispositivi; questo non funziona per l'installazione. Se modificate le opzioni di grub in / etc / grub e rigenerate grub.conf, le impostazioni della console seriale sopravviveranno ad un aggiornamento del kernel. Aggiungi "testo" alla riga di comando del kernel per impedire al programma di installazione di avviare una GUI.

Quando vengono avviate le istanze del mio guest KVM, mi collego a loro mentre sono connesso all'host KVM e mi connetto alla console di un guest in questo modo:

[root@vmhost ~]# virsh console guestvm

Poi vedo questo nella mia 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: 

Un'ultima nota, quando dico a koan di iniziare a costruire uno dei miei ospiti KVM, lo chiamo con l'opzione --nogfx in questo modo:

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

1

Immagino che stai vedendo una console non configurata correttamente.

Forse prova questo o simile:

Per prima cosa aggiungo la linea console alla mia configurazione di grub, ad esempio per un guest Arch: kernel / vmlinuz26 root = / dev / vda2 ro console = ttyS0,115200 Quindi modifico / etc / inittab per abilitare ttyS0 (stesso guest Arch): co: 23 : respawn: / sbin / agetty -8 115200 ttyS0 linux. E assicurati di avere ttyS0 nel tuo / etc / securetty.

Maggiori informazioni qui: ` http://www.linux-kvm.com/content/running-kvm-nographics-no-console-output

--modificare--

Potresti provare a console=ttyS0,115200controllare altri possibili parametri della console forse.


BTW --extra-args=prende direttamente anche altre impostazioni della console.
Jonathan Ross,

Secondo il testo che hai citato, devo modificare / etc / inittab sul guest. L'intero problema è: come interagisco con l'ospite? Scusa, non lo capisco.
badbishop

Mi dispiace vedere modifica, non ero molto chiaro.
Jonathan Ross,

Sì, ho provato anche --extra-args = 'console = ttyS0' prima di pubblicare la domanda.
badbishop

Scusate volevo dire console=ttyS0,115200e presumibilmente ci sono altri parametri per questo che potete provare. Immagino comunque che tu abbia una console mal configurata con qualche descrizione.
Jonathan Ross,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.