コンテンツにスキップ

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ディストリビューションがインストールされている必要があります。推奨されるディストリビューションは以下の通りです。

  • Arch Linux
  • Debian
  • Fedora
  • Ubuntu

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

  • Bash 4.4以降
  • Binutils 2.30以降
  • Bison 3.0以降
  • GCC 7.0以降(C、C++言語)
  • Glibc 2.27以降
  • Grep 3.0以降
  • Gzip 1.8以降
  • Make 4.2以降
  • Patch 2.7.5以降
  • Perl 5.26以降
  • Sed 4.5以降
  • Tar 1.30以降
  • XZ Utils 5.2以降

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

ホストシステムの準備

[編集]

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

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

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

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

ビルド環境の構築

[編集]

一時的ビルド環境の作成

[編集]

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

  1. ビルド用ディレクトリの作成
    mkdir -pv $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 -pv $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 -pv build
    cd build  
    ../configure --prefix=$LFS/tools ...
    make
    make install
    
    GCCは、C/C++などのコンパイラを提供する重要なツールです。この段階では、完全なGCCをビルドするのではなく、最小限のバージョン(初期ツールチェーン)をインストールします。
    LinuxカーネルとglibcはGCCに依存しているため、LFSではGCCなしにビルドすることはできません。不本意ながら、LLVM/ClangではLinuxカーネルとglibcのビルドはできない点に留意してください。なお、*BSDではLLVM/Clangを使用してビルドでき、カーネルとユーザーランドが一体化しているため、make world 1つでビルドが可能です。
  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 -pv $LFS/tools/bin
    ln -sv $LFS/tools/bin/bash /bin/bash
    
    一時的ツールチェーンをインストールするディレクトリを作成し、bashへのシンボリックリンクを貼ります。これにより、bashが正しく利用可能になります。
  2. 環境変数の設定
    export LFS_TARGET=/tools
    export LFS_MACHINE=x86_64-lfs-linux-gnu      # または arm-lfs-linux-gnu など
    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システム向けにビルドします。これにより、LFSシステムがC言語プログラムを実行できるようになります。
  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ファイルシステムを作成します。これはLFSシステムが正常に動作するために必要です。
  3. マウントポイントの作成と専用パーティションのマウント
    mkdir -pv $LFS
    mount -v -t ext4 /dev/&lt;lfsパーティション&gt; $LFS
    
    LFSシステムをインストールするためのマウントポイントを作成し、フォーマットしたパーティションをマウントします。

これで、LFSシステム本体のインストールに必要な環境が整いました。

LFS 本体のビルド

[編集]

LFSシステム本体を構築するためには、必要なパッケージを順次ビルドしていく必要があります。

  1. 必要なパッケージのインストール
    tar -xvf package-*.tar.*  
    cd package-*
    ./configure --prefix=$LFS  
    make  
    make install
    
    各パッケージは、/configureスクリプトを使ってインストール先を指定し、makeコマンドでコンパイルを行います。最後にmake installでインストールを実行します。
  2. システムの更新
    ldconfig
    
    インストール後、ライブラリキャッシュを更新するためにldconfigを実行します。これにより、新たにインストールしたライブラリが正しく認識されるようになります。

LFSシステムが完全に構築されるまで、このプロセスを繰り返します。

最後の仕上げ

[編集]

LFSシステムの構築が完了したら、最終的な設定や確認作業が必要です。

  1. ブートローダーのインストール
    grub-install --target=i386-pc --boot-directory=$LFS/boot /dev/sda
    
    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 -pv $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 -pv $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の最適化オプションの指定など、より細かい手順が紹介されています。