独自のLinuxディストリビューションを作成する方法

ソースでLinuxの基本を学び、自分専用のLinuxを作成する

Linux® From Scratch(LFS)とその子孫は、Linuxオペレーティング・システムの動作をユーザーに教える新しい方法です。LFSは、完全なオペレーティング・システムを1つ1つコンパイルすることで、オペレーティング・システムの仕組みを教えるだけでなく、独立系オペレーターが速度、フットプリント、またはセキュリティーを目的としてシステムを構築できるという前提に基づいています。

Frank Pohlmann (frank@linuxuser.co.uk), U.K. Technical Editor, Linuxuser and Developer

Frank Pohlmann は中東の宗教の歴史を少し学びましたが、その後様々な援助委員会が、宗教の歴史に関する研究は現代世界にほとんど関係がないと判断してしまいました。それ以来、彼は趣味であるフリー・ソフトウェアに集中しています。彼は自分がイギリスにある Linuxuser & Developer の技術編集者であることを認めており、彼が Linux や FreeBSD の世界に入ったのは、ライターやアーティストのための UNIX カーネル内部や Linux アプリケーションに強い興味を持っているためです。



2005年 5月 24日

多くの著者がUNIX®フレーバーについて書き、スケジューリング、メモリー管理、マルチプロセッシングとスレディング、ファイル・システム、ユーザーとカーネルの対話について深く研究しています。Linuxについて書く著者にはUNIXの著者にはない利点があります。すなわち、GNU Public License(GPL)、中央研究所であるOpen Source Development Lab(OSDL)の存在、およびLinus Torvaldsの絶対的地位によって、Linuxがさいわいにも動きの遅いターゲットになっているため、Linuxカーネルはお家騒動の心配がなく、競合する分派に分かれる可能性が少ないからです。

UNIXの内部が問題になる理由

種類の異なるUnixカーネルでは、一定のファミリーの類似点があることを除けば一致する部分はそれほどありません。ただし、さまざまなUNIXフレーバーにはLinuxにはない利点があります。すなわち、どのUNIXフレーバーも完全なオペレーティング・システムということになっています。(勝手な定義があるとすれば)「単なるカーネル」と称されることが多いLinuxは、カーネルが非力なPentium® IIマシンで実行しようが、対称型マルチプロセッシング(SMP)システムで実行しようが、基本的には変わらない共通の機能と実装のコアを提供します。話をさらに単純化すれば、Linuxカーネルを深く知るほど変化に富んでくるのに対して、UNIXシステムはさまざまなUNIX/POSIX標準の実装を分岐させる傾向があると言えるかもしれません。

しかし、事はそれほど単純ではありません。Linuxカーネルとシステム・レベルのコードを調べるのは時間がかかる仕事であり、現実の世界では限られた用途しかありません。LFSプロジェクトは、Linuxのシステム・レベルでのわかりにくさという問題を改善することを目的としています。Linuxシステムは、ごく基本的なタスクを実行させるにも、カーネルに多数のライブラリーとツールを必要とするという事実そのものが批判されてきましたが、スリムなLinuxディストリビューションを持っている上級ユーザーが、システムを最適化する余地がなく、煩雑で不必要なツールを投げ捨てることもできないような数ギガバイトものバイナリーをダウンロードしたくないと思った場合はどうなるのでしょうか。さらに高度なユーザーがさまざまなコミュニティー・ディストリビューションの一方的決定を受け入れるのを拒否して、Linux/Apache/MySQL/PHP(LAMP)型アプリケーション・スタックをCDから実行したい場合はどうなるのでしょうか。そこでLFSの登場です。


Linux From Scratch

LFSプロジェクトは、明らかに、基本的なLinuxシステムの形成に必要十分なソース・ファイルに基づいています。それはLinuxカーネルとデバイス・ドライバーというにとどまりません。実用的なLinuxシステムを作り上げるには完全なコンパイラー・ツール・チェーン、多数のLinuxアセンブラー・ユーティリティー、glibcシステム・ライブラリー、システム構成ツール、およびuserlandシェル・アクセスに接続されたツールを追加する必要があるからです。LFSは、ある程度のスクリプティングの知識があるLinuxまたはUNIXパワー・ユーザーは、カーネル・コードそのものを徹底的に調べなくても、使えるシステムの仕組みを知りたいと思っているという前提に立っています。

Linuxシステムの仕組みに精通するために、LFSの作成者たちは、モジュールの依存関係のツリーに従ってシステムをコンパイルするのが、オペレーティング・システム一般、特にLinuxのメカニズムを知る自然な方法であると判断しました。ユーザーがコンパイルのプロセスをマスターすれば、システム・コンポーネントに接続された依存性ツリーのうち、オペレーティング・システムの主要目的に関係のない部分を剥ぎ取っていくことができます。たとえば、コンパイルの完了後は、コンパイラー・ツール・チェーンそのものをなくすことが可能です。埋め込みLAMPスタックは、フル・セットのコマンドライン・ユーティリティーがなくてもかまいません。構成ユーティリティーもそぎ落とすことができ、ほとんどのユーザーは、Linuxがサポートする大量のファイル・システムの代わりに、1つのファイル・システムで済ますことができます。

