KVM Guest von der Konsole aus installiert. Aber wie kommt man zur Gästekonsole?

28

Ich versuche, einen vollständig virtualisierten Gast (Fedora 14 x86_64) auf KVM (RHEL 6) zu installieren, und zwar nur über die Befehlszeile (sowohl Hypervisor als auch Gast). Es geht ohne Fehler und ohne greifbares Ergebnis. Ich möchte wissen, wie eine reine Textinstallation durchgeführt wird.

Also, hier ist was ich getan habe:

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

Was jetzt? Wie ich nach ein paar Tagen googeln verstehe, sollte ich die Ausgabe des Gastes aus der Textinstallation sehen, aber nichts passiert. virt-viewer kann keine Verbindung dazu herstellen. Ich empfehle daher, alle Optionen zu untersuchen, indem ich --help hinzufüge (was ich getan habe). Wenn ich mich wieder mit virsh verbinde, sehe ich Folgendes:

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

Dies zeigt, dass die VM ausgeführt wird

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

Qemu-Protokoll:

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

Ausgabe von /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>

Mir fehlt offensichtlich etwas, was viele andere nicht wissen, aber was ist es? Vielen Dank im Voraus!

böser bischof
quelle
3
Wie haben Sie den --extra-args-Schalter dazu gebracht, mit --cdrom zu arbeiten? Laut virt-install-Manpage funktioniert --extra-args nur mit --location?
Slm
4
Ich entfernte --network bridge:br0, änderte cdromzu locationund extra-argszu --extra-args='console=tty0 console=ttyS0,115200n8 serial'und es funktionierte!
Einige
2
Ich habe nur cdrom in location geändert und "extra-args" hinzugefügt. Die --network-Optionen müssen nicht entfernt werden.
twan163
1
Aus irgendeinem Grund --cdromfunktioniert das nicht mit extra-args, aber --location(oder -l) doch. Gleicher Weg und alles.
Rick Chatham

Antworten:

9

Ich habe das --extra-args='console=ttyS0'letzte Mal irgendwo aus dem Internet kopiert , es funktioniert!

  • Keine Notwendigkeit für zwei "Konsolen" -Befehle, die nur zwei Konsolen anstelle von einer öffnen
  • Die Baudrate muss nicht manuell festgelegt werden.
  • Die Option "--serial" ist veraltet
  • Das RedHat-Konsolengerät ist "/ dev / ttyS0", nicht "/ dev / tty0".

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

brayden
quelle
7

--nographicswird verwendet, und Sie haben außer der tty0-Konsole keine Konsole im Gast eingerichtet. Wenn Sie eine grafische Konsole benötigen, die insbesondere remote verfügbar ist, müssen Sie vga und vnc oder qxl und spice aktivieren. Dies ist ein Beispiel: 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 oder http://ubuntuforums.org/showpost.php?p=9610421&postcount=7 ist ebenfalls eine Lösung.

dyasny
quelle
Danke für die Antwort, dyasny. Auswahl Ihrer Punkte: 1. Nein, ich möchte KEINE grafische Konsole (siehe mein Beitrag) 2. Ja, ich habe diese und ähnliche Lösungen ausprobiert. Es hat bei mir nicht funktioniert.
Badbishop
Ich würde versuchen, auf linux-kvm.org oder auf der libvirt-Mailingliste
nachzufragen
6

Ich hatte ein ähnliches Problem beim Versuch, eine Nur-Text-Installation von CentOS durchzuführen. Alles läuft darauf hinaus, Kernel-Argumente für die Angabe der seriellen Ausgabekonsole hinzuzufügen console=ttyS0, damit Sie dann eine Verbindung herstellen können, wenn --graphics noneoder --nographicsverwendet wird. Aus virt-installdem Handbuch:

--grafiken keine

Dem Gast wird keine grafische Konsole zugewiesen. Für vollständig virtualisierte Gäste (Xen FV oder QEmu / KVM) muss auf dem ersten seriellen Port des Gasts eine Textkonsole konfiguriert sein (dies kann über die Option --extra-args erfolgen). Xen PV stellt dies automatisch ein. Mit dem Befehl 'virsh console NAME' kann eine Verbindung zum seriellen Gerät hergestellt werden.

Ich habe es auf zwei Arten gelöst:

  1. indem Sie das ISO-Image ändern und die --cdromOption verwenden
  2. indem Sie das ISO-Image als NFS-Freigabe verfügbar machen und die --locationOption mit verwenden--extra-args

1. Ändern des Bildes

So ändern Sie die Kernelparameter auf der ISO-Installationsdiskette:

  1. Holen Sie sich ein Programm, mit dem Sie Bilder bearbeiten können, z. B. isomaster .
  2. Gehen Sie zu der isolinux/isolinux.cfgDatei auf dem Bild, öffnen Sie sie, suchen Sie die erste Zeile mit initrd=und hängen Sie console=ttyS0sie und alle anderen Zeilen mit dem genannten Parameter an.
  3. Speichern Sie die Datei und das Bild.
  4. Verwenden Sie das geänderte Bild virt-installwie gewohnt, zB:

    $ 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
    

Getan.

