skucky.com
LFS(Linux From Scratch)についての詳細は、公式サイトのこちらをご覧ください。LFSはLinuxディストリビューションの一つとして位置付けられていますが、他のディストリビューションと大きく違う点と言えば、そのインストールにかかる手間と労力でしょう。RedHat系にあるanacondaなどのような親切なインストーラはありませんし、システムに必要なパッケージ群をビルドするための環境を構築する所から始まります。
LFSに似たディストリビューションとしてはGentoo Linuxが挙げられますが、LFSの場合は、システムに必要なパッケージ類を自分で一つ一つビルドしていく点が大きく違います。そのため、Linuxの仕組みや構成を理解する上では、LFSは良い教材になるとも言えます。
LFSのインストール方法については、バイブル的なドキュメントとしてLFS Bookなるものがありますので、そちらの方を参照するべきです。なお、当ドキュメントについては、LFSの公式サイトからダウンロードできます。
以降、上述のLFS Bookに従い、インストールメモを紹介しようとしましたが、はっきり言って膨大な数に昇るパッケージのインストール方法をHTMLファイルに書くのは面倒です。そこで、ブログにLFS構築記として残すことにしました。
なお、使用したLFSのバージョンは6.1.1、使用するマシンは自作のベアボーンキット(マシンスペック参照)、LFSの構築環境としては、後述するLiveCDを使用しているものとします。
LFSのインストールにあたっては、Linuxの環境(膨大なソースをコンパイルするので、開発環境は必須)が必要となります。LinuxをインストールするのにLinuxの環境が必要なの?という本末転倒的な気がしなくもないですが、仕方ありません(少なくとも、Linuxを始めて使う人がいきなりLFSのインストールは試みないでしょう)。そこで、どのLinuxが良いか?という話になりますが、実際にやってみると、gccやらglibcやらのバージョンが云々という制約があり、途中でコンパイルエラーも発生して挫折してしまうのが、オチです(スキルのある人はデバッグできるかもしれませんが...)。
LFSでは、CDブート可能なLFS LiveCDを提供しており、小生も最初は他のディストリビューションで試みましたが挫折し、結局このLiveCDを使用しました。また、LFSの構築に当たっては、LFS Bookの他に、下記の文献も参考にしました。
参考記事:Linux World 2006年9、11、12月号
LFSの構築作業に1日中没頭できる場合を除いて、普段仕事やら何やらでそういう訳にもいかない場合、LFSの完成までの道のりは何日かかかるものです。その場合PCの電源を切りたくなるでしょう。特にLiveCDを使用している場合、ホスト側の設定(Xやユーザー等)はメモリーに保存されている為、次回起動時は設定をやり直す必要があります。ここでは、その作業を少しでも軽減できるようなTipsを紹介します。
ブログの方にも記載しましたが、LFSのLiveCDは日本語キーボードをUSキーボードと認識してしまうようです。これでは、後々の作業がやりにくいので、以下のとおり修正します。また、ホイールマウスを使用している場合は、その設定を追記しておきます。
↓キーボ−ドの設定に関するSectionを修正 |
#Option "XkbModel" "pc105" ← コメント |
#Option "XkbLayout" "us" ← コメント |
Option "XkbModel" "jp106" ← 修正 |
Option "XkbLayout" "jp" ← 修正 |
↓マウスの設定に関するSectionに追記 |
Option "ZAxisMapping" "4 5" |
修正には適当なエディタを利用してください。Xを起動する前にコンソールで修正しておけば手間は省けますが、Xを起動している場合は修正後、[Ctrl]+[Alt]+[BackSpace](各キーを同時に押下)でXを一旦抜けて再度「startx」コマンドでXを起動します。
次にlfsグループ、lfsユーザーを作成します。以下のコマンドを実行します。
# groupadd lfs |
# useradd -s /bin/bash -g lfs -m -k /dev/null lfs |
# passwd lfs |
次に、LFS用パーティションをマウントします。以下のコマンドを実行します。
# export LFS=/mnt/lfs |
# mkdir -v $LFS |
# mount /dev/hda2 $LFS |
# ln -sv $LFS/tools / |
上記では最後に$LFS/toolsへのシンボリックリンクを作成しています。
以上までは、その都度コマンドを実行しても何とか許容範囲に入るかなぁと個人的には思うのですが、まだやることはあります。それはlfsユーザーの環境設定(.bash_profileと.bashrcの作成)です。これはちょっと流石にPCを再起動する度にコマンドたたくのは面倒くさいです。そこで、LFSを構築しているマシンにUSBメモリーを挿して、そこにファイルを保存しておくという作戦に打って出ました(我ながらなかなかの名案である)。幸いにも以前、個人情報の漏洩等が話題になる前に会社で平然と使用していた64MBのメモリーが部屋に転がっていたのを使用することとしました。
USBメモリーを挿してLFS LiveCDを起動すると、/dev/sdaとしてUSBメモリーを認識します。認識してくれれば、あとはパーティションを作成して、ファイルシステムを作成すればめでたく使用可能になります。以下のコマンドを実行します。
# fdisk /dev/sda |
パーティションを作成(たかだか64MBなので、全領域を1パーティションとして作成) |
# mke2fs /dev/sda1 ← ext2ファイルシステムの作成 |
# mkdir /mnt/usb |
# mount /dev/sda2 /mnt/usb ← USBメモリーをマウント |
# cd /mnt/usb ← USBメモリーにcd |
# cat > .bash_profile << "EOF" ← .bash_profile作成 |
> exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash |
> EOF |
# cat > .bashrc << "EOF" ← .bashrc作成 |
> set +h |
> umask 022 |
> LFS=/mnt/lfs |
> LC_ALL=POSIX |
> PATH=/tools/bin:/bin:/usr/bin |
> export LFS LC_ALL PATH |
> EOF |
あとは、LFS LiveCDを起動する度にUSBメモリー用のマウント先ディレクトリを作成し、マウント後、ファイルをlfsユーザーのホームディレクトリにコピーして、読み込めば後続の作業を続けることができます。
# mkdir /mnt/usb ← USBメモリーマウント用ディレクトリ作成(こればっかりは仕方ない) |
# mount /dev/sda1 /mnt/usb |
# su -lfs |
$ cp /mnt/usb/.bash* ~ |
$ source ~/.bash_profile |
因みに、以上までの準備はLFS Bookの5章までで有効です。6章からはLFSの本システム構築作業ということで、chrootしたり、デバイスファイルやら何やら訳の分からんファイル達を沢山作成するので、もう少し準備が必要となります。
6章以降の作業再開については、LFS Bookにもある通り、$LFS/procと$LFS/sysをchrootする前にマウントしておく必要があります。実行コマンドは以下のとおりです。なお、Xの設定については、5章までの再開時作業と同様ですので、そちらをご参照願います。また、5章までの再開時作業は6章以降に作業が進んだ場合、必ずしも全てを実施する必要はありません(最低限必要なものは、環境変数LFSの設定、/mnt/lfディレクトリの作成くらいかと)。
# export LFS=/mnt/lfs |
# mkdir -v $LFS |
# mount /dev/hda2 $LFS |
# mount -vt proc proc $LFS/proc |
# mount -vt sysfs sysfs $LFS/sys |
次にchrootします。
# 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 |
chrootしたら、coreutilsのテストをこれから実施する場合、以下のコマンドでディレクトリを作成しておきます。作成していないと、coreutilsのテスト(正確にはダミーユーザー権限によるテスト時)に当該ディレクトリが存在しないということで、エラーが発生してしまいます。
# mkdir -v /dev/shm |
# mkdir -v /dev/pts |