2010-07-18 19:06:10 +0000 2010-07-18 19:06:10 +0000
92
92

chroot環境でdev, proc, sysをマウントしていますか?

Linuxのイメージをカスタムパッケージで作成しようとしています。
何をしようとしているのかというと、XOのラップトップで使用するパッケージを手作業で作成しようとしているのですが、実際のXOではパッケージのコンパイルに時間がかかるので、必要なパッケージをすべてビルドして、イメージをXOにフラッシュするだけなら、時間とスペースの節約になります。

いくつかのパッケージをインストールしようとしたところ、proc,sys,devディレクトリが見つからず、設定に失敗してしまいました。そこで、私は他の場所から、私は私のchroot環境にホストのproc、…ディレクトリを “マウント "する必要があることを学びました。

私は2つの構文を見て、どちらを使用するかわからない。

ホストマシンで:

mount --bind /proc <chroot dir>/proc

と別の構文(chroot環境で):

mount -t proc none /proc

どちらを使用する必要がありますか?

回答 (6)

118
118
118
2012-04-26 06:10:11 +0000

Arch Linux Wiki ](https://wiki.archlinux.org/index.php/Chroot) は以下のコマンドを提案しています:

cd /mnt/arch # or where you are preparing the chroot dir
mount -t proc proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/
45
45
45
2010-07-19 01:02:06 +0000

/proc については、どちらの方法でもよいと思います。どちらも特殊なファイルシステムなので、何度でも再作成できます (バインドマウント方式はホストシステムと全く同じマウントを使用しますが、もう一方の方式は新しいマウントを使用します)。ガイドではいつもバインドマウントが推奨されているのを見たことがあるので、そちらを使うことにします。私が知っている限りでは、本当に重要な違いはありません。

しかし、/sys は通常 udev が管理している tmpfs マウントなので、ホストマシン上の実際のファイルシステムと同じものでなければなりません。

もしこの chroot がしばらくの間存在するのであれば、ホストシステム上の /dev にこれらのエントリを置くことで、物事を簡単にすることができます。

13
13
13
2010-07-19 00:05:08 +0000

Gentoo Handbook ](http://www.gentoo.org/doc/en/handbook/handbook-amd64.xml?full=1 “Gentoo Handbook”)には、/procと/devを再マウントするために、この2つのコマンドを具体的に呼び出しています。

mount -t proc none /mnt/chroot/proc
mount -o bind /dev /mnt/chroot/dev

/sys は普通のフォルダだと思うので、ハードリンクはできるはずです。

1
1
1
2016-04-17 15:36:51 +0000

この人気のある質問で注目すべきは、Arch Linux はスクリプト arch-chroot ; download arch-install-scripts-15-1-any.pkg.tar.xz

を作成しており、これは Arch-LinuxManjaro の両方の問題を解決してくれます(私もこれを使用しました)。

セカンダリの Manjaro インストールへの単純な標準の chroot では

pacman --sync linux

(システムクラッシュ後の銀の弾丸) を実行できませんが、この行を

arch-chroot /run/media/*YOURSELF*/manja-disk2

で置き換えることで、セカンダリの Arch-derivate インストールを

pacman --sync linux

で修正することができるようになります。bash スクリプト arch-chroot は、標準の /dev /sys /proc によって放置されている chroot やその他多くのことを処理します。arch-chroot を使う ](https://wiki.archlinux.org/index.php/Change_root#Using_arch-chroot)

-1
-1
-1
2019-01-20 13:32:32 +0000

最も簡単な方法は、forループを使用することです:

cd /

for i in proc sys dev; do mount -o bind $i /folder/$i; done
-1
-1
-1
2012-10-15 21:06:00 +0000

他にも疑似ファイルシステムや tmpfs の場所があります。これは debian でのものです。

/dev/pts 
/run
/run/shm
/proc/sys/fs/binfmt_mist
/var/lib/nfs/rpc_pipefs
/proc/fs/nfsd
/proc/bus/usb

chroot 内から usbfs, rpc_pipefs, devpts 疑似ファイルシステムをマウントしても問題ないはずです。カーネルには名前空間の概念があり、実際には異なるものを chroot の proc に置くことができるからです。

更新: このメーリングリストのスレッド によると、/sys をバインドしてマウントすべきではないとのことですが、特に chroot プロセスが独自のネットワーク名前空間を使用している場合はそうです。

関連する質問

6
10
5
37
10