ラベル SPICE の投稿を表示しています。 すべての投稿を表示
ラベル SPICE の投稿を表示しています。 すべての投稿を表示

2017年8月19日土曜日

作業用PC買い替え

先日、作業用のノートPCを買い替えた。
元々使っていたのは、acer Aspire One 752 というモデル。
これ、全然問題なく使えていて、バッテリーの持ちも悪くなかった。
だから、そのまま使い続けるツモリで、メモリも4GBへ増強し、HDD320GBからSSD240GBに換装してたんだ。
ホントに全然問題なかったんだけど、重さがカタログスペック上で1.38kgと少しヘビーだった。
なので、もう少し軽いのに買い換えようと思っていたら、安くて都合のいいのがあったので、それに買い替えたんだ。
新しく買ったのは、ASUS VivoBook E203NA。
これの Mem4GB / SSD64GB モデル。(色はピンクw)
カタログスペック上で、重量は900g。

買い換える前に店頭でチェックしてみたけど、キーボードも変態配列じゃなくて快適に入力出来るし、作業端末としては全然問題なさげ。
なんと値段は税込みで4万円弱。
こんなに安く手に入るのね…。

内蔵ストレージの容量が大幅減なんだけど、実際のところ、作業は全て自宅のタワーマシンとIntel NUCで処理していて、ノートPCはあくまでソレに繋ぐための端末。
だから、内蔵ストレージはそんなに必要無かった。
これに64GBのMicroSDを付けて、もう十分だった。
実際に導入したアプリケーションは…
  • google Chrome
  • google日本語入力
  • teraterm
  • putty
  • VcXsrv
  • Virt Viewer(32bit)
  • UsbDk(64bit)
  • 高機能テキストエディタ
ぐらいか。
で、Virt Viewer が64bit版ではなく32bit版なのは…。
暗号化ライブラリ関連だと思うんだけど、プリインストールされているアプリケーションと、Virt Viewer64bit版がバッティングするようで、Virt Viewerで仮想マシンのコンソールに接続しようとすると、Virt Viewerが落ちてしまう。
32bit版なら接続出来たので、とりあえず32bit版にしているところ。
UsbDkが64bit版なので、組み合わせ的に大丈夫か不明。

で、結構快適に使えている。
重量が300g以上削減できて、それでいてバッテリーの持ちは問題無さそう。
(WiFiグリグリ使い続けても、4時間以上稼働するっぽい)
で、強いて問題点を挙げるのなら…
  • ケンジントンロックホールが無い
  • 外部モニタ出力にD-Sub15pinが無い(HDMIのみ)
  • 有線LAN(RJ45)が無い
と言ったトコロか…。
下2つはUSBで何とかなる(そもそも必要か?)。
ケンジントンロックホールに関しては、喫茶店や新幹線で作業中にトイレに行きたくなった時、結構重要。
まぁ軽いから、そのまま手に持ってトイレに行く、って形になりそうだ。

しかし、Aspire One 752 って、現時点で既に7年落ちだったのね…。全然問題なく使えてたから、そこまで古いモデルだとは思ってなかったよ…。

2017年8月18日金曜日

virt-viewer 6.0 がリリースされてたけど…

virt-viewer 6.0 がリリースされてた。
でも…
過去の接続リスト(Recent connections)が空になって、その後接続に成功してもリストに残らないという問題が…。
(だから、Recent connections がいつまで経っても空のままという…)
これがバグなのか、こちらのPCの問題なのかは不明だけど。

もしバグなら、virt-viewer 4.0 のリリースの時にもバグが含まれてた件に続いて2度目だ。
もう少しリリース管理きちんと出来ないかな…。

2016年10月21日金曜日

virt-managerで新規仮想マシンを作ろう その2

というわけで、仮想マシンtestは出来上がった。
とはいえ、OSも何も入っていないので、今回はOSを導入するところ(と、その前後の作業)だ。

まずは、新規仮想マシンにインストールするOSメディアの用意からだ。
testには、つい先日リリースされたばかりのUbuntu 16.10を導入してみよう。

というわけで、Ubuntu 16.10のインストールメディアの入手からだ。

(aquarius) $ sudo su -
(aquarius) # cd /var/lib/libvirt/images
(aquarius) # pwd
(aquarius) # df .
ディスクに空き容量があることは確認しておこう。

