この章では基本的な 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 から入手してください。
次のページでは ftpmirror.gnu.org
に存在する重要なパッケージをいくつも一覧に示しています。 対象パッケージの標準的な配布サイトは ftp.gnu.org ですが、長期にわたって DDOS (distributed denial of
services) 攻撃にさらされています。 したがってサイト管理者は LFS 編集者に対して ftpmirror.gnu.org の利用を推奨しています。 詳しくは
Slashdot ニュース を参照してください。
ftpmirror.gnu.org を利用すると、実際には ftp.gnu.org サイトのミラーのいずれかにリダイレクトされます。 ftpmirror.gnu.org を利用せずに、直接そのミラーサイトを指定しても構いません。 ミラー一覧は
https://www.gnu.org/prep/ftp.en.html
に示されています。 以降に示している wget
リストを利用する予定であれば、このファイルを修正して必要なミラーサイトを利用するようにしてください。
ダウンロードしたパッケージやパッチは、ビルド作業を通じて常に利用可能な場所を選んで保存しておく必要があります。
またソース類を伸張してビルドを行うための作業ディレクトリも必要です。 そこで本書では $LFS/sources
ディレクトリを用意し、ソースやパッチの保存場所とし、そこでビルドを行う作業ディレクトリとします。 このディレクトリにしておけば LFS
パーティションに位置することから LFS ビルドを行う全工程において常に利用することが出来ます。
ダウンロードを行う前にまずはそのようなディレクトリを生成します。 root
ユーザーとなって以下のコマンドを実行します。
mkdir -v $LFS/sources
このディレクトリには書き込み権限とスティッキーを与えます。 「スティッキー (Sticky) 」は複数ユーザーに対して書き込み権限が与えられても、削除については所有者しか実行出来ないようにします。 以下のコマンドによって書き込み権限とスティッキーを定めます。
chmod -v a+wt $LFS/sources
LFS のビルドに必要なパッケージやパッチを得る方法は、いろいろとあります。
各ファイルは次の2節に示されているので、個々に入手することができます。
本書の安定版であれば、それに対して必要となるファイルを集めた tarball が、https://www.linuxfromscratch.org/mirrors.html#files に示すミラーサイトからダウンロードできます。
wget と以下に示す wget-list-systemd ファイルを利用すれば、すべてのファイルをダウンロードすることができます。
パッケージとパッチのダウンロードを行うため wget-list-systemd を利用することにします。 これは以下のように wget コマンドの入力引数に指定します。
wget --input-file=wget-list-systemd --continue --directory-prefix=$LFS/sources
オリジナルの LFS ブックでは、wget-list-systemd 内に含まれる、各種パッケージの入手 URL が主に米国サイトとなっています。 一方、日本国内にて作業する方であれば、例えば GNU のパッケージ類は国内に数多くのミラーサイトが存在するため、そちらから取得するのが適切でしょう。 これはネットワークリソースを利用する際のマナーとも言えるものです。 堅苦しい話をするつもりはありません。 国内サイトから入手することにすればダウンロード速度が断然早くなります。 メリットは大きいと思いますのでお勧めします。
国内から入手可能なものは国内から入手することを目指し、訳者は以下の手順により wget-list-systemd を書き換えて利用しています。 一例として国内には理化学研究所のサイト (ftp.riken.jp) があります。 そこでは GNU パッケージ類がミラー提供されています。 そこで wget-list-systemd にて ftp.gnu.org を指し示している URL を ftp.riken.jp に置き換えます。 また同じ方法で Linux カーネル、Perl、Vim の入手先も変更します。
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-systemd
rm wl.sed
上記はあくまで一例です。しかもすべてのパッケージについて、国内サイトからの入手となるわけではありません。 ただし上記を行うだけでも、大半のパッケージは国内サイトを向くことになります。 上記にて国内のミラーサイトは、ネットワーク的に "より近い" ものを選んでください。 サイトを変えた場合は、パッケージの URL が異なることが多々あるため、適宜 sed 置換内容を書き換えてください。
注意する点として各パッケージが更新されたばかりの日付では、国内ミラーサイトへの同期、反映が間に合わず、ソース類が存在しないことが考えられます。 その場合にはパッケージ取得に失敗してしまいます。 そこで wget-list-systemd と wget-list-systemd.orig を順に利用し、かつ wget コマンドにて -N オプションを使って (取得済のものはスキップするようにして) 以下のコマンドを実行すれば、確実にすべてのパッケージを入手することができます。
wget -N --input-file=wget-list-systemd --continue --directory-prefix=$LFS/sources wget -N --input-file=wget-list-systemd.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/*