enchanのメモ書き

計算機とフリルとラブライブ!

Ubuntu Server 20.04 LTSにLinux KVMを導入する (2)

このページは以下の記事の続きです。

enchan1207.hatenablog.com

インストールの手順を整理する

前回の記事では、LiveCDをUbuntuイメージと勘違いしてそのまま起動していた…というなんともアホなミスをやらかしていました。 仮想マシンでUbuntu(のISOイメージ)を動かすには、まず仮想ディスクにインストールしなければならないようです。

ここで、一般的なUbuntuのインストール手順を振り返ってみます。

  1. Live CDをPCに挿入し、該当する光学ドライブから起動する
  2. ディスプレイにGRUB画面が表示され、 起動するOSを選択するよう促される
  3. Ubuntuを選択すると、いつもの画面(語彙力)とともに起動が開始され、デスクトップ画面に遷移する

…という感じだったはずです。若干うろ覚えです。

この手順でわかる通り、LiveCDの場所はHDDではなく CD-ROMドライブでなければならないということがわかります。

LiveCDをVMのCD-ROMドライブに挿す

virt-installには、「CD-ROMドライブに挿入するインストールメディア」を指定するオプションが存在します。それが --cdrom です。
前回の記事では --location に直接ISOファイルへのパスを渡していましたが、先述のインストール手順に従えば ISOファイルは --location ではなく --cdrom に渡すのが適切なように見えます。

早速やってみましょう。

virt-install \
    --name guest_ubuntudesktop \
    --vcpus 2 \
    --memory 2048 \
    --disk size=25 \
    --cdrom /var/kvm/images/ubuntu-20.04.4-desktop-amd64.iso \
    --os-variant ubuntu20.04 \
    --network bridge:br0 \
    --graphics none \
    --console pty,target.type=serial

実行すると…

WARNING  CDROM media does not print to the text console by default, so you likely will not see text install output. You might want to use --location. See the man page for examples of using --location with CDROM media

Starting install...
Allocating 'guest_ubuntudesktop-2.qcow2' 
Connected to domain guest_ubuntudesktop
Escape character is ^]

この状態で固まってしまいました
最終行にあるように、実際は ctrl+] で抜けることができますが、何も表示されません。

WARNINGをよく読んでみると…

WARNING: CDROMメディアはデフォルトではテキストコンソールに出力されないため、テキストインストール出力が表示されない可能性があります。 --locationを使用することをお勧めします。 CDROMメディアで--locationを使用する例については、マニュアルページを参照してください。

どうやら、現在のモードは テキストインストール と呼ばれる状態のようです。

「ディスプレイ」の概念

先述した通常のインストール手順では、「ディスプレイが接続されていること」を前提としていました。
しかし、 現時点では テキストインストール、つまり出力可能なディスプレイが存在しない(?)状態のようです。まあホストにディスプレイつないでないので当然っちゃ当然です。

ディスプレイを接続(したことに)するには、virt-installのオプション--graphicsに適切な値を渡してやる必要があるようです。
マニュアル(man virt-install)を読むと…

グラフィック オプション
    グラフィック オプションが指定されなかった場合、DISPLAY環境変数が設定されている場合は適切なグラフィックを、それ以外の場合は、--graphics none を選択します。
    

    --graphics TYPE,opt1=arg1,opt2=arg2,...
    グラフィカル表示構成を指定します。これは仮想ハードウェアを構成するのではなく、ゲストのグラフィック表示にアクセスする方法だけを構成します。
    通常、ユーザーはこのオプションを指定する必要はありません。virt-installは有用なデフォルトを選択しようとし、適切な接続を開始します。

ふむ。どうやら指定しなくてもよかったようです。
先程のコマンドから --graphics none を抜いて、有用なデフォルト を確認してみます。

WARNING  Graphics requested but DISPLAY is not set. Not running virt-viewer.
WARNING  No console to launch for the guest, defaulting to --wait -1

Starting install...
Allocating 'guest_ubuntudesktop_2-1.qcow2'
Domain installation still in progress.
Waiting for installation to complete.

ん?

警告 グラフィックが要求されましたが、DISPLAYが設定されていません。 virt-viewerは実行していません。
警告 ゲスト用に起動するコンソールがありません。デフォルトは --wait -1 です。

いやVNC起動しないんかい。しかも先程と違い、コンソールすら開かれません。^Cでしか抜けられない状況。

VNC入ってなかった

