#author("2023-02-22T23:42:58+09:00","default:kaw","kaw")
#navi(FuguItaGuide)
This chapter provides information for understanding the internals of FuguIta and for doing your own development based on FuguIta.

#contents

///*FuguItaの技術情報
///FuguItaはOpenBSDをベースにしているので、その構成物のほとんどはOpenBSD関連の情報がそのまま利用できます。~
///
///公式のOpenBSDとは異なるFuguIta特有の部分については、このサイトの日本後トップページに[[公開資料の一覧>FuguIta#ebug_doc]]がありますので、そちらをご参照下さい。~
///(過去の資料の中には、現状のFuguItaと異っている部分もありますので、ご注意下さい)
///
///FuguItaのソースコードは https://github.com/ykaw/FuguIta にて参照できます。
///
///*FuguItaを専用マシンにする [#u1400b56]
///FuguItaは書込み可能なファイルをすべてメモリ上に持っているため、シャットダウン操作等を行わずいきなり電源を断にしたりしてもファイルシステムに不具合が発生することはありません。~
///また稼動中にusbfadmによるファイルの保存を行わない限りは、毎回同じ状態でシステムが立上ります。
///
///このような特徴を利用して、FuguItaをベースにして特定のアプリケーションを実行するための専用のマシン(ターンキーシステム: Turn Key System)などを作成することができます。
///
///このようなシステムを構築するためには、今までに説明してきたテクニックを組合せて使います;
///
///-まず運用環境を整える。~
///起動モード0で立ち上げて、各種設定やアプリケーションのインストール等を行い、目的の動作をするように環境構築をする。
///
///-[[構築した環境をusbfadmにてUSBメモリなどに保存する>fg2:usbfadm_sync]]。
///
///-[[モード3で起動し、保存した環境で立ち上がるようにnoasksファイルを設定する>fg3:autorun]]。
///
///-ログイン操作なしでアプリケーションが立ち上がるように [[/etc/ttys>man:ttys.5]] ファイルを編集する。
///
///これらの詳細な手順は、このサイトにある [[FuguItaでルータを作る ~ アプライアンスの製作例>EBUG勉強会/20221126_NSHonFuguIta]] や [[実用で使うFuguIta>EBUG勉強会/20140507_実用で使うFuguIta]] といった資料で説明しておりますのでご参照下さい。

