#author("2024-12-16T08:34:15+09:00","default:kaw","kaw")
#author("2024-12-16T14:24:11+09:00;2024-12-16T08:34:15+09:00","default:kaw","kaw")
#navi(河豚板ガイド)
この章では河豚板の内部を理解したり、河豚板をベースに自分で開発を行う場合の情報を提供します。

#contents

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

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

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

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

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

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

-まず運用環境を整える。~
起動モード0で立ち上げて、各種設定やアプリケーションのインストール等を行い、目的の動作をするように環境構築をする。

-[[構築した環境をusbfadmにてUSBメモリなどに保存する>fg2:usbfadm_sync]]。

-[[モード3で起動し、保存した環境で立ち上がるようにnoasksファイルを設定する>fg3:autorun]]。

-ログイン操作なしでアプリケーションが立ち上がるように [[/etc/ttys>man:ttys.5]] ファイルを編集する。

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

#aname(livedvd_remaster)
*LiveDVDのリマスタリング [#q529c858]
[[USBメモリの容量に合わせてLiveUSBを作成する>fg3:liveusb_remaster]]では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ディスクイメージのリマスタリング [#obdef877]
この節では、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」の形式となります。

#aname(build_fuguita)
*河豚板の構築 [#t980ad46]

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

この節では、構築ツールを用いた河豚板の構築手順について説明します。

**構築環境 [#q0e90e43]

以下の説明では、次のような環境を想定しています。

-作業環境: OpenBSD 7.6 (最小ストレージ容量: 40GB)

-プラットフォーム: amd64 (推奨メモリ: 2GB以上)

-インターネットへの接続が可能

-作業はすべてrootユーザで実施

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

**OpenBSDのセットアップ [#t249f63d]

構築を行う前に、以下のような準備作業を行います。

-構築用PCに[[OpenBSD 7.6をインストール>https://www.openbsd.org/faq/faq4.html]]します。

-このOpenBSD上で、オンラインマニュアル[[release(8)>man:release.8]]に従ってOpenBSD全体の構築作業を行います。

>''【メモ】''~
''⇒''[[release(8)>man:release.8]]で説明されているように、構築されたシステムをインストールするためのファイルシステムがルートファイルシステムとは別に必要になります(release(8)で説明されている''DESTDIR''です)。~
このファイルシステムは、OpenBSDのインストール時に指定するようにして下さい。サイズとしては概ね4GB以上を確保します。

-[[ports(7)>man:ports.7]]システムについても、/usr/ports以下にファイルを取得・展開し、CVSでファイルを更新します。

**河豚板ビルドツールのセットアップ [#qcaf55ec]
-河豚板の構築には、OpenBSD本体の他に、rsyncコマンドとpvコマンドが必要です。パッケージからインストールします。
 # pkg_add rsync pv
 quirks-7.50:updatedb-0p0:(ok)
 quirks-7.50:(ok)
 Ambiguous: choose package for rsync
 a      0: <None>
        1: rsync-3.3.0p2
        2: rsync-3.3.0p2-minimal
 Your choice: 2
 rsync-3.3.0p2-minimal:(ok)
 pv-1.8.5:libiconv-1.17:(ok)
 pv-1.8.5:gettext-runtime-0.22.5:(ok)
 pv-1.8.5:(ok)
 The following new rcscripts were installed: /etc/rc.d/rsyncd
 See rcctl(8) for details.

[[河豚板配布サイト>FuguIta/Download]]のtoolsディレクトリから構築ツールfuguita-buildtools-7.6.tar.gzをダウンロードし、展開します。
 # tar xvzpf fuguita-buildtools-7.6.tar.gz

以下のコマンドを実行し、構築ツールの初期化を行います。
 # cd fuguita-buildtools-7.6
 # make init
これにより、構築に必要なディレクトリなどが作成されます。

OpenBSDの構築で生成したインストールセット (*76.tgz) を河豚板構築ツールのinstall_setsディレクトリにコピーします。
 # cp RELDIR/*76.tgz install_sets
''RELDIR''は、[[release(8)>man:release.8]]の中で説明されている、生成されたリリースセットが格納されるディレクトリです。
>''【メモ】''~
''⇒''インストールセット*76.tgzはOpenBSDのオフィシャルミラーからダウンロードして使用することもできます。~
ただしこの場合、作成される河豚板はそのリリースが公開された時点でのOpenBSDがベースになりますので、それ以降のパッチは適用されていません。ご注意下さい。~
また、この方法で河豚板を作成する場合でも、/usr/srcや/usr/xenocara以下にOpenBSDのソースコードを展開しておく必要があります。 

次に、河豚板のユティリティから呼び出されるrsync, rlwrap, pvコマンドのビルドを行います。
//次に、河豚板のユティリティから呼び出されるrsync, rlwrap, pvコマンドのビルドを行います。~
//このビルドには、以下の2つの方法があります:
//-A: ソースコードから独自にビルドし、/usr/fuguita 以下にインストール
//-B: portsシステムからビルドし、/usr/local 以下にインストール

//配布版の河豚板では、Aの方法を採用しています。

//以下にA、Bそれぞれのビルド手順を説明します。

//***A: コマンドを独自ビルド [#m81f29fc]
まず、ソースコードの取得を行います(xxHashは高速なハッシュ計算ライブラリです。rsync構築時に使用されます)。
//>まず、ソースコードの取得を行います(xxHashは高速なハッシュ計算ライブラリです。rsync構築時に使用されます)。
 # cd /usr/ports/net/rsync && make fetch
 # cd /usr/ports/sysutils/xxhash && make fetch
 # cd /usr/ports/misc/rlwrap && make fetch
 # cd /usr/ports/sysutils/pv && make fetch
取得したソースコードは/usr/ports/distfile下に置されます。~
取得したソースコードは/usr/ports/distfiles下に置されます。~
このソースコードをビルド用の作業ディレクトリにリンク(又はコピー)し、コンパイルを行います。
 # pkg_add gmake    (xxHashの構築に必要です)
 # cd (河豚板ビルドツールの置き場所)/fuguita-buildtools-7.6/fiopt/build
 # ln -s fiopt.mk Makefile
 # ln -s /usr/ports/distfiles/rsync-*.tar.gz .
 # ln -s /usr/ports/distfiles/xxHash-*.tar.gz .
 # ln -s /usr/ports/distfiles/rlwrap-*.tar.gz .
 # ln -s /usr/ports/distfiles/pv-*.tar.gz .
 # make RSYNC=rsync-3.3.0 XXHASH=xxHash-0.8.2 RLWRAP=rlwrap-0.46.1 PV=pv-1.8.5
makeに与える引数には、実際に取得した各ソースコードのバージョンを指定して下さい。~
ビルドが正常に完了すると、親ディレクトリにfiopt76.tar.gzが作成されます。
 # cd ..
 # ls -l
 total 1736
 drwxr-xr-x  2 root  wheel     512 Nov 15 02:58 CVS
 drwxr-xr-x  7 root  wheel     512 Dec 12 23:53 build
 -rw-r--r--  1 root  wheel  867970 Dec 12 23:53 fiopt76.tgz
これをinstall_setsディレクトリにリンク(又はコピー)します。
 # cd ../install_sets
 # ln -s ../fiopt/fiopt76.tgz .
 # cd ..
//***B: portsを使用してコマンドをビルド [#jcd3682d]
//>この方法では、portsツリーから作成したrsync, rlwrap, pv(とその依存物であるlz4, xz, zstd, libiconv, gettext-runtime)をinstall_pkgsディレクトリにリンク(又はコピー)します。~
// # cd install_pkgs
// # ln -s /usr/ports/packages/amd64/all/lz4-*.tgz .
// # ln -s /usr/ports/packages/amd64/all/xz-*.tgz .
// # ln -s /usr/ports/packages/amd64/all/zstd-*.tgz .
// # ln -s /usr/ports/packages/amd64/all/libiconv-*.tgz .
// # ln -s /usr/ports/packages/amd64/all/rsync-*.tgz .
// # ln -s /usr/ports/packages/amd64/all/rlwrap-*.tgz .
// # ln -s /usr/ports/packages/amd64/all/gettext-runtime-*.tgz . 
// # ln -s /usr/ports/packages/amd64/all/pv-*.tgz .
// # cd ..
//>>''【メモ】''~
//''⇒''これらのパッケージファイルも、OpenBSDのオフィシャルミラーからダウンロードして使用することもできます。~
//この場合も、河豚板のリリースが公開された時点でのものになりますので、ご注意下さい。

河豚板の構築に必要となるファイルやコマンドを準備したら、最後に、以下のコマンドを実行し、構築環境をセットアップします。
 # make setup

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

**河豚板の構築 [#a9ad6923]
最後に、河豚板を構築します。~
LiveDVDとLiveUSBの両方を構築するには、以下のようにします。
 # make all
また、
 # make livedvd
でLiveDVDのみが構築され、
 # make liveusb
ではLiveUSBのみが構築されます。

**構築後の調整 [#wfda33a7]
***mode0symlinks.cpio.gzの作成 [#hba46272]
このファイルは、LiveDVDをモード0で起動した場合の時間短縮を目的としています(このファイルがなくても、河豚板の起動自体に支障はありません)。

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

このファイルをmode0symlinks.cpio.gz.amd64というファイル名で構築ツールの lib ディレクトリに配置し、河豚板を再構築すると、mode0symlinks.cpio.gzが組込まれた河豚板が作成されます。

 # cp mode0symlinks.cpio.gz lib/mode0symlinks.cpio.gz.amd64
 # make clean
 # make all

***fuguita_sys_mbの調整 [#tfa3add4]
河豚板には、/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を再実行します。

 # vi lib/global.conf.amd64
 # make clean
 # make all

**Makefileのターゲット [#y240b797]
Makefile中の主なターゲットについて説明します。

:init|初期セットアップ: 構築に必要なディレクトリの作成などを行います
:setup|構築環境の最終セットアップ: 構築の材料となるファイルなどから、ブート関連やシステムのイメージファイルなどを作成します
:livedvd|LiveDVDのリリースファイル(FuguIta-*-*-*.iso.gz)を生成します
:liveusb|LiveUSBのリリースファイル(FuguIta-*-*-*.usb.gz)を生成します
:all|LiveDVDとLiveUSBの両方のリリースファイルを生成します

:kernclean|カーネルのオブジェクトファイルを削除します
:kernreset|カーネルのオブジェクトファイルの一部を削除します。カーネルのランダムリンクを再実行するために用います
:kern|カーネルをコンパイルします

:clean|リリースファイルやその中間生成物を削除します
:distclean|リリースファイル、中間生成物、構築材料を全て削除し、構築環境を初期状態に戻します

:dvd2usb|sysmedia-7.6-amd76.img.gzがない状態でLiveUSBを生成するために使用します。~
このターゲットを使用するにはOpenBSDの仮想化システム [[vmm/vmd>https://www.openbsd.org/faq/faq16.html]]が動作している必要があります。~
make livedvdでLiveDVDのリリースファイルを作成後、このターゲットを実行すると、作成したLiveDVDのVMが起動するので、rootでログイン後、usbfadmのnewdriveサブコマンドでLiveUSBを作成します。~
LiveDVDのVMをシャットダウンすると、引き続き今作成したLiveUSBのVMが起動するので、動作を確認します。~
LiveUSBのVMをシャットダウンすると、このLiveUSBのリリースファイルが生成されます。~
このLiveUSBのリリースファイルは[[sysmedia-7.6-amd76.img.gzとして利用でき>EBUG勉強会/20240525_FuguItaISO#content_1_13]]、以後、make liveusbが利用可能となります。

#navi(河豚板ガイド)

Front page   Edit Diff History Attach Copy Rename Reload   New Page list Search Recent changes   Help   RSS of recent changes