====== コンソール環境で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''のどちらでも接続できる。