Linux From Scratch

出典: フリー教科書『ウィキブックス(Wikibooks)』

はじめに[編集]

LFSプロジェクトの概要[編集]

Linux From Scratch (LFS) は、一から完全にLinuxシステムを構築するためのプロジェクトです。LFSでは、ソースコードからLinuxカーネル、ライブラリ、コンパイラ、ユーティリティなどのコンポーネントをすべて自力でビルドする手順が提供されています。

このプロジェクトの主な目的は、Linuxシステムの内部構造を理解することです。各コンポーネントの役割や相互関係を把握することで、Linuxのしくみを深く学ぶことができます。また、自分でカスタマイズしたシステムを構築できるため、セキュリティやパフォーマンスの最適化も可能になります。

LFSは主に学習の目的で利用されますが、組み込みシステムやサーバー、デスクトップ環境などにもカスタマイズしてインストールすることができます。ただし、高度なLinux知識が必要なため、初心者には難易度が高いプロジェクトとなります。

前提条件(ハードウェア、ソフトウェア要件)[編集]

LFSをビルドするには、以下の最低限のハードウェア要件を満たす必要があります。

  • モダンなCPU (Intel 64ビットまたはARM 64ビット互換)
  • RAMメモリ: 1GB以上(推奨4GB以上)
  • ハードディスク: 10GB以上の空き容量

また、ホストシステムとしてLinuxディストリビューションがインストールされている必要があります。推奨されるディストリビューションは以下の通りです。

  • Archlinux
  • Debian
  • Fedora
  • Ubuntu

さらに、以下のソフトウェアパッケージがホストシステムにインストールされている必要があります。

  • Bash 3.2以降
  • Binutils 2.13.1以降
  • Bison 2.7以降
  • Gcc 3.4以降(C、C++言語)
  • Glibc 2.5以降
  • Grep 2.5.1以降
  • Gzip 1.3.12以降
  • Make 4.0以降
  • Patch 2.5.4以降
  • Perl 5.8.8以降
  • Sed 4.1.5以降
  • Tar 1.22以降
  • Xz Utils 5.0.5以降

これらの前提条件を満たせば、LFSのビルドを開始することができます。

ホストシステムの準備[編集]

LFSをビルドする前に、ホストシステムの準備をしっかりと行う必要があります。主な作業は以下の通りです。

  1. ビルド環境の作成
    LFSのビルド作業に専用のユーザーアカウントとディレクトリを作成します。
  2. ソフトウェアのインストール
    必要なソフトウェアパッケージがインストールされていることを確認します。
  3. パーティションの作成
    LFSのインストール先となる専用のパーティションを作成します。
  4. ホストシステムの設定
    ホストシステムの設定をバックアップし、必要に応じて調整を行います。

これらの準備作業を怠ると、ビルド中に問題が発生する可能性があります。ホストシステムの状態を確認し、LFSのビルド環境を整える作業は非常に重要です。

以上がLFSのはじめにとして、概要、前提条件、ホストシステムの準備についてカバーすべき内容になります。次の章では、実際のビルド環境の構築手順に入っていきます。

ビルド環境の構築[編集]

一時的ビルド環境の作成[編集]

LFSシステムをビルドするための最初のステップは、一時的なビルド環境を作成することです。この環境は、ホストシステムとは別に、LFSパッケージをビルドするための仮想的な空間になります。

  1. ビルド用ディレクトリの作成
    mkdir -v $LFS/sources
    
    $LFSはLFSシステムをインストールするパーティションのマウントポイントを指します。sourcesディレクトリは、必要なソースパッケージを置く場所です。
  2. ビルド用ユーザーの作成
    groupadd lfs
    useradd -s /bin/bash -g lfs -m -k /dev/null lfs
    
    lfsグループとユーザーを作成します。このユーザーはビルド作業に使用されます。
  3. ビルド環境の設定
    cat > ~/.bash_profile << "EOF"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
    
    ビルド用の環境変数を設定します。これにより、ホストシステムの設定から影響を受けにくくなります。
  4. 一時的ツールチェーンのインストール先の作成
     
    mkdir -v $LFS/tools
    ln -sv $LFS/tools /
    
    一時的なツールチェーンをインストールする場所を作成し、スクリプトで参照しやすいようシンボリックリンクを作ります。

これで一時的なビルド環境ができあがりました。次は、この環境でLFSシステムの本体をビルドするための準備をします。

ツールチェーンの構築[編集]

LFSシステムをビルドするには、まずツールチェーンを構築する必要があります。ツールチェーンとは、コンパイラ、アセンブラ、リンカーなどのツール群のことです。

  1. Binutils のビルド
    tar -xvf binutils-*.tar.* 
    cd binutils-*
    ./configure --prefix=$LFS/tools ...
    make
    make install
    
    Binutilsは、アセンブラやリンカーなど、オブジェクトファイルを扱うツールを提供します。
  2. GCC のビルド(初期ツールチェーン)
    tar -xvf gcc-*.tar.* 
    cd gcc-*
    ./contrib/download_prerequisites
    mkdir -v build
    cd build  
    ../configure --prefix=$LFS/tools ...
    make
    make install
    
    GCCは、C/C++などのコンパイラを提供する重要なツールです。この段階では、完全なGCCをビルドするのではなく、最小限のバージョン(初期ツールチェーン)をインストールします。
  3. その他のツール
    初期ツールチェーンを使って、以下のようなツールをビルドします。
    • Linux カーネルヘッダー
    • Gawk
    • Gzip
    • Make
    • Patch
    • Sed
    • Xz

