#author("2023-02-14T12:44:50+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]] といった資料で説明しておりますのでご参照下さい。 /// ///#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)