#mv /etc/grub.d/20_linux_xen /etc/grub.d/09_linux_xen#update-grub
xen-create-image コマンドが含まれます。これはタスクの大部分を自動化します。必須のパラメータは --hostname だけで、このパラメータは domU の名前を設定します; 他のオプションは重要ですが、/etc/xen-tools/xen-tools.conf 設定ファイルに保存することが可能です。そして、コマンドラインでオプションを指定しなくてもエラーは起きません。このため、イメージを作る前にこのファイルの内容を確認するか、xen-create-image の実行時に追加的パラメータを使うことが重要です。注目すべき重要なパラメータを以下に示します:
--memory、新たに作成するシステム用の RAM のサイズを指定;
--size と --swap、domU で利用可能な「仮想ディスク」のサイズを定義;
--debootstrap、debootstrap を使って新しいシステムをインストール; このオプションを使う場合、--dist オプション (ディストリビューションの名前、例えば wheezy) を一緒に使うことが多いです。
--dhcp は domU のネットワーク設定を DHCP で取得することを宣言します。対して、--ip は静的 IP アドレスを定義します。
--dir オプションを使い、各 domU を格納するデバイス用のファイルを dom0 上に作成する方法です。LVM を使っているシステムでは、--lvm オプションを使い、ボリュームグループの名前を指定しても良いでしょう; xen-create-image は新しい論理ボリュームをグループの中に作成し、この論理ボリュームがハードディスクドライブとして domU から利用可能にされます。
#xen-create-image --hostname testxen --dhcp --dir /srv/testxen --size=2G --dist=wheezy --role=udev[...] General Information -------------------- Hostname : testxen Distribution : wheezy Mirror : http://ftp.debian.org/debian/ Partitions : swap 128Mb (swap) / 2G (ext3) Image type : sparse Memory size : 128Mb Kernel path : /boot/vmlinuz-3.2.0-4-686-pae Initrd path : /boot/initrd.img-3.2.0-4-686-pae [...] Logfile produced at: /var/log/xen-tools/testxen.log Installation Summary --------------------- Hostname : testxen Distribution : wheezy IP-Address(es) : dynamic RSA Fingerprint : 0a:6e:71:98:95:46:64:ec:80:37:63:18:73:04:dd:2b Root Password : 48su67EW
vif*、veth*、peth*、xenbr0 です。Xen ハイパーバイザは定義された配置に従いユーザ空間ツールの制御の下でインターフェイスを準備します。NAT と routing モデルは特定の場合にのみ適合します。このため我々は bridging モデルを使います。
xend デーモンは既存のネットワークブリッジの中に仮想ネットワークインターフェイスを統合する (復数のブリッジが存在する場合 xenbr0 を優先する) ように設定されています。このため我々は /etc/network/interfaces の中にブリッジをセットアップして (bridge-utils パッケージをインストールする必要があります。このため bridge-utils パッケージは xen-utils-4.1 パッケージの推奨パッケージになっています)、既存の eth0 エントリを置き替えます:
auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0
bridge_maxwait 0
xm コマンドを使って domU を起動することが可能です。xm コマンドを使って、ドメインを表示、起動、終了する等の操作を行うことが可能です。
#xm listName ID Mem VCPUs State Time(s) Domain-0 0 463 1 r----- 9.8 #xm create testxen.cfgUsing config file "/etc/xen/testxen.cfg". Started domain testxen (id=1) #xm listName ID Mem VCPUs State Time(s) Domain-0 0 366 1 r----- 11.4 testxen 1 128 1 -b---- 1.1
testxen domU は仮想メモリではなく RAM から取った真のメモリを使い、このメモリ領域は dom0 によって使われる場合もあります。この点に注意してください。このため、サーバを作ることが Xen インスタンスをホストすることを意味する場合、それに応じて物理 RAM を供給することになる点に注意が必要です。
xm console コマンドから hvc0 コンソールを使う方法です。セットワーク設定が正しくない場合にはこれが唯一の方法です。
#xm console testxen[...] Debian GNU/Linux 7.0 testxen hvc0 testxen login:
xm pause と xm unpause コマンドを使って domU を一時的に停止したり再開する事が可能です。一時的に停止された domU は全くプロセッサを使いませんが、割り当てられたメモリを開放しません。xm save と xm restore コマンドを考慮することは興味深いかもしれません: domU を保存すれば domU の使っていた RAM などの資源が開放されます。domU を元に戻すとき (ついでに言えば再開するとき)、domU は時間が経過したことに全く気が付きません。dom0 を停止した時に domU が動いていた場合、パッケージに含まれるスクリプトが自動的に domU を保存し、dom0 の次回起動時に domU を自動的に再開します。もちろんこれにはラップトップコンピュータをハイバネートする場合と同様の標準的な不便さがあります。特に、domU が長い間一時停止されていた場合、ネットワーク接続が切断される可能性があります。今現在 Xen は ACPI 電源管理のほとんどに互換性がない点にも注意してください。このため、ホスト (dom0) システムを一時停止することは不可能です。
shutdown コマンドを使って) 行ったり、xm shutdown または xm reboot を使って dom0 から行うことも可能です。
init プロセスから起動された全てのプロセスファミリーに組み込む事が可能です。そして結果、仮想マシンにとてもよく似たものが作られます。このようなセットアップの正式名称は「コンテナ」です (LXC の名称: LinuX Containers)。Xen や KVM が提供する「真の」仮想マシンとのより重要な違いは 2 番目のカーネルが無い点です; コンテナはホストシステムと同じカーネルを使います。これは利点と欠点があります: 利点はオーバーヘッドが全く無い事による素晴らしい性能と、カーネルがシステムで実行している全てのプロセスに対する包括的な視点を持つことです。このため 2 つの独立したけーネルが異なるタスクセットでスケジュールを行うよりも効果的なスケジューリングが可能です。欠点の最たるものはコンテナの中で異なるカーネルを動作させることができない点です(異なるLinux バージョンや異なるオペレーティングシステムを同時に動かすことができません)。
/sys/fs/cgroup にマウントされる仮想ファイルシステムです。このため、/etc/fstab に以下のエントリを含める必要があります:
# /etc/fstab: static file system information. [...] cgroup /sys/fs/cgroup cgroup defaults 0 0
/sys/fs/cgroup は起動時に自動的にマウントされます; すぐに再起動できない場合、mount /sys/fs/cgroup を使ってファイルシステムを手作業でマウントします。
/etc/network/interfaces を編集することです。物理インターフェイス (例えば eth0) に関する設定をブリッジインターフェイス (通常 br0) に変え、物理とブリッジインターフェイス間のリンクを設定します。例えば、最初にネットワークインターフェイス設定ファイルが以下のようなエントリを持っていた場合:
auto eth0 iface eth0 inet dhcp
#auto eth0 #iface eth0 inet dhcp auto br0 iface br0 inet dhcp bridge-ports eth0
eth0 およびコンテナ用に定義されたインターフェイスが含まれます。
/etc/network/interfaces ファイルは以下のようになります:
# Interface eth0 is unchanged auto eth0 iface eth0 inet dhcp # Virtual interface auto tap0 iface tap0 inet manual vde2-switch -t tap0 # Bridge for containers auto br0 iface br0 inet static bridge-ports tap0 address 10.0.0.1 netmask 255.255.255.0
br0 インターフェイスを介した問い合わせに応答するように設定する必要があります。
root@mirwiz:~#lxc-create -n testlxc -t debianNote: Usually the template option is called with a configuration file option too, mostly to configure the network. For more information look at lxc.conf (5) debootstrap is /usr/sbin/debootstrap Checking cache download in /var/cache/lxc/debian/rootfs-wheezy-amd64 ... Downloading debian minimal ... I: Retrieving Release I: Retrieving Release.gpg [...] Root password is 'root', please change ! 'debian' template installed 'testlxc' created root@mirwiz:~#
/var/cache/lxc の中に作成され、その後目的のディレクトリに移動されます。こうすることで、同一のコンテナが極めて素早く作成されます。なぜなら、単純にコピーするだけだからです。
--arch オプションと、現在の Debian 安定版以外の物をインストールしたい場合に指定する --release オプションを受け入れます。また、MIRROR 環境変数を設定してローカル Debian ミラーを指定することも可能です。
/var/lib/lxc/testlxc/config) を編集し、幾つかの lxc.network.* エントリを追加します:
lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = 4a:49:43:49:79:20
br0 ブリッジに自動的に接続されます; 仮想インターフェイスの MAC アドレスを指定します。最後のエントリを削除するか無効化した場合、ランダムな MAC アドレスが生成されます。
lxc.utsname = testlxc
root@mirwiz:~#lxc-start --daemon --name=testlxcroot@mirwiz:~#lxc-console -n testlxcDebian GNU/Linux 7 testlxc tty1 testlxc login:rootPassword: Linux testlxc 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1+deb7u1 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@testlxc:~#ps auxwfUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 10644 824 ? Ss 09:38 0:00 init [3] root 1232 0.0 0.2 9956 2392 ? Ss 09:39 0:00 dhclient -v -pf /run/dhclient.eth0.pid root 1379 0.0 0.1 49848 1208 ? Ss 09:39 0:00 /usr/sbin/sshd root 1409 0.0 0.0 14572 892 console Ss+ 09:39 0:00 /sbin/getty 38400 console root 1410 0.0 0.1 52368 1688 tty1 Ss 09:39 0:00 /bin/login -- root 1414 0.0 0.1 17876 1848 tty1 S 09:42 0:00 \_ -bash root 1418 0.0 0.1 15300 1096 tty1 R+ 09:42 0:00 \_ ps auxf root 1411 0.0 0.0 14572 892 tty2 Ss+ 09:39 0:00 /sbin/getty 38400 tty2 linux root 1412 0.0 0.0 14572 888 tty3 Ss+ 09:39 0:00 /sbin/getty 38400 tty3 linux root 1413 0.0 0.0 14572 884 tty4 Ss+ 09:39 0:00 /sbin/getty 38400 tty4 linux root@testlxc:~#
/var/lib/lxc/testlxc/rootfs) に制限されています。コンソールを終了するには Control+a q を使います。
lxc-start に--daemon オプションを渡したお陰で、コンテナがバックグラウンドプロセスとして実行されている事に注意してください。コンテナを中止するには lxc-kill --name=testlxc などのコマンドを使います。
/etc/default/lxc で、比較的分かりやすいものです; コンテナの設定ファイルは /etc/lxc/auto/ に保存しなければいけない点に注意してください; 多くのユーザは実際の設定ファイルへのシンボリックリンクを /etc/lxc/auto/ に保存する方法を選びます。シンボリックリンクを作成するには ln -s /var/lib/lxc/testlxc/config /etc/lxc/auto/testlxc.config を使います。
qemu-* コマンドがあっても心配しないでください: これは KVM です。
/proc/cpuinfo にリストされている CPU フラグに「vmx」または「svm」が含まれていることを確認して、プロセッサが適合するものか否かを確認します。
virtual-manager is a graphical interface that uses libvirt to create and manage virtual machines.
apt-get install qemu-kvm libvirt-bin virtinst virt-manager virt-viewer を使って、必要なパッケージをインストールします。libvirt-bin には、libvirtd デーモンが含まれます。libvirtd デーモンを使うことで、ホストで実行されている仮想マシンを (潜在的にリモートで) 管理したり、ホスト起動時に要求された VM を開始する、事が可能です。加えて、libvirt-bin パッケージは virsh コマンドラインツールを提供します。virsh を使うことで、libvirtd の管理するマシンを操作することが可能です。
virt-install コマンドが含まれます。virt-install を使うことで、コマンドラインから仮想マシンを作成することが可能になります。最後に、virt-viewer は VM のグラフィカルコンソールへのアクセスを提供します。
eth0 物理インターフェイスとbr0 ブリッジを備え、eth0 が br0 に接続されていることを仮定します。
/var/lib/libvirt/images/) でも構わないならばこれは必要ありません。
root@mirwiz:~#mkdir /srv/kvmroot@mirwiz:~#virsh pool-create-as srv-kvm dir --target /srv/kvmPool srv-kvm created root@mirwiz:~#
virt-install の最も重要なオプションを詳細に見て行きましょう。virt-install は仮想マシンとそのパラメータを libvirtd に登録し、インストールを進めるために仮想マシンを開始します。
#virt-install --connect qemu:///system--virt-type kvm
--name testkvm
--ram 1024
--disk /srv/kvm/testkvm.qcow,format=qcow2,size=10
--cdrom /srv/isos/debian-7.2.0-amd64-netinst.iso
--network bridge=br0
--vnc
--os-type linux
--os-variant debianwheezy
Starting install... Allocating 'testkvm.qcow' | 10 GB 00:00 Creating domain... | 0 B 00:00 Cannot open display: Run 'virt-viewer --help' to see a full list of available command line options. Domain installation still in progress. You can reconnect to the console to complete the installation process.
--connect オプションは使用する「ハイパーバイザ」を指定します。これは仮想システムを表す URL (xen://、qemu://、lxc://、openvz://、vbox:// など) と VM をホストするマシン (ローカルホストの場合、空でも構いません) の形をしています。QEMU/KVM の場合、これに加えて各ユーザは制限されたパーミッションで稼働する仮想マシンを管理できます。この場合 URL パスは「システム」マシン (/system) かその他 (/session) かで識別されます。
| |
URL を一見すると QEMU が使われるように見えますが、KVM は QEMU と同じ方法で管理されているため、 --virt-type kvm を指定することで KVM を使うことが可能です。
| |
--name オプションは仮想マシンの (一意的な) 名前を定義します。
| |
--ram オプションは仮想マシンに割り当てる RAM の量 (MB 単位) を指定します。
| |
--disk オプションは仮想マシンのハードディスクとして利用するイメージファイルの場所を指定します; このファイルが存在しなければ、size パラメータで指定されたサイズ (GB 単位) で作成されます。format パラメータはイメージファイルを保存する様々な方法を選択します。デフォルトフォーマット (raw) はディスクサイズと内容が全く同じ単一ファイルです。ここではより先進的なフォーマット qcow2 を選びました。qcow2 は QEMU 専用のフォーマットで、最初は小さなファイルで仮想マシンがスペースを実際に利用する事になった時に増加するファイルです。
| |
--cdrom オプションはインストール時に利用する光学ディスクの場所を指定するために使われます。パスは ISO ファイルのローカルパス、ファイル取得先の URL、物理 CD-ROM ドライブのデバイスファイル (例 /dev/cdrom) のどれか 1 つを使うことが可能です。
| |
--network はホストネットワーク設定の中に仮想ネットワークを統合する方法を指定します。デフォルトは既存のネットワークブリッジに仮想ネットワークを統合する方法です (例では明示的にこの挙動を指定しています)。このブリッジが存在しない場合、仮想マシンは NAT を介した物理ネットワークだけに到達可能で、プライベートサブネット範囲 (192.168.122.0/24) に含まれるアドレスを割り当てられます。
| |
--vnc は VNC を使ってグラフィカルコンソールを利用可能にすることを意味します。関連する VNC サーバに対するデフォルトの挙動はローカルインターフェイスだけをリッスンします; 仮想マシンを操作する VNC クライアントを別のホスト上で実行する場合、VNC 接続を確立するには SSH トンネルを設定する必要があります (「ポート転送を使った暗号化トンネルの作成」参照)。別の方法として、VNC サーバを全てのインターフェイスを介して利用可能にするために、--vnclisten=0.0.0.0 を使うことも可能です; この方針を取る場合、ファイヤーウォールを適切に設計するべきという点に注意してください。
| |
--os-type と --os-variant オプションは、指定されたオペレーティングシステムの備える既知の機能に基いて、仮想マシンの幾つかのパラメータを最適化するためのものです。
|
virt-viewer を任意のグラフィカル環境から実行します (この時リモートホストの root パスワードが 2 回聞かれる点に注意してください。この理由はこの操作には 2 つの SSH 接続を必要とするからです)。
$virt-viewer --connect qemu+ssh://root@server/system testkvmroot@server's password: root@server's password:
libvirtd を使って管理している仮想マシンのリストを確認します:
#virsh -c qemu:///system list --all Id Name State ---------------------------------- - testkvm shut off
#virsh -c qemu:///system start testkvmDomain testkvm started
vncviewer へのパラメータの形で指定することが可能です);
#virsh -c qemu:///system vncdisplay testkvm:0
virsh サブコマンドには以下のものが挙げられます:
reboot は仮想マシンを再起動します;
shutdown は正常なシャットダウンを行います;
destroy は無理矢理停止します;
suspend は一時停止します;
resume は一時停止された仮想マシンを再開します;
autostart はホスト起動時にこの仮想マシンを自動的に起動することを有効化します (または --disable オプションを付けて無効化します);
undefine は仮想マシンの全ての痕跡を libvirtd から削除します。
debootstrap を使って初期化されます。しかし、仮想マシンに RPM に基づくシステム (Fedora、CentOS、Scientific Linux など) をインストールする場合、(同名のパッケージによって提供される) yum ユーティリティを使ってセットアップする必要があります。
yum.conf ファイルを設定する必要があります。yum.conf ファイルには、ソース RPM リポジトリへのパス、プラグイン設定のパス、宛先フォルダが含まれます。以下の例では、環境を /var/tmp/yum-bootstrap に保存することを仮定しています。/var/tmp/yum-bootstrap/yum.conf ファイルは以下の様になります;
[main] reposdir=/var/tmp/yum-bootstrap/repos.d pluginconfpath=/var/tmp/yum-bootstrap/pluginconf.d cachedir=/var/cache/yum installroot=/path/to/destination/domU/install exclude=$exclude keepcache=1 #debuglevel=4 #errorlevel=4 pkgpolicy=newest distroverpkg=centos-release tolerant=1 exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 metadata_expire=1800
/var/tmp/yum-bootstrap/repos.d ディレクトリには、RPM ソースリポジトリを記述するファイルを含めるべきです。このファイルはインストール済みの RPM に基づくシステムの /etc/yum.repos.d にあるものとよく似ています。以下は CentOS 6 のインストールに使うファイルの例です。
[base] name=CentOS-6 - Base #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 [updates] name=CentOS-6 - Updates #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 [extras] name=CentOS-6 - Extras #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 [centosplus] name=CentOS-6 - Plus #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/ mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
pluginconf.d/installonlyn.conf ファイルは以下の内容を含みます:
[main] enabled=1 tokeep=5
rpm --rebuilddb 等のコマンドを使って、rpm データベースが正しく初期化されることを確認して下さい。CentOS 6 をインストールするには以下のコマンドを使うだけです:
yum -c /var/tmp/yum-bootstrap/yum.conf -y install coreutils basesystem centos-release yum-basearchonly initscripts