これで、LFSシステムのビルドに必要な基本的なツールチェーンが構築できました。次は、より高度な機能を備えた本格的なツールチェーンをビルドしていきます。

編集・構文解析ツールのインストール[編集]

LFSシステムのソースコードを編集・解析するために、いくつかのツールをインストールする必要があります。

  1. Bison のインストール
    tar -xvf bison-*.tar.xz
    cd bison-*
    ./configure --prefix=/tools
    make
    make install
    
    Bisonは、構文解析器ジェネレーターです。Makefileなどを解析するために必要です。
  2. Perl のインストール
    tar -xvf perl-*.tar.xz
    cd perl-*
    sh Configure -des -Dprefix=/tools ...
    make
    make install
    
    Perlは、スクリプト言語で、ソースコードの解析や生成などに使われます。
  3. Python のインストール
     
    tar -xvf python-*.tar.xz
    cd python-*
    ./configure --prefix=/tools --without-ensurepip
    make
    make install
    
    Pythonは、プログラミング言語で、ビルド手順の自動化などに使われます。
  4. Texinfo のインストール
    tar -xvf texinfo-*.tar.xz
    cd texinfo-*
    ./configure --prefix=/tools
    make
    make install
    
    Texinfoはマニュアルやドキュメントのためのツールセットです。

これらのツールをインストールすることで、LFSソースコードを適切に解析し、ビルドできる環境が整いました。次は、本格的なツールチェーンの構築に進みます。

クロス toolchain の構築[編集]

一時的ツールチェーンの作成[編集]

LFSシステム本体をビルドする前に、クロスコンパイル用の一時的ツールチェーンを構築する必要があります。この一時的ツールチェーンは、ホストシステムとは異なるターゲットシステム(LFS)向けにコンパイルするためのものです。

  1. 作業ディレクトリの作成
    mkdir -v $LFS/tools/bin
    ln -sv $LFS/tools/bin/bash /bin/bash
    
    一時的ツールチェーンをインストールするディレクトリを作成し、bashへのシンボリックリンクを貼ります。
  2. 環境変数の設定
    export LFS_TARGET=/tools
    export LFS_MACHINE=x86_64-lfs-linux-gnu      # または arm-lfs-linux-gnuemuなど
    export MAKE='make'
    
    ターゲットアーキテクチャやツールチェーン名、Makeコマンドなどの環境変数を設定します。
  3. パスの設定
     
    export PATH=$LFS_TARGET/bin:/bin:/usr/bin
    export CONFIG_SITE=$LFS_TOOLS/etc/config.site
    
    新しいツールチェーンのバイナリがパスに含まれるよう設定し、ビルド設定ファイルのパスも指定します。

これで、一時的なツールチェーンをビルドする準備ができました。次はその本体の構築に入ります。

コンパイラ、アセンブラ、リンカーなどのツールのビルド[編集]

この段階では、LFSシステム向けのクロス開発ツールをビルドします。主要なツールは以下の通りです。

  1. クロス Binutils のビルド
    tar -xvf binutils-*.tar.*
    mkdir build
    cd build
    ../configure --prefix=$LFS_TARGET --with-sysroot=$LFS --with-lib-path=$LFS_TOOLS/lib --target=$LFS_MACHINE --disable-nls
    make
    make install
    
    Binutilsは、アセンブラ、リンカー、その他のバイナリユーティリティを提供します。LFSシステム向けにクロスビルドします。
  2. クロス GCC のビルド - 第1パス
    tar -xvf gcc-*.tar.*
    mkdir gcc-build
    cd gcc-build
    ../gcc-*/configure --prefix=$LFS_TARGET --with-sysroot=$LFS --with-newlib --without-headers --with-local-prefix=$LFS_TOOLS --disable-nls --disable-shared --disable-multilib --with-native-system-header-dir=$LFS_TOOLS/include --enable-languages=c --target=$LFS_MACHINE
    make
    make install
    
    GCCのクロスコンパイラをビルドします。GCCのビルドは複数のパスで行われ、この段階では最小限の機能しかインストールされません。
  3. クロス glibc のビルド
    tar -xvf glibc-*.tar.*
    mkdir glibc-build
    cd glibc-build
    ../glibc-*/configure --prefix=$LFS_TARGET --with-headers=$LFS_TOOLS/include --with-sysroot=$LFS --with-newlib --build=$LFS_MACHINE --csu=<code>readlink -f $LFS_TOOLS/../glibc-*/csu/cpu-gnuX.X</code> --enable-add-ons --enable-kernel=x.y.z
    make
    make install
    
    glibcは、Linuxシステムに必須のCライブラリです。クロス glibc をLFSシステム向けにビルドします。
  4. クロス GCC のビルド - 第2パス
    cd gcc-build  
    $LFS_TARGET/libgcc/mkheaders
    $LFS_TOOLS/gcc-*/configure --prefix=$LFS_TARGET --with-sysroot=$LFS --with-newlib --enable-languages=c,c++ --disable-multilib --disable-nls 
    make
    make install
    
    GCCのクロスコンパイラに、先にインストールしたglibcを統合します。この段階でC/C++コンパイラが完成します。

