#
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 list
Name ID Mem VCPUs State Time(s) Domain-0 0 463 1 r----- 9.8 #
xm create testxen.cfg
Using config file "/etc/xen/testxen.cfg". Started domain testxen (id=1) #
xm list
Name 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 debian
Note: 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=testlxc
root@mirwiz:~#
lxc-console -n testlxc
Debian GNU/Linux 7 testlxc tty1 testlxc login:
root
Password: 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 auxwf
USER 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
はグラフィルインターフェースで、仮想マシンを作成管理するために libvirt を使います。
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/kvm
root@mirwiz:~#
virsh pool-create-as srv-kvm dir --target /srv/kvm
Pool 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 testkvm
root@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 testkvm
Domain 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