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

カーネルが取り扱うさまざまなファイルシステムは、カーネルとの間でやり取りが行われます。 これらのファイルシステムは仮想的なものであり、ディスクを消費するものではありません。 ファイルシステムの内容はメモリ上に保持されます。

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

mkdir -v $LFS/{dev,proc,sys}

6.2.1. 初期デバイスノードの生成

カーネルがシステムを起動する際には、いくつかのデバイスノードの存在が必要です。 特に consolenull です。 これらのデバイスノードはハードディスク上に生成されていなければなりません。 udevd が起動し、また Linux が起動パラメーター init=/bin/bash によって起動されれば利用可能となります。 そこで以下のコマンドによりデバイスノードを生成します。

mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3

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

各デバイスを /dev に設定する方法としては、/dev ディレクトリに対して tmpfs のような仮想ファイルシステムをマウントすることが推奨されます。 こうすることで各デバイスが検出されアクセスされる際に、その仮想ファイルシステム上にて動的にデバイスを生成する形を取ることができます。 このデバイス生成処理は一般的にはシステム起動時に Udev によって行われます。 今構築中のシステムにはまだ Udev を導入していませんし、再起動も行っていませんので /dev のマウントと有効化は手動で行ないます。 これはホストシステムの /dev ディレクトリに対して、バインドマウントを行うことで実現します。 バインドマウント (bind mount) は特殊なマウント方法の一つで、ディレクトリのミラーを生成したり、他のディレクトリへのマウントポイントを生成したりします。 以下のコマンドにより実現します。

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

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

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

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

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

gid=5

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

mode=0620

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

ホストシステムによっては /dev/shm/run/shm へのシンボリックリンクになっているものがあります。 chroot 環境内では、ホストファイルシステムとは別のファイルシステムとして、テンポラリファイルシステムをマウントしておく必要があります。

if [ -h $LFS/dev/shm ]; then
  link=$(readlink $LFS/dev/shm)
  mkdir -p $LFS/$link
  mount -vt tmpfs shm $LFS/$link
  unset link
else
  mount -vt tmpfs shm $LFS/dev/shm
fi