作業しやすい動作環境とするために 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
          umask の設定については、すでに 「変数 $LFS と umask の設定」 において説明しています。
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
            ...
          上のコマンド実行は、設定済の変数を改めて設定するものになりますが、シェルを新たに呼び出しても確実に設定されるようにエクスポートを行うことにします。
![[重要]](../images/important.png) 
        
          商用ディストリビューションの中には、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.37」 においてビルドした、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
![[重要]](../images/important.png) 
        
          -j オプションに数値を与えずに
          make コマンドに受け渡したり、あるいは
          MAKEFLAGS に設定することはやめてください。 それを行ってしまうと
          make
          に対して無限のビルドジョブ生成を行わせるものとなり、システムの安定性を損なう問題が発生します。
        
        第 5 章 および 第 6 章
        におけるパッケージのビルドに対して、利用可能な論理コアをすべて利用するように、ここで .bashrc にて MAKEFLAGS
        を設定します。
      
cat >> ~/.bashrc << "EOF"
export MAKEFLAGS=-j$(nproc)
EOF
      
        $(nproc)
        部分は、論理コアすべてでなく利用したい論理コア数を設定してください。
      
一時的なツールを構築する準備の最後として、bash シェルが、今作り出したユーザープロファイルを読み込むようにします。
source ~/.bash_profile