Linuxを日常的に使う実験ブログ

LFS 7.7を構築する [Part 1 LFS概略とホストシステム選択編]

 2015-09-20

 LFS

こんにちは。今回のテーマは『LFS 7.7を構築する [Part 1 LFS概略とホストシステム選択編]』です。時間を見つけては少しずつLFS(Linux From Scratch)7.7構築の作業を進めてきました。一通り作業の目処がついたので記事にしてみようと思いました。ただ、LFSの作業は非常に膨大なので詳細な作業は公式サイトに譲りたいと思います。ここでは実際に作業して感じたトピックなどを扱えればと思います。今回はLFSの紹介とホストシステム選びについて取り上げたいと思います。LFSのドキュメントでいうと序章〜1章あたりに相当します。 [adsense02] 【目次】 LFSでLinuxシステムを構築する魅力 今回構築した環境 Linuxディストリビューション構築の概要 ホストシステムはどのディストリビューションが良いのか?

LFSでLinuxシステムを構築する魅力

色々なLinuxディストリビューションを使ってみたり、自分なりのカスタマイズをしているうちに一からLinuxディストリビューションを構築してみたいと思ったことはないでしょうか?しかし、いきなり自力でLinuxディストリビューションを作成しようとしてもハードルが高いものです。 LFSは最小のOSとして機能するLinuxシステムを構築する手法をドキュメントとして提供ています。このドキュメントにしたがって作業をしていけばLinuxディストリビューションを作成できます。(尚、公式ドキュメントlfsbookは日本語版もあり、コチラから入手できます。) LFSの手順で構築された直後のシステムは機能も非常に少なく実用的な状態ではありません。インストールしてすぐに使えるLinuxディストリビューション(例えばUbuntuのような)と比べれば非常に不便で貧弱です。しかし自分が一から構築するシステムは自由にカスタマイズ可能で、自分だけのシステムを構築することができます。 LFSをさらに実用的なシステムにしようとするBLFS(Beyound Linux From Scratch)というプロジェクトもあります。LFSでシステムを構築した後にはBLFSを参考に自分専用のディストリビューションを作成してみてはいかがでしょうか?

今回構築した環境

筆者は今回LFS7.7を構築しました。筆者の環境は以下のようなものです。

構築環境VirtualBox
ホストシステムSlackware 14.1
LFSバージョン7.7
アーキテクチャAMD x86(32bit)

LFS7.7構築直後の起動画面 02

Linuxディストリビューション構築の概要

一からディストリビューションを構築すると聞いてどんな作業を思い浮かべるでしょうか?細かいところはLFSドキュメントを読んでいただくとして、ざっと筆者が行った作業の流れを記すと以下のような流れとなります。(LiveCDを使う場合はホストシステムのインストールは不要です)

  1. ホストシステムの選定
  2. パーティショニングとホストシステムのインストール
  3. パッケージソースのダウンロード
  4. 一時的環境の構築
  5. ソフトウェアのビルドとインストール
  6. ブートスクリプトのインストール
  7. システムの設定
  8. カーネルのビルドとインストール
  9. ブートローダーのインストールと設定

ご覧のようにホストシステムを利用して一時的なビルド環境を構築し、その環境の上でソフトウェアのビルドを行うことでホストシステムの影響を受けないようにしていきます。よって、Gentoo LinuxやArch Linuxのようなコマンドベースでインストール作業をするディストリビューションよりも作業は煩雑となります。

ホストシステムはどのディストリビューションが良いのか?

LFS 6.xまでは公式LiveCDが公開されており、LiveCDを使用した方法はネット上でも見かけることが多かったです。しかしLSF 7.xからはLiveCDがサポートされていません。 LFS 7.xの構築を始めるときに迷うのが「どのディストリビューションで構築するか」だと思います。筆者はSlackware 14.1を使用してLFSを構築しました。Slackwareの前はGentooのLiveDVD(20140826)を使用して構築を試みましたが、どうしてもgccのビルドが通らず断念しました。 ホストシステムとして適切なシステムかどうかチェックするため以下のスクリプトが用意されています。 version-check.sh [bash] #!/bin/bash # Simple script to list version numbers of critical development tools export LC_ALL=C bash —version | head -n1 | cut -d” ” -f2-4 echo “/bin/sh -> `readlink -f /bin/sh`” echo -n “Binutils: ”; ld —version | head -n1 | cut -d” ” -f3- bison —version | head -n1 if [ -h /usr/bin/yacc ]; then echo “/usr/bin/yacc -> `readlink -f /usr/bin/yacc`”; elif [ -x /usr/bin/yacc ]; then echo yacc is `/usr/bin/yacc —version | head -n1` else echo “yacc not found” fi bzip2 —version 2>&1 < /dev/null | head -n1 | cut -d” ” -f1,6- echo -n “Coreutils: ”; chown —version | head -n1 | cut -d”)” -f2 diff —version | head -n1 find —version | head -n1 gawk —version | head -n1 if [ -h /usr/bin/awk ]; then echo “/usr/bin/awk -> `readlink -f /usr/bin/awk`”; elif [ -x /usr/bin/awk ]; then echo yacc is `/usr/bin/awk —version | head -n1` else echo “awk not found” fi gcc —version | head -n1 g++ —version | head -n1 ldd —version | head -n1 | cut -d” ” -f2- # glibc version grep —version | head -n1 gzip —version | head -n1 cat /proc/version m4 —version | head -n1 make —version | head -n1 patch —version | head -n1 echo Perl `perl -V:version` sed —version | head -n1 tar —version | head -n1 makeinfo —version | head -n1 xz —version | head -n1 echo ‘main(){}’ > dummy.c && g++ -o dummy dummy.c if [ -x dummy ] then echo “g++ compilation OK”; else echo “g++ compilation failed”; fi rm -f dummy.c dummy [/bash] library-check.sh [bash] #!/bin/bash for lib in lib{gmp,mpfr,mpc}.la; do echo $lib: $(if find /usr/lib* -name $lib| grep -q $lib;then :;else echo not;fi) found done unset lib [/bash] スクリプトの準備ができたら以下のコマンドを実行しチェックをして下さい。

$ bash version-check.sh $ bash library-check.sh

このチェックを行い問題なければホストシステムとして使用可能です。

最後に

随分と長くなってしまいました。LFSの楽しさを少しでもお伝えできればと思います。社会人の場合はなかなか時間が取れず、作業が少しずつしか進まないことも多いと思いますがプラモデルを少しずつ組み立てていくように自分のペースで進めれば良いと思います。 [adsense]