TinyBSD
目次
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 ファイルシステムにマシンのメモリ全体を割り当ててしまわないよう注意しましょう。