KVM Guest zainstalowany z konsoli. Ale jak dostać się do konsoli gościa?

28

Próbuję zainstalować w pełni zwirtualizowanego gościa (Fedora 14 x86_64) na KVM (RHEL 6), używając tylko wiersza polecenia (zarówno hiperwizora, jak i gościa). Bez błędów i bez namacalnego rezultatu. Chciałbym wiedzieć, jak wykonać instalację tekstową.

Oto co zrobiłem:

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

Co teraz? Jak rozumiem po kilku dniach google, powinienem zobaczyć wyniki gościa z instalacji tekstowej, ale nic się nie dzieje. virt-viewer nie może się z nim połączyć, sugerując, żebym zbadał wszystkie opcje, dodając --help (co zrobiłem). Jeśli ponownie połączę się z virsh, widzę to:

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

To pokazuje, że VM jest uruchomiona

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

Dziennik 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

Dane wyjściowe /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>

Oczywiście brakuje mi czegoś, czego wielu innych nie, ale o co chodzi? Z góry dziękuję!

badbishop
źródło
3
Jak udało Ci się uzyskać przełącznik --extra-args do pracy z --cdrom? Według strony man virt-install --extra-args działa tylko z --location?
slm
4
Usunąłem --network bridge:br0, zmieniłem cdromna locationi extra-argsdo --extra-args='console=tty0 console=ttyS0,115200n8 serial'i to zadziałało!
jakieś
2
Zmieniłem tylko cdrom na lokalizację i dodałem „dodatkowe argumenty”. Nie ma potrzeby usuwania opcji --network.
twan163
1
Z jakiegokolwiek powodu --cdromnie działa z dodatkowymi argumentami, ale --location(lub -l) działa. Ta sama ścieżka i wszystko.
Rick Chatham

Odpowiedzi:

9

--extra-args='console=ttyS0'Ostatnim razem skopiowałem gdzieś z Internetu, to działa!

  • Nie potrzeba dwóch poleceń „konsoli”, które otwierają dwie konsole zamiast jednej
  • Nie trzeba ręcznie określać szybkości transmisji.
  • Opcja „--serial” została uznana za przestarzałą
  • Urządzeniem konsoli RedHat jest „/ dev / ttyS0”, a nie „/ dev / tty0”

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

Brayden
źródło
7

--nographicsjest używany i nie masz skonfigurowanej konsoli gościa, poza konsolą tty0. Jeśli chcesz konsolę graficzną, szczególnie dostępną zdalnie, musisz włączyć vga i vnc lub qxl i przyprawy. to jest przykład: 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 lub http://ubuntuforums.org/showpost.php?p=9610421&postcount=7 to również rozwiązanie.

dyasny
źródło
Dzięki za odpowiedź dyasny. Wybór punktów: 1. Nie, NIE chcę konsoli graficznej (patrz mój post) 2. Tak, próbowałem tego i podobnych rozwiązań. Nie działało to dla mnie.
badbishop
Spróbowałbym zapytać na linux-kvm.org lub na liście dyskusyjnej libvirt
dyasny
6

Miałem podobny problem podczas próby instalacji CentOS w trybie tekstowym. Wszystko sprowadza się do dodania argumentów jądra do określenia szeregowej konsoli wyjściowej console=ttyS0, aby można było się z nią połączyć, gdy --graphics nonelub --nographicsjest używana. Z virt-installinstrukcji:

- grafika brak

Gość nie będzie miał przydzielonej konsoli graficznej. W pełni zwirtualizowani goście (Xen FV lub QEmu / KVM) będą musieli mieć konsolę tekstową skonfigurowaną na pierwszym porcie szeregowym gościa (można to zrobić za pomocą opcji --extra-args). Xen PV skonfiguruje to automatycznie. Do połączenia z urządzeniem szeregowym można użyć polecenia „NAZWA konsoli Virsh”.

Udało mi się to rozwiązać na dwa sposoby:

  1. modyfikując obraz ISO i korzystając z --cdromopcji
  2. przez ujawnienie obrazu ISO jako udziału NFS i użycie --locationopcji z--extra-args

1. Modyfikowanie obrazu

Aby zmodyfikować parametry jądra na dysku instalacyjnym ISO:

  1. Pobierz program, który pozwala manipulować obrazami, na przykład izomaster .
  2. Przejdź do isolinux/isolinux.cfgpliku na obrazie, otwórz go, znajdź pierwszy wiersz z initrd=nim i dołącz console=ttyS0do niego oraz wszystkich innych wierszy, które mają wspomniany parametr.
  3. Zapisz plik i obraz.
  4. Użyj zmodyfikowanego obrazu virt-installw zwykły sposób, np .:

    $ 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
    

Gotowy.

