2016年8月12日金曜日

しまった、spiceのポートだ!

しまった。前々回、「pisces と aries の設定を変更するのはまた次回…。」と締めたのに、すっかり忘れてた。

というわけで、pisces と aries の spice用ip/port を変更しよう。

前々回の内容の通り、piscesは127.0.0.1:9001に、ariesは127.0.0.1:9003にすることにする。

変更は簡単だ。
(aquarius) $ virsh edit pisces

vi editor(もしくは、環境変数EDITORで定義しているエディタ?)が立ち上がってくるはずだ。
これの<graphics...>~</graphics>までがspiceのIP/Port定義になる。
多分以下のような内容じゃないだろうか?
    <graphics type='spice' port='9001' autoport='no' listen='127.0.0.1'>
      <listen type='address' address='127.0.0.1'/>
      <image compression='off'/>
    </graphics>
これを見たら、port宣言は9001、listen及びaddress宣言は127.0.0.1だ。

…あ、書き換える必要無かったな…。
というわけで、:qで終わらせよう。

続いてariesだ。
(aquarius) $ virsh edit aries

以下のエリアを探そう。
    <graphics type='spice' port='9001' autoport='no' listen='127.0.0.2' passwd='test'>
      <listen type='address' address='127.0.0.2'/>
      <image compression='off'/>
    </graphics>

これの、port宣言を9003に、listen及びaddress宣言を127.0.0.1に書き換えよう。
passwd宣言もあるが、ついでにコイツは消してしまおう。
というわけで書き換えた部分は以下のようになる。
    <graphics type='spice' port='9003' autoport='no' listen='127.0.0.1'>
      <listen type='address' address='127.0.0.1'/>
      <image compression='off'/>
    </graphics>

これで上書き保存すれば「ドメイン aries XML の設定は編集されました」と表示されるはず。

念の為に、変更結果を画面に出力しておく。
(aquarius) $ virsh dumpxml pisces
(aquarius) $ virsh dumpxml aries

これで、同時に起動出来るか確認しておく。
(aquarius) $ virsh start pisces
(aquarius) $ virsh start aries

作業用PCからVirt Viewer(Remote Viewer)で接続確認したいが、IP/ポートが変更されているので、ssh(teraterm)のポート転送設定も書き換えて再度ログインしておこう。
書き換えイメージは
Local:127.0.0.2:9001→Remote:127.0.0.2:9001
を消して
Local:127.0.0.1:9003→Remote:127.0.0.1:9003
を追加する形だ。

aquariusへ再ログインしたらRemote Viewerでpisces/aries両方に接続確認しておこう。
それぞれ、127.0.0.1:9001と127.0.0.1:9003だぞ。

接続確認できたら、それぞれシャットダウンしておこう。
(pisces) $ sudo shutdown -h now
(aries) $ sudo shutdown -h now

今回は以上。

そろそろ、virt-manager入れよう…

これまでずっと、 virsh を使ってコマンドラインで操作してきたけど、 KVM は virt-manager というGUIツールも使える。
ただ、UNIX/Linuxエンジニアなら、「GUI で操作するのは遅いし、細かな設定が出来なかったりするので、コマンドラインで設定等を行ったほうがラク」と思うだろう。
実際、コマンドライン操作の方が圧倒的にラクだ。

ただ今回、pisces と aries のネットワーク、NAT 方式で接続されている。
これを、いわゆる bridge 方式に変更して、宅内LAN に接続されている他のPC等とフラットな接続にしたい。
virsh で行うのなら、そのネットワーク用のxmlファイルを作って、virsh に読み込ませればいいのだが、そのxmlファイルの書き方が分らない。
だったらいっそ、GUIツールで作って、出来上がった設定のxmlファイルを見てみるのがいいだろう。

ということで、GUIツールであるところの virt-manager を入れようと思う。
入れるのは簡単。

(aquarius) $ dpkg -L virt-manager
(aquarius) $ sudo apt-get update
(aquarius) $ sudo apt-get --simulate install virt-manager
(aquarius) $ sudo apt-get install virt-manager
(aquarius) $ dpkg -L virt-manager

導入できたら実行してみよう。
ただし、以前記載した通り、PCにXvcSrvが導入、稼動していること、sshのX転送の設定が行われていることが必須だぞ。

(aquarius) $ virt-manager
Couldn't open libGL.so.1: libGL.so.1: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません

ぶ、コケた。
調べてみたら、libGL.so という共有ライブラリがインストールされていないのが原因のようだ。
本来なら、virt-manager が libGL.so を必要としているのなら、依存関係で自動的にインストールされるはずなのだが、依存関係の紐付け漏れなのか、インストールされなかった。

で、その libGL.so だが、 libgl1-mesa-glx というパッケージで導入されるようだ。
そちらもインストールしよう。

(aquarius) $ sudo apt-get --simulate install libgl1-mesa-glx
(aquarius) $ sudo apt-get install libgl1-mesa-glx

今度こそ動くかな?

(aquarius) $ virt-manager

動いたけど、日本語文字が化けているようだ。
一旦クローズして、英語モードで立ち上げてみよう。

(aquarius) $ LANG=C virt-manager

ちゃんと動くようだ。

さて、そうなると日本語が表示できるようにしたい。
というわけで、日本語フォントも入れておこう。
たくさんあるが、 fonts-ipafont を入れておけばいいのかな?

(aquarius) $ sudo apt-get update
(aquarius) $ sudo apt-get --simulate install fonts-ipafont
(aquarius) $ sudo apt-get install fonts-ipafont

これで起動してみよう。

(aquarius) $ virt-manager

ちゃんと日本語が表示された。
#作業用PCを宅内LANに直接つないでいる場合は問題ないが、WAN経由だと全体的に動きが遅いので、焦らずにゆっくりやること。

仮想マシン等の設定は、このGUI(virt-manager)からか、virshから行えばいい。
ちなみに、こちらから仮想マシンを起動してみたら、画面はどうなるんだろう?
試しにやってみよう。
piscesを右クリックして、出てくるコンテキストメニューから「実行(R)」をクリックすればいい。


実行状態になったら、pisces を右クリックして、表示されるコンテキストメニューから「Open」をクリックしよう。

以下のようにコンソールが開く。


あとは適当に。

とりあえず、virt-managerの導入は完了した。
また別途、ネットワーク設定周りを確認・変更していく。

今回はここまで。

2016年8月10日水曜日

spiceのlistenポート

ここまでの作業で、 pisces と aries という2つの仮想マシンが作られた。
で、それぞれ spice プロトコルでコンソール接続できるようにしているのだが、実は1点、困ったことが起きている。

仮想マシンのコンソール用の接続ソケットは、 127.0.0.? の 9001 番ポートを使おうと考えていたんだ。
#つまり、全ての仮想マシンのコンソールは、ホストマシンである aquarius の 9001 番ポートで、IPアドレス部だけが変わる、という状態。
表にまとめると、以下のような感じを想定していた。
仮想マシンspice用IPspice用ポート
pisces127.0.0.19001
aries127.0.0.29001
taurus127.0.0.39001
gemini127.0.0.49001
......9001
( taurus とか gemini は作るかどうか不明。あくまで想定ね。)

ところが、実際に試してみるとわかるが、 pisces と aries の同時起動が出来ない。
片方が起動している状態でもう片方を起動しようとすると、
エラー: ドメイン aries の起動に失敗しました
エラー: 内部エラー: ポート 9001 の予約に失敗しました
というエラーが出て失敗する。

となると、 127.0.0.1 と 127.0.0.2 が実は同じもの、という想定が出来るのだが、 127.0.0.2:9001 でサービス起動していたら( aries を起動していたら)、 127:0.0.1:9001 への接続が出来るわけではない。
いったいどういうことなんだろう…?

至極単純に、 127.0.0.1:9001 をオープンしリッスンするプログラムと、 127.0.0.2:9001 をオープンしリッスンするプログラムを作って動かしてみればいいんだろう。
その手のプログラムはC言語で作るのが王道だが、実は aquarius にCコンパイラは入れていない。
perl や python で簡単に作れないだろうか?

ちょっと調べてみる…。
すぐ見つかった。 python で簡単に作れそうだ。
Pythonによる通信処理http://qiita.com/nadechin/items/28fc8970d93dbf16e81b

というわけで、上記のURLに載っているプログラムでサクっと試してみた。
結論としては…
127.0.0.1:9001 と 127.0.0.2:9001 で別のサービスを動かすことが可能だった。

ということは、 libvirt/qemu の spice サーバ側が何かバグを持っている、ということなのだろうか…。

