Linux-VServerをインストールするLinux Hacks(1/2 ページ)

Linux-VServerを使えば、物理的に1台のハードウェアで複数の仮想サーバを簡単に実行できる。より複雑な仮想化のスキームほどの柔軟性はないものの、実装が容易でパフォーマンスにも優れている。ここではLinux-VServerの導入ノウハウを伝授しよう。

» 2007年01月12日 08時00分 公開
[Marc-Abramowitz,Open Tech Press]

 Linux-VServerを使えば、物理的に1台のハードウェアで複数の仮想サーバを簡単に実行することができる。より複雑な仮想化のスキームほどの柔軟性はないものの、実装が容易でパフォーマンスにも優れている。

 Linux-VServerや類似ソフトウェアのOpenVZでは「ライトウェイト(軽量)」な仮想化のアプローチを取り、基本的には1つのLinuxカーネル環境をセグメント化して、それぞれに別々のファイルシステム、プロセステーブル、ネットワークアドレスを持つ複数の仮想マシンに分割している。

 この方法は“jail”アプローチと呼ばれることもある。FreeBSDオペレーティングシステムでおなじみの“jail”という機能にきわめて類似しているからである。このFreeBSDのjailは、Linuxカーネルも含めた多数のUNIXカーネルでサポートされてきたchroot jailの概念を拡張したものだ。

 その方面に詳しい人なら、chrootシステムコールによって、プロセスのルートディレクトリをより大きなファイルシステムのサブツリーに変更できることをご存知だろう。この方法は、脆弱なサーバのプロセスをシステムのほかの領域から隔離されたchroot jail内に置き、コンピュータのセキュリティを向上させるためによく使われる。例えば、定評のあるBINDのDNSサーバを/chroot/namedのようなchroot jail内で実行するように設定することができる。

 このchroot jail内では、例えば/etc/passwdはメインファイルシステムの/chroot/named/etc/passwdにマッピングされている。こうすることの利点は、rootとしてコードを実行可能な権限を侵入者に与えてしまうようなBINDの弱点がたとえ見つかったとしても、侵入者は/chroot/named/の外側にあるファイルには手を出せないことだ。このchroot jailの概念は、制限された形の仮想化と見なすことができる。chroot jailは各プロセスに完全に分離されたファイルシステムを提供するものの、システムのそれ以外の面は分離されていない。例えば、chroot jail内では、ホストシステムのすべてのプロセスが見え、各種ネットワークアドレスもホストシステムと共有されている。

 FreeBSDのjailとLinux-VServerは、このchroot jailの概念をさらに深め、各仮想マシンに別のプロセステーブル、リソース制限、ターミナル、ネットワークアドレスを持たせている。とはいえ、ハードウェアのエミュレーションは一切行っていないので、ライトウェイトな仮想化であることに変わりはない。

 そのため、しばしばセキュリティコンテキスト、あるいはLinux-VServerの用語でバーチャルプライベートサーバ(VPS)とも呼ばれるこうした仮想マシンは、根底にある物理的ハードウェアの最高速度に近いスピードで実行することができる。ほかの仮想化アプローチと違い、Linux- VServerの仮想サーバはすべて、同一のカーネルの制御下で実行される。実行するカーネルを1つにすることで達成されるパフォーマンスの向上は、多くの場合、この小さな制限を補ってあまりある。また、すべての仮想マシンが1つのカーネルに制限されるとはいえ、各仮想マシンで別々のLinuxディストリビューションを実行するには(選択したカーネルでそれらのディストリビューションが動作する限り)何の問題もない。

 Linux-VServerは2つの要素で構成される。セキュリティコンテキストをサポートするためのカーネル内コードと、仮想サーバの生成と管理のためのユーザー空間ツールである。

 通常、ユーザー空間ツールのインストールは、使用しているディストリビューションのパッケージ管理システムを使って簡単に行える。カーネルについては、VServerのセキュリティコンテキストをサポートしているカーネルを実行しなければならない。そのためには、セキュリティコンテキストをサポートするようにビルドされたカーネル、またはビルド前にカーネルソースコードに適用できるVServerのパッチのどちらかをダウンロードすればよい。

Linux-VServerのインストール

 以下では、わたしがUbuntu 6.10(Edgy Eft)システム上にLinux-VServerをセットアップした方法を紹介する。この方法はDebianのほか、KnoppixXandros、比較的新しいバージョンのMEPISなどDebianベースのディストリビューションでもそのまま、あるいはわずかな修正で使えるはずだ。そのほかのディストリビューションを使用している場合も、基本的に同じアプローチを取ればよいが、別のパッケージを用いる必要があるかもしれない。

 最初に行ったのは、VServerのパッチが当てられたビルド済みカーネルのダウンロードだった。独自カーネルをビルドする場合は、VServerのパッチをダウンロードしてカーネルソースに適用し、make-kpkgのようなコマンドを用いてカスタムカーネルのビルドを行えばよい。

 Ubuntuの場合、VServerのパッチはkernel-patch-vserverというパッケージとして用意されている。Ubuntuのカスタムカーネルのコンパイルについての詳細は、Ubuntu WikiのKernelCustomBuildページを参照してもらいたい。

 続いて、次のようなdpkgコマンドを用いてカーネルをインストールする。


sudo dpkg -i linux-image-2.6.15-27-686_2.6.15-27.45vs2.0.1+2.0.2rc26_i386.deb

 カーネルのインストール後は、VServerが有効な新カーネルをロードするためにリブートを行う。

 次に、VServerインスタンスの生成と管理を可能にするVServerユーティリティを次のようにしてインストールする。


sudo apt-get install util-vserver vserver-debiantools debootstrap

 これでLinux-VServerのインストールは完了したので、続いてUbuntu 6.06 LTS(Dapper Drake)を実行する仮想サーバの生成方法を紹介しよう。

関連キーワード

Linux | 仮想化 | Xen | Linux Hacks


       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