作業しやすい動作環境とするために bash
シェルに対するスタートアップファイルを二つ作成します。 lfs
ユーザーでログインして、以下のコマンドによって .bash_profile
ファイルを生成します。
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
lfs
ユーザーとしてログインした時、起動されるシェルは普通は
ログイン シェルとなります。 この時、ホストシステムの
/etc/profile
ファイル
(おそらく環境変数がいくつか定義されている) と .bash_profile
が読み込まれます。 .bash_profile
ファイル内の
exec env -i.../bin/bash
というコマンドが、起動しているシェルを全くの空の環境として起動し直し HOME
、
TERM
、 PS1
という環境変数だけを設定します。 これはホストシステム内の不要な設定や危険をはらんだ設定を、ビルド環境に持ち込まないようにするためです。
このようにすることできれいな環境作りを実現できます。
新しく起動するシェルはログインシェルではなくなります。 したがってこのシェルは /etc/profile
ファイルや .bash_profile
ファイルは読み込まず、代わりに .bashrc
ファイルを読み込みます。 そこで以下のようにして .bashrc
ファイルを生成します。
cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF
set +h コマンドは
bash のハッシュ機能を無効にします。
通常このハッシュ機能は有用なものです。 実行ファイルのフルパスをハッシュテーブルに記憶しておき、再度そのパスを探し出す際に
PATH
変数の探査を省略します。
しかしこれより作り出すツール類はインストール直後にすぐ利用していきます。
ハッシュ機能を無効にすることで、プログラム実行が行われる際に、シェルは必ず PATH
を探しにいきます。 つまり $LFS/tools
ディレクトリ以下に新たに構築したツール類は必ず実行されるようになるわけです。
そのツールの古いバージョンがどこか別のディレクトリにあったとしても、その場所を覚えていて実行されるということがなくなります。
ユーザーのファイル生成マスク (file-creation mask; umask) を 022
にセットするのは、新たなファイルやディレクトリの生成はその所有者にのみ許可し、他者は読み取りと実行を可能とするためです。 (システムコール
open(2)
にてデフォルトモードが適用される場合、新規生成ファイルのパーミッションモードは 644、同じくディレクトリは 755 となります。)
環境変数 LFS
は常に指定したマウントポイントを指し示すように設定します。
LC_ALL
変数は特定のプログラムが扱う国情報を制御します。
そのプログラムが出力するメッセージを、指定された国情報に基づいて構成します。 ホストシステムの Glibc が 2.2.4
よりも古いものであって、この LC_ALL
を (本章の作業中に)
「POSIX」 でもなく 「C」 でもない値にセットしていた場合、chroot 環境からの exit
と再度の環境移行を行う際に問題が発生します。 LC_ALL
変数は
「POSIX」 か 「C」
にセットしてください。 (両者は同じです。) そのようにセットしておけば、chroot 環境下での作業が問題なく進められます。
LFS_TGT
変数は標準にないマシン名称を設定します。
しかしこれはこの先、クロスコンパイラやクロスリンカの構築、これを用いたツールチェーンの構築の際に、うまく動作させるための設定です。
詳しくは 5.2. 「ツールチェーンの技術的情報」
にて説明しているので参照してください。
/tools/bin
ディレクトリを PATH 変数の先頭に設定します。
第5章
にてインストールするプログラムは、インストールした直後からシェルによって実行指示が下されます。
この設定は、ハッシュ機能をオフとしたことと連携して、古いプログラムが実行されないようにします。
たとえホストシステムとの間で同一の実行プログラムがあったとしても、第5章の作業環境下では適切なプログラム実行が実現されます。
一時的なツールを構築する準備の最後として、今作り出したユーザープロファイルを source によって取り込みます。
source ~/.bash_profile