#author("2023-12-23T01:50:39+09:00;2023-12-21T09:01:37+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 FuguIta LiveDVD [#k4da0e7c]

We publish the tools we use to build the FuguIta live system, albeit irregularly.

This section explains the steps to build a FuguIta ISO image file.

This explanation assumes the following environment.

-Release: OpenBSD 7.4

-Platform: amd64

In other cases, please read the explanation as appropriate.

**Work 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.4.tar.gz''' and extract it.
 # tar xvzpf tools-7.4.tar.gz

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

For arm64 platform, please also download '''sysmedia-7.4-arm64.img.gz''', which is supplied with tools-7.4.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 (*74.tgz) generated by building OpenBSD to the install_sets directory of FuguIta build tool.
 # cp RELDIR/*74.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 '''site74.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 site74.tgz, its contents will be added to /etc/rc.firsttime. ~
Please note that if the file sysmedia/fuguita-7.4-amd64.ffsimg exceeds 2GB as a result of building FuguIta by adding site74.tgz, the ISO image will not be created correctly.

Copy rsync, rlwrap, and pv 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
 # 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 *74.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
 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    ← Specify an unused vnode device
 
 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   New Page list Search Recent changes   Help   RSS of recent changes