Linuxの部品

LFSシステムの重要部品の1つは、tar ballとして入手可能な大量のソース・ファイルです。ドキュメンテーションは、もう1つの不可欠部品であり、最も重要なものです。実際、最新のLFSブック・ファイルさえあれば、LFSディストリビューションを作成することも可能です。LFSブックには、各ダウンロード場所と各ソース・ファイルの特性および依存関係が詳しく説明されているからです。さまざまな特性のシステムについて記述したLFSブックには、カーネルからコンパイラー、シェルまで、ソース・ファイルの各グループをコンパイルする手順が詳述されていて、代替手順も説明されています。平均的パワー・ユーザーのツールキットにはないと思われるもう1つのLFSシステム部品は、基本的なLFSシステムを組み立てた後、システムを起動するために必要なブート・スクリプトです。

ここで、LFSディストリビューションの重要な警告です。勇気あるディストリビューション作成者に必要なものは、完全なコンパイラー・ツール・チェーンとファイル・システム作成ユーティリティー一式を含む実用的なLinuxディストリビューションです。当然、ソース・ベースのLinuxディストリビューションはすべて、特定のバージョンのコンパイラーを使用してブートストラップする必要があり、コンパイラーのバージョンはディストリビューション・リリースごとに違います。LFSは、この分野の唯一のシステムというだけでなく、ここのソース・ファイルを直接操作できる唯一のシステムでもあります。SourcemageやMyGeOSなど、他のほとんどのソース・ベースのLinuxシステムは、完全なダウンロードを提供し、ユーザーに使用を勧めています。LFSでは、このような前提はなく、LFSフレームワークを解体することが勧められています。

LFSはおそらく、構成ツールやスクリプティングに関する限り、より低機能なハードウェアでも動作しますが、機能するLinuxディストリビューションが、ごく普通のハードウェアにインストールされていると仮定してください。LFSをコンパイルするには、パーティションとファイル・システムを準備する必要があり、コンパイラーとシステム・ライブラリーをコンパイルする必要もあります。手作業でやるには、かなり疲れる手順ですが、インストールの残りの作業について自信がつきます。システム全体のコンパイルは、基盤のハードウェアの新しさとコマンドラインの手際のよさに応じて、1時間で済むこともあれば、4日かかることもあります。

かなり大まかな前提ですが、LFSブックでのインストール手順の大半をそのまま実行して、LFSブックで提案されているインストール手順の変更を最小限にとどめるのであれば、自動インストール・ルーチンを使用してLFSベースのディストリビューションをインストールすることもできます。インストール・ルーチンはLFSブックでは説明されていませんが、Automated Linux from Scratch(ALFS)という名前でXMLベースの記述として入手できます。アクティブ・インストールはCベースのスクリプトとして使用でき、ncrsesを使用して、見かけ上、グラフィカル・インストールになっています。このインストールはnALFSとも呼ばれ、非常に柔軟性の高いパッケージ・インストール・フレームワークとなっています。これを動作させるには、機能するLinuxシステムと、機能するCコンパイラーおよびXMLパーサーが必要です。動作中のLFSシステムがあれば、それで十分です。

Automated Linux From Scratch

ALFSは、LFSそのものを超えた目的を持っています。LFSはLinuxベースのオペレーティング・システムの内部動作を単独で教えますが、グラフィカル・ユーザー・インターフェース(GUI)は1つも含んでいません。LFSでは、ネットワークに接続することも、インターネットに接続することもできません。ALFSは、たとえば、インターネット・アクセスを可能にするライブラリーを追加することによって、あるいは、グラフィカル・デスクトップに必要なXライブラリーをインストールすることによって、システムの拡張を容易にします。


Beyond LFS

LFSの作成者たちは、ソース・ベースのLinuxシステムの他のバラエティの必要性を認識していました。LFSだけでなく、X Window System、GNOME、およびネットワーキング・サポートを追加したい人のために、もう1つのLFS派生物、Beyond Linux From Scratch(BLFS)が作成されました。LFSブック3冊(今はディストリビューションではなくブックについて話していることを忘れないようにしましょう)は、逆三角形を形成しています。基本のLFSビルドは、自動コンパイルの基礎であり、必要な場合には、完全なソース・ベースのLinuxディストリビューションの基礎です。BLFSは、基本のLinuxシステムをユーザーがすぐに使える完全なLinuxシステムに変えます。AFLSは、ソース・ベースのLinuxのインストールと拡張を容易にします。完全なソース・ベース・システムのコンパイルはスクリプトによって実行でき、実行するハードウェアに合わせてチューニングした後は、自動実行できます。実行する必要があるパッケージ、たとえば、特定のオフィス・アプリケーション・スイートが決まれば(あるいはインストール・エンジニアが決めた後は)、インストール・シーケンスを容易に拡張できます。ALFSは、ソースからのネットワーク・インストールに適しているので、ここでも役立ちます。


Hardened LFS

