この章では河豚板の内部を理解したり、河豚板をベースに自分で開発を行う場合の情報を提供します。

河豚板の技術情報

河豚板はOpenBSDをベースにしているので、その構成物のほとんどはOpenBSD関連の情報がそのまま利用できます。

公式のOpenBSDとは異なる河豚板特有の部分については、このサイトの日本語トップページに公開資料の一覧がありますので、そちらをご参照下さい。
(過去の資料の中には、現状の河豚板と異っている部分もありますので、ご注意下さい)

河豚板のソースコードは https://github.com/ykaw/FuguIta にて参照できます。

河豚板を専用マシンにする

河豚板は書込み可能なファイルをすべてメモリ上に持っているため、シャットダウン操作等を行わずいきなり電源を断にしたりしてもファイルシステムに不具合が発生することはありません。
また稼動中にusbfadmによるファイルの保存を行わない限りは、毎回同じ状態でシステムが立上ります。

このような特徴を利用して、河豚板をベースにして特定のアプリケーションを実行するための専用のマシン(ターンキーシステム: Turn Key System)などを作成することができます。

このようなシステムを構築するためには、今までに説明してきたテクニックを組合せて使います;

これらの詳細な手順は、このサイトにある 河豚板でルータを作る ~ アプライアンスの製作例実用で使う河豚板 といった資料で説明しておりますのでご参照下さい。

河豚板の構築

河豚板は不定期ではありますが、ライブシステム構築のために使用しているツールを公開しています。 この構築ツールを使用することで河豚板の配布物と同じものを作成することができます。

この節では、その河豚板の構築手順を説明します。以下の説明では、次のような環境を想定して説明をしています。

それ以外の場合は、説明を適宜読み替えて下さい。

【メモ】
この構築ツールでは、i386とamd64プラットフォームでは河豚板LiveDVDのISOイメージを、arm64プラットフォームでは河豚板LiveUSB(Raspberry Pi 3/4ではLiveSD)用の生ディスクイメージを生成できます。

作業手順

作業はすべてroot権限で行います。

構築環境の準備

河豚板の構築ツールtools-7.5.tar.gzをダウンロードし、展開します。

# tar xvzpf tools-7.5.tar.gz

構築ツールのトップディレクトリに移ります。

# cd tools-7.5

arm64プラットフォームの場合は、tools-7.5.tar.gzと同時に供給されているsysmedia-7.5-arm64.img.gzもダウンロードし、展開せずに、そのまま構築ツールのトップディレクトリに置いて下さい。

以下のコマンドを実行し、構築ツールの初期化を行います。

# make init

これにより、構築に必要なディレクトリなどが作成されます。

河豚板の構築

OpenBSDの構築で生成したインストールセット (*75.tgz) を河豚板構築ツールのinstall_setsディレクトリにコピーします。

# cp RELDIR/*75.tgz install_sets

RELDIRは、release(8)の中で説明されている、生成されたリリースセットが格納されるディレクトリです。

【メモ】
install_setsの下にsite75.tgzというファイルを置くと、河豚板をカスタマイズすることができます。このカスタマイズ方法はOpenBSDのhttps://www.openbsd.org/faq/faq4.html#site に準拠しています。
install.siteがsite75.tgzに含まれている場合、その内容が/etc/rc.firsttimeに追加されます。
site75.tgzを加えて河豚板を構築した結果、sysmedia/fuguita-7.5-amd64.ffsimgというファイルが2GBを超えますと、ISOイメージが正しく作成されなくなります。ご注意下さい。

portsツリーから作成したrsync, rlwrap, pv(とその依存物であるgettext-runtimeとlibiconv)をinstall_pkgsディレクトリにコピーします。
また、rsyncとpvは構築環境自体にもインストールします。

