libvirtはKVM などのハイパーバイザ をサポートし、virt-manager などの管理 かんり ソリューションをサポートする。
libvirt とは、仮想 かそう 化 か 管理 かんり 用 よう の共通 きょうつう API を提供 ていきょう する、レッドハット を中心 ちゅうしん としたオープンソース プロジェクト である。
libvirtは仮想 かそう 機械 きかい の制御 せいぎょ を抽象 ちゅうしょう 化 か したライブラリ である。
本 ほん ライブラリの特徴 とくちょう は、サポート範囲 はんい が広 ひろ いことである。
サポートしている仮想 かそう 化 か は、現在 げんざい Xen 、KVM 、QEMU 、LXC 、OpenVZ 、UML 、VirtualBox 、VMware ESX・GSX・Workstation・Player、Hyper-V 、そしてクラスタ管理 かんり ソフトOpenNebula である。
更 さら なる対象 たいしょう 仮想 かそう 機械 きかい の拡大 かくだい を目指 めざ して例 たと えば、対応 たいおう やLinux-VServer のサポートをどうするかなどが開発 かいはつ 者 しゃ メーリングリスト上 じょう で議論 ぎろん された。
また、様々 さまざま な版 はん 数 すう でのサポートも特徴 とくちょう である。たとえば、Xen のリリースされたさまざまな版 はん (例 たと えばXen3.1.0やXen3.0.3など)で動作 どうさ する。またUnix系 けい オペレーティングシステム だけでなく、Windows 上 うえ でもMinGW やCygwin を使 つか えば動作 どうさ する。
libvirt自体 じたい が多 おお くの種類 しゅるい の仮想 かそう 化 か をサポートしていても、必 かなら ずしもlibvirtを利用 りよう しているアプリケーション が全 すべ ての仮想 かそう 化 か をサポートしているというわけではなく、KVMやXenなどがlibvirtを利用 りよう しているアプリケーションのサポートの中心 ちゅうしん となっている。
またハードウェア プラットフォーム に着目 ちゃくもく すると、CPU の場合 ばあい 、x86 、x86-64 、IA-64 、POWER などをサポートしており、ビット (32/64) およびエンディアン を問 と わない。
このような幅広 はばひろ いサポートを行 おこな っているため、仮想 かそう 機械 きかい を制御 せいぎょ するインタフェース としては、事実 じじつ 上 じょう の標準 ひょうじゅん の地位 ちい を築 きず きつつある。
例 たと えば、RHEL5 上 うえ で仮想 かそう 機械 きかい を管理 かんり するためのアプリケーションであるVirtual Machine Manager の実装 じっそう においても利用 りよう されている[ 2] 。
本 ほん ソフトウェアのライセンスはLGPL で提供 ていきょう されている。このため、GPL で開発 かいはつ されているXenのライブラリ (libxc ) に比 くら べてアプリケーション開発 かいはつ 者 しゃ の視点 してん では使 つか い勝手 がって が良 よ い。
標準 ひょうじゅん 提供 ていきょう APIはC とPython である。またその他 た の言語 げんご (Perl , OCaml , Ruby , Java ) のAPIもオプションパッケージで提供 ていきょう されている。また、運用 うんよう 管理 かんり の標準 ひょうじゅん インタフェースであるCIM への対応 たいおう もIBM を中心 ちゅうしん にCMPI CIM Providerとしてlibvirt-CIMの開発 かいはつ が進 すす んでいる。なお、CMPIは、Common Manageability Programming Interfaceの略 りゃく である。
セキュリティ拡張 かくちょう として、MACアクセス制御 せいぎょ との連携 れんけい を考 かんが えたsVirt が検討 けんとう されている。
本 ほん プロジェクトのメンテナーは、Daniel Veillard(通称 つうしょう Daniel)、Daniel Berrange(通称 つうしょう Dan)、Richard W.M.Jones(通称 つうしょう Rich)などレッドハットの開発 かいはつ 者 しゃ である。そのほか、レッドハット以外 いがい にもIBMやノベル 、富士通 ふじつう の開発 かいはつ 者 しゃ にソースコード の変更 へんこう 権 けん が与 あた えられている。
libvirtの実装 じっそう はlibvirt.cを中心 ちゅうしん としたソフトウェア 構成 こうせい になっている。libvirtのAPIを利用 りよう しているアプリケーションとしては、管理 かんり コマンドvirshが提供 ていきょう されている。また、Python Bindingsもlibvirt.cの上位 じょうい に位置 いち する。
一方 いっぽう 、各種 かくしゅ 仮想 かそう 機械 きかい の制御 せいぎょ ドライバ は、libvirt.cの下 した に位置 いち する。例 たと えばXenの制御 せいぎょ 層 そう の実装 じっそう では、Xen統合 とうごう 管理 かんり 層 そう (xen_unified.c) から、それぞれのXenのモジュール を呼 よ び出 だ す形 かたち になっている。ハイパーバイザ 直接 ちょくせつ (xen_internal.c)、管理 かんり ツールであるXend (xend_internal.c)、管理 かんり データベース であるxenstore (xs_internal.c) を呼 よ び出 だ している。
また、ネットワーク 越 こ しの制御 せいぎょ に関 かん するコードは、以下 いか の通 とお りである。クライアント側 がわ では、remote_internal.cを介 かい してリクエストを発行 はっこう する。サーバ側 がわ では、libvirtd(コード的 てき には、qemudディレクトリ以下 いか )を介 かい して、libvirtAPIを使 つか って制御 せいぎょ を行 おこな う。
libvirtAPIを使 つか う前 まえ にクライアント認証 にんしょう を必要 ひつよう とする接続 せつぞく がある。
接続 せつぞく で用 もち いるクライアント認証 にんしょう 方法 ほうほう は、管理 かんり 者 しゃ が選択 せんたく できる。
この選択 せんたく は、libvirtAPIを用 もち いるアプリケーションに依存 いぞん せず、統一 とういつ 的 てき に適用 てきよう される。
管理 かんり 者 しゃ は、libvirtdの認証 にんしょう 方法 ほうほう を、ネットワークソケット毎 ごと に設定 せってい することができる。
この設定 せってい は、libvirtdの設定 せってい ファイル /etc/libvirt/libvirtd.confで行 おこな う。
そして、認証 にんしょう 方法 ほうほう は、なし、POLKITそしてSASL の3つから選択 せんたく することができる。
さらに、SASL機構 きこう は、将来 しょうらい さまざまなオプションを設定 せってい できるようになる予定 よてい である。
UNIXドメインソケットによる伝統 でんとう 的 てき 権限 けんげん 管理 かんり [ 編集 へんしゅう ]
libvirtがPolkitをサポートしていない場合 ばあい 、UNIXドメインソケットに対 たい するアクセス制御 せいぎょ は、伝統 でんとう 的 てき なユーザグループアクセス制御 せいぎょ により行 おこな われる。
2種類 しゅるい のソケットがあり、ひとつは読 よ み書 か き可能 かのう 、もう1つは読 よ みのみ可能 かのう となっている。
読 よ み書 か きソケットは、アクセス制御 せいぎょ が厳 きび しく(0700)、ルートユーザのみが使 つか うことができる。
読 よ みのみソケットは、アクセス制御 せいぎょ がオープン (0777) であり、どのユーザも使 つか うことができる。
非 ひ 特権 とっけん ユーザにより広 ひろ いアクセスを許可 きょか する場合 ばあい 、libvirtd.confファイルを編集 へんしゅう しunix_sock_rw_permsに許可 きょか 権限 けんげん を設定 せってい し、ユーザグループを、unix_sock_groupに設定 せってい する必要 ひつよう がある。例 たと えば、前者 ぜんしゃ の属性 ぞくせい を0770にして、後者 こうしゃ をwheelグループに設定 せってい すると、wheelグループの人 ひと 全員 ぜんいん libvirtdにアクセスできることになる。
Polkitを使 つか ったUNIXドメインソケットの認証 にんしょう [ 編集 へんしゅう ]
libvirtがPolkit認証 にんしょう をサポートする場合 ばあい 、アクセス制御 せいぎょ は、より進 すす んだ形態 けいたい になる。
この場合 ばあい 、unix_sock_authパラメータは、polkitが標準 ひょうじゅん になる。そして、ファイルアクセス権限 けんげん は、読 よ み書 か き権限 けんげん を含 ふく め0777になる。クライアントアプリケーションは、Polkitと連携 れんけい してアイデンティティを提供 ていきょう し、ソケットに接続 せつぞく する。
現 げん デスクトップセッションのいずれのアプリケーションでも、パスワード認証 にんしょう を行 おこな うことが、読 よ み書 か きソケットの標準 ひょうじゅん ポリシーである。
この方法 ほうほう はsudo コマンドによる認証 にんしょう と似 に ている。しかし、クライアントアプリケーションは究極 きゅうきょく 的 てき に特権 とっけん ユーザ(ルート)として動 うご く必要 ひつよう がない。
そして標準 ひょうじゅん ポリシーでは、読 よ み専用 せんよう ソケットにどのようなアプリケーションも接続 せつぞく できる。
ポリシーは/etc/PolicyKit/PolicyKit.confに置 お かれたマスター設定 せってい ファイルによって管理 かんり 者 しゃ が変更 へんこう できる。
PolicyKit.conf(5)マニュアルページに設定 せってい 方法 ほうほう 詳細 しょうさい の記述 きじゅつ がある。
属性 ぞくせい として、2つのlibvirtd操作 そうさ が設定 せってい されている。1つは、読 よ み専用 せんよう のorg.libvirt.unix.monitorである。もう1つは、読 よ み書 か き可能 かのう なorg.libvirt.unix.manageである。
例 れい として、fredに読 よ み書 か き権限 けんげん を与 あた え、joeには管理 かんり 者 しゃ パスワードを認証 にんしょう を要求 ようきゅう する例 れい を示 しめ す。このアクセス制御 せいぎょ をするためには、以下 いか の設定 せってい を、PolicyKit.confに追記 ついき する必要 ひつよう がある。
<match action="org.libvirt.unix.manage">
<match user="fred">
<return result="yes"/>
</match>
</match>
<match action="org.libvirt.unix.manage">
<match user="joe">
<return result="auth_admin"/>
</match>
</match>
TCPソケットを平文 へいぶん のまま用 もち いたlibvirtdは、標準 ひょうじゅん でSASLを認証 にんしょう 機構 きこう として用 もち いる。
SASL機構 きこう は、標準 ひょうじゅん では、Digest-MD5を用 もち いる。これは、基本 きほん 的 てき なユーザ名 めい とパスワード形式 けいしき の認証 にんしょう である。
データストリームを暗号 あんごう 化 か する方法 ほうほう も提供 ていきょう している。このため平文 へいぶん のTCPソケットのセキュリティもTLSソケットを使 つか った場合 ばあい と同等 どうとう のセキュリティである。このため、UNIXドメインソケット及 およ びTLSソケットをSASL認証 にんしょう するように設定 せってい しておくことは望 のぞ ましい。この設定 せってい は、libvirt.conf設定 せってい ファイルのauth_unix_ro, auth_unix_rw, auth_tlsでSASL認証 にんしょう するようにしておく。
使 つか い始 はじ めの段階 だんかい では、ユーザアカウントは定義 ていぎ されていない。このためクライアントがTCP接続 せつぞく することが出来 でき ない。
ユーザを追加 ついか し、設定 せってい を行 おこな うためには、saslpasswd2コマンドを使 つか う。
このコマンドを実行 じっこう するに当 あ たって、アプリケーションがlibvirtであることを明示 めいじ 的 てき に示 しめ す必要 ひつよう がある。
この例 れい では、fredをアカウントに追加 ついか する例 れい を示 しめ している。
# saslpasswd2 -a libvirt fred
Password: xxxxxx
Again (for verification): xxxxxx
全 ぜん アカウントのリストを見 み るためには、sasldblistuser2コマンドを使 つか う。このコマンドでは、libvirtのユーザデータベースを指定 してい する必要 ひつよう がある。このデータベースは/etc/libvirt/passwd.dbにある。
# sasldblistusers2 -f /etc/libvirt/passwd.db
fred@t60wlan.home.berrange.com: userPassword
最後 さいご に、ユーザアクセスを停止 ていし する場合 ばあい 、saslpasswd2コマンドを再 ふたた び使 つか う。
# saslpasswd2 -a libvirt -d fred
TCPソケットを平文 へいぶん のまま用 もち いたlibvirtdは、標準 ひょうじゅん でSASLを認証 にんしょう 機構 きこう として用 もち いる。
SASL機構 きこう は、標準 ひょうじゅん では、Digest-MD5を用 もち いる。これは、基本 きほん 的 てき なユーザ名 めい とパスワード形式 けいしき の認証 にんしょう である。
ケルベロス (Kerberos) 認証 にんしょう のシングルサインオンを有効 ゆうこう にするには、libvirt用 よう SASL設定 せってい ファイルを変更 へんこう する必要 ひつよう がある。そのファイルは、/etc/sasl2/libvirt.confである。そして、mech_listパラメータは、digest-md5の代 か わりにgssapiに変更 へんこう する必要 ひつよう がある。
もし、UNIXドメインソケットやTLSソケットに対 たい してSASLが有効 ゆうこう になっている場合 ばあい 、Kerberosは、SASLを使 つか うことができる。DIGEST-MD5のように、ケルベロス認証 にんしょう 機構 きこう は、セッションのデータ暗号 あんごう 化 か 機構 きこう を提供 ていきょう する。
ディストリビューションによっては、SASL-Kerberosプラグインをデフォルトでインストールしない。この場合 ばあい 、cyrus-sasl-gssapiなどのパッケージをインストールすることが必要 ひつよう になる。
ケルベロス認証 にんしょう プラグインがインストールされているかどうか調 しら べるためには、pluginviewerを実行 じっこう して、gssapiがリストされるか確認 かくにん する必要 ひつよう がある。
# pluginviewer
...snip...
Plugin "gssapiv2" [loaded], API version: 4
SASL mechanism: GSSAPI, best SSF: 56
security flags: NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH
features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION|NEED_SERVER_FQDN
次 つぎ に、ケルベロス認証 にんしょう のレルムの管理 かんり 者 しゃ は、プリンシプルをlibvirtサーバ用 よう に発行 はっこう する必要 ひつよう がある。
プリンシプルは、ホスト毎 ごと に、libvirtdに対応 たいおう して一 ひと つ割 わ り当 あ てる必要 ひつよう がある。
そして、プリンシプルは、libvirt/full.hostname@KERBEROS.REALMと名 な づける必要 ひつよう がある。
この作業 さぎょう は、通常 つうじょう kadmin.localコマンドをケルベロス認証 にんしょう サーバで実行 じっこう して行 おこな われる。しかしながらケルベロス認証 にんしょう サーバによっては、サービスプリンシプルを設定 せってい するために他 た の方法 ほうほう が必要 ひつよう な場合 ばあい もある。
一度 いちど 生成 せいせい されると、プリンシプルは、キータブとしてエクスポートされる。そしてlibvirtd向 む けには、/etc/libvirt/krb5.tabに設定 せってい される。
# kadmin.local
kadmin.local: add_principal libvirt/foo.example.com
Enter password for principal "libvirt/foo.example.com@EXAMPLE.COM":
Re-enter password for principal "libvirt/foo.example.com@EXAMPLE.COM":
Principal "libvirt/foo.example.com@EXAMPLE.COM" created.
kadmin.local: ktadd -k /root/libvirt-foo-example.tab libvirt/foo.example.com@EXAMPLE.COM
Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/root/libvirt-foo-example.tab.
Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/root/libvirt-foo-example.tab.
Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type DES with HMAC/sha1 added to keytab WRFILE:/root/libvirt-foo-example.tab.
Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/root/libvirt-foo-example.tab.
kadmin.local: quit
# scp /root/libvirt-foo-example.tab root@foo.example.com:/etc/libvirt/krb5.tab
# rm /root/libvirt-foo-example.tab
ケルベロス認証 にんしょう するlibvirtに接続 せつぞく したいアプリケーションがユーザプリンシプルを取得 しゅとく するためにkinitを実行 じっこう する必要 ひつよう はほとんどない。
PAMがケルベロス認証 にんしょう 向 む けに設定 せってい されている場合 ばあい 、デスクトップセッションにログインした時点 じてん で自動的 じどうてき に取得 しゅとく しているためである。
libvirtのXenドライバは、3.0.1以降 いこう のXenを制御 せいぎょ することができる。
libvirtのXenドライバは、複数 ふくすう の制御 せいぎょ 方法 ほうほう の組 く み合 あ わせでXen仮想 かそう 機械 きかい を制御 せいぎょ する。
XenD: libvirt Xenドライバを使 つか うためにはXenDにアクセスできることが必須 ひっす である。このドライバを使 つか うためには、XenDの設定 せってい ファイル/etc/xen/xend-config.sxpでUNIXドメインソケットインタフェースを利用 りよう 可能 かのう にしておく必要 ひつよう がある。そのためにはこのファイルで、(xend-unix-server yes) と設定 せってい しておく必要 ひつよう がある。このソケットでのアクセスパスは、特権 とっけん ユーザ(ルート)に通常 つうじょう 限 かぎ られる。その他 た の選択肢 せんたくし としてHTTPインタフェースを使 つか うことができる。しかしセキュリティに注意 ちゅうい する必要 ひつよう がある。
XenStoreD: Xenstoredにアクセスして情報 じょうほう を取得 しゅとく することは、ドメイン情報 じょうほう 取得 しゅとく の際 さい のCPUのオーバーヘッドを減 へ らすことができる。
Hypercalls: ハイパーコールを発行 はっこう して情報 じょうほう を取得 しゅとく する。ドメイン情報 じょうほう を取得 しゅとく するには、一番 いちばん 効率 こうりつ 的 てき なアクセス方法 ほうほう である。
XM config: 3.0.4以前 いぜん のXenでは、XenDにおいて不 ふ 活性 かっせい ドメインの制御 せいぎょ は出来 でき なかった。このため、これらのXenを制御 せいぎょ する場合 ばあい 、libvirtでは/etc/xenのディレクトリにXM設定 せってい ファイルを保存 ほぞん して不 ふ 活性 かっせい ドメインの制御 せいぎょ をしている。このディレクトリに、設定 せってい ファイル以外 いがい を決 けっ しておいてはいけない。
libvirtのQEMUドライバは0.8.1以降 いこう のQEMUを管理 かんり することができる。そして、このドライバはQEMUコマンド書式 しょしき で制御 せいぎょ できるいずれの仮想 かそう 機械 きかい にも適用 てきよう できる。QEMU形式 けいしき のVMには、KVMとXennerが含 ふく まれる。
利用 りよう する前 まえ に必要 ひつよう な条件 じょうけん は以下 いか の通 とお りである。
QEMU: ドライバは/usr/bin以下 いか のqemu, qemu-system-x86_64, qemu-system-mips, qemu-system-mipsel, qemu-system-sparc, qemu-system-ppcの存在 そんざい をチェックする。チェック結果 けっか は、XMLファイルのcapabilityの項目 こうもく で見 み ることができる。
KVM: ドライバは/usr/bin/qemu-kvmコマンドと/dev/kvmのデバイスノードの存在 そんざい をチェックする。もし両方 りょうほう 存在 そんざい すれば、ハードウェア支援 しえん 機構 きこう 前提 ぜんてい のゲストドメインを使 つか うことができる。
Xenner: ドライバは/usr/bin/xennerコマンドと/dev/kvmのデバイスノードの存在 そんざい をチェックする。もし両方 りょうほう 存在 そんざい すれば、Xen準 じゅん 仮想 かそう 化 か ドメインをKVMを用 もち いて使 つか うことができる。
ネットワーク越 ご しのハイパーバイザを管理 かんり することができる。
libvirt本体 ほんたい と各種 かくしゅ 言語 げんご バインディング[ 編集 へんしゅう ]
Windows Support - MinGW のコンパイラを用 もち いてバイナリを作成 さくせい することができる。詳細 しょうさい は以下 いか のページを参照 さんしょう のこと[3] 。また、WindowsでのAPIのglibc との非 ひ 互換 ごかん はかなり大 おお きいが、GNU Portability Library (Gnulib ) をlibvirtパッケージの中 なか に取 と り込 こ むことにより、互換 ごかん 性 せい の手間 てま を回避 かいひ している。