ルートファイルシステム(RFS)を作成する

MyLinux格納用ディレクトリ(/usr/local/src/origlinux)内に「boot」「dev」「etc」「tmp」「rootsys」というルートファイルシステム(RFS)に必要なディレクトリを作成します。

作成する5つのディレクトリ

・boot カーネルやinitrdファイルを格納します 。
・dev デバイスファイルを格納します。
・etc 各種設定ファイルを格納します。
・tmp ファイルの一時保存用に使用します。
・rootsys MyLinuxのルートファイルシステム。

5つのディレクトリの作成

# cd /usr/local/src/origlinux
# mkdir -p boot dev etc tmp rootsys

▼確認

# ls -l
合計 20
drwxr-xr-x    2 root     root         4096 Mar 21 22:32 boot/
drwxr-xr-x    2 root     root         4096 Mar 21 22:32 dev/
drwxr-xr-x    2 root     root         4096 Mar 21 22:32 etc/
drwxr-xr-x    2 root     root         4096 Mar 21 22:32 rootsys/
drwxr-xr-x    2 root     root         4096 Mar 21 22:32 tmp/
#

ディレクトリへの必要ファイルのコピー

bootディレクトリへのboot関連ファイルのコピー

/usr/local/src/origlinux/bootディレクトリにカーネルイメージやinitrdファイルをコピーします。

# cp -a /usr/local/src/origdev/boot/* /usr/local/src/origlinux/boot/

▼確認
/usr/local/src/origlinux/bootディレクトリに、System.map、mylinux、ramdisk.imgのファイルが存在することを確認します。

# ls -l
合計 2720
-rw-r--r--    1 root     root       390086 Oct 25 23:40 System.map
-rw-r--r--    1 root     root       241582 Mar 21 10:22 initrd.img
-rw-r--r--    1 root     root      1068796 Oct 25 23:40 mylinux
-rw-r--r--    1 root     root      1061490 Mar 21 16:29 ramdisk.img
#

devディレクトリへのデバイスファイルのコピー

/usr/local/src/origlinux/devディレクトリにはデバイスファイルをコピーします。

# cp -aR /usr/local/src/origdev/dev/* /usr/local/src/origlinux/dev

rootsysディレクトリへのコピー

rootsysディレクトリに、ルートファイルシステムに必要なライブラリファイルやバイナリファイルをコピーします。

/usr/local/src/origdevディレクトリ内の全ファイルをコピーします。ただし、/usr/local/src/origdev/bootディレクトリは不要なため、全体をコピーした後に/bootディレクトリだけを削除します。

# cd /usr/local/src/origdev
# cp -a * ../origlinux/rootsys/
# cd ../origlinux/rootsys
# rm -rf boot

▼実行と確認

# cd /usr/local/src/origdev
# cp -a * ../origlinux/rootsys/
# cd ../origlinux/rootsys
# ls
bin/   dev/  home/   lib/  proc/  sbin/  usr/
boot/  etc/  initrd  mnt/  root/  tmp/   var/
# rm -rf boot
# ls
bin/  etc/   initrd  mnt/   root/  tmp/  var/
dev/  home/  lib/    proc/  sbin/  usr/
#

初期化プロセスの設定

MyLinuxの初期化プロセスの実行に必要なファイルを準備します。初期化プロセスの実行に関する設定は、inittabファイルに記述します。

inittabファイルには、「rc.sysinit」「rc0」「rc1」「rc2」「rc3」「rc4」「rc5」「rc6」という8つのスクリプトが設定されています。rc.sysinitはシステム起動時に実行されるスクリプトです。rc0からrc6は各ランレベルの状態になったときに最初に実行されるスクリプトです。

/usr/local/src/origlinux/rootsys/etc/inittabファイルの設定

# デフォルトランレベル(ランレベル3を指定)
id:3:initdefault:

# ブート時の処理(/etc/rc.d/rc.sysinitを実行)
si::sysinit:/etc/rc.sysinit

# ランレベルごとの処理(各ランレベルで実行するスクリプトを指定)
l0:0:wait:/etc/rc0
l1:1:wait:/etc/rc1
l2:2:wait:/etc/rc2
l3:3:wait:/etc/rc3
l4:4:wait:/etc/rc4
l5:5:wait:/etc/rc5
l6:6:wait:/etc/rc6

# [Ctrl]+[Alt]+[Delete]キーを押したときの処理
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# 端末制御(ランレベル2~5で/sbin/mingettyを実行。終了されると再実行)
1:3:respawn:/sbin/agetty 38400 tty1
2:3:respawn:/sbin/agetty 38400 tty2

# シリアルコンソールにログインプロンプトを表示する場合#を外す
#T0:23:respawn:/sbin/agetty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/agetty -L ttyS0 9600 vt100

▼確認

# cat /usr/local/src/origlinux/rootsys/etc/inittab
# デフォルトランレベル(ランレベル3を指定)
id:3:initdefault:

# ブート時の処理(/etc/rc.d/rc.sysinitを実行)
si::sysinit:/etc/rc.sysinit