* Fuguita technical information [#s90159e2]
FuguIta is based on OpenBSD, so most of its components are openBSD-related information. ~
For the specific parts of FuguIta that are different from the official OpenBSD, please refer to [[List of published documents>FuguIta#ebug_doc]] on the Japan Post top page of this site. ~
(Please note that some past materials may differ from the current FuguIta.)

FuguIta source code can be found at https://github.com/ykaw/FuguIta.

* Make FuguIta a dedicated machine [#pbeaebe1]
FuguIta has all writable files in memory, so even if the power is suddenly turned off without performing a shutdown operation, etc., there will be no problem with the file system. ~
Unless you save files with usbfadm during operation, the system will start up in the same state each time.

Using these characteristics, you can create a dedicated machine (Turn Key System) to run a specific application based on FuguIta.

To build such a system, we use a combination of the techniques described so far;

- First prepare the operational environment. ~
Start up with startup mode 0, perform various settings, install applications, etc., and build the environment to perform the desired operation.
-[[Usbfadm saves the built environment to a USB memory etc.>fg2:usbfadm_sync]].
-[[Set the noasks file to start in mode 3 and start up in the saved environment>fg3:autorun]].
- Edit the [[/etc/ttys>man:ttys.5]] file to launch the application without login.

These detailed procedures can be found on this site [[Creating a router with Fuguita - Example of making an appliance>EBUG勉強会/20221126_NSHonFuguIta]] and [[Practically used FuguIta>EBUG勉強会/20140507_実用で使う河豚板]] to use.

#aname(build_fuguita)
///*FuguItaのビルド [#u95a4ec1]
///FuguItaは不定期ではありますが、ライブシステム構築のために使用しているツールを公開しています。
///この構築ツールを使用することでFuguItaのISOイメージファイルを作成することができます。
///この節ではLiveDVDの構築方法を説明します。
///>''【メモ】''~
///''⇒''この構築法は、FuguIta7.1以降が対象です。
///
///**作業の前に [#j67c3ef4]
///-必要なもの
///--作業用OS (OpenBSDまたはFuguIta)
///
///--OpenBSDカーネルのソースツリー
///
///--rsync, rlwrap, pvのパッケージファイル
///
///--FuguItaの構築ツール
///
///-作業条件
///--前項の「必要なもの」で挙げたものはすべてOpenBSDの同じバージョン・同一のプラットフォーム用のものである必要があります。
///
///--全ての操作はroot権限で行います。
///
///**作業手順 [#m7e38ed1]
///以降、作成手順について例を示しながら解説します。~
///対象バージョンとしてOpenBSD 7.1、プラットフォームはamd64を想定しています。
///また、構築ツールを置くディレクトリを FIBLD と表記しています。この部分は実際のディレクトリ名で置き換えて下さい。
///
///-OpenBSDカーネルのソースコードを取得・展開
/// # tar -xzp -C /usr/src -f sys.tar.gz
///>''【メモ】''~
///''⇒''カーネルのソースツリーを最新の状態にアップデートするには、オンライン・マニュアル release(8) の「1. Update sources」を参照して下さい。
///
///-構築作業用ディレクトリFIBLDにFuguItaの構築ツールを展開
/// # mkdir -p FIBLD
/// # cd FIBLD
/// # ftp https://FUGUITA-MIRROR-SITE/tools/tools-7.1-amd64.tar.gz
/// # tar -xzp -C FIBLD -f tools-7.1.tar.gz
/// # mv tools-7.1-amd64
/// # rmdir tools-7.1-amd64
///
///以下の作業は、全て作業用ディレクトリFIBLDで行います。
///
///-FuguIta用のOpenBSDカーネルを生成
/// # cd FIBLD
/// # make kernconfig
/// # make kernclean
/// # make kern
///
///-OpenBSDのインストールセットを準備 ~
///構築ツールのinstall_setsディレクトリにOpenBSDのインストールセットを配置します。
/// # ( cd install_sets
///     for f in base comp game man xbase xfont xserv xshare; do
///         ftp $(cat /etc/installurl)/7.1/amd64/${f}71.tgz
///     done )
///
///-FuguItaに追加するパッケージをセットアップ ~
///構築ツールのinstall_pkgsディレクトリにOpenBSDのpackagesからrsync、rlwrap、pv を配置します。また、rsyncとpvは、ビルドを行うシステム自身にもインストールします。
/// # PKG_CACHE=FIBLD/install_pkgs pkg_add -n rsync rlwrap pv
/// # pkg_add install_pkgs/rsync*.tgz install_pkgs/pv*.tgz
///
///-FuguItaのファイルツリーを生成し、FuguIta 用に修正
/// # make stage
///FuguItaをカスタマイズする場合は、make stage実行後、FIBLD/stagingディレクトリの下のファイルツリーに改変を加えます。
///
///-このファイルツリーの内容に、FuguItaに内蔵させるイメージファイルを等化
/// # make sync
///
///-ISOイメージファイルの生成 ~
///ルートファイルシステムのイメージとカーネルを統合し、ブートローダを組み込みんでISOイメージファイルを生成します。
/// # make iso
///
///-ISOファイルイメージをリリース文字列付きのファイル名でGZIP圧縮
/// # make gz
///
///以上でFIBLD内にFuguIta-7.1-amd64-yyyymmddn.iso.gzが作成されます。nはビルド回数を示す番号で、FIBLD/revcount_cdmasterというファイル内に記録されます。
//////***Makefile ターゲット一覧
//////FuguItaのISOイメージ構築で用いられるmakeコマンドの引数(ターゲット)は以下の通りです。~
//////これらは全てディレクトリFI_BUILD_PATH/tools-6.7-amd64上で行う必要があります。
//////|make ターゲット|動作|h
//////|open-rdroot   |rdroot.img内のファイルシステムをrdrootにマウントします|
//////|open-media    |media.img内のファイルシステムをmediaにマウントします|
//////|open-fuguita  |media/fuguita-*-*.ffsimg内のファイルシステムをfuguitaにマウントします&br;(予めmake open-mediaを行う必要があります)|
//////|close-rdroot  |rdrootのマウントを解除します|
//////|close-media   |mediaのマウントを解除します&br;(予めmake close-fuguitaを行う必要があります)|
//////|close-fuguita |fuguitaのマウントを解除します|
//////|close-all     |構築環境の全てのマウントを解除します|
//////|boot          |rdrootをカーネルに組込み、ISOコンテンツ内にコピーします|
//////|hyb           |ISOコンテンツをISOイメージファイルに変換します|
//////|cdgz          |ISOイメージファイルを圧縮します|
///
/////>''【メモ】''~
/////''⇒''nabekenさんという方がFuguItaを基にして[[myFuguita>https://github.com/nabeken/myfuguita]]というライブシステムを作成されています。myFuguitaは、FuguItaの構築環境をOpenBSDの標準ビルドシステムに組み込み、amd64アーキテクチャで動作するように改良したものです。
///
///#aname(livedvd_remaster)
///*LiveDVDのリマスタリング [#q529c858]
///[[USBメモリの容量に合わせてLiveUSBを作成する>fg3:liveusb_remaster]]ではLiveUSBのイメージファイルを作成しましたが、この節ではremaster_dvd.shコマンドを用いて稼動中のFuguItaから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
/// vnd0: not in use
/// vnd1: not in use
/// vnd2: not in use
/// vnd3: not in use
/// vnd4: not in use
/// vnd5: covering /sysmedia/fuguita-6.4-amd64.ffsimg on sd1a, inode 9
/// ============================================================
/// Enter the name of device which FuguIta will be installed->vnd0    ←未使用のvnodeデバイスを指定
/// 
/// 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」の形式となります。
///
#navi(FuguItaGuide)

Front page   New Page list Search Recent changes   Help   RSS of recent changes