# cp /usr/ports/packages/amd64/all/rsync-*.tgz install_pkgs
# cp /usr/ports/packages/amd64/all/rlwrap-*.tgz install_pkgs
# cp /usr/ports/packages/amd64/all/pv-*.tgz install_pkgs
# cp /usr/ports/packages/amd64/all/gettext-runtime-*.tgz install_pkgs
# cp /usr/ports/packages/amd64/all/libiconv-*.tgz install_pkgs
# pkg_add -D unsigned /usr/ports/packages/amd64/all/rsync-*.tgz
# pkg_add -D unsigned /usr/ports/packages/amd64/all/pv-*.tgz

【メモ】
インストールセット*75.tgzやパッケージファイルrsync-*.tgzなどはOpenBSDのオフィシャルミラーからダウンロードして使用することもできます。
ただしこの場合、作成される河豚板はそのリリースが公開された時点でのOpenBSDがベースになりますので、それ以降のパッチは適用されていません。ご注意下さい。
また、この方法で河豚板を作成する場合でも、/usr/srcや/usr/xenocara以下にOpenBSDのソースコードを展開しておく必要があります。

次に、以下のコマンドを実行し、構築環境をセットアップします。

# make setup

最後に、河豚板LiveDVDを構築します。

# make

構築後の調整

mode0symlinks.cpio.gzの作成

このファイルは、LiveDVDをモード0で起動した場合の時間短縮を目的としています(このファイルがなくても、河豚板の起動自体に支障はありません)。

mode0symlinks.cpio.gzを作成するには、完成したLiveDVDをモード0で起動し、root権限でgen_mode0sldir コマンドを root で実行します。実行後、/etc/fuguita/mode0symlinks.cpio.gzというファイルが作成されます。

このファイルをmode0symlinks.cpio.gz.amd64というファイル名で構築ツールの lib ディレクトリに配置し、make を再実行すると、mode0symlinks.cpio.gz入りのISOファイルが作成されます。

fuguita_sys_mbの調整

河豚板には、/etc/fuguita/global.confというファイルがあり、以下のようにシステム全体にかかわる設定を行っています。

fuguita_sys_mb=1122  # size of sysmedia.img
newdrive_defswap=16M # default swap size at usbfadm newdrive
memfstype=mfs        # 'mfs' or 'tmpfs'
mfs_max_mb=30720     # mfs hard limit - 30GB

このうち、fuguita_sys_mbは河豚板のシステムを格納するパーティションのサイズを定義しており、河豚板LiveUSBをリマスタリングする場合などにこの値が使われます。

fuguita_sys_mbの設定値は、LiveDVD構築時に生成されるlivecd.isoファイルのサイズに相当しますが、fiupdateユーティリティをによるアップデートを考慮し、10MBほど余裕をもたせると安全です。

# echo $(( $(wc -c < livecd.iso)/1024/1024+10 ))

このコマンドで表示された値をlib/global.conf.amd64ファイルに書込み、makeを再実行します。

LiveDVDのリマスタリング

USBメモリの容量に合わせてLiveUSBを作成するではLiveUSBのイメージファイルを作成しましたが、この節ではremaster_dvd.shコマンドを用いて稼動中の河豚板からLiveDVDのISOイメージを作成する方法を説明します。

【メモ】
この作業は大きなサイズのファイルを扱うので、mfsのサイズは2ギガバイト以上必要です。
mfsでは足りない場合、他の記録デバイスをマウントしてそちらで作業します。

このmaster_dvd.shは、動作中のFuguIta LiveDVD、あるいはFuguIta LiveUSBのどちらでも使用可能です。
以下にremaster_dvd.shの使用例を示します。

まず、作業用ディレクトリを作成し、sysmedia以下にあるLiveDVD/LiveUSBのコンテンツをコピーします。

