2013-04-10

RHEL6 に Fedora 18 の chroot 監獄を作る

仮想マシンを使うと1台のマシンで複数のディストリビューションを同時に使用できるが, メモリの使用量が多くなるなど, オーバヘッドが大きい. 一方で, chroot 監獄を使うと, 仮想マシンよりは手軽に他のディストリビューションを使用することができる.

仮想マシンと chroot 監獄との違いをまとめておく.

仮想マシンchroot 監獄
kernelGood; ゲストのkernelBad; ルートのkernelと同じ
安全性Good; ゲストの動作はホストから制限できるBad; 監獄内からでも監獄外のプロセスへ干渉できる
サービスなどBad; 様々なサービスのプロセスがゲスト中で走るので冗長Good; 必要なプロセスのみを走らせる
まず, chroot 監獄では, kernel を変えることはできない. ルートの kernel の上で chroot 監獄内のプロセスが走る. 従って, kernel のバージョンに依存するアプリケーションの使用には注意する.
安全性に関しても, chroot 監獄は仮想マシンに劣る. chroot 監獄内から, 監獄外のプロセスにシグナル (SIGKILLなど) を送ることもできる. 任意のディバイスにもアクセスできる. 従って, 使い方によっては, 安全性が高まるよりはむしろ危険性が高まるかもしれない. なぜなら, 監獄内のプロセスが乗っ取られればルートのシステムに危害が加えられる可能性もあるし, ルート・監獄内と複数のシステムを管理するのは手間である.
以上のような欠点はあるものの, chroot コマンドだけですぐに使用でき, メモリなどのリソース使用量が仮想マシンより少ないという点は魅力的である. バイナリしか入手できないアプリケーションを動かしたいが glibc のバージョンが異なる場合, 別のディストリビューションにしかないパッケージを使用したい場合などにおいて役に立つかもしれない.

操作手順を簡単に説明する. ここでは, ルートに Scientific Linux 6, 監獄内に Fedora 18 と, ともに rpm にてパッケージ管理されたディストリビューションを使用する.

  • まずはディレクトリを作成し, rpm のデータベースを初期化する.
    # mkdir -p /opt/fedora-root/var/lib/rpm
    # rpm --root /opt/fedora-root/ --initdb
  • fedora-release をインストールする.
    $ cd /tmp && wget ftp://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/18/Everything/x86_64/os/Packages/f/fedora-release-18-1.noarch.rpm
    # rpm --root /opt/fedora-root/ -ivh /tmp/fedora-release-18-1.noarch.rpm
  • /dev//etc/ を作る.
    # mkdir /opt/fedora-root/{dev,etc}
    # cp -a /dev/{null,stderr,stdout,stdin,zero,random,urandom} /opt/fedora-root/dev
    # cp /etc/{resolv.conf,localtime} /opt/fedora-root/etc/
  • bashyum をインストールする. 依存関係で他にもいろいろインストールされる.
    yum --nogpgcheck --installroot=/opt/fedora-root/ install bash yum
  • /dev/shm をマウント. (オプション)
    # mount -t tmpfs tmpfs /opt/fedora-root/dev/shm
  • chrootする.
    # chroot /opt/fedora-root/

  • 0 件のコメント:

    コメントを投稿