これらのステップを経て、LFSシステム向けの一時的なクロスツールチェーンが構築されました。次はこの環境を使って、LFSシステム本体のビルドに入ります。

LFS 環境の構築[編集]

新しい階層の準備[編集]

LFSシステム本体をビルドするための環境を準備する必要があります。この新しい階層は、一時的なツールチェーンからは独立した、完全なLFSシステムを構築するための場所になります。

  1. パーティションの作成
    LFSシステムをインストールする専用のパーティションを用意します。最低でも10GBの容量が必要ですが、追加パッケージをインストールする場合は20GB以上が望ましいでしょう。
  2. パーティションのフォーマット
    mkfs -v -t ext4 /dev/&lt;lfsパーティション&gt;
    
    ext4ファイルシステムを作成します。
  3. マウントポイントの作成と専用パーティションのマウント
    mkdir -pv $LFS
    mount -v -t ext4 /dev/&lt;lfsパーティション&gt; $LFS
    
    LFSシステムをインストールするマウントポイント$LFSを作成し、専用パーティションをマウントします。
  4. 作業ディレクトリの作成
     
    mkdir -v $LFS/sources
    
    ビルド作業に使うソースコードを置くsourcesディレクトリを作成します。

これでLFSシステムをインストールする新しい環境が準備できました。

必須ディレクトリの作成[編集]

LFSシステムでは、一般的なLinuxディストリビューションで使われる階層構造を再現する必要があります。そのため、次のようないくつかの重要なディレクトリを作成します。

mkdir -pv $LFS/{etc,lib,lib64,bin,sbin,usr/{bin,sbin,lib,lib64,include},opt,var,tools}

作成されるディレクトリの役割は以下の通りです。

  • /etc - システム設定ファイルの置き場所
  • /lib/lib64 - システムライブラリ
  • /bin/sbin - バイナリファイル(ユーティリティなど)
  • /usr - 二次的なプログラムやデータを置くディレクトリ
  • /opt - オプションのアプリケーションをインストールする場所
  • /var - 可変データ(ログや一時ファイルなど)を置く場所
  • /tools - 一時的なツールチェーンがインストールされている場所

これらのディレクトリを適切に作ることで、FHS(Filesystem Hierarchy Standard)に準拠したLFSシステムの基盤ができあがります。

必須ファイルシステムの作成[編集]

LFSシステムが適切に機能するには、いくつかのファイルシステムを作成する必要があります。

  1. /dev ファイルシステムのセットアップ
    mknod -m 600 $LFS/dev/console c 5 1
    mknod -m 666 $LFS/dev/null c 1 3
    
    コンソールとヌルデバイスノードを作成します。
  2. 仮想カーネルファイルシステムのマウント
    mount -v --bind /dev $LFS/dev
    
    mkdir -pv $LFS/{proc,run,sys,tmp}
    mount -v --bind /proc $LFS/proc
    mount -v --bind /run $LFS/run
    mount -v --bind /sys $LFS/sys
    
    mkdir -pv $LFS/sources/kernel
    mount -v --bind /sources/kernel $LFS/sources/kernel
    
    procrunsysのディレクトリをホストシステムからLFS環境にバインドマウントします。また、カーネルソースコードを置くsources/kernelをマウントします。
  3. 一時ファイルシステムの作成
    mknod -m 666 $LFS/tmp/.tempfile b 3 1
    mke2fs -F $LFS/tmp/.tempfile
    mount -v -t tmpfs none $LFS/tmp
    
    一時ファイルを置く/tmpをメモリベースのtmpfsとしてマウントします。

これらの作業で、LFSシステムで最低限必要なファイルシステム階層が整いました。次は、この環境でLFSシステムのビルドを開始します。

はじめての一時的システムのブート[編集]

カーネルの設定とビルド[編集]

LFSシステムを実際に動作させるためには、まずLinuxカーネルをビルドする必要があります。このカーネルは一時的に使用するもので、後に本番環境のカーネルを別途ビルドします。

  1. カーネルソースコードの準備
    tar -xvf linux-5.x.x.tar.xz -C $LFS/sources/kernel
    cd $LFS/sources/kernel
    
    カーネルソースコードを展開し、作業ディレクトリに移動します。
  2. カーネル設定の準備
    make mrproper
    make headers
    make INSTALL_HDR_PATH=$LFS/tools headers_install
    
    古い設定を削除し、ヘッダファイルをビルド・インストールします。
  3. カーネル設定
    make menuconfig
    
    メニュー画面で以下の設定を有効にします。
    • 64ビットカーネルサポート
    • 一時的ビルド環境用の最小設定
  4. カーネルのビルド
     
    make
    make modules_install
    cp -v arch/x86_64/boot/bzImage $LFS/sources/kernel/vmlinuz
    
    カーネルとモジュールをビルドし、カーネルイメージを適切な場所にコピーします。