(aquarius) # wget http://releases.ubuntu.com/16.10/ubuntu-16.10-server-amd64.iso
(aquarius) # ls -l
(aquarius) # chown libvirt-qemu:kvm ubuntu-16.10-server-amd64.iso
(aquarius) # chmod 644 ubuntu-16.10-server-amd64.iso
(aquarius) # ls -l
(aquarius) # exit

これでメディアは用意できた。

今ダウンロードしたばかりの.isoイメージ、libvirtに認識されていないかもしれない。
一度認識させておこう。
(aquarius) $ virsh pool-refresh default
(aquarius) $ virsh vol-list default
(aquarius) $ virsh vol-info ubuntu-16.10-server-amd64.iso default
先ほどダウンロードしたメディアの情報が出てきたらOKだ。

続いて、spiceのポートを変更しよう。
仮想マシン作成時、spiceの設定は一切いじっていない。そのため、デフォルトのautoになっているはずだ。
これだと、遠隔接続でポート転送設定を組み合わせたい時に不便だ。なので、固定ポートを設定しておこう。
しまった、spiceのポートだ!で設定したことと同じことを行うのだが、piscesで9001、ariesで9003を使用しているので、testは暫定的に9005を指定しよう。

(aquarius) $ virsh edit test
以下のブロックを探し出そう。
    <graphics type='spice' autoport='yes'>
      <image compression='off'/>
    </graphics>
このブロックを、以下のように修正だ。
    <graphics type='spice' port='9005' autoport='no' listen='127.0.0.1'>
      <listen type='address' address='127.0.0.1'/>
      <image compression='off'/>
    </graphics>

これで、この仮想マシンには、piscesやariesと同じような形で接続が出来るようになった。(teratermでのポート転送は追加しておく必要があるが。)

ここまで出来たら、仮想マシンにOSをインストールする流れだ。
virt-managerを起動して、.isoイメージをマウント、仮想マシンの電源を入れる。
(aquarius) $ virt-manager
(すでにvirt-managerを起動していたら、わざわざ起動する必要は無いぞ)

test仮想マシンをクリックして選択し、メニューバーの「編集」から「仮想マシンの詳細」をクリックしよう。


仮想マシンのウィンドウが出たら、メニューバーの「表示」から「詳細」を選択だ。


仮想マシンの詳細設定が表示される。
この仮想マシンには、まだCD-ROMドライブを付けていないので、CD-ROMドライブを搭載する。
左下の「ハードウェアを追加」のボタンをクリックだ。


「新しいハードウェアを追加」の画面が表示されたら、左のハードウェアの種類で「Storage」が選択されていることを確認(選択されてなかったらクリックして選択)し、デバイスの種類を変更しよう。
(デフォルトでは、「ディスクデバイス」になっているはずだ)


デバイスの種類を「CD-ROMデバイス」に変更したら、マウントするメディアを指定するために、すぐ上の「管理」ボタンをクリック。


ストレージボリュームを選択する画面が出てくるので、「default」プールのubuntu16.10メディアを選択し、「ボリュームの選択」ボタンをクリック。


指定した.isoファイルが選択されているのが確認できたら、「完了」ボタンでウィンドウを閉じよう。


ハードウェア一覧に「IDE CD-ROM」が入ったのが確認できたら、今度は、CD-ROMからブートするために「ブートオプション」をクリックしよう。


起動デバイスの順序に、仮想ディスク、仮想CD-ROM、仮想NICの3つが入っていると思う。
仮想ディスクと仮想CD-ROMにチェックを入れて、ボックス右側の上下ボタンで、仮想CD-ROMが上に来るようにしよう。
設定したら、右下の「Apply」ボタンで確定する。


ブート順の指定が終わったら、仮想マシンを起動しよう。
まずは画面をコンソールに切り替えて、「仮想マシンの電源を入れる」ボタンだ。


すぐにメディアブートして、インストーラーが立ち上がってくるはず。
適当にインストールしてみよう。(この環境は、適当に動かしたらすぐ消すので、あまり細かいことは考えなくていいぞ。)
ホスト名は、仮想マシン名と同じく「test」にしておくことにする。


