この章では河豚板の内部を理解したり、河豚板をベースに自分で開発を行う場合の情報を提供します。
河豚板は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を再実行します。
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のディスクイメージファイルを作成する方法を紹介します。
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」の形式となります。