これでカーネルが準備できました。次は初期ツールチェーンのビルドを行います。

初期ツールチェーンのビルド[編集]

新しく作成したLFS環境において、本番環境用のコンパイルツールチェーンのビルドを行います。この初期ツールチェーンは、最終的なLFSシステムのコンポーネントをビルドする際に使用されます。

  1. 作業ディレクトリの作成
    mkdir -v $LFS/tools/work
    
    ビルド作業用のディレクトリを作成します。
  2. 一時的環境の設定
    export PATH=$LFS/tools/bin:/bin:/usr/bin
    export LFS_MACHINE=x86_64-lfs-linux-gnu      # または arm-lfs-linux-gnuemuなど
    
    環境変数を適切に設定します。
  3. GCCのビルド
    tar -xvf gcc-10.x.x.tar.xz -C $LFS/sources
    mkdir $LFS/tools/work/gcc-10.x.x
    pushd $LFS/tools/work/gcc-10.x.x
     $LFS/sources/gcc-10.x.x/configure --prefix=$LFS/tools ...
    make
    make install
    popd
    
    GCCをLFS環境向けにビルド・インストールします。
  4. Binutils のビルド
    tar -xvf binutils-2.xx.tar.xz -C $LFS/sources  
    mkdir $LFS/tools/work/binutils-2.xx
    pushd $LFS/tools/work/binutils-2.xx  
     $LFS/sources/binutils-2.xx/configure --prefix=$LFS/tools ..
    make
    make install
    popd
    
    Binutilsをビルド・インストールします。
  5. その他のツールのビルド
    同様の手順で、以下のツールをビルド・インストールします。
    • Linux カーネルヘッダー
    • GMP
    • MPFR
    • ext4ファイルシステムを作成します。
    • MPC
    • ISL
    • coreutils
    • ...

これで初期ツールチェーンがインストールされ、LFSシステム本体のコンポーネントをビルドする準備が整いました。次はこのツールチェーンを使って、LFSシステムのビルドに取り掛かります。

LFSシステムのビルド[編集]

コアユーティリティのインストール[編集]

この段階では、LFSシステムの中核となるコアユーティリティをインストールします。これらはシステムが基本的に動作するために不可欠なコンポーネントです。

  1. Glibc のインストール
    tar -xvf glibc-2.xx.tar.xz -C $LFS/sources
    mkdir $LFS/tools/work/glibc-2.xx 
    pushd $LFS/tools/work/glibc-2.xx
     $LFS/sources/glibc-2.xx/configure --prefix=/tools ...
    make
    make install
    popd
    
    Glibcは、Cライブラリの中核を成すコンポーネントです。
  2. Zlib のインストール
    tar -xvf zlib-1.xx.tar.gz -C $LFS/sources
    mkdir $LFS/tools/work/zlib-1.xx
    pushd $LFS/tools/work/zlib-1.xx
     $LFS/sources/zlib-1.xx/configure --prefix=/tools
    make
    make install
    popd
    
    Zlibは、データ圧縮ライブラリです。
  3. File のインストール
    tar -xvf file-5.xx.tar.gz -C $LFS/sources
    mkdir $LFS/tools/work/file-5.xx
    pushd $LFS/tools/work/file-5.xx
     $LFS/sources/file-5.xx/configure --prefix=/tools
    make
    make install
    popd
    
    Fileは、ファイル種別を判別するユーティリティです。
  4. 他のコアユーティリティのインストール
    同様の手順で以下のユーティリティをインストールします。
    • Readline
    • M4
    • Bc
    • Binutils
    • GMP
    • MPFR
    • ...

これらのコアユーティリティをインストールすることで、LFSシステムの基盤が整備されます。次はコンパイラチェーンの構築に進みます。

コンパイラチェーンの構築[編集]

LFSシステムをビルドするには、C/C++コンパイラを始めとするコンパイラチェーンが不可欠です。ここでは本番環境用のコンパイラチェーンを構築します。

  1. GCC のインストール
    tar -xvf gcc-10.x.x.tar.xz -C $LFS/sources 
    mkdir $LFS/tools/work/gcc-10.x.x
    pushd $LFS/tools/work/gcc-10.x.x
     $LFS/sources/gcc-10.x.x/configure --prefix=/tools ...
    make
    make install
    popd
    
    GCCをインストールします。今回はすべての言語をサポートします。
  2. GNU Binutils のインストール
     
    tar -xvf binutils-2.xx.tar.xz -C $LFS/sources
    mkdir $LFS/tools/work/binutils-2.xx  
    pushd $LFS/tools/work/binutils-2.xx
     $LFS/sources/binutils-2.xx/configure --prefix=/tools ...
    make
    make install
    popd
    
    アセンブラやリンカーなどのバイナリユーティリティをインストールします。
  3. その他のツールのインストール
    以下のようなツールも同様にインストールします。
    • Linux カーネルヘッダー
    • GMP
    • MPFR
    • MPC
    • ISL
    • ...