インストーラーの最後に、「メディアが取り除かれていることを確認してください」の画面が出てくる。
この時点で、仮想CD-ROMから.isoファイルを取り出しておこう。
「仮想マシンの情報を表示」ボタンを押す。(マウスカーソルが画面から出ない場合は、キーボードの左Ctrlキーと左Altキーの同時押しで出せるようになるぞ。)


画面左から「CD-ROM」ドライブを選択し、「Disconnect」ボタンで取り外せる。


取り外したら、もう一度コンソールを表示させ、作業を継続しよう。


インストールが完了したら、自動で再起動され、testが起動してくる。


ちなみに、sshのポート転送設定(9005番ポートの設定)が正しく出来ていれば、Remote-Viewerから接続することも可能だ。


この場合、今までつないでいたコンソールが「エラー: ハイパーバイザーホストへのビューアーの接続は拒否されたか切断されました。」というエラーになって切断されるが、正常動作だ。
仮想マシン設定の画面を一度閉じて、仮想マシンマネージャーから再度testを開けば、また見ることが出来るようになる。


これで、virt-managerから仮想マシンを作成する手順は終わりだ。
testを使用することは無いので、シャットダウンしておこう。
(test) $ sudo shutdown -h now

次回は、このtestを削除する手順だ。

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

今回は以上。

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年7月17日日曜日

libvirtを忘れずに

これまでのKVMの利用方法は、あくまでQEMUを通してのモノだった。
KVMは、libvirtというライブラリ(デーモン)を通して利用するのが、今のトレンドで正しいやり方のようだ。
多くのツールキットが、libvirtを通してKVMを利用するように出来ているし、libvirtはバックエンドの仮想化環境がKVMだけでなく、旧来のqemuやXen、果てはVMware ESXにも対応しているようだ。(ESXi / vSphereに対応しているかは不明。)
http://libvirt.org/

また、libvirtはC言語で書かれているため、C言語用のAPIは用意されているが、Python用のAPIも用意されているらしい。
更に、PerlやRuby等用にもAPIを準備しているとのこと。(多分、C言語APIか、Python用APIに対するラッパーを開発しているのだろう)
通常のコマンドラインで利用するための virsh コマンド、GUIで設定確認等が行える virt-manager というのも用意されている。

libvirtを使うと、Virtual Machineの管理がしやすくなる。
どういう風に管理しやすいか?っていうところだけど…あまり詳しくない。使ってみれば分かるだろう。
分かっている限りだと…
  • 仮想マシンの起動オプションは設定ファイルに
    起動のたびに、「あれ?起動オプション何だっけ?」って悩まなくていい
  • 仮想マシンに対する外付けデバイス(CD-ROMやらUSB機器)を、コマンド等でオン/オフ出来る
    仮想マシンにアプリケーションを導入するのに、CD-ROMイメージを交換するのが簡単になる
といった所かな?

さっそく、libvirtを用いた仮想マシン操作をしてみたいところだが、その前に準備が必要だ。
  1. 仮想マシンの定義はXML形式のファイルに記載する
  2. Web上にサンプルはあるが、これだけでは書けない
    (これだけで書けたらすごい)
  3. 定義を作るツール(virt-install)がある
  4. 今はインストールされていないので、インストールする必要がある
  5. 仮想マシンの定義(XMLファイル)と仮想ディスクイメージを配置するディレクトリは、原則固定
    (/var/lib/libvirt/images/?)
とりあえず、仮想ディスクイメージは、実際に配置される場所が明確になるまでは、内蔵ディスクに配置するようにする。
明確になったところで、iSCSI領域に配置し直すことにする。

なので、virt-installをインストールしよう
$ sudo apt-get install virtinst

あと、osinfo-query というコマンドを後で使う。
なので、これもインストールしておこう。
$ sudo apt-get install libosinfo-bin

で、virt-install を使うんだけど、その前にネットワークの設定を確認しておこう。
Ubuntuの場合、仮想環境(libvirt-bin?)をインストールした段階で、仮想ネットワークvirbr0というのが出来上がる。
実際に、IPアドレスも付与されているはずだ。
$ ip address show dev virbr0

私の環境では、192.168.122.1/24 というIPアドレスが付与されていた。
(virbr0-nicというのも存在するんだけど、これは何なのか不明…。恐らく、virbr0が物理NICに接続する中間デバイスのようなものではないか?
仮想マシンNIC - virbr0(スイッチ) - virbr0-nic - 物理NIC という経路なのかと。)