原因が判明するかわからないが、ちょっと見てみよう。
http://packages.ubuntu.com/ja/
ここから、 libspice-server1 を検索して、出てきたページから以下の3つをダウンロードしてみる。
http://archive.ubuntu.com/ubuntu/pool/main/s/spice/spice_0.12.6-4ubuntu0.1.dsc
http://archive.ubuntu.com/ubuntu/pool/main/s/spice/spice_0.12.6.orig.tar.bz2
http://archive.ubuntu.com/ubuntu/pool/main/s/spice/spice_0.12.6-4ubuntu0.1.debian.tar.xz

1つ、展開してみる。
(aquarius) $ tar xvjf spice_0.12.6.orig.tar.bz2
(aquarius) $ cd spice-0.12.6/

展開された先に、 server という名前のディレクトリがある。
(aquarius) $ cd server

ここで grep 等を駆使して探してみると、どうやら reds.c というソースプログラムが socket を開いているようだ。
その関数は reds_init_socket() 。
この中で確かに socket を開いているのだが、どうもポート番号がバッティングしている、というチェックはしていない。(つまり、これよりも前の段階でポート番号のチェックを行っているっぽい)
で、 reds_init_socket() の呼び出し元を辿って行ったのだが、それらしいコードを見つけることは出来なかった。
reds_init_socket()

reds_init_net()

do_spice_init()

spice_server_init()

結局、原因はわからないってことで…。

しょうがないので、IPアドレスで切り替えるのを止めて、ポート番号で切り替えることにする。
(tls は使用しないと思うけど、一応記載)
仮想マシンspice用IPspice用ポートspice(tls)用ポート
pisces127.0.0.190019002
aries127.0.0.190039004
taurus127.0.0.190059006
gemini127.0.0.190079008
......90099010

pisces と aries の設定を変更するのはまた次回…。

2016年8月9日火曜日

仮想マシンのHDDを拡大

今、piscesのOS用仮想HDDは3.5GB、ariesのOS用仮想HDDは2GBしか割り当てていない。
(aquarius) $ virsh pool-list
 名前               状態     自動起動
-------------------------------------------
 default              動作中  はい (yes)

(aquarius) $ virsh pool-info default
名前:         default
UUID:           (略)
状態:         実行中
永続:         はい (yes)
自動起動:   はい (yes)
容量:         49.09 GiB
割り当て:   3.81 GiB
利用可能:   45.28 GiB

(aquarius) $ virsh vol-list --pool default
 名前               パス
------------------------------------------------------------------------------
 aries.qcow2          /var/lib/libvirt/images/aries.qcow2
 pisces.qcow2         /var/lib/libvirt/images/pisces.qcow2
 ubuntu-14.04.4-server-amd64.iso /var/lib/libvirt/images/ubuntu-14.04.4-server-amd64.iso

(aquarius) $ virsh vol-info pisces.qcow2 --pool default
名前:         pisces.qcow2
タイプ:      ファイル
容量:         3.50 GiB
割り当て:   1.85 GiB

(aquarius) $ virsh vol-info aries.qcow2 --pool default
名前:         aries.qcow2
タイプ:      ファイル
容量:         2.00 GiB
割り当て:   1.34 GiB

これでは、今後実験していく上で、あまりにも容量が少なすぎる。
これを拡大したい。
どれぐらいまで拡大できるだろうか?poolの利用可能容量が約45GBなので、それ以上に割り当てようとするとエラーになるのだろうか?

ちょっと試してみよう。
(念のため、仮想マシンは止めておくこと)
(aquarius) $ virsh vol-resize pisces.qcow2 72G --pool default
ボリューム 'pisces.qcow2' の容量を 72G に正常に変更しました

できたっぽい。
念のため確認。
(aquarius) $ virsh vol-info pisces.qcow2 --pool default
名前:         pisces.qcow2
タイプ:      ファイル
容量:         72.00 GiB
割り当て:   1.85 GiB

出来た。
一応、起動してゲストOS側から確認してみよう。

(aquarius) $ virsh start pisces

(pisces) $ sudo parted /dev/vda print
モデル: Virtio Block Device (virtblk)
ディスク /dev/vda: 77.3GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ    ファイルシステム  フラグ
 1    1049kB  256MB   255MB   primary   ext2              boot
 2    257MB   3757MB  3500MB  extended
 5    257MB   3757MB  3500MB  logical                     lvm

どうやら、拡大されているっぽいな。
ただし、パーティションサイズとpv(Phisical Volume)は構築当初のサイズのままだ。

これを拡大しないといけない。(末尾まで延ばしてしまおう)
まずはパーティションの拡大だ。(mbr形式の拡張領域なので、拡張パーティションと論理パーティションの両方を拡大する必要があるぞ。)
(pisces) $ sudo parted /dev/vda resizepart 2 100%

