7.4. Chroot 環境への移行

残るツール類をビルドするために必要なパッケージは、ここまでにすべてビルドしました。 そこで chroot 環境に入って、一時的ツールのインストールを済ませます。 この環境は、最終システムに向けたインストールを行う際にも用います。 root ユーザーになって以下のコマンドを実行します。 chroot 環境内は、この時点では一時的なツール類のみが利用可能な状態です。

chroot "$LFS" /usr/bin/env -i   \
    HOME=/root                  \
    TERM="$TERM"                \
    PS1='(lfs chroot) \u:\w\$ ' \
    PATH=/usr/bin:/usr/sbin     \
    MAKEFLAGS="-j$(nproc)"      \
    TESTSUITEFLAGS="-j$(nproc)" \
    /bin/bash --login

本章と次章のパッケージビルドにおいて、論理コアをすべて利用したくない場合、$(nproc) の部分は、利用したい論理コア数に書き換えてください。 第 8 章 において(特に Autoconf、Libtool、Tar など)は、テストスイートにおいて MAKEFLAGS を参照しないものがあり、そこでは環境変数 TESTSUITEFLAGS が代わりに用いられています。 そこでここでは同様にして、テストスイートを複数コアにより実行するための設定も行います。

env コマンドの -i パラメーターは、chroot 環境での変数定義をすべてクリアするものです。 そして HOME, TERM, PS1, PATH という変数だけここで定義し直します。 TERM=$TERM は chroot 環境に入る前と同じ値を TERM 変数に与えます。 この設定は vimless のようなプログラムの処理が適切に行われるために必要となります。 これ以外の変数として CFLAGSCXXFLAGS などが必要であれば、ここで定義しておくと良いでしょう。

ここから先は LFS 変数は不要となります。 すべての作業は LFS ファイルシステム内で行っていくことになるからです。 chroot コマンドは、$LFS ディレクトリがルート (/ ディレクトリ) となるようにして Bash シェルを起動します。

/tools/binPATH 内には存在しません。 つまりクロスチェーンは、もはや利用しないということです。

bash のプロンプトに I have no name! と表示されますがこれは正常です。 この時点ではまだ /etc/passwd を生成していないからです。

[注記]

注記

本章のこれ以降と次章では、すべてのコマンドを chroot 環境内にて実行することが必要です。 例えばシステムを再起動する場合のように chroot 環境からいったん抜け出した場合には、「/dev のマウントと有効化」「仮想カーネルファイルシステムのマウント」にて説明した仮想カーネルファイルシステムがマウントされていることを確認してください。 そして chroot 環境に入り直してからインストール作業を再開してください。