libvirtのGUIクライアントvirt-managerを実行するVMをlibvirt内に作る話
libvirtは仮想化管理ライブラリです… って仮想サーバでOKでしょう。
今回はこのlibvirtのclientであるvirt-managerを操作するVMをビルドインする話です
はじめに
今回のことの発端は単純です…
libvirtの仮想マシーンを作成するタイミングがあったのですが新規作成ってどうするんだっけ?virt-installなんですが…これって覚えるのがめんどくさいです。
installでは1コマンドですが、CPUとかメモリとか変更するには…かなりめんどくさいですね。
だったらGUIで使えるvirt-managerを使えばいいじゃない!
virt-managerが動く環境を作る…のに一番シンプルなのはどうすれば良いのか?
そう、一番シンプルなのはlibvirtが動いている環境に入れれば良いわけです。
しかし!virt-managerはGUI(X11)ツールですのでX11を入れる必要がある…
CUIでやると言うポリシーで私はサーバを運用していますのでこれは排除
だったら別にLinuxのDesktop環境を作って…とか思いましたが空きがありませんでした。(Raspberry piはスペック不足だったはず)
だったら!virt-managerが動くVMを作って自身で管理させれば良いじゃない
こんな感じでVMの一つにvirt-managerが動作しているVMを置くとOKでしょう
ポイントとしてはサーバのubuntuではGUIがないのがポイントです
作業環境概略図
Ubuntu Desktopをインストールする
Ubuntu Desktopをインストールするにはどうすれば良いでしょうか?
ImageがBootするとX11にインストーラが展開されます…が、動作しているUbuntuサーバはCUIなのでGUIはありません。
さて、どうすれば良いでしょうか?
その解決がvncです。VNCは… GUIの内容を投げると思えば良いでしょう
早速VNCをインストールします
wataru@gitlab:~$ sudo apt-get install tigervncserver
wataru@gitlab:~$ sudo apt-get install virt-viewer
略しますが、virt-viewerも一緒に入れました。(ないバージョンの動作確認していませんでした)
インストールの流れの概略図はこの様な感じになります
1.にてvirsh-installを発行すると
2.にてVMの構築と1で指定したCDイメージを実行します(CDイメージは図では略)
こうするとインストーラがvnc-serverから出力されますのでそれを操作してやれば普通にインストールができます。
実際に実行したvirsh-installはこんな感じです
DISPLAY=:1 virt-install \
--name=ubuntu-desktop \
--vcpus=2 \
--memory=2048 \
--disk /mnt/raid/vm/ubuntu_desktop/disk.img,size=20 \
--network=bridge:br0 \
--arch=x86_64 \
--graphics vnc,password=password,listen=0.0.0.0,port=5901 \
--cdrom=/mnt/raid/download/ubuntu-22.04-desktop-amd64.iso
各所の説明は略しますが
CPUを2台
メモリを2048MBと指定します。
HDDを20GBで作っています。
ここでのポイントはgraphicsです。ここでvncで投げています。これが重要です。
VNCはサーバのIPアドレスとポート5901にて接続、するとパスワード要求が出ますので「password」で入ることができます。
Linuxのインストール時の注意
インストール中にVNCが切断される場合
インストーラが動いてインストールできますが、通常起動のインストーラの場合途中でVNCが切断される不具合が発生しました。
なので普通じゃない起動方法を推奨します。
BIOSが起動するとメニューが表示されますので通常の下にある「ubuntu ( safe graphics )」を選べば問題なく最後まで行きました。
インストール完了後再起動で上がってこない
インストールが完了してCDのイジェクトを行ってもらって再起動するとなんの反応もなくなります…
その場合はサーバの動作状況を確認してください
wataru@gitlab:~$ virsh list --all
Id Name State
---------------------------------
- ubuntu-desktop shut off
十中八九、シャットダウンしています
起動を手動で指定すればインストール処理を続けられます
wataru@gitlab:~$ virsh start ubuntu-desktop
Domain 'ubuntu-desktop' started
インストール完了後VNCには接続できるが表示がない場合
インストールが完了して先の手順でVMがrunning状態だと確認。
vnc clientも接続できるが黒画面… 右上に_だけ表示される。”Booting from HDD”だけ表示される…
はい、さまざまなパターンがありましたが、全ての原因は一つでした。
メモリの確保をしすぎて本体のサーバがパニックを起こしています!
サーバのメモリを確認すると
wataru@gitlab:~$ free -g
total used free shared buff/cache available
Mem: 15 13 0 0 2 1
Swap: 0 0 0
free 0GB… まともじゃないですね
この時はVMのメモリを8GBも取っていたのでしょうがないです。
ちなみにVMを停止すると…
wataru@gitlab:~$ free -g
total used free shared buff/cache available
Mem: 15 5 8 0 2 9
Swap: 0 0 0
ピッタリ8GB空きましたw
これを2GBまで削って現在は
wataru@gitlab:~$ free -g
total used free shared buff/cache available
Mem: 15 7 0 0 7 7
Swap: 0 0 0
ま、大丈夫でしょう…
パッケージがえらく時間がかかる問題
今回,22.04(LTS)のdesktopを使いましたが、日本のミラーを参照するとタイムアウトを大量に発生してくれます… その場合は日本ミラーではなくMainを参照する様に設定を変更してください
GUIではこんな感じで変更可能です… CUIでは… なんかmirrorファイルとかいじった気がします
画面サイズを変更するとログインできなくなる
これ結構、悩みました。解決方法は… OSのインストールでした。
インストールが完了したLinuxの設定をしているときに画面サイズが微妙なので変更したいと思います。
これは極力しない方が得策です。
ちなみに1920 x 1080 でもリフレッシュレートを60Hzにすれば表示はされます。
しかし、再起動すると画面が崩れて操作できなくなるのです
もしこのあたりをいじる場合には必ずSSHサーバの設定をしてからにしてください
SSHサーバをインストールする
注意点はIPを間違えないこと、ufwは標準では有効ではないことを覚えておいてください
あとはコマンド一発です。起動状態でインストールされます
sudo apt-get install openssh-server
VNCクライアントがコピペできません!
諦めてください。SSHで入る方が良いので早々にssh環境をインストールしてください
Virt-managerをインストールして起動する
はい、インストールして起動するまでですが、virt-managerのインストールはコマンド一発です
$ sudo apt-get install virt-manager
特に引っかかる部分はありませんが、もし見つからないとか言われるとapt-get updateとか実行してみてください。
はい、これで起動しますので起動してみます
起動すると何もありませんのでローカルのlibvirtの参照を未接続状態で上がります。
対象のサーバを選択すると以下のエラーが表示されます
読めば良いだけですが、SSH鍵がないのでアクセスできません。
鍵交換してやればOKです
$ ssh-keygen
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.201
はい、どうせvirt-managerだけしか接続しませんのでkeyの設定もデフォルトです。
作成後に公開鍵をサーバ(201)にコピーすれば終わりです。
これでvirt-managerを確認すると接続できました
これでGUIでVMを管理できる様になりました!
終いに
今回は自宅の仮想サーバ環境をGUIで管理するためのセットアップのメモを残しておきました。
にしても… まともに使うにはメモリが16GBでは足りないのですよ;;
物理部分でDockerなど動かしているので8GBは必須。
残り8GBを良くて1GBに切ったら8台のサーバ。そもそも0GBだったら不安定になりますので…
1GBのサーバを2、3台でしょうかね。
今回の場合 GUIなのでメモリを食いますので2GBは必要でしょう…
すると?1GBは1、2台ですか…
新しいサーバは近いですねw
見積もり出しているので買うだけなんですけどね
にしても、なんでSwapが0なんだろうw
kubernetesの試行錯誤で無効にして放置だったかも…
Tips
VMの削除方法
インストールを失敗すると再度インストーラを起動するのはめんどくさいです。
その場合はVMを削除してからインストーラを起動する方が楽です。
VMの削除はお上品な方法と下品な方法があります。
お上品な方法は…
undefineでマークして、再起動します(reset)するとマークしたVMは削除されます
wataru@gitlab:~$ virsh list --all
Id Name State
--------------------------------
2 ubuntu_desktop running
wataru@gitlab:~$ virsh undefine ubuntu-desktop
Domain 'ubuntu-desktop' has been undefined
wataru@gitlab:~$ virsh reset ubuntu-desktop
Domain 'ubuntu-desktop' was reset
wataru@gitlab:~$ virsh list --all
Id Name State
--------------------
しかしながらreset処理をcallしてもしつこくこびりついてrunning状態なものがあります。
その場合には少々お下品ですが強制的に削除する方法があります
wataru@gitlab:~$ virsh list --all
Id Name State
--------------------------------
2 ubuntu-desktop running
wataru@gitlab:~$ virsh destroy ubuntu_desktop
Domain 'ubuntu-desktop' destroyed
wataru@gitlab:~$ virsh list --all
Id Name State
--------------------
これでゴリって削除できます