2. Verwenden einer NFS-Freigabe

  1. Montiere das Bild:

    $ sudo mount -o loop,unhide -t iso9660 -r /home/user/images/CentOS.iso /home/user/mnt/cdrom
    
  2. Starten Sie den NFS-Dienst, wenn er nicht ausgeführt wird: service nfs start

  3. Fügen Sie die folgende Zeile hinzu /etc/exports, um sie den Clients zur Verfügung zu stellen:

    /home/user/mnt/cdrom    *(ro,insecure,all_squash)
    
  4. Aktualisieren Sie die Exporttabelle des Systems mit:

    $ exportfs -r
    
  5. Verwenden Sie die Freigabe virt-install, um sicherzugehen, dass Sie die einbeziehen --extra-args, zB:

    $ 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. Während der Installation von CentOS werden Sie nach dem Speicherort der Installationsdateien gefragt. Sie müssen die Adresse Ihres Computers und den vollständigen Pfad zur Freigabe eingeben.

Getan.

Johnny Baloney
quelle
Ich habe versucht, Ihre zweite Methode zu montieren ISO-Datei, aber ich habe diesen Fehler Starten der Installation ... Abrufen der Datei .treeinfo ... | 552 B 00:00:00 FEHLER Keine Option 'kernel' in Abschnitt: 'images-x86_64' Ich mounte die ISO-Datei in / mnt und verwende --location / mnt in virt-install
public_name
@public_name Mounten Sie die ISO nicht, sondern geben Sie einfach den Pfad zur ISO nach --locationlike an --location /tmp/centos6.iso.
Rick Chatham
Arbeitete unter Ubuntu 16 und bearbeitete isolinux / txt.cfg anstelle von isolinux / isolinux.cfg.
John McGehee
2

Sie müssen das Fedora-Installationsprogramm im Textmodus ausführen. Versuchen Sie, den zusätzlichen Argumenten 'Text' hinzuzufügen. Alternativ können Sie versuchen, "vnc" hinzuzufügen, damit Sie nach dem Start über VNC eine Verbindung zum Installationsprogramm herstellen können

katriel
quelle
1
Es wurde überprüft, dass Sie für ein neueres libvirt -x und --cdrom nicht verwenden können. Versuchen Sie, die CD- ROM irgendwo im Netzwerk zu mounten und --location somewhere.com/mounted-iso --graphics none --extra-args "console = ttyS0,115200 text headless"
katriel
1

Ich mache meine Installationen seit einiger Zeit mit Cobbler und Koan. In cobbler habe ich meine Kernel-Optionen unter meinem Centos60-x86_64-Profil so eingestellt:

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

Nach dem Booten können Sie console = tty0 console = ttS0,115200 verwenden, damit die Konsole auf zwei Geräten angezeigt wird. Dies funktioniert nicht für die Installation. Wenn Sie die Grub-Optionen unter / etc / grub bearbeiten und die Datei grub.conf neu generieren, überstehen die Einstellungen der seriellen Konsole ein Kernel-Upgrade. Fügen Sie der Kernel-Befehlszeile "Text" hinzu, um zu verhindern, dass das Installationsprogramm eine GUI startet.

Wenn meine KVM-Gastinstanzen gestartet werden, stelle ich eine Verbindung zu ihnen her, während ich am KVM-Host angemeldet bin, und verbinde mich folgendermaßen mit der Konsole eines Gasts:

[root@vmhost ~]# virsh console guestvm

Ich sehe das dann in meiner 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: 

Eine letzte Anmerkung, wenn ich Koan sage, dass er mit dem Aufbau eines meiner KVM-Gäste beginnen soll, nenne ich es mit dem Schalter --nogfx wie folgt:

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

Ich vermute, Sie sehen eine falsch konfigurierte Konsole.

Vielleicht versuchen Sie dies oder ähnliches:

Zuerst füge ich meiner Grub-Konfiguration eine Konsolenzeile hinzu, zB für einen Arch-Gast: kernel / vmlinuz26 root = / dev / vda2 ro console = ttyS0,115200 Dann bearbeite ich / etc / inittab, um ttyS0 (denselben Arch-Gast) zu aktivieren: co: 23 : respawn: / sbin / agetty -8 115200 ttyS0 Linux. Und stellen Sie sicher, dass Sie ttyS0 in Ihrer / etc / securetty haben.

Weitere Informationen finden Sie hier: http://www.linux-kvm.com/content/running-kvm-nographics-no-console-output

--bearbeiten--

Sie könnten versuchen console=ttyS0,115200, andere mögliche Konsolenparameter zu überprüfen.

Jonathan Ross
quelle
Übrigens werden auch --extra-args=andere Konsoleneinstellungen direkt übernommen.
Jonathan Ross
Entsprechend dem von Ihnen zitierten Text muss ich / etc / inittab auf guest ändern. Das ganze Problem ist: Wie interagiere ich mit dem Gast? Entschuldigung, ich verstehe es nicht.
Badbishop
Sorry, siehe bearbeiten, ich war nicht sehr klar.
Jonathan Ross
Ja, ich habe auch versucht --extra-args = 'console = ttyS0', bevor ich die Frage poste.
Badbishop
Sorry ich meinte console=ttyS0,115200und vermutlich gibt es noch andere Parameter dafür, die du ausprobieren kannst. Ich würde immer noch vermuten, dass Sie eine falsch konfigurierte Konsole mit einer Beschreibung haben.
Jonathan Ross