これでコンパイラチェーンの主要コンポーネントがインストールされました。次に基本的な内部ユーティリティをインストールしていきます。

基本的な内部ユーティリティのインストール[編集]

LFSシステム上で動作する最小限の内部ユーティリティをインストールする必要があります。

  1. Gzip のインストール
    tar -xvf gzip-1.xx.tar.xz -C $LFS/sources
    mkdir $LFS/tools/work/gzip-1.xx
    pushd $LFS/tools/work/gzip-1.xx
     $LFS/sources/gzip-1.xx/configure --prefix=/tools ...
    make
    make install 
    popd
    
    gzipは、ファイルの圧縮・展開ユーティリティです。
  2. File のインストール
    tar -xvf file-5.xx.tar.gz -C $LFS/sources 
    mkdir $LFS/tools/work/file-5.xx
    pushd $LFS/tools/work/file-5.xx
     $LFS/sources/file-5.xx/configure --prefix=/tools
    make
    make install
    popd
    
    Fileは、ファイルの種類を判別するユーティリティです。
  3. その他のユーティリティのインストール
    以下のようなユーティリティも同様にインストールします。
    • Sed
    • Bzip2
    • Xz
    • Findutils
    • Diffutils
    • ...

これらの基本的なユーティリティがインストールされたことで、LFSシステムの骨格が整いました。最後に残されたシステムの設定を行います。

システムのセットアップ[編集]

LFSシステムを実際に起動できるようにするため、最後の設定作業を行います。

  1. LFSシステムへの chroot 環境の構築
    mkdir -v $LFS/sources/etc
    cp -rv /sources/etc/resolv.conf $LFS/sources/etc
    
    mount -v --bind /dev $LFS/dev
    mount -v --bind /dev/pts $LFS/dev/pts
    mount -v --bind /proc $LFS/proc
    mount -v --bind /sys $LFS/sys
    
    chroot "$LFS" /usr/bin/env -i \
    HOME=/root                  \
    TERM="$TERM"                \
    PS1='(lfs chroot) \u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin \
    /bin/bash --login
    
    chroot 環境を構築し、LFSシステムに完全に入ります。
  2. ツールチェインの再構築
    chroot 環境内で、以下のようにツールチェーンを再構築します。
    • Zlib
    • File
    • Readline
    • Grep
    • ...
  3. その他の設定作業
    • /etc/ld.so.conf ファイルの作成
    • カーネルのインストール
    • fstab および hostsファイルの作成
    • ユーザーアカウントの設定
    • ブートスクリプトの設定
    • ...

これで、LFSシステム本体のビルドと設定が完了しました。後は再起動を行い、構築したLFSシステムを起動させることができます。

  1. システムの再起動
    logout # chrootからの抜け出し
    umount -v $LFS/dev/pts
    umount -v $LFS/{sys,proc,run,dev}
    umount -v $LFS/sources/kernel
    umount -v $LFS/tmp
    
    chrootから抜け出し、マウントされていたファイルシステムをアンマウントします。
    reboot
    
    システムを再起動します。
  2. LFSシステムの起動
    再起動後、LFSシステムが適切に起動していることを確認します。uname -aコマンドで、カスタムビルドしたカーネルが動作していることがわかります。
# lfs-setup
  1. セットアップスクリプトlfs-setupを実行し、最終的な設定を行います。
  2. 各種サービスの起動
    SysVinit、systemdなどのサービス管理ツールを使って、必要なサービスを起動させます。

以上の手順を経て、ようやくLFSシステムが完全に起動可能な状態になりました。これでソースコードからのカスタムLinuxディストリビューションの構築が完了です。必要に応じて、追加のパッケージをインストールしたり、さらなる設定を行うことができます。

LFSプロジェクトを通して、Linuxシステムの内部構造を深く理解できたことでしょう。この知識は、システム管理や開発、カスタマイズなど、様々な場面で活かすことができます。

システムの設定[編集]

ブートスクリプトの設定[編集]

