LFS on VirtualBox に挑戦 その3 - ビルド祭前夜祭

2015.02.23 Author: Jas

そろそろtarの伸張コマンドと、コンパイルの基本コマンド(make/make install)を覚えてきたJasです。
前回はツールチェーンの構築を行いましたが、ここからがいよいよLFSシステム構築の本番です!
っと言っても、今回は長いビルド祭の前夜祭までで、次回からが本番ですが・・・

まず初めに、LFSパーティションの中にカーネルが取り扱うファイルシステムや起動に必要なデバイスノードを作成し、仮想カーネルファイルシステムの準備(6.2章)をします。

# mkdir -pv $LFS/{dev,proc,sys,run}
# mknod -m 600 $LFS/dev/console c 5 1
# mknod -m 666 $LFS/dev/null c 1 3

そして、今後作業中にホストマシンの再起動を行った際等に便利なようにLFS構築の事前準備用のスクリプトを作成しておきましょう。

#!/bin/sh

export LFS=/mnt/lfs

mount -v --bind /dev $LFS/dev

mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run
if [ -h $LFS/dev/shm ]; then
mkdir -pv $LFS/$(readlink $LFS/dev/shm)
fi

chroot "$LFS" /tools/bin/env -i \
HOME=/root \
TERM="$TERM" \
PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
/tools/bin/bash --login +h

このスクリプトでは、6.2.2.「/dev のマウントと有効化」と 6.2.3.「仮想カーネルファイルシステムのマウント」を行い、6.4.「Chroot 環境への移行」までを実行します。
スクリプトを /root/lfs-chroot.sh 等に保存し、実行権限を付与したら、さっそく実行してLFS環境にchrootでログインしてみましょう。

じゃじゃ~ん。
$LFS にchrootログイン、できたでしょうか!?
見た目は/にいるように見え、bashプロンプトに「I have no name!」と表示されていれば、たぶん成功です。

まだ中身がほとんど空っぽなので、まずは6.5.「ディレクトリの作成」手順に従って、いつも見慣れているディレクトリを作成しましょう。
ちなみに、この「いつも見慣れているディレクトリ」ですが、FHS(Filesystem Hierarchy Standard)というファイルシステム階層の標準化規格で定められているものになります。(日本語では、ITメディアの記事等を参考に・・・)

ディレクトリができたら、次はファイルです。
6.6.「基本的なファイルとリンクの生成」に従って、必要なリンクと見慣れたファイル(/etc/passwd, /etc/group)を作成します。
ここで以下のコマンドを実行して新しいシェルを起動すると、bashプロンプトの「I have no name!」が消えます。

exec /tools/bin/bash --login +h

最後に3つのログファイル(/var/log/btmp, /var/log/lastlog, /var/log/wtmp)を作成すると、6章のビルド祭の準備完了です。

これから先、またひたすらパッケージのビルドを行いますが、基本的なルールは前回のツールチェーン構築時と同じで、ソースディレクトリでパッケージを展開し、展開したディレクトリの中に入った状態から作業を進めます。
(LFSブックは少し不親切で、5章:ツールチェーンの構築の最初に「全般的なコンパイル手順」の記載があるのですが、6章もこの手順は同じです。)
5章と違い、これから先のビルド作業では手順通りにテストスイートを実行し、こちらに記載のログと照らし合わせて失敗したテストが予期されたものかどうか確認するようにする必要があります。

せっかくVirtualBoxを使っているので、この時点でスナップショットを取っておくのをオススメします。
(ここから先で失敗すると、どうしようもなくなる・・・というか、心が折れるので・・・)
仮想マシンと心の準備を万端にして、次回からのビルド祭に備えましょう~♪

名古屋のWebシステム開発・ネットワーク構築会社 コネクティボへ