(pisces) $ sudo parted /dev/vda print
モデル: Virtio Block Device (virtblk)
ディスク /dev/vda: 77.3GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ    ファイルシステム  フラグ
 1    1049kB  256MB   255MB   primary   ext2              boot
 2    257MB   77.3GB  77.1GB  extended
 5    257MB   3757MB  3500MB  logical                     lvm

(pisces) $ sudo parted /dev/vda resizepart 5 100%

(pisces) $ sudo parted /dev/vda print
モデル: Virtio Block Device (virtblk)
ディスク /dev/vda: 77.3GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ    ファイルシステム  フラグ
 1    1049kB  256MB   255MB   primary   ext2              boot
 2    257MB   77.3GB  77.1GB  extended
 5    257MB   77.3GB  77.1GB  logical                     lvm

次いで、Phisical Volumeの拡張だ。これ上手くいくかな?
(pisces) $ sudo pvs /dev/vda5
  PV         VG        Fmt  Attr PSize PFree
  /dev/vda5  pisces-vg lvm2 a--  3.26g    0

(pisces) $ sudo vgs pisces-vg
  VG        #PV #LV #SN Attr   VSize VFree
  pisces-vg   1   2   0 wz--n- 3.26g    0

(pisces) $ sudo pvresize /dev/vda5
  Physical volume "/dev/vda5" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

(pisces) $ sudo pvs /dev/vda5
  PV         VG        Fmt  Attr PSize  PFree
  /dev/vda5  pisces-vg lvm2 a--  71.76g 68.50g

(pisces) $ sudo vgs pisces-vg
  VG        #PV #LV #SN Attr   VSize  VFree
  pisces-vg   1   2   0 wz--n- 71.76g 68.50g

あっさり拡張できてしまった。

ついでに、/領域(/dev/pisces-vg/root)も4GBに拡張しておこう。
(pisces) $ sudo lvs /dev/pisces-vg/root
  LV   VG        Attr      LSize Pool Origin Data%  Move Log Copy%  Convert
  root pisces-vg -wi-ao--- 2.76g

(pisces) $ sudo lvextend -L 4G pisces-vg/root
  Extending logical volume root to 4.00 GiB
  Logical volume root successfully resized

(pisces) $ sudo lvs /dev/pisces-vg/root
  LV   VG        Attr      LSize Pool Origin Data%  Move Log Copy%  Convert
  root pisces-vg -wi-ao--- 4.00g

(pisces) $ df -h /
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/pisces--vg-root  2.7G  1.2G  1.4G  46% /

(pisces) $ sudo resize2fs /dev/pisces-vg/root
Filesystem at /dev/pisces-vg/root is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/pisces-vg/root is now 1048576 blocks long.

(pisces) $ df -h /
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/pisces--vg-root  3.9G  1.2G  2.6G  31% /

piscesの拡張が出来たので、piscesは一旦シャットダウンしておこう。
(pisces) $ sudo shutdown -h now

ariesも同じように拡張しておく。
やり方は同じなので、コマンドだけ羅列しておく。

(aquarius) $ virsh vol-resize aries.qcow2 72G --pool default
(aquarius) $ virsh vol-info aries.qcow2 --pool default
(aquarius) $ virsh start aries
(aries) $ sudo parted /dev/vda print
(aries) $ sudo parted /dev/vda resizepart 2 100%
(aries) $ sudo parted /dev/vda print
(aries) $ sudo parted /dev/vda resizepart 5 100%
(aries) $ sudo parted /dev/vda print
(aries) $ sudo pvs /dev/vda5
(aries) $ sudo vgs aries-vg
(aries) $ sudo pvresize /dev/vda5
(aries) $ sudo pvs /dev/vda5
(aries) $ sudo vgs aries-vg
(aries) $ sudo lvs /dev/aries-vg/root
(aries) $ sudo lvextend -L 4G aries-vg/root
(aries) $ sudo lvs /dev/aries-vg/root
(aries) $ df -h /
(aries) $ sudo resize2fs /dev/aries-vg/root
(aries) $ df -h /
(aries) $ sudo shutdown -h now

終わった後のpoolの状態も確認しておこう。
(aquarius) $ virsh pool-info default
名前:         default
UUID:           (略)
状態:         実行中
永続:         はい (yes)
自動起動:   はい (yes)
容量:         49.09 GiB
割り当て:   3.81 GiB
利用可能:   45.28 GiB

問題なさそうだ。