GNU/Linuxをソースコードからビルドする手順

私たちが普段、Linuxと読んでいるものの実態は実は、Linux kernel + GNU softwareの複合環境なのです。図で示しますと下のようになります。

したがって、GNUの人々はこのような環境のことをGNU/Linuxと呼ぶように主張しています。確かに一理あると思います。

ところで、GNU/Linuxの環境をソースコードよりビルドする時は、段階が多くとても混乱してしまいます。
そこで、今回は各段階の説明をしてみたいと思います。



#1.ファイルシステムの作成とデバイスファイルの作成
  • Filesystem Hierarchy Standard(FHS)に基づいたファイルシステムを構築する。
  • MAKEDEVというスクリプトを用いて/dev内にデバイスファイルを生成する。
#2.各ソフトウェのコンパイルと導入
  • 基本は./configure, make, make installを繰り返すだけだが、./configureの時にオプションを大量に指定したり、make installの時に、インストール先のディレクトリを指定する必要がある。
  • まずは、glibcをコンパイル。glibcは各種コマンドやソフトウェアを実行する際に必ず必要。GNU/Linux環境はほとんどのコマンドやソフトウェアでダイナミック・リンクにてglibcを利用するため、このライブラリがないと各種コマンドが実行できない。
  • ncurses : コンソール端末の表現力を向上させるライブラリ。bashの動作に必須。
  • bash : Linuxの標準シェル
  • util-linux : ログイン関連やttyコマンド、ディスク操作
  • coreutils : シェルの中でよく使うコマンド群を集めたソフトウェアパッケージ。cat, ls, suといったシェル関連コマンドを含む。
  • etc.
#3.カーネルのコンパイル
  • 設定項目が膨大なのので、開発環境の構成ファイルを流用すると良い。
  • makeは場合によって一晩かかる時がある。
  • -jのオプションで時間の短縮が可能。
#4.initramfs(initrd)ファイルの作成
  • initramfsとは、カーネルをロードした後で、一時的にメモリー上に展開したルートファイルシステムを、マウントできるように準備するためのファイルである。
  • 少し前までinitrdという名称で呼ばれていたが、現在はinitramfsに変更されている。
#5.ルートファイルシステムの完成
  • ブート時に起動するプログラムやユーザ名、サービス名、パスワードといった最低限必要となるファイルを作成する。
  • ex)inittab, rc.sysinit, rc*, passwd, group, profile, rsyslog.conf, services, fstab, hosts
#6.記憶媒体に書き込む
  • fdiskによりパーティションを作成
  • mke2fsなどでパーティションをフォーマット
  • ビルドしたGNU/Linuxシステムをシュリンクしてから、アーカイブ、記憶媒体にコピー。
  • ブートローダー(LILO, GRUB)を導入
  • grub.confの設定
#7.各種アプリケーションを導入する
  • 必要に応じて、vimなどのテキスト編集コマンドや、Apacheなどのサーバー関連アプリケーションを追加導入する。
【参考文献】
『日経Linux 2011年11月号』日経BP社

『日経Linux 自分で作るLinux OS 2006』日経BP社
『Software Design 総集編 2001 - 2012』技術評論社