コンソール環境でQEMU/KVM/libvirtのゲストOSにLinuxをインストール
virt-install
コマンドを使用してインストールする。
コンソール環境でのインストールに使用するオプション。
--location ISOイメージ
--extra-args
が有効になるように--cdrom
ではなく--location
でISOイメージを指定する--graphics none
グラフィカルコンソールを無効にする--console pty,target_type=serial
テキストコンソールをシリアルで作成--extra-args console=ttyS0,115200n8
ゲストのkernelでコンソールをシリアルに接続
--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
ディスクは自動パーティションのみなので、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
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
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
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
リモートからグラフィックディスプレイに接続する方法
SPICEで接続する
画面だけでなく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/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 <DOMAIN>
やvirsh vncdisplay <DOMAIN>
で使用しているポート番号等を確認できる。
リモートから接続するならファイアウォールを設定する。
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から入手可能。
TigerVNCのvncviewer64はポータブルなので、アプリをインストール出来ない環境でも使える。
port=5901
を指定した場合、virsh vncdisplay
が返すホストのIP:1
と
実際のポート番号を使用したホストのIP:5901
のどちらでも接続できる。