# mkdir work
# cd work
# cp -av /sysmedia .
/sysmedia -> ./sysmedia
/sysmedia/boot -> ./sysmedia/boot
/sysmedia/bsd-fi -> ./sysmedia/bsd-fi
/sysmedia/bsd-fi.mp -> ./sysmedia/bsd-fi.mp
/sysmedia/boot.catalog -> ./sysmedia/boot.catalog
/sysmedia/cdboot -> ./sysmedia/cdboot
/sysmedia/cdbr -> ./sysmedia/cdbr
/sysmedia/etc -> ./sysmedia/etc
/sysmedia/etc/boot.conf -> ./sysmedia/etc/boot.conf
/sysmedia/etc/random.seed -> ./sysmedia/etc/random.seed
/sysmedia/fuguita-6.9-amd64.ffsimg -> ./sysmedia/fuguita-6.9-amd64.ffsimg
# ls -l
total 8
drwxr-xr-x  3 root  wheel  432 May 11 09:21 sysmedia

コピーされたsysmediaディレクトリ内でremaster_dvd.shを実行します。 基本的にはこれだけです。

# cd sysmedia
# ls -l
total 2008728
-rw-r--r--  1 root  wheel	90496 May 10 20:57 boot
-rwxr--r--  1 root  wheel	 2048 May  9 12:31 boot.catalog
-rw-r--r--  1 root  wheel    10273019 May 10 21:04 bsd-fi
-rw-r--r--  1 root  wheel    10302063 May 10 21:04 bsd-fi.mp
-rw-r--r--  1 root  bin		91668 May 10 01:31 cdboot
-rw-r--r--  1 root  bin		 2048 May 10 01:31 cdbr
drwxr-xr-x  2 root  wheel	   96 Apr 17  2014 etc
-rw-r--r--  1 root  wheel  1007681536 May 10 21:08 fuguita-6.9-amd64.ffsimg
# remaster_dvd.sh
mkhybrid 1.12b5.1
Scanning .
Scanning ./etc

Size of boot image is 4 sectors -> No-emulation CD boot sector
Total translation table size: 0
Total rockridge attributes bytes: 1111
Total directory bytes: 2048
Path table size(bytes): 22
502200 extents written (980 Mb)

remaster_dvd.shの実行が完了すると、作業用ディレクトリにISOイメージファイルが作成されています。

# ls -l ..
total 2008808
-rw-r--r--  1 root  wheel  1028505600 May 14 02:34 FuguIta-6.9-amd64-202105141.iso
drwxr-xr-x  3 root  wheel	  384 May 14 02:34 sysmedia
# ls -l
total 2008720
-rw-r--r--  1 root  wheel	90496 May 10 20:57 boot
-rwxr--r--  1 root  wheel	 2048 May 14 02:34 boot.catalog
-rw-r--r--  1 root  wheel    10273019 May 10 21:04 bsd-fi
-rw-r--r--  1 root  wheel    10302063 May 10 21:04 bsd-fi.mp
-rw-r--r--  1 root  bin		91668 May 10 01:31 cdboot
-rw-r--r--  1 root  bin		 2048 May 10 01:31 cdbr
drwxr-xr-x  2 root  wheel	   96 Apr 17  2014 etc
-rw-r--r--  1 root  wheel  1007681536 May 10 21:08 fuguita-6.9-amd64.ffsimg

sysmedia中にfuguita-6.9-amd64.ffsimgというファイルがありますが、この中にFuguItaのファイルツリーが格納されています。 このファイルツリー内のファイルを修正することで、LiveDVDをカスタマイズすることができます。

# vnconfig vnd0 fuguita-6.9-amd64.ffsimg
# mount /dev/vnd0a /mnt
# ls -l /mnt
total 52
-rw-r--r--   1 root  wheel   578 May  7 17:43 .cshrc
-rw-r--r--   1 root  wheel   468 May  7 17:43 .profile
drwxr-xr-x   2 root  wheel   512 May  7 17:43 altroot
drwxr-xr-x   2 root  wheel  1024 May  7 17:46 bin
drwxr-xr-x   2 root  wheel   512 May  8 04:16 dev
drwxr-xr-x  23 root  wheel  1536 May  8 04:35 etc
drwxr-xr-x   2 root  wheel   512 May  7 17:43 home
drwxr-xr-x   2 root  wheel   512 May  7 17:43 mnt
drwx------   3 root  wheel   512 May  8 04:35 root
drwxr-xr-x   2 root  wheel  1536 May  7 17:46 sbin
lrwxrwx---   1 root  wheel    11 May  7 17:43 sys -> usr/src/sys
drwxrwxrwt   2 root  wheel   512 May  8 04:19 tmp
drwxr-xr-x  14 root  wheel   512 May  8 04:09 usr
drwxr-xr-x  23 root  wheel   512 May  7 17:43 var
.... (カスタマイズ作業) ...

