作業しやすい動作環境とするために bash
シェルに対するスタートアップファイルを二つ作成します。 lfs
ユーザーでログインして、以下のコマンドによって .bash_profile
ファイルを生成します。
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
lfs
ユーザーとしてログインした時、あるいは su コマンドとそのオプション「-
」を使って 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=/usr/bin
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
PATH=$LFS/tools/bin:$PATH
CONFIG_SITE=$LFS/usr/share/config.site
export LFS LC_ALL LFS_TGT PATH CONFIG_SITE
EOF
.bashrc
内の設定の意味
set
+h
set +h コマンドは
bash
のハッシュ機能を無効にします。 通常このハッシュ機能は有用なものです。
実行ファイルのフルパスをハッシュテーブルに記憶しておき、再度そのパスを探し出す際に PATH
変数の探査を省略します。
しかしこれより作り出すツール類はインストール直後にすぐ利用していきます。
ハッシュ機能を無効にすることで、プログラム実行が行われる際に、シェルは必ず PATH
を探しにいきます。 つまり $LFS/tools/bin
ディレクトリ以下に新たに構築したツール類は必ず実行されるようになるわけです。
そのツールの古いバージョンがホストディストリビューションのディレクトリ、/usr/bin
または /bin
にあったとしても、その場所を覚えていて実行されるということがなくなります。
umask
022
ユーザーのファイル生成マスク (file-creation mask; umask) を 022 にセットするのは、新たなファイルやディレクトリの生成はその所有者にのみ許可し、他者は読み取りと実行を可能とするためです。 (システムコール open(2) にてデフォルトモードが適用される場合、新規生成ファイルのパーミッションモードは 644、同じくディレクトリは 755 となります。)
LFS=/mnt/lfs
環境変数 LFS
は常に指定したマウントポイントを指し示すように設定します。
LC_ALL=POSIX
LC_ALL
変数は特定のプログラムが扱う国情報を制御します。
そのプログラムが出力するメッセージを、指定された国情報に基づいて構成します。 LC_ALL
変数は「POSIX」か「C」にセットしてください。 (両者は同じです。)
そのようにセットしておけば、クロスコンパイル環境下での作業が問題なく進められます。
LFS_TGT=$(uname
-m)-lfs-linux-gnu
LFS_TGT
変数は標準にないマシン名称を設定します。
しかしこれはこの先、クロスコンパイラーやクロスリンカーの構築、これを用いたツールチェーンの構築の際に、うまく動作させるための設定です。
詳しくは ツールチェーンの技術的情報にて説明しているので参照してください。
PATH=/usr/bin
最近の Linux ディストリビューションでは /bin
と
/usr/bin
をマージしているものが多くあります。
その場合、第 6 章 に対しての標準の
PATH
変数は /usr/bin/
に設定するだけで十分です。 そうでない場合は、パスに対して
/bin
を加える必要があります。
if [ ! -L /bin ];
then PATH=/bin:$PATH; fi
/bin
がシンボリックリンクではないは PATH
変数に加える必要があります。
PATH=$LFS/tools/bin:$PATH
$LFS//tools/bin
ディレクトリを PATH
変数の先頭に設定します。 第 5 章の冒頭においてインストールしたクロスコンパイラーは、インストールした直後からシェル上から実行できるようになります。
この設定を行うことで、ハッシュ機能をオフにしたことと連携して、ホスト上のコンパイラーが利用されないようにします。
CONFIG_SITE=$LFS/usr/share/config.site
第 5 章 と 第 6 章
においてこの変数を設定しておかないと、ディストリビューションによっては configure スクリプトが、ホストシステム上の
/usr/share/config.site
から設定項目を取得してしまうことがあります。 ホストの影響が及ばないようにここでオーバーライドします。
export
...
上のコマンド実行は、設定済の変数を改めて設定するものになりますが、シェルを新たに呼び出しても確実に設定されるようにエクスポートを行うことにします。
商用ディストリビューションの中には、bash
の初期化を行うスクリプトとして、ドキュメント化されていない /etc/bash.bashrc
というものを加えているものがあります。 このファイルは
lfs
ユーザー環境を修正してしまう可能性があります。 それにより
LFS にとっての重要パッケージのビルドに支障をきたすことがあります。 lfs
ユーザー環境をきれいに保つため、/etc/bash.bashrc
というファイルが存在しているかどうかを確認してください。
そして存在していたらファイルを移動させてください。 root
ユーザーになって以下を実行します。
[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE
(第 7 章 の冒頭において)
lfs
ユーザーを必要としなくなったら、(必要に応じて)/etc/bash.bashrc
を元に戻してください。
なお 「Bash-5.2.21」 においてビルドした、LFS における Bash
パッケージは、/etc/bash.bashrc
をロードしたり読み取ったりするように設定されていません。 したがって完璧な LFS システムであれば、このファイルは不要なものです。
最新のシステムは複数プロセッサー (デュアルコアとも言います)
であることが多く、パッケージのビルドにあたっては「同時並行のビルド」によりビルド時間を削減できます。
その場合プロセッサー数がいくつなのかを make
プログラムの実行時に、コマンドラインオプション引数として、あるいは環境変数として指定します。 Intel コア i9-13900K
プロセッサーは 8 P コア(P は performance の意味)、および 16 E コア(E は efficiency
の意味)を持ちます。 1 つの P は同時に 2 つのスレッド実行が可能であり、Linux カーネルからは 2
つの論理コアとして扱われます。 したがって合計で 32 の論理コアを持つことになります。
明示的にその全コアを利用するには、make が
32 個のビルドジョブまで生成できるようにすることです。 これには make に対して -j32
オプションを与えます。
make -j32
あるいは環境変数 MAKEFLAGS
を用います。 この変数の設定値は
make
が自動的にコマンドラインオプションとして利用します。
export MAKEFLAGS=-j32
-j
オプションに数値を与えずに
make コマンドに受け渡したり、あるいは
MAKEFLAGS
に設定することはやめてください。 それを行ってしまうと
make
に対して無限のビルドジョブ生成を行わせるものとなり、システムの安定性を損なう問題が発生します。
第 5 章 および 第 6 章
におけるパッケージのビルドに対して、利用可能な論理コアをすべて利用するように、ここで .bashrc
にて MAKEFLAGS
を設定します。
cat >> ~/.bashrc << "EOF"
export MAKEFLAGS=-j$(nproc)
EOF
$(nproc)
部分は、論理コアすべてでなく利用したい論理コア数を設定してください。
一時的なツールを構築する準備の最後として、bash シェルが、今作り出したユーザープロファイルを読み込むようにします。
source ~/.bash_profile