Linux From Scratch 10.0 の構築

Linux From Scratch 10.0 の構築
=============================

はじめに
--------

[Linux From Scratch](http://www.linuxfromscratch.org/) （以下、**LFS**）は、 Linux システムをゼロから構築する手順を提供しているプロジェクトです。
長年のリリースの末、今年で LFS のバージョンが 10.0 を迎えました。
本記事では LFS 10.0 の構築手順を書き残して行きたいと思います。

ドキュメント
------------

[LFSブック日本語版](http://lfsbookja.osdn.jp/)プロジェクトで LFS の日本語訳が公開されています。
基本は[こちら](http://lfsbookja.osdn.jp/10.0-ja/index.html)に順に従えば、最終的に LFS の構築が完了するようになっています。

公式ドキュメントは [公式サイト](http://www.linuxfromscratch.org/) から
[LFS](http://www.linuxfromscratch.org/lfs/) → [Read Online](http://www.linuxfromscratch.org/lfs/read.html) → [Stable LFS](http://www.linuxfromscratch.org/lfs/view/stable/) 
とリンクを進めば閲覧できます。

必要なもの
----------

* Linux システムが動作している実機（ x86 または x86_64 ）
* LFS 専用ストレージ（ HDD / SSD ） ※ 40G もあれば十分です

構築手順
--------

具体的な構築手順は、以下の3段階で構成されています。

### [ビルド準備](http://lfsbookja.osdn.jp/10.0-ja/part2.html)

LFS 用ストレージ上にファイルシステムを構築しマウントします。
そこへビルドに必要なファイルやディレクトリを配置します。

### [ツールチェーン構築](http://lfsbookja.osdn.jp/10.0-ja/part3.html)

ツールチェーン（tool chain）と呼ばれる、
ホストシステムから独立した最小限のビルド環境を構築します。

### [LFS 構築](http://lfsbookja.osdn.jp/10.0-ja/part4.html)

ツールチェーンを用いて、各パッケージをビルドします。
また LFS 用ストレージへブートローダーをインストールします。

つまづきどころ
--------------

初めての構築ではドキュメントの指示通りに構築することを強くお勧めします。 
そうしないと構築失敗時に何が失敗の原因か判らなくなってしまいます。

手順の中では自分の環境に合わせて設定しなければならず、
しかもその設定内容が重要という箇所が複数存在します。

ここでは、私はこのように考えて設定しているという所を紹介します。

### [新しいパーティションの生成](http://lfsbookja.osdn.jp/10.0-ja/chapter02/creatingpartition.html)

特にこだわりがなければ LFS 用ストレージを
以下の4つのパーティションに区切ると良いかと思います。

パーティション番号 | マウントポイント | パーティションサイズ
------------------ | ---------------- | --------------------
1                  | /boot            | 200MB
2                  | /                | 20GB 〜 任意
3                  | /home            | 任意
4                  | swap             | メモリ容量の2倍

/boot パーティションには、以下の2点に気をつけて下さい。

1. パーティションの先頭にする
2. ブート可能フラグを付ける

それぞれのパーティションの妥当なサイズはドキュメントで説明されています。
最初にストレージの全容量から機械的に計算ができる /boot, swap パーティションの容量を引き、
残りの容量を / と /home で好みで分けてあげるよう計算すると迷わないかと思います。

**(2025/03/18追記)**
上述のパーティション作成は MBR(Master Boot Record) と呼ばれる方式に従った内容です。
MBR はストレージ先頭 512 バイトにパーティションテーブルを書き込む方式で
その限られた容量から基本パーティションは最大4つでした。
現在は GPT(GUID partition table) と呼ばれる MBR を拡張した方式が主流です。
現時点の LFS(Version 12.3) では GPT に従ってパーティションを作るようになっていますので、
この箇所は鵜呑みにせず新しい手順を確認して従うようにして下さい。

### [ファイルシステムの生成](http://lfsbookja.osdn.jp/10.0-ja/chapter02/creatingfilesystem.html)

ファイルシステムの選択に自信がなければ EXT4 が無難です。

### [Linux-5.8.3](http://lfsbookja.osdn.jp/10.0-ja/chapter10/kernel.html)

Linux カーネルのビルドになります。

多くの設定項目がありますが、最初から大きくカスタマイズしようとはしない方が良いでしょう。
下手に多くをいじるとカーネルが起動しなかった場合に何の設定が原因か突き止められなくなります。

ここでは、必要と判っている機能やドライバを確実に有効にすることに重点を置いて設定すると良いかと思います。
カスタマイズは、LFS の構築が完了し、確実にブートするカーネルがある状態が整ってk少しずつ行えば良いです。

項目にカーソルが重なっている状態で \<Help\> または ? キーを押下すると、その項目の説明を読むことができます。
項目の説明を読んでもどのような機能か良く判らない場合、説明の末尾を見ましょう。
大抵の場合 `If unsure say Y.`（よく判らなければ「はい」を選択） のような記述があります。

**手順の注記で説明されている項目は、必ずそのように設定するようにして下さい。**

```
Device Drivers  --->
  Generic Driver Options  --->
   [ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
   [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
```

### [GRUB を用いたブートプロセスの設定](http://lfsbookja.osdn.jp/10.0-ja/chapter10/grub.html)

上述の通りにパーティションを分割した場合、grub 設定ファイルの記述は下記のようになります。
（パーティション番号1番を /boot パーティション、パーティション番号2番を / パーティションとした場合）

```
# Begin /boot/grub/grub.cfg

set default=0
set timeout=5

insmod ext2
set root=(hd0,1)

menuentry "GNU/Linux, Linux 5.8.3-lfs-10.0" {
        linux   /vmlinuz-5.8.3-lfs-10.0 root=/dev/sda2 ro
}
```

Beyond Linux From Scratch
-------------------------

[Beyond Linux From Scratch](http://www.linuxfromscratch.org/blfs/view/stable/)（以下、 **BLFS**）は、LFS 構築を終えたユーザ向けに、追加パッケージの構築方法を提供しているプロジェクトです。
[LFSブック日本語版](http://lfsbookja.osdn.jp/)と同様に[BLFSブック日本語版](http://lfsbookja.osdn.jp/BLFS/svn-ja/) がありますが、扱われている範囲が広く、全ては翻訳されていません。

BLFS では必要なパッケージを自分で取捨選択する必要があります。
多くの選択肢がありますが、利便性のためにも最初は以下のパッケージ辺りから手を付けると良いかと思います。

* [Linux PAM](http://lfsbookja.osdn.jp/BLFS/svn-ja/postlfs/linux-pam.html)
* [OpenSSH](http://lfsbookja.osdn.jp/BLFS/svn-ja/postlfs/openssh.html)
* [Sudo](http://lfsbookja.osdn.jp/BLFS/svn-ja/postlfs/sudo.html)