====== コンソール環境でQEMU/KVM/libvirtのゲストOSにLinuxをインストール ======
{{tag>qemu-kvm libvirt centos7 rhel8-clone rhel9-clone debian11}}
''virt-install''コマンドを使用してインストールする。
コンソール環境でのインストールに使用する[[https://github.com/virt-manager/virt-manager/blob/main/man/virt-install.rst|オプション]]。
* ''%%--location%% ISOイメージ'' ''%%--extra-args%%''が有効になるように''%%--cdrom%%''ではなく''%%--location%%''でISOイメージを指定する
* ''%%--graphics%% none'' グラフィカルコンソールを無効にする
* ''%%--console%% pty,target_type=serial'' テキストコンソールをシリアルで作成
* https://libvirt.org/formatdomain.html#console
* ''%%--extra-args%% console=ttyS0,115200n8'' ゲストのkernelでコンソールをシリアルに接続
* https://access.redhat.com/ja/articles/4259721
* https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html
* https://www.kernel.org/doc/html/latest/admin-guide/serial-console.html
* https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-guest_virtual_machine_installation_overview-virt_install-kickstart
==== --extra-argsについて ====
''%%--extra-args%%''はカーネルに渡すパラメータ。
よくみかけるのは''%%--extra-args%% console=tty0 console=ttyS0,115200n8''。
tty0はVGAコンソール、ttyS0はシリアルコンソール。
グラフィックディスプレイを接続する場合は''tty0''が、
''virsh consle''で接続する場合は''ttyS0''が、
それぞれ対応している。
consoleを複数記述した場合は最後のconsoleがプライマリコンソールになる。
initのメッセージやテキストモードのインストーラの出力はプライマリコンソールにだけ出力される。
シリアルコンソールのみを使用して、今後ともグラフィックディスプレイを接続する予定がなければ''console=ttyS0,115200n8''だけで十分。
両方使用し、テキストモードのインストーラを''virsh console''や''virt-install''で見たければ''console=tty0 console=ttyS0,115200n8''としてシリアルコンソールをプライマリにする。
逆にテキストモードのインストーラをグラフィックディスプレイで見たければ''console=ttyS0,115200n8 console=tty0''としてVGAコンソールをプライマリにする。
''inst.graphical console=tty0 console=ttyS0,115200n8''とするとプライマリはシリアルコンソールになるが、
グラフィカルモードなのでインストーラはグラフィックディスプレイに出力される。
==== --consoleについて ====
''pty,target_type=serial''以外にも''pty,target_type=virtio''があるが、
準仮想化だと初期化されるタイミングが遅いためブートローダのメッセージ等を表示できない。
Red Hat系では特に指定しなくてもデフォルトで設定されるため不要。
===== CentOS 7 =====
virt-install --name centos7 --memory 2048 --vcpus 1 --disk size=8 --os-variant centos7.0 --location CentOS-7-x86_64-Minimal-2009.iso --graphics none --extra-args console=ttyS0,115200n8
* https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/virtualization_getting_started_guide/sec-cli-utilities-demonstration#sec-CLI-demo_Installation
* https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/installation_guide/chap-anaconda-boot-options
* https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/installation_guide/sect-installation-text-mode-x86
ディスクは自動パーティションのみなので、LVMの場合はディスクサイズが小さいなら''/''パーティションとswapのみ、大きくなると''/''と''/home''に分割する。
CentOS 7で''/home''のパーティションを削除して''/''を最大まで拡張し''/''パーティションのみにする例。
''/home''にファイルがある場合は事前に移動しておくこと。
df -h
umount /home
vi /etc/fstab
lvremove /dev/centos/home
lvextend /dev/centos/root -l +100%FREE -r
vgdisplay
df -h
swapを削除する場合、swapの削除は''swapoff -a''、swapの状態取得は''cat /proc/swaps''、LVの変更は同上、加えて''/etc/default/grub''からパーティションの記述を削除し''grub2-mkconfig''を実行する。
===== Rocky Linux 8 =====
virt-install --name rocky8 --memory 2048 --vcpus 1 --disk size=8 --os-variant rocky8-unknown --location Rocky-8.7-x86_64-minimal.iso --graphics none --extra-args console=ttyS0,115200n8
* https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/performing_a_standard_rhel_8_installation/console-environment-and-display-boot-options_custom-boot-options
===== Rocky Linux 9 =====
virt-install --name rocky9 --memory 2048 --vcpus 1 --disk size=8 --os-variant rocky9-unknown --location Rocky-9.1-x86_64-minimal.iso --graphics none --extra-args console=ttyS0,115200n8
* https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9/html/boot_options_for_rhel_installer/console-environment-and-display-boot-options_kickstart-and-advanced-boot-options
===== Debian 11 =====
virt-install --name deb11 --memory 2048 --vcpus 1 --disk size=8 --os-variant debian11 --location debian-11.5.0-amd64-DVD-1.iso --graphics none --console pty,target_type=serial --extra-args console=ttyS0,115200n8
* https://www.debian.org/releases/bullseye/amd64/index.ja.html
===== Ubuntu Server 22.04 LTS =====
他と同じオプション指定では下記のエラーメッセージを出力してインストーラが起動しない。
Starting install...
ERROR Couldn't find kernel for install tree.
Domain installation does not appear to have been successful.
''%%--location%%''でkernelとinitrdの場所を指定する必要がある。
virt-install --name ubuntu22 --memory 2048 --vcpus 1 --disk size=8 --os-variant ubuntu22.04 --location ubuntu-22.04.1-live-server-amd64.iso,initrd=casper/initrd,kernel=casper/vmlinuz --graphics none --console pty,target_type=serial --extra-args console=ttyS0,115200n8
* https://ubuntu.com/server/docs/install/general
===== リモートからグラフィックディスプレイに接続する方法 =====
==== SPICEで接続する ====
画面だけでなくUSB接続なども可能。
[[https://www.spice-space.org/spice-user-manual.html|マニュアル]]参照。
''virt-install''で''%%--graphics%% spice,listen=0.0.0.0''を指定する。
リモートから接続する場合は必ずサブオプションの''listen''を追加すること。
^ サブオプション ^ 概要 ^ 詳細 ^
| listen=IP | 接続を受け付けるIPアドレス | デフォルトは127.0.0.1 |
| port=PORT | 接続を受け付けるポート番号 | デフォルトは5900以降で使われていない最初のポート\\ オプションで指定すると固定できる |
| password=PASS | 画面接続時のパスワード(ticketing) | デフォルトはパスワード無し |
サブオプションを複数指定する場合は","で連結する(例:''listen=0.0.0.0,port=5900'')。
''port''を指定しない場合、
''virsh domdisplay ''で使用しているポート番号を確認できる。
リモートから接続するならファイアウォールを設定する。
''firewall-cmd %%--add-service%% vnc-server'' または ''firewall-cmd %%--add-port%% 5900-5903/tcp''。
''vnc-server''サービスはポート5900-5903を許可する。
ゲストOSにエージェントをインストールするとSPICEの機能をフル活用できる。
Red Hat系なら''dnf install xorg-x11-drv-qxl spice-vdagent''。
ただし、X環境が必要。
==== VNCで接続する ====
''virt-install''で''%%--graphics%% vnc,listen=0.0.0.0''を指定する。
リモートから接続する場合は必ずサブオプションの''listen''を追加すること。
^ サブオプション ^ 概要 ^ 詳細 ^
| listen=IP | 接続を受け付けるIPアドレス | デフォルトは127.0.0.1 |
| port=PORT | 接続を受け付けるポート番号 | デフォルトは5900以降で使われていない最初のポート\\ オプションで指定すると固定できる |
| password=PASS | 画面接続時のパスワード | デフォルトはパスワード無し |
サブオプションを複数指定する場合は","で連結する(例:''listen=0.0.0.0,port=5900'')。
''port''を指定しない場合、
''virsh domdisplay ''や''virsh vncdisplay ''で使用しているポート番号等を確認できる。
リモートから接続するならファイアウォールを設定する。
''firewall-cmd %%--add-service%% vnc-server'' または ''firewall-cmd %%--add-port%% 5900-5903/tcp''。
''vnc-server''サービスはポート5900-5903を許可する。
==== Rocky Linux 9での例 ====
''virsh console''で接続できるようにシリアルコンソールを設定しながら、グラフィカルモードでインストーラを実行する。
''%%--%%autoconsole none''を指定すると、virt-installはVMを起動した後コンソール接続をせずに終了する。
virt-installが終了しているとインストール完了後に再起動を指示してもVMが停止してしまうが、
''%%--%%wait''を指定するとvirt-installがインストールの完了を待機するため再起動できるようになる。
virt-install --name rocky9 --memory 2048 --vcpus 1 --disk size=8 --os-variant rocky9-unknown --location Rocky-9.1-x86_64-minimal.iso --graphics vnc,listen=0.0.0.0,password=foobar --extra-args 'inst.graphical console=tty0 console=ttyS0,115200n8' --autoconsole none --wait
グラフィックディスプレイのみにする場合は、''--extra-args''を指定せずにインストールする。
virt-install --name rocky9 --memory 2048 --vcpus 1 --disk size=8 --os-variant rocky9-unknown --location Rocky-9.1-x86_64-minimal.iso --graphics spice,listen=0.0.0.0
==== リモートからの接続 ====
SPICEでもVNCでもvirt-viewerで接続可能。Red Hat系なら''virt-viewer''パッケージをインストールする。
Windows用のインストーラは[[https://virt-manager.org/download]]から入手可能。
[[https://tigervnc.org/|TigerVNC]]のvncviewer64はポータブルなので、アプリをインストール出来ない環境でも使える。
''port=5901''を指定した場合、''virsh vncdisplay''が返す''ホストのIP:1''と
実際のポート番号を使用した''ホストのIP:5901''のどちらでも接続できる。