Chroot
Chroot (Change root) はメインシステムのrootディレクトリから論理的に分離された環境を作るために、見掛け上のrootディレクトリを変更する目的で使われるUnixシステムのユーティリティです。この新しい環境は"chroot jail(訳注:監獄)"として知られています。jailの中にいるユーザーからは閉じこめられている環境の外側にあるファイルを見ることもアクセスすることもできません。
chrootの主な使い方の一つとして、ソフトウェアの互換性やテストの為に、現在のシステムの上に、分離されたLinuxシステムを作るものがあります。ハイパーバイザーのオーバーヘッドが無いので、これはしばしば軽量な仮想化の代替としてみられます。
前提条件
環境構築
新しくchroot環境を作る時にはまず、chrootして住むためのディレクトリを作る必要があります。例えば/mnt/mychrootにchrootすることを考えましょう:
user $
mkdir /mnt/mychroot
user $
cd /mnt/mychroot
既にインストールされたシステムをマウントしたい場合は、次のコマンドが使えるでしょう。例に書かれた<DEVICE>
は実際のドライブやパーティションに合わせて書き換えてください。
user $
mkdir /mnt/mychroot
user $
mount /dev/DEVICE /mnt/mychroot
もしあなたが今居るルートファイルシステムのサブディレクトリに既にシステムをインストールしてあれば、上のステップはスキップして構いません。
システムファイルとPortageツリーの展開 (新規インストール)
新しいシステムをインストール中であれば、次のステップはstage3とPortage tarballをダウンロードして正しいchrootの場所に設置することです。この手続についてのより詳しい情報は、Gentoo ハンドブックのstage tarball をダウンロードする と stage tarball を展開する をご覧ください。
root #
links http://distfiles.gentoo.org/releases/amd64/autobuilds/
root #
tar xvjpf stage3-*.tar.bz2 -C /mnt/mychroot
設定
chrootに入る前にいくつかのディレクトリをマウントしておかなければなりません。
root #
mount --rbind /dev /mnt/mychroot/dev
root #
mount --make-rslave /mnt/mychroot/dev
root #
mount -t proc /proc /mnt/mychroot/proc
root #
mount --rbind /sys /mnt/mychroot/sys
root #
mount --make-rslave /mnt/mychroot/sys
root #
mount --rbind /tmp /mnt/mychroot/tmp
そして基本的な設定ファイルもホストからコピーしておく必要がありますが、既存のシステムを使っている場合はmake.confをコピーしてはいけません:
user $
cp /etc/portage/make.conf /mnt/mychroot/etc/portage # 既存のシステムを使う場合、このコマンドは省いてください。
user $
cp /etc/resolv.conf /mnt/mychroot/etc
使い方
以上の作業が完了すれば、以下のコマンドで新しいchroot環境に入ることができます:
root #
chroot /mnt/mychroot /bin/bash
root #
env-update && ./etc/profile
root #
export PS1="(chroot) $PS1"
新規インストールの場合は、全てを確実に最新にするためにportageを同期してください。
(chroot) root #
emerge-webrsync
(chroot) root #
emerge --sync
これでシステムは使用可能になりました。メインのシステムに何一つ影響を与えることなく、ソフトウェアをインストールしたり、メチャクチャな設定をしたり、実験的なパッケージや設定を試したりできます。chrootから離れるには単に exit もしくはCtrl+dと入力してください。これで操作中のコンソールはいつもの環境に戻って来ます。マウントしたディレクトリをアンマウントするのを忘れないでください。
Init スクリプト
頻繁にchrootの構築を行なうのであれば、次の init script を使うことでchrootの為のマウントを速くできます。 スクリプトはデフォルトのランレベルに追加することができ、システム起動時に自動的にセットアップされます。
/etc/init.d/mychroot
#!/sbin/openrc-run depend() { need localmount need bootmisc } start() { ebegin "Mounting chroot directories" mount -o rbind /dev /mnt/mychroot/dev > /dev/null & mount -t proc none /mnt/mychroot/proc > /dev/null & mount -o bind /sys /mnt/mychroot/sys > /dev/null & mount -o bind /tmp /mnt/mychroot/tmp > /dev/null & eend $? "An error occurred while mounting chroot directories" } stop() { ebegin "Unmounting chroot directories" umount -f /mnt/mychroot/dev > /dev/null & umount -f /mnt/mychroot/proc > /dev/null & umount -f /mnt/mychroot/sys > /dev/null & umount -f /mnt/mychroot/tmp > /dev/null & eend $? "An error occurred while unmounting chroot directories" }
異なったディレクトリやパーティションを使う場合は、必要なマウントコマンドをstart()
に追加して、異なる名前を使う場合は/mnt/chrootを適切な名前に変更してください。
関連項目
- Project:X86/Chroot Guide — provides instructions on how to create chroots to assist in testing Gentoo packages for stabilization.
- Chrooting proxy services
- Chrooting and virtual servers