また、brctlなるコマンドで一覧が見られる。
$ brctl show

virbr0 のエントリが出力されたはずだ。(virbr0-nic は出力されていない。やっぱり謎だ。)
私の環境では、出力結果の interfaces 項目が空なのだが、どういうことだろう?
予想では、virbr0-nic か、物理NIC名が入ってくるものと思ったのだが…。

もう一つ、bridge コマンドというのもある。これも良く分からないのだが…。
$ bridge vlan show
$ bridge fdb show
で、何か表示される。(何かってナンダヨ…)

前者は、ブリッジネットワークのVLAN定義が出力されるんだけど、何も設定していないので「1 PVID Egress Untagged」ってな具合に、Untaggedと表示される。(タグ付けしてないので、少なくともタグVLANじゃないね。)

後者は、Forwarding Database entry の略で、何だろう?転送先かな?Networkデバイス名とmacアドレスっぽい文字列の組み合わせが大量に出力された。
そのうちの一つ、「01:00:5e:00:00:01」というのは、レイヤ2転送用のmacアドレスらしい。
それ以外には、「33:33:ff」で始まるmacアドレスが復数存在しているが、どうやらIPv6マルチキャスト用のmacアドレスのようだ。

ってことは、とりあえず無視しても構わないだろうな。

で、じゃあKVM的には、virbr0ってどんなん?ってことなんだが、今度は virsh コマンドを用いることになる。
ちょっと見てみよう。
$ virsh net-list --all

defaultという名前のエントリ1つだけ出てきたはず。
じゃぁコレの詳細は?
$ virsh net-info default

ブリッジという項目に、virbr0 と出てきたはずだ。
ということは、defaultネットワークにつなぐことが、virbr0につなぐ、ということになるのではないだろうか?

更に、定義をxml形式で出力することも出来る
$ virsh net-dumpxml default
(このネットワーク定義を保存しておけば、リストアで使用できるっぽいぞ)

とりあえず、xml形式の方を見ると、<forward mode='nat'> という定義がある。
これを見ると、どうやらnat形式のネットワークのようだ。
#VMware系等の仮想環境で言うところの、NATネットワークと同じようだ。

う~ん。これだけ見てみても、色々あって覚えきれねぇ。

とりあえず、virt-install のマニュアル(man virt-install)にサンプルが載っているので、これをいじって一つ仮想マシンを立ててみよう。
その前に、仮想マシンのOS定義がどの程度あって、何が使えるか確認しておこう。
$ osinfo-query os

ずらずらと出てきたエントリの中に、ubuntu14.04が見つかっただろうか?
このエントリを、次の virt-install コマンドの --os-variant 引数に適用する。

$ virt-install \
     --virt-type kvm \
     --name aries \
     --vcpus 2 \
     --memory 512 \
     --disk size=2,sparse=yes \
     --check disk_size=off \
     --network network=default \
     --cdrom ~/iscsivol/ubuntu-14.04.4-server-amd64.iso \
     --graphics spice,port=9001,password=test \
     --os-variant ubuntu14.04

っとコケた。
「ERROR    サポートされない設定: spice TLS ポートが XML 設定において設定されていますが、TLS が qemu.conf において無効化されています」
だそうな。

どうも、--graphics spice のオプションに port オプションを付与すると、tlsによる接続環境も作ろうとしてしまうようだ。
ただ、/etc/libvirt/qemu.conf は一切いじっておらず、tls 関連の環境はまだまったく作っていない。
そもそも、サーバ証明書等の準備は一切していないから、tls は使えない状態だ。
さてどうしよう…。
  1. SPICEプロトコルをやめて、別プロトコル(VNCとか)を指定する
  2. tls の環境を整える
  3. GUIでインストールする virt-manager を使用する
  4. ポートオプションを無くして初期作成し、別途portを指定する
1番から3番は、環境を整えないといけないのでちょっと後回しにしたい。
なので4番を使ってみたい。

port オプションを指定しない場合、SPICEのポートはどうやら5900番を使用するようだ。
sshポート転送に以下の内容を追加して、ログインし直そう。
  • ローカルのポート:5900
  • リッスン:127.0.0.2
  • リモート側ホスト:127.0.0.2
  • リモート側ポート:5900
