生物界の分類をFreemindで整理してみた!





【参考文献】

井出利憲「分子生物学講義中継 生物の多様性と進化の驚異」羊土社 2010 32pp

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』技術評論社







Linuxの起動プロセス

Linuxの起動プロセスの知識は、トラブルが生じた時やkernelやその他環境をソースコードからコンパイルして組み合わせていく時に、重要となります。































【参考文献】
http://jibun.atmarkit.co.jp/lskill01/rensai/lpicdrill06/lpicdrill01.html

Linuxにおけるプロセスの階層性


LinuxシステムではinitのいうPID 1のプロセスの子プロセスという形ですべてのプログラムが生成されます(forkの繰り返し)。
pstreeというコマンドを使用するとプロセスツリーをきれいに表示することができます。

$ pstree


ご覧の通り、initは最上流のプロセスということがわかります。
今回実行したpstreeというプロセスはinit-sshd-sshd-sshd-bash-pstreeのような親子関係を経てやっと実行されているのです。
ちなみにLinuxのkillコマンドはPID 1を特別なものと見なしており、killすることはできません。
#kill関数の仕様を確認
$ man 2 kill





Macにおけるプロセスの階層性

Linuxのプロセスはinitを1番の親プロセスとして子プロセスが再帰的に生成される形態を取っています。
Mac OS Xも同様のシステムを採用しています。
まずは、Macのプロセスの階層性を確認してみます。

#pstreeのインストール

$  wget ftp://ftp.thp.uni-duisburg.de/pub/source/pstree-2.27.tar.gz
$ tar xzvf pstree-2.27.tar.gz
$ gcc -o pstree pstree.c

#pstreeの実行
$ ./pstree


このツリーを眺めてみると、
rootユーザーが実行した/sbin/launchdというプロセスがすべての元のプロセス(PID : 1)ということができます。

そこで、このプロセスを停止(kill)してみるとどのような挙動が予測されるでしょうか。
UNIX系のOSにおいては親プロセスが停止されると子プロセスも強制終了されます。したがって、launchdを停止すると、システムが強制終了されることが予想されます。
実際に行ってみます

#( - 9)は強制終了のためのオプション
$ sudo kill -9 1

見事にシステムはシャットダウンされました。