ユーザー名前空間内において稼働するアプリケーションは、カーネルが生成するさまざまなファイルシステムを使って、カーネルとのやり取りを行います。 これらのファイルシステムは仮想的なものであり、ディスクを消費するものではありません。 ファイルシステムの内容はメモリ上に保持されます。 こういったファイルシステムは $LFS ディレクトリツリー内にマウントされていなければならず、それができて初めて、アプリケーションが chroot 環境内にてそれを認識できるようになります。
この仮想ファイルシステムがマウントされるディレクトリを、以下のようにして生成します。
mkdir -pv $LFS/{dev,proc,sys,run}
LFS システムの通常のブートの際に、カーネルは /dev
ディレクトリ上に devtmpfs
ファイルシステムを自動的にマウントします。 カーネルはブートプロセスを通じて、仮想ファイルシステム上にデバイスノードを生成します。
またデバイスが初めて検出されるかアクセスされるかした際に生成します。 udev
デーモンは、カーネルが生成したデバイスノードの所有者やパーミッションを変更することがあります。
またディストリビューション管理者やシステム管理者の作業をやりやすくするために、新たなデバイスノードやシンボリックリンクを生成することもあります。
(詳しくは 「デバイスノードの生成」 を参照してください。) ホストのカーネルが
devtmpfs
をサポートしている場合は、devtmpfs
を $LFS/dev
上に簡単にマウントすることができ、デバイスの有効化をカーネルに委ねることができます。
しかしホストカーネルの中には、devtmpfs
をサポートしていないものがあり、そういったディストリビューションでは /dev
の内容を別の手法によって実現しています。 そこでホストに依存せずに
$LFS/dev
ディレクトリを有効にするには、ホストシステムの
/dev
ディレクトリをバインドマウントします。
バインドマウントは特殊なマウント方法の一つであり、ディレクトリのサブツリーやファイルを、別の場所から見えるようにするものです。
以下のコマンドにより実現します。
mount -v --bind /dev $LFS/dev
残りの仮想カーネルファイルシステムを以下のようにしてマウントします。
mount -v --bind /dev/pts $LFS/dev/pts mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys mount -vt tmpfs tmpfs $LFS/run
ホストシステムによっては /dev/shm
が /run/shm
へのシンボリックリンクになっているものがあります。 上の作業にて /run
tmpfs がマウントされましたが、これはこのディレクトリを生成する必要がある時のみです。
別のホストシステムでは /dev/shm
が tmpfs
へのマウントポイントの場合があります。 その場合 /dev のマウントは /dev/shm をchroot
環境内のディレクトリとして生成します。 この状況においては tmpfs を明示的にマウントしなければなりません。
if [ -h $LFS/dev/shm ]; then mkdir -pv $LFS/$(readlink $LFS/dev/shm) else mount -t tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm fi