(今回は、敢えて127.0.0.2を指定してみた)
その後、ポートを9001に変えてみたいと思うので、併せて以下の設定も入れておこう。
  • ローカルのポート:9001
  • リッスン:127.0.0.2
  • リモート側ホスト:127.0.0.2
  • リモート側ポート:9001
ログインし直したら実行だ。
$ virt-install \
     --virt-type kvm \
     --name aries \
     --vcpus 2 \
     --memory 512 \
     --disk size=2,sparse=yes \
     --check disk_size=off \
     --network network=default \
     --cdrom ~/iscsivol/ubuntu-14.04.4-server-amd64.iso \
     --graphics spice,listen=127.0.0.2,password=test \
     --os-variant ubuntu14.04

う~ん。
「Couldn't open libGL.so.1: libGL.so.1: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません」
というエラーが出る。
ただ、libGLが無くても動いているようなので、あまり気にしないようにしよう。
(多分、libGLをインストールすればいいんだと思う。)

念の為に、プロセスが生きているか確認してみよう。
$ ps -ef | grep qemu | grep -v grep
くっそ長い行が出てきたはずだ。これが出てくれば、実行成功だ。

実行出来たら、Remote viewer(Virtviewer)を起動して、spice://127.0.0.2:5900 へ接続してみよう。
(パスワードは、引数に指定している test だぞ)


無事に接続が出来たら、言語選択(UbuntuのOSメディアでブートした一番最初の画面)が表示されるはずだ。


ここまで出来たら、一旦この状態で設定確認をしてみよう。
コマンドプロンプトから以下のコマンドを実行することで、仮想マシンの設定が見られるぞ。
$ virsh list --all
$ virsh dumpxml aries
1つ目は、このlibvirt管理下の仮想マシン一覧だ。今はまだ1つしか作っていないから、1行しか出てこないはずだ。
2つ目は、仮想マシンariesの設定情報をxml形式で出力するコマンドだ。
ズラズラと出てくるが、xml形式なのである程度は読めるはずだ。

一旦、現状の設定を保存しておこう。
$ virsh dumpxml aries > aries.xml

そうしたら、通常通りインストールは進めてしまう。
最小構成にssh-serverを入れるだけでとりあえずはいい。
(以前、piscesを作った時と同じオプション構成だ。ホスト名はariesとする。)

インストール完了後、再起動せずに停止状態になった。
おかしいな、再起動すると思ったんだが…。

とりあえず、spiceの待受ポートだけ変更しよう。
$ virsh edit aries

viが立ち上がり、仮想マシンariesの設定情報(xml形式)が編集できる状態になったと思う。
以下の部分を変更しよう
    <graphics type='spice' autoport='yes' listen='127.0.0.2' passwd='test'>
      <listen type='address' address='127.0.0.2'/>
      <image compression='off'/>
    </graphics>

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

書き換えたら、仮想マシンariesを起動してみる。
起動はvirshコマンドで実行出来るぞ。
$ virsh list --all
$ virsh start aries
$ virsh list --all

起動できたか確認してみよう。
virt-viewer(RemoteViewer)で、spice://127.0.0.2:9001 へアクセスしてみよう。

無事にアクセス出来たら、ログインプロンプトが出ているはずだ。
ariesをインストールした時のユーザIDでログインしてみよう。
ログインできたはずだ。

かなり長くなってしまったので、一旦ココで切って、次回以降で少しずつ内容確認していく。
ariesはシャットダウンしておこう。
(aries) $ sudo shutdown -h now
(aquarius) $ virsh list --all

2016年6月28日火曜日

KVMその4(SPICE)

さて前回、KVMの画面描画にSPICEというプロトコル?が使えることは軽く書いた。

今回は実際に、SPICEプロトコルを使った画面の確認をしてみたいと思う。

SPICEは、RDPと同じように作業端末側から繋ぎに行く。そのための専用クライアントソフトがある。
手元のWindowsマシンで動くクライアントもある。
https://virt-manager.org/download/
この中の virt-viewer というエントリに、 Win x86 MSI/Win x64 MSI のそれぞれのリンクがあるので、手元のWindowsの32bit/64bitに併せてダウンロード、インストールしておこう。

