匿名

差分

TinyBSD

10,071 バイト追加, 2007年8月2日 (木) 16:53
TinyBSD - CFにFreeBSDシステムを構築する方法を作成
=TinyBSD=

== TinyBSD とは ==
コンパクトフラッシュで起動する FreeBSD を作成するためのシステム

TinyBSD は FreeBSD ver5(RELENG_5), ver6(RELENG_6), ver7(CURRENT) の組み込みシステムを作成するための
一連のシェルスクリプトです。

TinyBSD は「簡単に」「素早く」「100%完成出来る」ように作られています。

== TinyBSD の作成方法==

TinyBSD を用いたコンパクトフラッシュで起動する組み込みシステムの作成方法です。


===TinyBSD 作成のためのファイル構成===

TinyBSD の作成するための設定ファイルは /usr/src/tools/tools/tinybsd/conf 以下に
あります。スクリプト自体は /usr/src/tools/tools/tinybsd/tinybsd 以下にあります。

簡単にイメージを調整するシステムは PicoBSD 由来の簡単なシステムでできており、
コンパイルを行うシステムは NanoBSD 由来のシステムでできています。

# ls /usr/src/tools/tools/tinybsd/conf
bridge/ default/ firewall/ minimal/ vpn/ wireless/ wrap/

用途にあわせた6つのサンプルがあらかじめ準備してあります。
3つの中心となるファイルがそれぞれのディレクトリにあります。
それらのファイルは

# ls /usr/src/tools/tools/tinybsd/conf/default
TINYBSD etc/ tinybsd.basefiles


===ファイル名:TINYBSD ===
PicoBSD というファイルが以前 kernel コンパイルの為の設定ファイルであったように
TINYBSD という kernel コンパイルの為の設定ファイルとしています。

# more TINYBSD

machine i386
cpu I486_CPU
cpu I586_CPU
cpu I686_CPU
ident TINYBSD

#To statically compile in device wiring instead of /boot/device.hints
#hints "GENERIC.hints" #Default places to look for devices.
...

ご覧のようにこれはあなたのシステムで kernel のコンパイルをするためのファイルです。
ご自身の必要に応じて必要な設定を有効・無効に設定して下さい。


=== ファイル名 tinybsd.basefiles: ===

PicoBSD では crunch.conf というファイルに新しいシステムで必要なファイル(コマンド)を
記述していました。TINYBSD では組込用のシステムに必要な全てのファイルを記述しています。
必要に応じて内容を追加・削除して下さい。

# more tinybsd.basefiles
# ${WORKDIR}/boot の中身
boot/boot0
boot/boot1
boot/boot2
boot/defaults/loader.conf
boot/device.hints
...
# ${WORKDIR}/bin の中身
bin/[:bin/test
bin/cat
bin/chflags
bin/chio
bin/chmod
...

もしも /usr/sbin 以下のバイナリに "setkey" コマンドを設定する場合には
/usr/sbin 以下の部分に以下の用に追加をします。

usr/sbin/pw
usr/sbin/pwd_mkdb
usr/sbin/setkey ← 追加した部分


etc/: ここには作成するシステムに取り入れたい /etc 以下の設定ファイルを記述します。




===スクリプト tinybsd: ===
# ls /usr/src/tools/tools/tinybsd/tinybsd
tinybsd


このスクリプトが全てのシステムを作成します。
ほとんど修正をする必要はないでしょう。このスクリプトのアイデアは
作業ディレクトリを作成し、tinybsd.basefiles に記述されたシステムを作成します。
次に TINYBSD ファイルで定義されたファイルに基づいて新しいカーネルを作成します。
続いて依存しているバイナリファイルを作成します。
その後で /etc ディレクトリをテンポラリディレクトリに作成し、
/usr/src/tools/tools/tinybsd/conf/YOURCHOICE/etc/ 以下に記述している
rc.conf、fstab ファイルのようないくつかの重要な設定ファイルを書き込みます。

最終的にスクリプトを実行する際にコマンドラインから指定したメディアの情報をもとにした
完全なイメージを作成します。そして、テンポラリディレクトリの情報をマウントされた /mnt
以下のイメージに書き込みを行います。


== TinyBSD の実行==
どのように動作がするかという説明が住んだので、イメージの作成をしましょう。
以下の手順で行います。


1)あらかじめ設定されたイメージで利用したいものを選びます。
2)TINYBSD kernel ファイルを編集し、必要なオプションを追加・削除します。
3)tinybsd.basefiles ファイルを編集し、必要なバイナリを追加・削除します。
4)/etc ディレクトリで必要な設定ファイルを conf/YOURIMAGE/etc 以下にコピーします。
5)作成するメディアの情報をあわせます。
それによりシステム上にデバイスが作成され diskinfo(8)が必要とする情報を取り込みます。