# ランレベルごとの処理(各ランレベルで実行するスクリプトを指定)
l0:0:wait:/etc/rc0
l1:1:wait:/etc/rc1
l2:2:wait:/etc/rc2
l3:3:wait:/etc/rc3
l4:4:wait:/etc/rc4
l5:5:wait:/etc/rc5
l6:6:wait:/etc/rc6

# [Ctrl]+[Alt]+[Delete]キーを押したときの処理
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# 端末制御(ランレベル2~5で/sbin/mingettyを実行。終了されると再実行)
1:3:respawn:/sbin/agetty 38400 tty1
2:3:respawn:/sbin/agetty 38400 tty2

# シリアルコンソールにログインプロンプトを表示する場合#を外す
#T0:23:respawn:/sbin/agetty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/agetty -L ttyS0 9600 vt100
#

起動スクリプトの作成

起動スクリプトをMyLinux用に作成します。作成したスクリプトは、/usr/local/src/origlinux/rootsys/etcディレクトリ以下に保存します。

rc.sysinitスクリプト

フラッシュメモリのアンマウントとホスト名の設定を行います。
# vi /usr/local/src/origlinux/rootsys/etc/rc.sysinit

#! /bin/bash
#
# フラッシュメモリのアンマウント
#
/bin/umount /FM
#
# ホスト名の設定
#
/bin/hostname mylinux

▼確認
# cat /usr/local/src/origlinux/rootsys/etc/rc.sysinit
#! /bin/bash
#
# フラッシュメモリのアンマウント
#
/bin/umount /FM
#
# ホスト名の設定
#
/bin/hostname mylinux
#

(注1)
rc.sysinitスクリプトには通常、ドライバの読み込みや各種デバイスの初期化、ファイルシステムのマウント、ホスト名の設定、スワップの有効化など、Linuxを稼働させるために必要な初期設定を記述します。

(注2)
フラッシュメモリのルートファイルシステムはメモリ上に転送されており不要なため、ここでアンマウントしています。

rcスクリプト

rc1からrc6は、各ランレベルの状態になったときに最初に実行されるスクリプトです。スクリプト名の最後の数値がランレベルを表しています。

これらのスクリプトには、各ランレベルで起動または終了させたいデーモン(サービス)の設定などを記述します。

MyLinuxでは、マルチユーザによるテキストログインのみを用いるため、ランレベルとしては「0」と「3」と「6」を準備します。

ただし、システム起動時に問題が発生したときに対処するためのシングルユーザモードや、将来的にはX Window Systemを用いたグラフィカルログインを利用することも考慮して、その他のランレベルも作成します。

rc0スクリプト

ランレベル0はシステム停止の状態です。そのため、rc0スクリプトでは「Halt Process......」というメッセージを表示させ、haltコマンドでPCを停止させます。

# vi /usr/local/src/origlinux/rootsys/etc/rc0

#! /bin/bash
#
echo "Halt Process......"
/sbin/halt

rc3スクリプト

ランレベル3は、マルチユーザ環境でテキストによるログインプロンプトを表示させます。rc3スクリプトには、MyLinuxの運用中に動作させておきたいデーモンの起動設定などを記述します。具体的には、システムとカーネルが出力するログを取得するデーモンの起動設定と、ネットワークを利用可能にする設定を記述します。

# vi /usr/local/src/origlinux/rootsys/etc/rc3

#! /bin/bash
#
echo "Syslogd now running....."
/usr/sbin/syslogd -m 0
/usr/sbin/klogd -x

echo "Loading modules......"
VRME='/usr/bin/uname -r'
NETDRV=$VRME/kernel/drivers/net
/usr/sbin/insmod /lib/modules/$NETDRV/via-rhine.o
/usr/sbin/insmod /lib/modules/$NETDRV/e100/e100.o
/usr/sbin/insmod /lib/modules/$NETDRV/3c59x.c
/usr/sbin/insmod /lib/modules/$NETDRV/tg3.o
/usr/sbin/insmod /lib/modules/$NETDRV/e1000/e1000.o
/usr/sbin/insmod /lib/modules/$NETDRV/mii.o
/usr/sbin/insmod /lib/modules/$VRME/kernel/lib/crc32.o
/usr/sbin/insmod /lib/modules/$NETDRV/8139too.o

echo "Making Network Devices......"
/sbin/ifconfig lo 127.0.0.1

# Fixed Address
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
/sbin/ifconfig eth0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255

echo "Script Completed......"

システムログを取得するデーモン(syslogd)とカーネルメッセージを取得するデーモン(klogd)を起動しています。この2つのデーモンを起動したことで、MyLinuxから出力される各種ログが収集可能になります。

ネットワーク設定を行っています。insmodコマンドで、ネットワークインタフェースカード(NIC)用のドライバを読み込んでいます。MyLinuxは、MyLinux開発マシンやMyLinux稼働マシンとして用意した複数のハードウエア上で動作させる必要があります。そのため、NIC用のドライバも複数読み込ませています。

ドライバを読み込ませたら、ifconfigコマンドやrouteコマンドを用いて、IPアドレスやサブネットマスクなどを設定します。