確認したところ、なんと VNCサーバがインストールされていませんでした。Ubuntu Serverだからかもしれません。前も言った気がします。

というわけでVNCサーバを入れます。今回は tightVNCをインストールしました。

$ apt install tightvncserver

なんかもうソシャゲの更新みたいな量のパッケージがインストールされるようです。Ubuntu Serverだからかもしれません。

インストールとセットアップが完了したので、改めて仮想マシンを立ち上げてみます。
…しかし、うまくいきません。環境変数 DISPLAY の値は自動でセットされるわけではなさそうです。

というわけで無理矢理設定しました。多分やらない方がいいと思います

DISPLAY=:1 virt-install \
    --name guest_ubuntudesktop \
    --vcpus 2 \
    --memory 2048 \
    --disk size=25 \
    --cdrom /var/kvm/images/ubuntu-20.04.4-desktop-amd64.iso \
    --os-variant ubuntu20.04 \
    --graphics vnc,password=password,listen=0.0.0.0 \
    --network bridge:br0

起動すると…

インストールプロセスが始まり(何やらウィンドウタイトルがアレなのは気にしてはいけません)…

無事インストールが完了しました。

VMを再起動すると…

デスクトップを拝むことができました…!!
色々ガバはありますがその辺は後々修正します。 本当に長かった。

よくみるとXeon積んでることになってるの面白いですね。デフォルトがこれなのかもしれませんが…

Apache2を起動する

さて最後にApache2を起動して、同じネットワークの他のPCからブリッジを介してアクセスできることを確認して締めたいと思います。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install apache2

どうして…

色々やってたらなんか通りました。初心者クオリティ。

Apache2は正常に動作しているようです。
手元のMacBookからアクセスしてみると…

UOOOOOOOOOOOOOOOOOOOOOO

まさに It works! です。デフォルトページがこれほど嬉しい瞬間は初めてかもしれません。

イメージをクローンして保存しておく

正直これで終わりたい感がすごいのですが、最後にひとつだけ。仮想マシンイメージのクローンを作成し、別の場所に保存してみます。 もう疲れたので公式ドキュメントに全力で寄りかかります。

help.ubuntu.com

仮想マシンイメージをクローンするには、virt-cloneコマンドを使用します。

まずは現在起動している仮想マシンをシャットダウンし、 virsh list コマンドで仮想マシンの名前を調べておきます。

$ virsh list --all
 Id   Name                  State
--------------------------------------
 -    guest_ubuntudesktop   shut off

このイメージを新しく guest_ubuntudesktop_clone という名前でクローンしたいときは、virt-clone にこのような引数を与えて実行します:

virt-clone \
    --connect=qemu:///system \
    -o guest_ubuntudesktop \
    -n guest_ubuntudesktop_clone \
    -f /var/kvm/volumes/guest_ubuntudesktop_clone.qcow2

…処理的に当然ですが、まあまあ時間がかかります

これは かんりょうするのに
すうふん かかるかも しれません

懐かしいですね。もう誰にも伝わらなさそう…

元ネタ:

www.youtube.com

処理が正常に終了すると、以下のように表示されます。

Allocating 'guest_ubuntudesktop_clone.qcow2'                                      |  25 GB  00:03:55     

Clone 'guest_ubuntudesktop_clone' created successfully.

では、このクローンしたイメージから仮想マシンを起動してみましょう。

$ virsh vol-list volumes 
 Name                              Path
-------------------------------------------------------------------------------------
 guest_ubuntudesktop_clone.qcow2   /var/kvm/volumes/guest_ubuntudesktop_clone.qcow2

ボリュームの存在を確認し…

$ virsh start guest_ubuntudesktop_clone

virsh startを実行することで、クローンした仮想マシンを起動することができます。

クローンの方もちゃんと動いてくれています。

荒削りの仮想マシン

…はい。気付いたらまた6000字とか書いてます
前回の記事を書いた時点で大方どうすればいいかはわかっていたのでそこまで長くはならないだろうと思っていたのですが、思った以上に時間も文字数も膨れ上がってしまいました。

VNCの設定とかvirt-installの引数とかボリュームの置き場所とか色々と荒削りですが、それでもCLIだけで仮想マシンを構成して起動するというのは非常に楽しいですね。
ifconfigtty周りの概念についても一段と理解が深まった気がします。もしかしたら横にとっ散らかっただけかもしれません

KVMは他にもWindowsやAndroid、Raspbian等も動かせるようなので、また色々試してみたいと思います。

それでは。

virsh suspend