# diskinfo -v /dev/ad2
ad2
512 # sectorsize
20060135424 # mediasize in bytes (19G)
39179952 # mediasize in sectors
38869 # Cylinders according to firmware.
16 # Heads according to firmware.
63 # Sectors according to firmware.

イメージを作成するにはセクタで表したメディアのサイズ、ヘッダ、セクターの情報が必要となります。
オプションとして作成されるイメージファイルの名前を指定することも可能です。
もしも、名前を指定していない場合には tinybsd.bin というファイルが作成されます。

これらの情報は diskinfo コマンドを通じて得ることができます。

私たちが行うことは tinybsd コマンドを実行するだけです。
3つのパラメータと1つのオプションが存在することを覚えていて下さい。
もしも必要なパラメーターがない場合には以下のような警告が表示されます。

# /usr/src/tools/tools/tinybsd/tinybsd
Woops!
Usage: tinybsd <mediasize in sectors> <heads according to firmware>
<sectors according to firmware> <conf> [<tinybsd image name>]

Example: tinybsd 62592 4 32

or

/usr/src/tools/tools/tinybsd/tinybsd 62592 4 32 wireless

コンパクトフラッシュに対してdiskinfo(8) -v コマンドを実行するとCFディスクに
対する正しい情報を取得することができます。



正しくパラメータが設定されている場合には以下のようになります。

# /usr/src/tools/tools/tinybsd/tinybsd 39179952 16 63 wireless
Creating directory hierarchy...
./bin missing (created)
./boot missing (created)
./boot/defaults missing (created)
./boot/kernel missing (created)
./boot/modules missing (created)
./dev missing (created)
./etc missing (created)
...

最後に作成したイメージをコピーします。

# dd if=/usr/src/tools/tools/tinybsd/tinybsd.bin of=/dev/ad2


作成した新しい組み込みシステムを起動してログインしてみましょう。
初期状態では root パーティションは読み込み専用モードでマウントされているので
何か設定をしたい場合には読み書き専用モードに変更する必要があります。

初期状態を読み込み専用にすることによってディスクへの書き込みを節約し、電源断による
データの損失を予防しています。書き込みをするためにマウントをする場合には次のようにします。

# mount -u -o rw /

一度マウントした後で再び読み込み専用モードにする場合には次のようにします。

# mount -u -o ro /

ログインをして最初に行うことは時刻を設定することと root パスワードの設定です。
初期状態では root のパスワードとしては何も設定していません。

df(1) コマンドを実行した場合には次のようなパーティションが表示されます。


# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0a 29359 19446 7565 72% /
devfs 1 1 0 100% /dev
procfs 4 4 0 100% /proc
/dev/md0 3694 114 3286 3% /var
/dev/md1 19566 6 17996 0% /tmp

というわけで /var と /tmp ファイルは /dev/md0 と /dev/md1 というメモリファイル上に
上にマウントされています。これは /var と /tmp ディレクトリについては書き込みが必要
という理由だからです。システムが読み込み専用に作成している以上、書き込みができないという
問題に遭遇します。そのためにメモリディスクを利用するという方法をとりました。

言い換えれば、システムを再起動させた場合にはそれらのディレクトリにある内容は
/var/log を含めて失われてしまいます。もしもそれらのディレクトリの内容を含めて
保存をする必要がある場合には他のマシンにログを転送するという方法をお勧めします。

/var パーティションをメモリディスクとして起動時に作成するスクリプトは
"varmfs="YES"" としてrc.conf ファイルに書かれています。
/var ディレクトリをメモリデバイスとしてマウントするだけでなく必要なサブディレクトリを
作成します。メモリディスクのサイズは 32MB で作成されますが通常の使い方では充分でしょう。
しかしながらもしもこの設定を変更する場合には /etc/rc.conf ファイルに書かれている

varsize="32m"

をあなたが必要としているファイルサイズ(単位は メガバイト)に書き換えて下さい。
/var ファイルシステムにマシンのメモリ全体を割り当ててしまわないよう注意しましょう。