LFSシステムを適切に起動するためには、ブートスクリプトの設定が重要です。

  1. SysV init スクリプトの設定
    SysV initスタイルのブートスクリプトを使う場合は、以下の手順で設定します。
    cd /etc/init.d
    
    このディレクトリ内に、各種サービス用のスクリプトファイルが存在します。
    install -m 755 /sources/lfs-bootscripts/20230322/lfs/init.d/rc.d/*
    chmod -v a+x ./rc*
    
    最新のLFSブートスクリプトをインストールし、実行権限を付与します。
    ln -sfnv ../init.d/rc.S /etc/rc.d/rc?.d/S??rc.S
    
    起動時に実行されるスクリプトにシンボリックリンクを張ります。
  2. systemd の設定
    systemdを使う場合の設定手順は以下の通りです。
    mkdir -pv /etc/systemd/system/getty@tty1.service.d
    vi /etc/systemd/system/getty@tty1.service.d/override.conf
    
    systemdの設定ファイルを編集し、以下の行を追加します。
    [Service]
    ExecStartExitStatus=1
    
    mkdir -pv /etc/systemd/system/multi-user.target.wants
    ln -sfv /tools/lib/system/systemd/system/user@.service /etc/systemd/system/multi-user.target.wants/user@lfs.service
    
    systemdの起動ターゲットにシンボリックリンクを張ります。

このように、使用するブート方式に応じて、適切なブートスクリプトを設定する必要があります。

ネットワークの設定[編集]

LFSシステムでネットワークを使えるようにするには、以下の設定を行います。

  1. ホスト名の設定
    echo "lfs" > /etc/hostname
    
    /etc/hostnameファイルにホスト名を記述します。
  2. ホストの設定
    cat > /etc/hosts << EOF
    127.0.0.1 localhost.localdomain localhost
    ::1       localhost ip6-localhost ip6-loopback
    EOF
    
    /etc/hostsファイルにループバックアドレスとホスト名を記述します。
  3. ネットワークの設定
    ネットワークインターフェースごとに設定ファイルを作成します。
     
    install -m644 network.config /etc/sysconfig/ifconfig.eth0
    
    network.configファイルの中身は、以下のようになります。
    /etc/sysconfig/ifconfig.eth0
    IFACE=eth0
    IPADDR=192.168.1.2
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    
  4. ネットワークの起動
    /etc/init.d/network start
    
    設定後はネットワークサービスを起動します。

このように、ホスト名、IPアドレス、ゲートウェイなどの情報を設定することで、LFSシステムがネットワークに接続できるようになります。

ユーザーとグループの設定[編集]

LFSシステム上で作業を行うには、適切なユーザーアカウントを作成する必要があります。

  1. ルートパスワードの設定
    passwd
    
    passwdコマンドを実行し、rootユーザーのパスワードを設定します。
  2. ユーザーの作成
    useradd -m -g users -G wheel -s /bin/bash lfsuser
    passwd lfsuser
    
    useraddコマンドでユーザーアカウントを作成し、passwdでパスワードを設定します。-mオプションでホームディレクトリを作成し、-g-Gでグループを割り当てています。
  3. sudoの設定
    echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers
    
    wheelグループに属するユーザーにsudoの実行権限を与えます。
  4. グループの作成
    groupadd audio
    groupadd video
    
    必要に応じて、その他のグループを作成します。
  5. パーミッションの設定
    chown -v lfsuser /home/lfsuser
    chmod -v 0750 /home/lfsuser
    
    ユーザーのホームディレクトリのパーミッションを適切に設定します。

以上の手順で、ルートユーザーとその他の一般ユーザーアカウントを作成できました。ユーザーとグループの管理は、システムのセキュリティと使いやすさの両面で重要です。

第三のビルド段階[編集]

追加パッケージの構築(エディタ、シェル、システムユーティリティなど)[編集]

この段階では、基本的なLFSシステムに追加の機能を持たせるため、様々なパッケージをビルド・インストールします。

  1. Vim エディタのインストール
    tar -xvf vim-8.x.x.tar.gz -C /sources 
    cd /sources/vim-8.x.x
    ./configure --prefix=/usr
    make
    make install
    
    Vimは強力なテキストエディタで、開発作業に欠かせません。
  2. Bash シェルのインストール
    tar -xvf bash-5.x.tar.gz -C /sources
    cd /sources/bash-5.x   
    ./configure --prefix=/usr --without-bash-malloc
    make
    make install
    
    BashはデファクトスタンダードのUNIXシェルの1つです。
  3. GRUB ブートローダーのインストール
    tar -xvf grub-2.x.x.tar.xz -C /sources
    cd /sources/grub-2.x.x
    ./configure --prefix=/usr --disable-efiemu
    make
    make install
    
    GRUBはLinuxシステムの起動に使われるブートローダーです。
  4. システムユーティリティのインストール
    以下のようなユーティリティをインストールします。
    • Coreutils (core GNU utilities)
    • Diffutils
    • File
    • Findutils
    • Gawk
    • Grep
    • Gzip
    • Make
    • Patch
    • Sed
    • Tar
    • ...
    これらのユーティリティは開発・運用作業で広く使われています。
  5. コンパイラ関連ツールのインストール
    • GCC (C/C++コンパイラ)
    • Bison (構文解析ツール)
    • Flex (レキサー生成ツール)
    • OpenSSL (暗号化ライブラリ)
    • ...
  6. その他のパッケージ
    必要に応じて以下のようなパッケージもインストールできます。
    • X Window System (GUIデスクトップ環境)
    • GNOME/KDE(デスクトップ環境)
    • Firefox/Chromium (Webブラウザ)
    • LibreOffice (オフィススイート)
    • PHP/Python/Perl/Ruby (スクリプト言語)
    • PostgreSQL/MariaDB (データベース)
    • Apache/Nginx (Webサーバー)

このように、基本システムにエディタ、コンパイラツール、デスクトップ環境など、必要なパッケージを自由に追加できます。ソースコードからビルドするので、システムのカスタマイズ性が非常に高くなります。

システムの設定続き[編集]

ブート設定[編集]

LFSシステムが適切に起動するよう、ブート設定を行う必要があります。

  1. GRUB の設定
    grub-install /dev/sdX
    
    GRUBをインストールするデバイスを指定します(sdXの部分を環境に合わせて変更)。
    grub-mkconfig -o /boot/grub/grub.cfg
    
    grub.cfgファイルを生成し、設定を反映させます。
  2. カーネルのインストール
    make install
    
    /sources/kernel/ディレクトリでmake installを実行し、カーネルをインストールします。
  3. 起動スクリプトの調整
    1. SysVinit を使う場合:
      ln -sf /tools/lib/sysvinit/sysvinit-functions /etc/init.d
      
    2. systemdを使う場合:
      cp /tools/lib/systemd/system/getty@.service /etc/systemd/system/
      
    使用するブート方式に合わせて、起動スクリプトを調整します。

適切にブート設定を行うことで、LFSシステムが正しく起動するようになります。

ネットワークの設定続き[編集]

より高度なネットワーク設定を行う必要がある場合は、以下の作業を行います。

  1. 固定IPアドレス以外の設定

DHCPによる自動取得やゲートウェイ、DNSの静的設定が必要な場合は、それらの設定を/etc/sysconfig/ifconfig.xxxxファイルに追記します。

  1. ネットワークサービスの設定
    SSHやFTPなどのネットワークサービスを使う場合は、それらのデーモンをインストール・設定する必要があります。
    tar -xvf openssh-x.x.tar.gz -C /sources
    cd /sources/openssh-x.x
    ./configure --prefix=/usr --sysconfdir=/etc/ssh
    make
    make install
    
  2. DNSの設定
    cat > /etc/resolv.conf << EOF
    nameserver 192.168.1.1
    EOF
    
    /etc/resolv.confにDNSサーバのアドレスを設定します。
  3. ネットワークの起動と有効化
    /etc/init.d/network start
    systemctl enable network
    
    ネットワークサービスを起動し、システム起動時の自動起動を有効化します。

これらの設定を行うことで、より高度なネットワーク接続が可能になります。

他の設定(セキュリティ、ログ管理など)[編集]

LFSシステムの安全な運用のため、セキュリティやログ管理の設定を行います。

  1. セキュリティ設定
    • パスワードポリシーの設定
    • アクセス制御の設定
    • ファイアウォールの設定
  2. ログ管理設定
     
    tar -xvf sysklogd-x.x.tar.gz -C /sources
    cd /sources/sysklogd-x.x
    make
    make install
    
  3. syslogdのようなログデーモンをインストールします。
    vi /etc/syslog.conf
    
    /etc/syslog.confでログの出力先や出力レベルを設定します。
  4. cronデーモン設定
    tar -xvf cronie-x.x.tar.gz -C /sources  
    cd /sources/cronie-x.x
    make install
    
    cronデーモンをインストールします。
    vi /etc/crontab
    
    /etc/crontabに定期実行したいタスクを記述します。
  5. その他の設定
    • ファイルシステムのマウントオプション
    • I/Oスケジューラの選択
    • カーネルパラメーターの設定
    • ...

適切なセキュリティ対策とログ管理を行うことで、システムの安全性と可用性が高まります。LFSシステムを実運用に乗せる場合は、これらの設定が重要になります。

カスタマイズ[編集]

X Windowシステムなどのデスクトップ環境の構築[編集]

LFSシステムにGUIデスクトップ環境を追加することで、より使いやすく機能的なシステムになります。

  1. X Window Systemのインストール
    tar -xvf xorg-server-1.x.x.tar.gz -C /sources
    mkdir /sources/xorg-server-1.x.x/build
    cd /sources/xorg-server-1.x.x/build
    ../configure --prefix=/usr
    make
    make install
    
    X.Orgの最新バージョンをインストールします。
  2. デスクトップ環境のインストール
    • GNOME
    tar -xvf gnome-x.xx.x.tar.xz -C /sources
    cd /sources/gnome-x.xx.x
    ./configure --prefix=/usr
    make
    make install
    
    • KDE
tar -xvf kde-x.xx.tar.xz -C /sources 
cd /sources/kde-x.xx
cmake -DCMAKE_INSTALL_PREFIX=/usr .
make
make install

人気のあるデスクトップ環境の1つをインストールします。

  1. デスクトップ起動の設定
    • SysVinit の場合
    ln -sf /etc/init.d/xdm /etc/rc.d/rc3.d/S13xdm
    
    • systemd の場合
systemctl enable gdm      # または kdm

使用するデスクトップマネージャに合わせて、自動起動の設定を行います。

  1. その他の設定
    • ディスプレイドライバのインストール
    • マウスやタッチパッドの設定
    • マルチメディアの設定(音声、Webカメラなど)
    • ...

GUIデスクトップ環境を追加することで、ウィンドウマネージャやファイルマネージャ、メディアプレーヤーなどの機能が使えるようになり、開発作業がより快適になります。

追加パッケージのインストール[編集]

LFSシステムに必要なパッケージを追加することで、用途に合わせてカスタマイズできます。

  1. Web開発環境の構築
    • Apache/Nginx (Webサーバー)
    • PHP (スクリプト言語)
    • PostgreSQL/MariaDB (データベース)
    • ブラウザ(Firefox、Chromiumなど)
  2. 開発ツールのインストール
    • Git (バージョン管理システム)
    • Emacs/Atom (テキストエディタ)
    • GCC/Clang (コンパイラ)
    • gdb (デバッガ)
    • Valgrind (メモリチェッカー)
  3. マルチメディアパッケージのインストール
    • MPlayer/VLC (メディアプレーヤー)
    • GIMP (画像編集ソフト)
    • Audacity (音声編集ソフト)
    • FFmpeg (マルチメディアフレームワーク)
  4. オフィススイートのインストール
    • LibreOffice (ワープロ、表計算、プレゼンテーションなど)
  5. その他のパッケージ
    • ゲームやエンターテインメントアプリ
    • 電子メールクライアント
    • 印刷設定ツール
    • ...

これらのパッケージをソースコードからビルドし、LFSシステムにインストールすることで、用途に合わせて完全にカスタマイズされた環境を構築できます。開発、マルチメディア、オフィス、エンターテインメントなど、目的に応じてパッケージを自由に選択できるのがLFSの大きな利点です。

このようにLFSでは、デスクトップ環境の構築からアプリケーションのインストールまで、全てをカスタマイズすることができます。ユーザーのニーズに合わせて柔軟に対応できるLinuxシステムを構築できるのです。

付録[編集]

用語集[編集]

  • LFS (Linux From Scratch): Linuxディストリビューションを一からソースコードをコンパイルして構築するプロジェクト。
  • ホストシステム: LFSをビルドするための基盤となるLinuxディストリビューション。
  • チェーン(toolchain): コンパイラ、アセンブラ、リンカーなど、ソフトウェア開発に必要なツール群。
  • クロスコンパイル: ターゲットマシンと異なるプラットフォーム上でのコンパイル。
  • ビルド環境: LFSパッケージのビルド作業を行う一時的な空間。
  • chroot: ルートディレクトリを変更し、別のディレクトリ階層内に分離された環境を作成すること。
  • GRUB: GRand Unified Bootloader の略。Linuxで広く使われるブートローダー。
  • SysVinit: System V Init、伝統的なLinuxの起動スクリプトの仕組み。
  • systemd: 近年のLinuxディストリビューションで採用されている次世代Initシステム。

スクリプトリソース[編集]

LFS のビルド中には、多くのスクリプトが使用されます。主なスクリプトの概要は以下の通りです。

  • lfs-bootstrap: LFSシステム構築の初期段階で使用されるスクリプト。
  • build.sh: パッケージのビルドスクリプト。tarballの展開、コンパイル、インストールの手順が記述されています。
  • chroot.sh: LFS環境へのchrootの設定を行うスクリプト。
  • cleanfs.sh: 一時的なビルド環境を削除するスクリプト。
  • functions.sh: 共通の関数を定義したスクリプト。他のスクリプトから呼び出されます。
  • lfs-install.sh: LFSのインストールを自動化するスクリプト。
  • rc.X: SysVinit起動時のランレベルごとのスクリプト。

これらのスクリプトは、LFSハンドブックのURLからダウンロードできます。

パッケージビルド手順[編集]

LFSでは、すべてのパッケージがソースコードからビルドされます。一般的なパッケージのビルド手順は以下の通りです。

  1. ソースコードの取得
    tar -xvf package-x.x.tar.gz -C /sources
    
    tarballを展開し、ソースコードを取得します。
  2. ビルド作業ディレクトリの作成
    mkdir /sources/package-x.x/build
    
    ソースコードとは別に、ビルド作業用ディレクトリを作成します。
  3. 設定(./configure)の実行
    cd /sources/package-x.x/build
    ../configure --prefix=/usr --enable-feature ...
    
    configureスクリプトを実行し、インストール先やオプションフラグを指定します。
  4. ビルド(make)の実行
    make
    
    指定されたオプションに従ってビルドを行います。
  5. インストール(make install)の実行
    make install
    
    ビルド済みのファイルを適切な場所にインストールします。

高度なパッケージでは、この手順から外れることもありますが、基本的なパッケージはこの手順に従ってビルド・インストールされます。上級者向けには、さらにパッチの当て方やCPUの最適化オプションの指定など、より細かい手順が紹介されています。

{{Category:Linux From Scratch|*]]