2. Korzystanie z udziału NFS

  1. Zamontuj obraz:

    $ sudo mount -o loop,unhide -t iso9660 -r /home/user/images/CentOS.iso /home/user/mnt/cdrom
    
  2. Uruchom usługę NFS, jeśli nie działa: service nfs start

  3. Dodaj następujący wiersz, /etc/exportsaby udostępnić go klientom:

    /home/user/mnt/cdrom    *(ro,insecure,all_squash)
    
  4. Odśwież tabelę eksportu systemu za pomocą:

    $ exportfs -r
    
  5. Użyj udziału, virt-installupewniając się, że wprowadziłeś --extra-argsnp .:

    $ 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. Podczas instalacji CentOS pojawia się monit z pytaniem o lokalizację plików instalacyjnych. Musisz wpisać adres swojej maszyny i pełną ścieżkę do udziału.

Gotowy.

Johnny Baloney
źródło
próbowałem drugiej metody zamontowania pliku ISO, ale otrzymałem ten błąd. Uruchamianie instalacji ... Pobieranie pliku .treeinfo ... | 552 B 00:00:00 BŁĄD Brak opcji „jądro” w sekcji: „images-x86_64” podłączam plik ISO do / mnt i używam --location / mnt w virt-install
nazwa_publiczna
@public_name nie spróbuj zamontować iso ale tylko podając ścieżkę do iso po --locationniczym --location /tmp/centos6.iso.
Rick Chatham
Pracowałem na Ubuntu 16, edytując plik isolinux / txt.cfg zamiast pliku isolinux / isolinux.cfg.
John McGehee,
2

Musisz uruchomić instalator Fedory w trybie tekstowym. Spróbuj dodać „tekst” do dodatkowych argumentów. Alternatywnie możesz spróbować dodać „vnc”, który pozwoli ci połączyć się z instalatorem przez VNC po uruchomieniu

katriel
źródło
1
Sprawdziłem, że dla nowszej biblioteki libvirt nie można używać opcji -x i --cdrom. Spróbuj zamontowania cdrom gdzieś w sieci i korzystania --location somewhere.com/mounted-iso --graphics none --extra-args = „konsolę tekstową ttyS0,115200 bez głowy”
Katriel
1

Od jakiegoś czasu robię swoje instalacje, używając szewca i koana. W programie cobbler tak ustawiam opcje jądra w moim profilu Centos60-x86_64:

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

Po uruchomieniu możesz użyć console = tty0 console = ttS0,115200, aby wyświetlić konsolę na dwóch urządzeniach; to nie działa w przypadku instalacji. Jeśli edytujesz opcje gruba w / etc / grub i ponownie generujesz grub.conf, ustawienia konsoli szeregowej przetrwają aktualizację jądra. Dodaj „tekst” do wiersza poleceń jądra, aby uniemożliwić instalatorowi uruchomienie GUI.

Po uruchomieniu moich instancji gościa KVM łączę się z nimi, gdy jestem zalogowany na hoście KVM i łączę się z konsolą gościa w następujący sposób:

[root@vmhost ~]# virsh console guestvm

Następnie widzę to w mojej powłoce:

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: 

Ostatnia uwaga, kiedy mówię koanowi, aby zaczął budować jednego z moich gości KVM, nazywam to przełącznikiem --nogfx w następujący sposób:

koan --server 192.168.1.1 --virt --nogfx --system=guestvm
slm
źródło
1

Domyślam się, że widzisz źle skonfigurowaną konsolę.

Może spróbuj tego lub podobnego:

Najpierw dodaję linię konsoli do mojej konfiguracji grub, np. Dla gościa Arch: kernel / vmlinuz26 root = / dev / vda2 ro console = ttyS0,115200 Następnie edytuję / etc / inittab, aby włączyć ttyS0 (ten sam gość Arch): co: 23 : respawn: / sbin / agetty -8 115200 ttyS0 linux. I upewnij się, że masz ttyS0 w / etc / securetty.

Więcej informacji tutaj: ` http://www.linux-kvm.com/content/running-kvm-nographics-no-console-output

--edytować--

Możesz spróbować console=ttyS0,115200sprawdzić inne możliwe parametry konsoli.

Jonathan Ross
źródło
BTW --extra-args=bierze również bezpośrednio inne ustawienia konsoli.
Jonathan Ross,
Zgodnie z cytowanym tekstem muszę zmodyfikować / etc / inittab na gościu. Cały problem brzmi: w jaki sposób mogę wchodzić w interakcje z gościem? Przepraszam, nie rozumiem.
badbishop
Przepraszam, zobacz edycję, nie byłem bardzo jasny.
Jonathan Ross
Tak, próbowałem również --extra-args = 'console = ttyS0' przed opublikowaniem pytania.
badbishop
Przepraszam, miałem na myśli console=ttyS0,115200i prawdopodobnie istnieją inne parametry tego, które możesz wypróbować. Nadal sądzę, że masz źle skonfigurowaną konsolę z jakimś opisem.
Jonathan Ross