LFSファミリーの最後のメンバーは、ソース・ベースLinuxの特に重要な局面、すなわち、セキュリティーに対処します。Linuxディストリビューション・サーバーから送付されるパッチに頼りたくない人にとって、常識的なセキュリティー対策は、選択したコア・ライブラリーおよびアプリケーションについてのセキュリティー勧告を追跡することでしょう。LFS実装者にとっては、問題はやや困難です。Linuxベースのオペレーティング・システムの内部機能の中核となるLinuxカーネル・コード、そしておそらく多数のライブラリーとユーティリティーを監査するのは、不可能ではないにしても困難な作業です。

コードの監査は非常に時間がかかり、多数のパッチを追加するのは、パッチ・サーバーが専用スタッフによって集中管理されている場合に限っておすすめできる作業です。ただし、一部のライブラリーをゼロから書き直して、セキュリティー問題に対する新しいアプローチを反映させることは可能です。一例として、妥当な大きさの乱数プールからランダムに番号を割り当てることによって、プロセスIDの推測を非常に難しくすることができます。この方法を開拓したのはOpenBSDプロジェクトであり、さまざまなUNIXフレーバーとLinuxディストリビューションにたどり着きました。

Hardened Linux From Scratch(HLFS)という名前の、かなり新しいプロジェクトが、Linuxでのこのセキュリティー・アプローチを採用しています。このプロジェクトは、LFSの適切な理解とBLFSの一部に基づき、ほとんどのLinuxシステムでは標準とされることが少ないユーティリティーとライブラリーを使用します。

おそらく、HLFSでの最も重要な追加点はStack-Smashing Protector(SSP)であり、gccディレクティブを使用して有効にできます。SSPはスタック・スマッシュ攻撃に対する対策として開発されました。この攻撃は、Linuxシステムに影響を与える最も一般的なクラスのセキュリティー脅威です。その他のセキュリティー機能としては、第一級の乱数発生器と位置に依存しない実行ファイルのコンパイルがあります。一般的には静的リンク・オブジェクト・コードに変換される実行コードが共有ライブラリーとして扱われ、位置に依存しない実行ライブラリーは、アドレスをランダム化によって隠すことができます。もちろん、HLFS Webサイトから多数のパッチが入手可能です。


増え続けるLFSファミリー

LFSファミリーのLinuxビルドは、多くの点で、Linuxベースのオペレーティング・システムを構築するパワーを、そもそもそれを始めた人々、つまりハッカーが取り戻す手段となります。しかし、LFSの作成者たちにとって最も重要な成果は、LFSを通じて、すべてのLinuxディストリビューションが興味あるユーザーにとってわかりやすくなったということでしょう。Linuxディストリビューションを1つずつ組み立てることができ、Linuxベースのオペレーティング・システムを多くの部品でできたシステムとしてみることができるので、Linuxディストリビューションを構築するもう1つの方法が可能になったのです。

より一般的に言うと、プログラマーでなくても、Linuxディストリビューションの作成方法を変更できるのです。LFSシステムを構築することによってユーザーが学ぶごくわずかなスクリプティングで十分です。LFSのスペシャリストは、基本構造を損なうことなく、Linuxディストリビューションの編成そのものを変更し、拡張することができます。この機能は、Linuxシステムを管理する人材と知識はあるが、コンサルタントや企業から商用サポートを受けるだけの予算がない組織にとって特に重要です。LFSベースのLinuxシステムは、教育目的と大規模ネットワークのためにデモンストレーションが行われていますが、他の分野でも使われることになるでしょう。

参考文献

  • 最も新しいバージョンのLFSへのポータルは、LFSのダウンロード・サイトです。ここでは、幾つかのミラー・サイトにある、LFSのブックを提供しています。
  • LFSファミリーに加わった最も新しいメンバーが、HLFS、つまり強化版のLFS(Hardened LFS)です。
  • LFS熱狂者が望むのであれば、自動化したインストールを作ることもできます。
  • 基本的なLFSインストールで不足であれば、BLFSとして知られている、より高度なextended Linux From Scratchに行くこともできます。
  • スタック・スマッシュ攻撃からセキュアに守るためにSSPディレクティブを使うと、gccは、このタイプの攻撃から保護されたコードをコンパイルすることができます。
  • 位置に依存しない実行ライブラリー(position-independent executables)の章には、位置に依存しないコードが簡単に紹介されています。
  • developerWorksのLinuxゾーンには、Linux開発者のための資料が豊富に用意されています。
  • developerWorksのOpen sourceゾーンでは、IBM製品と組み合わせてオープンソースを利用した開発を行う皆さんのために、ハウツー情報やツール、プロジェクトに関する更新情報などを幅広く提供しています。
  • 皆さんの次期Linux開発プロジェクトを、IBM trial softwareを使って革新してください。ダウンロード、あるいはDVDで入手することができます。
  • Developer Bookstoreのオープンソースのセクションでは、Linuxに関する本UNIXに関する本をはじめ、オープンソースに関する書籍が割り引きで購入できますので、ぜひご利用ください。
  • developerWorks blogsに参加して、developerWorksのコミュニティーに加わってください。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source, Linux
ArticleID=236867
ArticleTitle=独自のLinuxディストリビューションを作成する方法
publish-date=05242005