カスタマイズが完了したら、ファイルシステムイメージを閉じ、リマスタリングを行います。

# umount /mnt
# vnconfig -u vnd0
# remaster_dvd.sh
mkhybrid 1.12b5.1
Scanning .
Scanning ./etc
  :
  :

LiveUSBディスクイメージのリマスタリング

この節では、LiveUSBのディスクイメージファイルを作成する方法を紹介します。

usbfadm の newdrive を実行します;

? : ? ->newdrive

Please make sure the device inserted.
Then press ENTER ->

==== disk(s) and vnode devices	============================
sd0 at scsibus1 targ 0 lun 0: <ATA, Hitachi HTS72757, JF4O>
sd0: 715404MB, 512 bytes/sector, 1465149168 sectors
sd1 at scsibus2 targ 1 lun 0: <UFD 3.0, Silicon-Power32G, 1.00>
sd1: 29624MB, 512 bytes/sector, 60669952 sectors
sd2 at scsibus5 targ 1 lun 0: <BUFFALO, USB Flash Disk, 4000>
sd2: 7788MB, 512 bytes/sector, 15950592 sectors

img: create FuguIta raw disk image on current directory
============================================================
Enter the name of device which FuguIta will be installed->img     ←デバイス名として「img」を指定

Enter size of a vnode device file.
You can add suffix K, M, G or T (otherwise considered 'bytes').
->2g                                                              ←イメージファイルのサイズを
                                                                    指定
2048+0 records in
2048+0 records out
2147483648 bytes transferred in 3.076 secs (698129518 bytes/sec)

Disk: vnd0	geometry: 41943/1/100 [4194304 Sectors]
Offset: 0	Signature: 0x0
	    Starting	     Ending	    LBA Info:
 #: id	    C	H   S -	     C	 H   S [       start:	     size ]
-------------------------------------------------------------------------------
 0: 00	    0	0   0 -	     0	 0   0 [	   0:		0 ] unused
 1: 00	    0	0   0 -	     0	 0   0 [	   0:		0 ] unused
 2: 00	    0	0   0 -	     0	 0   0 [	   0:		0 ] unused
 3: 00	    0	0   0 -	     0	 0   0 [	   0:		0 ] unused

Select partition type:
  1: [MBR]
  2:  GPT
  3:  Hybrid (not recommended if you wish modify partitioning later)
->
~ 略 ~
** Phase 5 - Check Cyl groups
3 files, 3 used, 386996 free (20 frags, 48372 blocks, 0.0% fragmentation)

? : ? ->bye

Bye bye...
$

以上の操作でカレントディレクトリ上にディスクイメージファイルが作成されます。ファイル名は配布されているものと同じ、「FuguIta-<OpenBSDバージョン>-<プラットフォーム>-<リリース>.img」の形式となります。


recent(50)
2024-10-02 2024-09-22 2024-09-20 2024-08-25 2024-08-22 2024-07-31 2024-07-23 2024-05-24 2024-04-22 2024-04-09 2024-02-17 2024-01-31 2023-11-05 2023-10-04 2023-08-28 2023-06-03 2023-05-30 2023-05-01 2023-04-23 2023-04-13 2023-04-12 2023-03-17 2023-02-24 2023-02-23 2023-02-22 2022-12-23 2022-12-13 2022-11-17 2022-11-15 2022-11-14 2022-11-13

Front page   Edit Freeze Diff History Attach Copy Rename Reload   New Page list Search Recent changes   Help   RSS of recent changes
Last-modified: 2024-09-20 (Fri) 15:36:21