「lo」(ローカルループバック)という仮想的なネットワークインタフェースに「127.0.0.1」(ループバックアドレス)を設定します。
/sbin/ifconfig lo 127.0.0.1

この設定をルーティングテーブルに追加します。
sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

NICにIPアドレスやサブネットマスクを設定し、ネットワークを利用できるようにします。
/sbin/ifconfig eth0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255

NICは認識された順に、「eth0」や「eth1」という名前が割り当てられます。1枚しかNICを実装していなければ、eth0に割り当てられるため、eth0に対してIPアドレス「192.168.1.1」、サブネットマスク「255.255.255.0」、ブロードキャストアドレス「192.168.1.255」を設定しています。

rc6スクリプト

ランレベル6はシステム再起動の状態です。rc6スクリプトでは「Reboot Process.....」というメッセージを表示させ、rebootコマンドでPCを再起動させるようにします。

# vi /usr/local/src/origlinux/rootsys/etc/rc6

#! /bin/bash
#
echo "Reboot Process......"
/sbin/reboot

rc1、rc2、rc4、rc5スクリプト

MyLinuxではrc1、rc2、rc4、rc5スクリプトを使用するランレベルは使用しません。
そこで、これらのスクリプトはとりあえずrc3スクリプトと同様にしておきます。

# cd /usr/local/src/origlinux/rootsys/etc
# ln -s rc3 rc1
# ln -s rc3 rc2
# ln -s rc3 rc4
# ln -s rc3 rc5

ログとログイン時の設定

passwdファイルにユーザの設定を、profileファイルにログインシェルが起動したときに反映される設定を記述します。

さらに、syslog.confファイルとservicesファイルを作成してログやメッセージの取得に関する設定を行います。

これらのファイルは、/usr/local/src/origlinux/rootsys/etcディレクトリ以下に作成します。

passwdファイル

passwdファイルには、MyLinuxを利用するユーザを登録します。最低限、システム操作に関する全権限を持つユーザ「root」だけ を登録します。

# vi /usr/local/src/origlinux/rootsys/etc/passwd
root::0:0:root:/root:/bin/bash

ユーザー名、パスワード、ユーザーID、グループID、ユーザー情報(氏名など)、ホームディレクトリ、ログインシェルという順番に、「:」(コロン)で区切って記述します。ホームディレクトリとログインシェルはそれぞれユーザがログインしたときに表示あるいは実行されるディレクトリとシェルを登録します。

profileファイル

ログインシェルにbashが指定されていれば、profileファイルがそのログインシェルの初期設定になります。このprofileファイルを/etcディレクトリ以下に作成することで、すべてのユーザのログインシェルに対してこの初期設定を反映させることができます。

MyLinuxでは実行ファイルが格納されているディレクトリへのパスとプロンプトの表示形式の2つを設定します。
# vi /usr/local/src/origlinux/rootsys/etc/profile

# /etc/profile
#
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
PS1='[\u@\h]\$'
export PS1

パス設定は、パスを設定したいディレクトリ名を「:」で区切りながら文字列として環境変数PATHに代入します。

プロンプト設定は、プロンプトとして表示したい文字列を環境変数PS1に代入します。
プロンプトの設定では、「\u」がログインしているユーザ名、「\h」がホスト名などといった特殊な文字列を使用できます。
「'[\u@\h]\$'」と記述すると、rootでログインした場合には「[root@mylinux]#」というプロンプトが表示されます。

syslog.confとservicesファイル

syslog.confファイルとservicesファイルは、rc3スクリプトに記述したシステムログとカーネルメッセージを取得するデーモンに関する設定です。

●syslog.confファイルの設定
# vi /usr/local/src/origlinux/rootsys/etc/syslog.conf

*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
*.emerg *

・authprivとcronを除いたすべてのfacilityでinfo以上のメッセージを/var/log/messagesに出力します。
・authprivのfacilityはすべてのメッセージを/var/log/secureに出力します。
・すべてのfacilityでemergのメッセージをオンラインユーザのコンソールへ出力します。

●servicesファイルの設定
servicesファイルにsyslogdのサービスポート番号514を記述します。これにより、システムログを外部から一元管理できるようになります。

# vi /usr/local/src/origlinux/rootsys/etc/services

syslog 514/udp #sysklogd

スクリプトへの実行権限設定

作成したスクリプトに実行権限を与えます。
# cd /usr/local/src/origlinux/rootsys/etc
# chmod 755 inittab
# chmod 755 rc0
# chmod 755 rc3
# chmod 755 rc6
# chmod 755 rc.sysinit
# chmod 755 profile

MyLinuxをHDDから起動

完成したルートファイルシステムを用いて、MyLinuxをHDDから起動してみます。

システムを再起動し、Vine Linux 3.1のLILOの画面が表示されたら、mylinuxを選択してMyLinuxを起動します。

起動が成功すると、
mylinux login:
というログインプロンプトが表示されます。
ここで、rootと入力すれば、MyLinuxにログインすることができます。

mylinux_login_550.jpg

変更 2008.10.25
2008.07.06