--2016/07/19追記--
2016/06/30付で、virt-viewerの4.0がリリースされているようだが、これのWin x64版にはどうやらバグがある。(確認したのはWin x64版だけで、x86版にも同様にバグがあるかもしれない。)
一度画面描画された後、画面が更新されないというバグだ。ウィンドウを裏に隠してから、また表に出すと描画が更新されるが、毎回それをやらないといけない、というバグ。
そのため、再リリースされるまでは、3.1を使おう。
https://virt-manager.org/download/sources/virt-viewer/virt-viewer-x86-3.1.msi
https://virt-manager.org/download/sources/virt-viewer/virt-viewer-x64-3.1.msi
--2016/07/19追記ココまで--

作業端末にインストールが終わったら、さっそくaquariusにログインしよう…。と、言いたい所だが、F/W(ルータ)の外側からaquariusにログインする場合、sshトンネルを使ったリモートデスクトップその2の時と同じように、ポートフォワーディングの設定をしておこう。
SPICEは、使用するポート番号は特に決まっていないようなので、今回は暫定的に9001を使用する。
設定内容は以下の通り
  • ローカルのポート:9001
  • リッスン:127.0.0.1
  • リモート側ホスト:127.0.0.1
  • ポート:9001
ポートフォワードの設定が終わったら、今度こそaquariusにログインしよう。
ログインしたら、前回までと同様に、kvmを起動するが、spiceオプションを付けて起動する。
$ cd iscsivol/
$ kvm -machine type=q35 \
      -hda     test.img \
      -boot    c        \
      -m       512      \
      -cpu     host     \
      -smp     4,cores=2,threads=2,sockets=1 \
      -spice   port=9001,password=test &
(ちょっと長いため、改行を入れた。-machineオプション、-smpオプション、-cpuオプションは付けても付けなくてもいいぞ。)
今回は & 付きでバックグランド実行させている。そのため、プロンプトはすぐ戻ってきたはずだ。

この時点で今までだったら新しいウィンドウが立ち上がり、そこに仮想マシンの画面が表示されていたはずだ。
今回 spice オプションを付与したため、新しいウィンドウは立ち上がって無いはずだ。

ここで、先ほど作業用端末にインストールしたspiceクライアント(virt-viewer)を起動しよう。
プログラムの名前は「Remote Viewer」になっていると思う。

起動したら、以下のようなウィンドウが立ち上がってくるはずだ。

このウィンドウの「Connection Address」欄に、
spice://127.0.0.1:9001 と入力しよう。
#自宅内LANから接続している等、sshポートフォワードをしていない場合は、IPアドレスは aquarius のIPアドレスになるぞ。

入力が終わったら、上記画面で示したとおり「Connect」ボタンを押そう。

「Connect」ボタンを押したら、新しいウィンドウがオープンし、パスワードを入力するダイアログが表示されたはずだ。
(「Username」欄は入力出来ない状態だ。)

Password欄には、kvmを実行した時のpassword=の値を入力しよう。
先ほどのコマンドなら、test のはずだ。
右下の「OK」ボタンを押すと、ウィンドウサイズがリサイズされて、今までと同じようなログイン画面が出てきたはずだ。

今まで通りログインしてコマンド類を実行してみよう。
普通に使えることが分かるはずだ。

piscesをOS再起動しても、spiceクライアントがそのまま利用出来るのも確認しておこう。
(pisces) $ sudo shutdown -r now

また、今までの X を用いた画面転送では、画面がクローズする(右肩のXボタンを押す)と、ゲストOS(pisces)も停止してしまっていた。
spiceクライアントを利用している場合は、spiceクライアントが停止しても、ゲストOSは稼働したままだ。
再びspiceクライアントから接続すれば、作業が継続出来る。

但し、ホストOSである aquarius からpsを見ると、passwordも丸見えなので、扱いには気をつけよう。

kvmコマンドの-spiceオプションは他にも色々ある。今回はsshトンネルを通しているため、特に暗号化を行う必要は無い(sshトンネルで暗号化されている)が、TLS(Transport Socket Layer)も使える。いわゆるSSL暗号化と言うヤツだ。(微妙に違うが…)
この辺りも、少しずつ調査をして記録していきたい。(要するに、まだ理解していないってことだ…)

稼働確認等が終わったら、忘れないようにshutdownしておこう。
(pisces) $ sudo shutdown -h now
SPICEクライアントも終了してウィンドウがクローズされたはずだ。

今回はここまで。