#author("2024-09-20T15:54:27+09:00","default:kaw","kaw")
#author("2024-11-12T22:09:04+09:00;2024-09-20T15:54:27+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 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.>fge2:usbfadm_sync]].
-[[Set the noasks file to start in mode 3 and start up in the saved environment>fge3: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)
*Build of FuguIta [#k4da0e7c]

Although the FuguIta is irregular, we publish the tools we use to build live systems. By using this construction tool, you can create the same thing as the FuguIta distribution.

In this section, we will explain the procedure for building the FuguIta. The following explanation assumes the following environment.

-Release: OpenBSD 7.5

-Platform: amd64

In other cases, please read the explanation as appropriate.

>''[Memo]''~
''⇒'' This build tool can generate ISO images for FuguIta LiveDVD on i386 and amd64 platforms, and raw disk images for FuguIta LiveUSB (LiveSD for Raspberry Pi 3/4) on arm64 platforms.

**Build procedure [#k69118a9]
All operations are performed with root privileges.

***Preparing the build environment [#a324287d]
-Please follow the OpenBSD online manual [[release(8)>man:release.8]] to build the entire OpenBSD.
-Also, use [[ports(7)>man:ports.7]] to create a package for rsync, rlwrap, and pv commands. 

[[Download >FuguIta/Download]] the FuguIta build tool '''tools-7.5.tar.gz''' and extract it.
 # tar xvzpf tools-7.5.tar.gz

Move to the top directory of the build tools.
 # cd tools-7.5

For arm64 platform, please also download '''sysmedia-7.5-arm64.img.gz''', which is supplied with tools-7.5.tar.gz, and place it in the top directory of the build tool ''without extracting it''.

Execute the following command to initialize the build tool.
  # make init
This will create the files and directories needed for the build.

*** Build FuguIta [#ja0ec8b4]
Copy the installation set (*75.tgz) generated by building OpenBSD to the install_sets directory of FuguIta build tool.
 # cp RELDIR/*75.tgz install_sets
'''RELDIR''' is the directory where generated release sets are stored, as described in [[release(8)>man:release.8]].
>''[Memo]''~
''⇒'' You can customize FuguIta by placing a file called '''site75.tgz''' under install_sets. This customization method complies with OpenBSD's https://www.openbsd.org/faq/faq4.html#site . ~
If '''install.site''' is included in site75.tgz, its contents will be added to /etc/rc.firsttime. ~
Please note that if the file sysmedia/fuguita-7.5-amd64.ffsimg exceeds 2GB as a result of building FuguIta by adding site75.tgz, the ISO image will not be created correctly.

Copy rsync, rlwrap, and pv (and its dependent: gettext-runtime and libiconv) created from the ports tree to the install_pkgs directory. ~
I also install rsync and pv in the build environment itself.
 # 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
>''[Memo]''~
''⇒''You can also download and use the installation set *75.tgz and package files rsync-*.tgz, etc. from the official OpenBSD mirror. ~
However, in this case, FuguIta created will be based on OpenBSD at the time the release was made public, so no later patches have been applied.~
Also, even if you create FuguIta using this method, you need to extract the OpenBSD source code under /usr/src or /usr/xenocara.

Next, run the following command to set up the build environment.
 # make setup
Finally, build FuguIta LiveDVD.
 # make

***Post-build adjustments [#o056da6d]
''Create mode0symlinks.cpio.gz''

This file is intended to save time when starting LiveDVD in mode 0 (even if this file is not present, there is no problem in starting FuguIta itself).

To create mode0symlinks.cpio.gz, boot the completed LiveDVD in mode 0 and run the gen_mode0sldir command as root with root privileges. After execution, a file called '''/etc/fuguita/mode0symlinks.cpio.gz''' will be created.

Place this file in the build tool's lib directory with the file name mode0symlinks.cpio.gz.amd64 and rerun make to create an ISO file containing mode0symlinks.cpio.gz.

''Adjust fuguita_sys_mb''

FuguIta has a file called '''/etc/fuguita/global.conf''', which contains settings related to the entire system as shown below.
 fuguita_sys_mb=1042  # 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
Among these, fuguita_sys_mb defines the size of the partition that stores the FuguIta system, and this value is used when remastering FuguIta LiveUSB.

The setting value of fuguita_sys_mb corresponds to the size of the livecd.iso file generated when building a LiveDVD, but it is safe to leave about 10MB in consideration of updates using the fiupdate utility.
 # echo $(( $(wc -c < livecd.iso)/1024/1024+10 ))
Write the values displayed by this command to the lib/global.conf.amd64 file and rerun make.

#aname(livedvd_remaster)
///*LiveDVDのリマスタリング [#q529c858]
///[[USBメモリの容量に合わせてLiveUSBを作成する>fge3: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のコンテンツをコピーします。

*LiveDVD remastering [#p3436b45]
[[Creating a LiveUSB according to the capacity of the USB memory>fge3:liveusb_remaster]] created a LiveUSB image file. Describes how to create an image.
>''[Memo]''~
''⇒''Since this operation deals with large size files, the size of mfs must be more than 2 gigabytes. ~
If mfs isn't enough, mount another recording device and work there.

This master_dvd.sh can be used with either a working FuguIta LiveDVD or FuguIta LiveUSB. ~
Below is an example of using remaster_dvd.sh.

First, create a working directory and copy the contents of LiveDVD/LiveUSB under sysmedia.

 fugu-demo# mkdir work
 fugu-demo# cd work
 fugu-demo# 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
 fugu-demo# ls -l
 total 8
 drwxr-xr-x  3 root  wheel  432 May 11 09:21 sysmedia
Run remaster_dvd.sh inside the copied sysmedia directory.
Basically that's all.
 fugu-demo# cd sysmedia
 fugu-demo# 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
 fugu-demo# 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)
After executing remaster_dvd.sh, an ISO image file will be created in the working directory.
 fugu-demo# 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
 fugu-demo# 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をカスタマイズすることができます。

There is a file called fuguita-6.9-amd64.ffsimg in sysmedia, which contains the FuguIta file tree.
You can customize your LiveDVD by modifying the files in this file tree.
 fugu-demo# vnconfig vnd0 fuguita-6.9-amd64.ffsimg
 fugu-demo# mount /dev/vnd0a /mnt
 fugu-demo# 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
 .... (Customization work) ...

Once customization is complete, close the filesystem image and remaster.
 fugu-demo# umount /mnt
 fugu-demo# vnconfig -u vnd0
 fugu-demo# remaster_dvd.sh
 mkhybrid 1.12b5.1
 Scanning .
 Scanning ./etc
   :
   :

* LiveUSB disk image remastering [#x2f9919d]
This section introduces how to create a LiveUSB disk image file.

Run 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->vnd0    ← Specify "img" to create an image file.
 Enter the name of device which FuguIta will be installed->img    ← Specify "img" to create an image file.
 
 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...
 $
A disk image file is created in the current directory by the above operations. The file name will be the same as the distributed one, "FuguIta-OPENBSD_VERSION-PLATFORM-RELEASE.img".

#navi(FuguItaGuide)

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