Linux From Scratch
はじめに
編集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をビルドする前に、ホストシステムの準備をしっかりと行う必要があります。主な作業は以下の通りです。
- ビルド環境の作成
- LFSのビルド作業に専用のユーザーアカウントとディレクトリを作成します。
- ソフトウェアのインストール
- 必要なソフトウェアパッケージがインストールされていることを確認します。
- パーティションの作成
- LFSのインストール先となる専用のパーティションを作成します。
- ホストシステムの設定
- ホストシステムの設定をバックアップし、必要に応じて調整を行います。
これらの準備作業を怠ると、ビルド中に問題が発生する可能性があります。ホストシステムの状態を確認し、LFSのビルド環境を整える作業は非常に重要です。
以上がLFSのはじめにとして、概要、前提条件、ホストシステムの準備についてカバーすべき内容になります。次の章では、実際のビルド環境の構築手順に入っていきます。
ビルド環境の構築
編集一時的ビルド環境の作成
編集LFSシステムをビルドするための最初のステップは、一時的なビルド環境を作成することです。この環境は、ホストシステムとは別に、LFSパッケージをビルドするための仮想的な空間になります。
- ビルド用ディレクトリの作成
mkdir -pv $LFS/sources
$LFS
はLFSシステムをインストールするパーティションのマウントポイントを指します。sources
ディレクトリは、必要なソースパッケージを置く場所です。
- ビルド用ユーザーの作成
groupadd lfs useradd -s /bin/bash -g lfs -m -k /dev/null lfs
lfs
グループとユーザーを作成します。このユーザーはビルド作業に使用されます。
- ビルド環境の設定
cat > ~/.bash_profile << "EOF" exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash EOF
- ビルド用の環境変数を設定します。これにより、ホストシステムの設定から影響を受けにくくなります。
- 一時的ツールチェーンのインストール先の作成
mkdir -pv $LFS/tools ln -sv $LFS/tools /
- 一時的なツールチェーンをインストールする場所を作成し、スクリプトで参照しやすいようシンボリックリンクを作ります。
これで一時的なビルド環境ができあがりました。次は、この環境でLFSシステムの本体をビルドするための準備をします。
ツールチェーンの構築
編集LFSシステムをビルドするには、まずツールチェーンを構築する必要があります。ツールチェーンとは、コンパイラ、アセンブラ、リンカーなどのツール群のことです。
- Binutils のビルド
tar -xvf binutils-*.tar.* cd binutils-* ./configure --prefix=$LFS/tools ... make make install
- Binutilsは、アセンブラやリンカーなど、オブジェクトファイルを扱うツールを提供します。
- 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つでビルドが可能です。
- その他のツール
- 初期ツールチェーンを使って、以下のようなツールをビルドします。
- Linuxカーネルヘッダー
- Gawk
- Gzip
- Make
- Patch
- Sed
- Xz
- 初期ツールチェーンを使って、以下のようなツールをビルドします。
これで、LFSシステムのビルドに必要な基本的なツールチェーンが構築できました。次は、より高度な機能を備えた本格的なツールチェーンをビルドしていきます。
編集・構文解析ツールのインストール
編集LFSシステムのソースコードを編集・解析するために、いくつかのツールをインストールする必要があります。これらのツールは、ソースコードの構文解析やビルド手順の自動化に不可欠です。
- Bison のインストール
tar -xvf bison-*.tar.xz cd bison-* ./configure --prefix=/tools make make install
- Bisonは、構文解析器ジェネレーターであり、Makefileやソースコードの解析に必要です。構文解析により、ビルドプロセスの理解と最適化が可能になります。
- Perl のインストール
tar -xvf perl-*.tar.xz cd perl-* sh Configure -des -Dprefix=/tools ... make make install
- Perlは、スクリプト言語として広く利用されており、ソースコードの解析や生成、さらにはデータ処理などに使われます。特にテキスト処理に優れており、ビルドプロセスでの自動化に役立ちます。
- Python のインストール
tar -xvf python-*.tar.xz cd python-* ./configure --prefix=/tools --without-ensurepip make make install
- Pythonは、高レベルのプログラミング言語で、ビルド手順の自動化やスクリプトの作成に用いられます。特にライブラリが豊富で、様々なビルドツールとの統合が容易です。
- Texinfo のインストール
tar -xvf texinfo-*.tar.xz cd texinfo-* ./configure --prefix=/tools make make install
- Texinfoは、マニュアルやドキュメントを生成するためのツールセットです。情報を整理し、ユーザー向けのドキュメントを簡単に作成できます。
これらのツールをインストールすることで、LFSソースコードを適切に解析し、ビルドできる環境が整いました。次は、本格的なツールチェーンの構築に進みます。
クロス toolchain の構築
編集一時的ツールチェーンの作成
編集LFSシステム本体をビルドする前に、クロスコンパイル用の一時的ツールチェーンを構築する必要があります。この一時的ツールチェーンは、ホストシステムとは異なるターゲットシステム(LFS)向けにコンパイルするためのものです。
- 作業ディレクトリの作成
mkdir -pv $LFS/tools/bin ln -sv $LFS/tools/bin/bash /bin/bash
- 一時的ツールチェーンをインストールするディレクトリを作成し、bashへのシンボリックリンクを貼ります。これにより、bashが正しく利用可能になります。
- 環境変数の設定
export LFS_TARGET=/tools export LFS_MACHINE=x86_64-lfs-linux-gnu # または arm-lfs-linux-gnu など export MAKE='make'
- ターゲットアーキテクチャやツールチェーン名、Makeコマンドなどの環境変数を設定します。これにより、ビルドプロセスがスムーズになります。
- パスの設定
export PATH=$LFS_TARGET/bin:/bin:/usr/bin export CONFIG_SITE=$LFS_TOOLS/etc/config.site
- 新しいツールチェーンのバイナリがパスに含まれるよう設定し、ビルド設定ファイルのパスも指定します。これにより、ビルド時に必要なツールが見つかるようになります。
これで、一時的なツールチェーンをビルドする準備ができました。次はその本体の構築に入ります。
コンパイラ、アセンブラ、リンカーなどのツールのビルド
編集この段階では、LFSシステム向けのクロス開発ツールをビルドします。主要なツールは以下の通りです。
- クロス 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システム向けにクロスビルドを行います。これにより、他のアーキテクチャ向けのバイナリを生成できます。
- クロス 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のビルドは複数のパスで行われ、この段階では最小限の機能しかインストールされません。これにより、後のビルドプロセスがスムーズに進行します。
- クロス 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言語プログラムを実行できるようになります。
- クロス 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システムを構築するための場所になります。
- パーティションの作成
- LFSシステムをインストールする専用のパーティションを用意します。最低でも10GBの容量が必要ですが、追加パッケージをインストールする場合は20GB以上が望ましいでしょう。
- パーティションのフォーマット
mkfs -v -t ext4 /dev/<lfsパーティション>
- ext4ファイルシステムを作成します。これはLFSシステムが正常に動作するために必要です。
- マウントポイントの作成と専用パーティションのマウント
mkdir -pv $LFS mount -v -t ext4 /dev/<lfsパーティション> $LFS
- LFSシステムをインストールするためのマウントポイントを作成し、フォーマットしたパーティションをマウントします。
これで、LFSシステム本体のインストールに必要な環境が整いました。
LFS 本体のビルド
編集LFSシステム本体を構築するためには、必要なパッケージを順次ビルドしていく必要があります。
- 必要なパッケージのインストール
tar -xvf package-*.tar.* cd package-* ./configure --prefix=$LFS make make install
- 各パッケージは、/configureスクリプトを使ってインストール先を指定し、makeコマンドでコンパイルを行います。最後にmake installでインストールを実行します。
- システムの更新
ldconfig
- インストール後、ライブラリキャッシュを更新するためにldconfigを実行します。これにより、新たにインストールしたライブラリが正しく認識されるようになります。
LFSシステムが完全に構築されるまで、このプロセスを繰り返します。
最後の仕上げ
編集LFSシステムの構築が完了したら、最終的な設定や確認作業が必要です。
- ブートローダーのインストール
grub-install --target=i386-pc --boot-directory=$LFS/boot /dev/sda
- LFSシステムの起動に必要なブートローダーをインストールします。システムのハードウェア構成に応じてターゲットを変更してください。
これで、LFSシステムのインストールが完了しました。今後の利用に向けて設定ファイルの編集や追加ソフトウェアのインストールを行っていきます。
はじめての一時的システムのブート
編集カーネルの設定とビルド
編集LFSシステムを実際に動作させるためには、まずLinuxカーネルをビルドする必要があります。このカーネルは一時的に使用するもので、後に本番環境のカーネルを別途ビルドします。
- カーネルソースコードの準備
tar -xvf linux-5.x.x.tar.xz -C $LFS/sources/kernel cd $LFS/sources/kernel
- カーネルソースコードを展開し、作業ディレクトリに移動します。
- カーネル設定の準備
make mrproper make headers make INSTALL_HDR_PATH=$LFS/tools headers_install
- 古い設定を削除し、ヘッダファイルをビルド・インストールします。
- カーネル設定
make menuconfig
- メニュー画面で以下の設定を有効にします。
- 64ビットカーネルサポート
- 一時的ビルド環境用の最小設定
- カーネルのビルド
make make modules_install cp -v arch/x86_64/boot/bzImage $LFS/sources/kernel/vmlinuz
- カーネルとモジュールをビルドし、カーネルイメージを適切な場所にコピーします。
これでカーネルが準備できました。次は初期ツールチェーンのビルドを行います。
初期ツールチェーンのビルド
編集新しく作成したLFS環境において、本番環境用のコンパイルツールチェーンのビルドを行います。この初期ツールチェーンは、最終的なLFSシステムのコンポーネントをビルドする際に使用されます。
- 作業ディレクトリの作成
mkdir -pv $LFS/tools/work
- ビルド作業用のディレクトリを作成します。
- 一時的環境の設定
export PATH=$LFS/tools/bin:/bin:/usr/bin export LFS_MACHINE=x86_64-lfs-linux-gnu # または arm-lfs-linux-gnuemuなど
- 環境変数を適切に設定します。
- 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環境向けにビルド・インストールします。
- 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をビルド・インストールします。
- その他のツールのビルド
- 同様の手順で、以下のツールをビルド・インストールします。
- Linux カーネルヘッダー
- GMP
- MPFR
- ext4ファイルシステムを作成します。
- MPC
- ISL
- coreutils
- ...
これで初期ツールチェーンがインストールされ、LFSシステム本体のコンポーネントをビルドする準備が整いました。次はこのツールチェーンを使って、LFSシステムのビルドに取り掛かります。
LFSシステムのビルド
編集コアユーティリティのインストール
編集この段階では、LFSシステムの中核となるコアユーティリティをインストールします。これらはシステムが基本的に動作するために不可欠なコンポーネントです。
- 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ライブラリの中核を成すコンポーネントです。
- 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は、データ圧縮ライブラリです。
- 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は、ファイル種別を判別するユーティリティです。
- 他のコアユーティリティのインストール
- 同様の手順で以下のユーティリティをインストールします。
- Readline
- M4
- Bc
- Binutils
- GMP
- MPFR
- ...
これらのコアユーティリティをインストールすることで、LFSシステムの基盤が整備されます。次はコンパイラチェーンの構築に進みます。
コンパイラチェーンの構築
編集LFSシステムをビルドするには、C/C++コンパイラを始めとするコンパイラチェーンが不可欠です。ここでは本番環境用のコンパイラチェーンを構築します。
- 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をインストールします。今回はすべての言語をサポートします。
- 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
- アセンブラやリンカーなどのバイナリユーティリティをインストールします。
- その他のツールのインストール
- 以下のようなツールも同様にインストールします。
- Linux カーネルヘッダー
- GMP
- MPFR
- MPC
- ISL
- ...
これでコンパイラチェーンの主要コンポーネントがインストールされました。次に基本的な内部ユーティリティをインストールしていきます。
基本的な内部ユーティリティのインストール
編集LFSシステム上で動作する最小限の内部ユーティリティをインストールする必要があります。
- 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は、ファイルの圧縮・展開ユーティリティです。
- 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は、ファイルの種類を判別するユーティリティです。
- その他のユーティリティのインストール
- 以下のようなユーティリティも同様にインストールします。
- Sed
- Bzip2
- Xz
- Findutils
- Diffutils
- ...
これらの基本的なユーティリティがインストールされたことで、LFSシステムの骨格が整いました。最後に残されたシステムの設定を行います。
システムのセットアップ
編集LFSシステムを実際に起動できるようにするため、最後の設定作業を行います。
- 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システムに完全に入ります。
- ツールチェインの再構築
- chroot 環境内で、以下のようにツールチェーンを再構築します。
- Zlib
- File
- Readline
- Grep
- ...
- その他の設定作業
- /etc/ld.so.conf ファイルの作成
- カーネルのインストール
- fstab および hostsファイルの作成
- ユーザーアカウントの設定
- ブートスクリプトの設定
- ...
これで、LFSシステム本体のビルドと設定が完了しました。後は再起動を行い、構築したLFSシステムを起動させることができます。
- システムの再起動
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
- システムを再起動します。
- LFSシステムの起動
- 再起動後、LFSシステムが適切に起動していることを確認します。
uname -a
コマンドで、カスタムビルドしたカーネルが動作していることがわかります。
- 再起動後、LFSシステムが適切に起動していることを確認します。
# lfs-setup
- セットアップスクリプト
lfs-setup
を実行し、最終的な設定を行います。
- セットアップスクリプト
- 各種サービスの起動
- SysVinit、systemdなどのサービス管理ツールを使って、必要なサービスを起動させます。
以上の手順を経て、ようやくLFSシステムが完全に起動可能な状態になりました。これでソースコードからのカスタムLinuxディストリビューションの構築が完了です。必要に応じて、追加のパッケージをインストールしたり、さらなる設定を行うことができます。
LFSプロジェクトを通して、Linuxシステムの内部構造を深く理解できたことでしょう。この知識は、システム管理や開発、カスタマイズなど、様々な場面で活かすことができます。
システムの設定
編集ブートスクリプトの設定
編集LFSシステムを適切に起動するためには、ブートスクリプトの設定が重要です。
- 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
- 起動時に実行されるスクリプトにシンボリックリンクを張ります。
- 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システムでネットワークを使えるようにするには、以下の設定を行います。
- ホスト名の設定
echo "lfs" > /etc/hostname
/etc/hostname
ファイルにホスト名を記述します。
- ホストの設定
cat > /etc/hosts << EOF 127.0.0.1 localhost.localdomain localhost ::1 localhost ip6-localhost ip6-loopback EOF
/etc/hosts
ファイルにループバックアドレスとホスト名を記述します。
- ネットワークの設定
- ネットワークインターフェースごとに設定ファイルを作成します。
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
- ネットワークの起動
/etc/init.d/network start
- 設定後はネットワークサービスを起動します。
このように、ホスト名、IPアドレス、ゲートウェイなどの情報を設定することで、LFSシステムがネットワークに接続できるようになります。
ユーザーとグループの設定
編集LFSシステム上で作業を行うには、適切なユーザーアカウントを作成する必要があります。
- ルートパスワードの設定
passwd
passwd
コマンドを実行し、rootユーザーのパスワードを設定します。
- ユーザーの作成
useradd -m -g users -G wheel -s /bin/bash lfsuser passwd lfsuser
useradd
コマンドでユーザーアカウントを作成し、passwd
でパスワードを設定します。-m
オプションでホームディレクトリを作成し、-g
と-G
でグループを割り当てています。
- sudoの設定
echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers
wheel
グループに属するユーザーにsudo
の実行権限を与えます。
- グループの作成
groupadd audio groupadd video
- 必要に応じて、その他のグループを作成します。
- パーミッションの設定
chown -v lfsuser /home/lfsuser chmod -v 0750 /home/lfsuser
- ユーザーのホームディレクトリのパーミッションを適切に設定します。
以上の手順で、ルートユーザーとその他の一般ユーザーアカウントを作成できました。ユーザーとグループの管理は、システムのセキュリティと使いやすさの両面で重要です。
第三のビルド段階
編集追加パッケージの構築(エディタ、シェル、システムユーティリティなど)
編集この段階では、基本的なLFSシステムに追加の機能を持たせるため、様々なパッケージをビルド・インストールします。
- Vim エディタのインストール
tar -xvf vim-8.x.x.tar.gz -C /sources cd /sources/vim-8.x.x ./configure --prefix=/usr make make install
- Vimは強力なテキストエディタで、開発作業に欠かせません。
- 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つです。
- 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システムの起動に使われるブートローダーです。
- システムユーティリティのインストール
- 以下のようなユーティリティをインストールします。
- Coreutils (core GNU utilities)
- Diffutils
- File
- Findutils
- Gawk
- Grep
- Gzip
- Make
- Patch
- Sed
- Tar
- ...
- これらのユーティリティは開発・運用作業で広く使われています。
- コンパイラ関連ツールのインストール
- GCC (C/C++コンパイラ)
- Bison (構文解析ツール)
- Flex (レキサー生成ツール)
- OpenSSL (暗号化ライブラリ)
- ...
- その他のパッケージ
- 必要に応じて以下のようなパッケージもインストールできます。
- X Window System (GUIデスクトップ環境)
- GNOME/KDE(デスクトップ環境)
- Firefox/Chromium (Webブラウザ)
- LibreOffice (オフィススイート)
- PHP/Python/Perl/Ruby (スクリプト言語)
- PostgreSQL/MariaDB (データベース)
- Apache/Nginx (Webサーバー)
このように、基本システムにエディタ、コンパイラツール、デスクトップ環境など、必要なパッケージを自由に追加できます。ソースコードからビルドするので、システムのカスタマイズ性が非常に高くなります。
システムの設定続き
編集ブート設定
編集LFSシステムが適切に起動するよう、ブート設定を行う必要があります。
- GRUB の設定
grub-install /dev/sdX
- GRUBをインストールするデバイスを指定します(
sdX
の部分を環境に合わせて変更)。 grub-mkconfig -o /boot/grub/grub.cfg
- grub.cfgファイルを生成し、設定を反映させます。
- カーネルのインストール
make install
/sources/kernel/
ディレクトリでmake install
を実行し、カーネルをインストールします。
- 起動スクリプトの調整
- SysVinit を使う場合:
ln -sf /tools/lib/sysvinit/sysvinit-functions /etc/init.d
- systemdを使う場合:
cp /tools/lib/systemd/system/getty@.service /etc/systemd/system/
- 使用するブート方式に合わせて、起動スクリプトを調整します。
- SysVinit を使う場合:
適切にブート設定を行うことで、LFSシステムが正しく起動するようになります。
ネットワークの設定続き
編集より高度なネットワーク設定を行う必要がある場合は、以下の作業を行います。
- 固定IPアドレス以外の設定
DHCPによる自動取得やゲートウェイ、DNSの静的設定が必要な場合は、それらの設定を/etc/sysconfig/ifconfig.xxxx
ファイルに追記します。
- ネットワークサービスの設定
- 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
- DNSの設定
cat > /etc/resolv.conf << EOF nameserver 192.168.1.1 EOF
/etc/resolv.conf
にDNSサーバのアドレスを設定します。
- ネットワークの起動と有効化
/etc/init.d/network start systemctl enable network
- ネットワークサービスを起動し、システム起動時の自動起動を有効化します。
これらの設定を行うことで、より高度なネットワーク接続が可能になります。
他の設定(セキュリティ、ログ管理など)
編集LFSシステムの安全な運用のため、セキュリティやログ管理の設定を行います。
- セキュリティ設定
- パスワードポリシーの設定
- アクセス制御の設定
- ファイアウォールの設定
- ログ管理設定
tar -xvf sysklogd-x.x.tar.gz -C /sources cd /sources/sysklogd-x.x make make install
- syslogdのようなログデーモンをインストールします。
vi /etc/syslog.conf
/etc/syslog.conf
でログの出力先や出力レベルを設定します。
- cronデーモン設定
tar -xvf cronie-x.x.tar.gz -C /sources cd /sources/cronie-x.x make install
- cronデーモンをインストールします。
vi /etc/crontab
/etc/crontab
に定期実行したいタスクを記述します。
- その他の設定
- ファイルシステムのマウントオプション
- I/Oスケジューラの選択
- カーネルパラメーターの設定
- ...
適切なセキュリティ対策とログ管理を行うことで、システムの安全性と可用性が高まります。LFSシステムを実運用に乗せる場合は、これらの設定が重要になります。
カスタマイズ
編集X Windowシステムなどのデスクトップ環境の構築
編集LFSシステムにGUIデスクトップ環境を追加することで、より使いやすく機能的なシステムになります。
- 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の最新バージョンをインストールします。
- デスクトップ環境のインストール
- 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つをインストールします。
- デスクトップ起動の設定
- SysVinit の場合
ln -sf /etc/init.d/xdm /etc/rc.d/rc3.d/S13xdm
- systemd の場合
systemctl enable gdm # または kdm
使用するデスクトップマネージャに合わせて、自動起動の設定を行います。
- その他の設定
- ディスプレイドライバのインストール
- マウスやタッチパッドの設定
- マルチメディアの設定(音声、Webカメラなど)
- ...
GUIデスクトップ環境を追加することで、ウィンドウマネージャやファイルマネージャ、メディアプレーヤーなどの機能が使えるようになり、開発作業がより快適になります。
追加パッケージのインストール
編集LFSシステムに必要なパッケージを追加することで、用途に合わせてカスタマイズできます。
- Web開発環境の構築
- Apache/Nginx (Webサーバー)
- PHP (スクリプト言語)
- PostgreSQL/MariaDB (データベース)
- ブラウザ(Firefox、Chromiumなど)
- 開発ツールのインストール
- Git (バージョン管理システム)
- Emacs/Atom (テキストエディタ)
- GCC/Clang (コンパイラ)
- gdb (デバッガ)
- Valgrind (メモリチェッカー)
- マルチメディアパッケージのインストール
- MPlayer/VLC (メディアプレーヤー)
- GIMP (画像編集ソフト)
- Audacity (音声編集ソフト)
- FFmpeg (マルチメディアフレームワーク)
- オフィススイートのインストール
- LibreOffice (ワープロ、表計算、プレゼンテーションなど)
- その他のパッケージ
- ゲームやエンターテインメントアプリ
- 電子メールクライアント
- 印刷設定ツール
- ...
これらのパッケージをソースコードからビルドし、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では、すべてのパッケージがソースコードからビルドされます。一般的なパッケージのビルド手順は以下の通りです。
- ソースコードの取得
tar -xvf package-x.x.tar.gz -C /sources
- tarballを展開し、ソースコードを取得します。
- ビルド作業ディレクトリの作成
mkdir /sources/package-x.x/build
- ソースコードとは別に、ビルド作業用ディレクトリを作成します。
- 設定(./configure)の実行
cd /sources/package-x.x/build ../configure --prefix=/usr --enable-feature ...
configure
スクリプトを実行し、インストール先やオプションフラグを指定します。
- ビルド(make)の実行
make
- 指定されたオプションに従ってビルドを行います。
- インストール(make install)の実行
make install
- ビルド済みのファイルを適切な場所にインストールします。
高度なパッケージでは、この手順から外れることもありますが、基本的なパッケージはこの手順に従ってビルド・インストールされます。上級者向けには、さらにパッチの当て方やCPUの最適化オプションの指定など、より細かい手順が紹介されています。