7.3. 仮想カーネルファイルシステムの準備

ユーザー名前空間内において稼働するアプリケーションは、カーネルが生成するさまざまなファイルシステムを使って、カーネルとのやり取りを行います。 これらのファイルシステムは仮想的なものであり、ディスクを消費するものではありません。 ファイルシステムの内容はメモリ上に保持されます。 こういったファイルシステムは $LFS ディレクトリツリー内にマウントされていなければならず、それができて初めて、アプリケーションが chroot 環境内にてそれを認識できるようになります。

この仮想ファイルシステムがマウントされるディレクトリを、以下のようにして生成します。

mkdir -pv $LFS/{dev,proc,sys,run}

7.3.1. /dev のマウントと有効化

LFS システムの通常のブートの際に、カーネルは /dev ディレクトリ上に devtmpfs ファイルシステムを自動的にマウントします。 カーネルはブートプロセスを通じて、仮想ファイルシステム上にデバイスノードを生成します。 またデバイスが初めて検出されるかアクセスされるかした際に生成します。 udev デーモンは、カーネルが生成したデバイスノードの所有者やパーミッションを変更することがあります。 またディストリビューション管理者やシステム管理者の作業をやりやすくするために、新たなデバイスノードやシンボリックリンクを生成することもあります。 (詳しくは 「デバイスノードの生成」 を参照してください。) ホストのカーネルが devtmpfs をサポートしている場合は、devtmpfs$LFS/dev 上に簡単にマウントすることができ、デバイスの有効化をカーネルに委ねることができます。

しかしホストカーネルの中には、devtmpfs をサポートしていないものがあり、そういったディストリビューションでは /dev の内容を別の手法によって実現しています。 そこでホストに依存せずに $LFS/dev ディレクトリを有効にするには、ホストシステムの /dev ディレクトリをバインドマウントします。 バインドマウントは特殊なマウント方法の一つであり、ディレクトリのサブツリーやファイルを、別の場所から見えるようにするものです。 以下のコマンドにより実現します。

mount -v --bind /dev $LFS/dev

7.3.2. 仮想カーネルファイルシステムのマウント

残りの仮想カーネルファイルシステムを以下のようにしてマウントします。

mount -vt devpts devpts -o gid=5,mode=0620 $LFS/dev/pts
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run

devpts に対するマウントオプションの意味

gid=5

このオプションは、devpts により生成されるデバイスノードを、グループID が 5 となるようにするものです。 この ID は、この後に tty グループにおいて利用します。 ここではグループ名ではなくグループ ID を用いるものとしています。 この理由は、ホストシステムが tty グループに対して異なる ID を利用していることがあるためです。

mode=0620

このオプションは、devpts により生成されるデバイスノードのモードを 0620 にします。 (所有ユーザーが読み書き可、グループが書き込み可) 前のオプションとともにこのオプションを指定することによって、devpts が生成するデバイスノードが grantpt() の要求を満たすようにします。 これはつまり、Glibc の ヘルパーコマンド pt_chown (デフォルトではインストールされない) が必要ないことを意味します。

ホストシステムによっては /dev/shm が通常 /run/shm へのシンボリックリンクになっているものがあります。 上の作業にて /run tmpfs がマウントされましたが、これを行うのはこのディレクトリを適切なパーミッションにより生成する必要がある場合のみです。

別のホストシステムでは /dev/shm が tmpfs へのマウントポイントの場合があります。 その場合 /dev のマウントは /dev/shm をchroot 環境内のディレクトリとして生成します。 この状況においては tmpfs を明示的にマウントしなければなりません。

if [ -h $LFS/dev/shm ]; then
  install -v -d -m 1777 $LFS$(realpath /dev/shm)
else
  mount -vt tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
fi