本を読む

読書やコンピュータなどに関するメモ

UbuntuなノートPC上にDebian sidのchroot環境を作る

 Debian sidのLinux環境が必要なとき、ハッカーな人なら普通にインストールとかするのでしょうが、ヘタレな私には避けたいところです。そこで、ノートPCで使っているUbuntu上に、chroot環境としてsid環境を作ります。

 わかっている人には常識かもしれませんが、とりあえず次回のために作業メモを残しておきます。間違いなどありましたらご指摘ください。

chroot環境ってなに?

 chrootはUnix系OSのシステムコールで、指定したディレクトリを現在のプロセスのルートディレクトリに設定するものです。たとえば、/usr/localにchrootすると、/usr/local/binが/binとして見え、かわりに/usr/localの外が見えないようになります。

 これを使い、どこかのディレクトリ以下にLinux環境一式を作って、そこにchrootすれば、あたかも別のLinux環境にログインしたかのように使えます。仮想環境より簡単ですし、仮想化しないぶん動作も軽いはず。ただし、カーネルは親環境のままですし、ネットワークやポートなども親環境と共通です。

ソフトをインストールする

 さっそくやってみましょう。まず、debootstrapとschrootをインストールします。

$ sudo aptitude install debootstrap schroot

chroot環境をインストール

 ここでは/var/chroot/sidディレクトリ以下にchroot環境を作ります。といっても、debootstrap一発です。

$ sudo mkdir -p /var/chroot/sid
$ sudo debootstrap sid /var/chroot/sid http://cdn.debian.or.jp/debian

 それなりに時間がかかります。

ディレクトリをマウントする

 bindマウントで、chroot環境に必要なディレクトリをマウントします。

$ sudo vi /etc/fstab

(以下の内容を追加)
proc-chroot /var/chroot/sid/proc proc defaults 0 0
devpts-chroot /var/chroot/sid/dev/pts devpts defaults 0 0
/tmp /var/chroot/sid/tmp none bind 0 0
/home /var/chroot/sid/home none bind 0 0

$ sudo mount -a

ネットワークとユーザーを設定する

 ネットワーク自体は親環境のものを使うのでいいのですが、resolv.confは設定する必要があります。私の場合、親環境がDHCPクライアントなので、resolv.confは親環境のものをハードリンクして使うことにします。ついでにhosts関係もハードリンクします。

$ sudo rm /var/chroot/sid/etc/resolv.conf
$ sudo ln /etc/resolv.conf /var/chroot/sid/etc/resolv.conf
$ sudo mv /var/chroot/sid/etc/hosts{,.bak}
$ sudo ln /etc/hosts /var/chroot/sid/etc/hosts
$ sudo mv /var/chroot/sid/etc/hostname{,.bak}
$ sudo ln /etc/hostname /var/chroot/sid/etc/hostname

 ユーザーとグループは、親環境から自分の情報をコピーします。

$ sudo vi /var/chroot/sid/etc/passwd
(/etc/passwdから自分の行をコピー)
$ sudo vi /var/chroot/sid/etc/shadow
(/etc/shadowからrootと自分の行をコピー)
$ sudo vi /var/chroot/sid/etc/group
(/etc/groupから自分の行をコピー)
$ sudo vi /var/chroot/sid/etc/gshadow
(/etc/gshadowから自分の行をコピー)

schrootを設定

 一般ユーザーからchroot環境を使うには、Debian系の場合、schrootコマンドを使います。そこで、schrootを設定します。

$ sudo vi /etc/schroot/schroot.conf

 以下のように設定を追加します。設定名やdescriptionは、お好みで。

[sid]
description=Debian sid (unstable)
directory=/var/chroot/sid
users=(自分のユーザー名)

chroot環境がプロンプトでわかるようにする

 chroot環境に入ったとき親環境と見分けがつくように、プロンプトを変更します。ログインシェルがbashの場合は、標準でその設定があるので、/etc/debian_chrootというファイルを作るだけです。

$ sudo vi /var/chroot/sid/etc/debian_chroot

 このファイルの内容がプロンプトの先頭に表示されるので、「sid」とでも入力しておきます。

 ログインシェルがzshの場合は、標準ではプロンプトに表示するようにはなってないので、自分で~/.zshrcに設定します。たとえば、プロンプトの設定が以下のようになっているとします。

PROMPT='%n@%m:%c%# '

 これを、以下のように変更します。/etc/bash.bashrcからのコピーです。

if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(</etc/debian_chroot)
fi

PROMPT="${debian_chroot:+($debian_chroot)}%n@%m:%c%# "

chroot環境に入る

 いよいよchroot環境に入ります。

$ schroot -c sid -p

 schroot.confに書いた設定名を-cオプションで指定します。-pオプション(環境変数をうけつぐ)は、Xなアプリを使うために付けているので、Xなアプリを使わない場合は必要ないかもしれません。

 親環境からコピーした/etc/passwd情報で、ログインシェルがzshなどになっている場合、最初はchroot環境にないのでエラーになります。この場合、chroot環境にzshをインストールするまでは、schrootでbashを指定して入ります。

$ schroot -c sid -p bash

 無事chroot環境に入ると、以下のようにメッセージとプロンプトが表示されます。めでたしめでたし。

I: [sid chroot] Running shell: "/bin/bash"
(sid)emasaka@mynotepc:~$ 

 あとは新規インストールと同じく、がしがし環境を作りましょう。

変更2009-06-20:hostsのハードリンク作業を追加

変更2012-04-15:bindマウントのあたりを変更(参考:DebootstrapChroot - Ubuntu Wiki)。schroot.confの記述を変更

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/594-d449f229

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad