3.1. はじめに

この章では基本的な Linux システム構築のためにダウンロードするべきパッケージの一覧を示します。 各パッケージのバージョンは動作が確認されているものを示しており、本書ではこれに基づいて説明します。 LFS errata やセキュリティアドバイザリーに示されていれば別ですが、ここに示すバージョンとは異なるものは使わないようお勧めします。 あるバージョンでビルドしたコマンドが、違うバージョンで動作する保証はないからです。 最新のパッケージの場合、何かの対処を要するかもしれません。 そのような対処方法は本書の開発版において開発され安定化が図られるかもしれません。

パッケージによっては、リリース tarball に加えて (Git や SVN の) リポジトリスナップショット tarball があって、両者を同じファイル名で提供している場合があります。 リリース tarball には、該当するリポジトリスナップショットの内容に加えて生成済みファイル(たとえば autoconf が作り出す configure スクリプト)が含まれます。 本書では可能な限りリリース tarball を用いることにします。 本書が指定するリリース tarball ではなく、リポジトリスナップショットを利用すると、問題が発生するかもしれません。

ダウンロードサイトは常にアクセス可能であるとは限りません。 本書が提供された後にダウンロードする場所が変更になっていたら Google (https://www.google.com/) を使って検索してみてください。 たいていのパッケージを見つけ出すことが出来るはずです。 それでも見つけられなかったら https://www.linuxfromscratch.org/lfs/packages.html#packages から入手してください。

ダウンロードしたパッケージやパッチは、ビルド作業を通じて常に利用可能な場所を選んで保存しておく必要があります。 またソース類を伸張してビルドを行うための作業ディレクトリも必要です。 そこで本書では $LFS/sources ディレクトリを用意し、ソースやパッチの保存場所とし、そこでビルドを行う作業ディレクトリとします。 このディレクトリにしておけば LFS パーティションに位置することから LFS ビルドを行う全工程において常に利用することが出来ます。

ダウンロードを行う前にまずはそのようなディレクトリを生成します。 root ユーザーとなって以下のコマンドを実行します。

mkdir -v $LFS/sources

このディレクトリには書き込み権限とスティッキーを与えます。 スティッキー (Sticky)は複数ユーザーに対して書き込み権限が与えられても、削除については所有者しか実行出来ないようにします。 以下のコマンドによって書き込み権限とスティッキーを定めます。

chmod -v a+wt $LFS/sources

LFS のビルドに必要なパッケージやパッチを得る方法は、いろいろとあります。

パッケージとパッチのダウンロードを行うため wget-list-sysv を利用することにします。 これは以下のように wget コマンドの入力引数に指定します。

wget --input-file=wget-list-sysv --continue --directory-prefix=$LFS/sources
[注記]

日本語訳情報

オリジナルの LFS ブックでは、wget-list-sysv 内に含まれる、各種パッケージの入手 URL が主に米国サイトとなっています。 一方、日本国内にて作業する方であれば、例えば GNU のパッケージ類は国内に数多くのミラーサイトが存在するため、そちらから取得するのが適切でしょう。 これはネットワークリソースを利用する際のマナーとも言えるものです。 堅苦しい話をするつもりはありません。 国内サイトから入手することにすればダウンロード速度が断然早くなります。 メリットは大きいと思いますのでお勧めします。

国内から入手可能なものは国内から入手することを目指し、訳者は以下の手順により wget-list-sysv を書き換えて利用しています。 一例として国内には理化学研究所のサイト (ftp.riken.jp) があります。 そこでは GNU パッケージ類がミラー提供されています。 そこで wget-list-sysv にて ftp.gnu.org を指し示している URL を ftp.riken.jp に置き換えます。 また同じ方法で Linux カーネル、PerlVim の入手先も変更します。

cat > wl.sed << "EOF"
s|ftp\.gnu\.org/gnu/|ftp.riken.jp/GNU/|g
s|www\.kernel\.org/pub/linux/|ftp.riken.jp/Linux/kernel.org/linux/|g
s|www\.cpan\.org|ftp.riken.jp/lang/CPAN|g
s|ftp\.vim\.org|ftp.jp.vim.org|g
EOF
sed -f wl.sed -i.orig wget-list-sysv
rm wl.sed

上記はあくまで一例です。しかもすべてのパッケージについて、国内サイトからの入手となるわけではありません。 ただし上記を行うだけでも、大半のパッケージは国内サイトを向くことになります。 上記にて国内のミラーサイトは、ネットワーク的に "より近い" ものを選んでください。 サイトを変えた場合は、パッケージの URL が異なることが多々あるため、適宜 sed 置換内容を書き換えてください。

注意する点として各パッケージが更新されたばかりの日付では、国内ミラーサイトへの同期、反映が間に合わず、ソース類が存在しないことが考えられます。 その場合にはパッケージ取得に失敗してしまいます。 そこで wget-list-sysv と wget-list-sysv.orig を順に利用し、かつ wget コマンドにて -N オプションを使って (取得済のものはスキップするようにして) 以下のコマンドを実行すれば、確実にすべてのパッケージを入手することができます。

wget -N --input-file=wget-list-sysv --continue --directory-prefix=$LFS/sources
wget -N --input-file=wget-list-sysv.orig --continue --directory-prefix=$LFS/sources

さらに LFS-7.0 からは md5sums というファイルを用意しています。 このファイルは、入手した各種パッケージのファイルが正しいことを確認するために用いることができます。 このファイルを $LFS/sources に配置して以下を実行してください。

pushd $LFS/sources
  md5sum -c md5sums
popd

必要なファイルを入手した方法が前述のどの方法であっても、この md5sum チェックを実施することができます。

パッケージとパッチを非 root ユーザーによってダウンロードした場合、各ファイルはそのユーザーが所有します。 ファイルシステムは、UID によって所有者を記録しますが、ホスト上の一般ユーザーの UID は LFS 内には割り当てられていません。 したがって各ファイルは、最終の LFS システムにおいて、名前付けられていない UID によって所有されたまま残ります。 LFS システムに存在する自身のユーザーに対して、同じ UID を割り当てるつもりがないのであれば、各ファイルの所有者を root に変更することで、この状況を解消してください。

chown root:root $LFS/sources/*