コンソール環境でQEMU/KVM/libvirtのゲストOSにLinuxをインストール

virt-installコマンドを使用してインストールする。

コンソール環境でのインストールに使用するオプション

--extra-argsはカーネルに渡すパラメータ。 よくみかけるのは--extra-args console=tty0 console=ttyS0,115200n8

tty0はVGAコンソール、ttyS0はシリアルコンソール。 グラフィックディスプレイを接続する場合はtty0が、 virsh consleで接続する場合はttyS0が、 それぞれ対応している。

consoleを複数記述した場合は最後のconsoleがプライマリコンソールになる。 initのメッセージやテキストモードのインストーラの出力はプライマリコンソールにだけ出力される。

シリアルコンソールのみを使用して、今後ともグラフィックディスプレイを接続する予定がなければconsole=ttyS0,115200n8だけで十分。

両方使用し、テキストモードのインストーラをvirsh consolevirt-installで見たければconsole=tty0 console=ttyS0,115200n8としてシリアルコンソールをプライマリにする。 逆にテキストモードのインストーラをグラフィックディスプレイで見たければconsole=ttyS0,115200n8 console=tty0としてVGAコンソールをプライマリにする。

inst.graphical console=tty0 console=ttyS0,115200n8とするとプライマリはシリアルコンソールになるが、 グラフィカルモードなのでインストーラはグラフィックディスプレイに出力される。

pty,target_type=serial以外にもpty,target_type=virtioがあるが、 準仮想化だと初期化されるタイミングが遅いためブートローダのメッセージ等を表示できない。

Red Hat系では特に指定しなくてもデフォルトで設定されるため不要。

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

ディスクは自動パーティションのみなので、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を実行する。

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

他と同じオプション指定では下記のエラーメッセージを出力してインストーラが起動しない。

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

画面だけでなくUSB接続なども可能。 マニュアル参照。

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 <DOMAIN>で使用しているポート番号を確認できる。

リモートから接続するならファイアウォールを設定する。 firewall-cmd --add-service vnc-server または firewall-cmd --add-port 5900-5903/tcpvnc-serverサービスはポート5900-5903を許可する。

ゲストOSにエージェントをインストールするとSPICEの機能をフル活用できる。 Red Hat系ならdnf install xorg-x11-drv-qxl spice-vdagent。 ただし、X環境が必要。

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 <DOMAIN>virsh vncdisplay <DOMAIN>で使用しているポート番号等を確認できる。

リモートから接続するならファイアウォールを設定する。 firewall-cmd --add-service vnc-server または firewall-cmd --add-port 5900-5903/tcpvnc-serverサービスはポート5900-5903を許可する。

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から入手可能。

TigerVNCのvncviewer64はポータブルなので、アプリをインストール出来ない環境でも使える。 port=5901を指定した場合、virsh vncdisplayが返すホストのIP:1と 実際のポート番号を使用したホストのIP:5901のどちらでも接続できる。

  • 最終更新: 2023-04-04 09:09
  • by nabium