阿部です。

On Fri, Feb 27, 2009 at 11:36:52AM +0900, moto kawasaki wrote
> 
> > あと、ちっちゃいシステムを比較的容易に構築できることですね。
> > 実際に、8MB のコンパクトフラッシュで起動するシステムや、
> > 1.44MB フロッピーディスクで起動するシステムなどを作成しました。
> 
> こういう小さなシステムに非常に興味があるんですが、なかなか手が出せずに
> います。もし良かったら、ポインタなどを紹介していただけませんか。

基本は、FreeBSD 標準の /usr/src/releases/picobsd 以下の情報です。

あとは、リンクがまだ有効だった

  ・miniBSD - reducing FreeBSD
    https://neon1.net/misc/minibsd.html

と

  ・m0n0wall
    http://m0n0.ch/wall/

ですね。他にも、ClosedBSD や TinyBSD などがあったのですが、
手元のブックマークのリンクは切れていました。
# Google で検索すると見つかるかもしれません。

 
> FreeBSD は 2.2.x のころから使っています。カーネルやシステムの再コンパ
> イルや ports 周りはだいたいできるんですが、(KERNCONF としての)GENERIC
> からオプションを削っていくところまでしか経験がありません。
> この先はきっとブートシーケンスや .hint ファイルと格闘するんだろうな、
> と思って手が出ないままです。

そこに行く前に、crunchgen(1) を使ってバイナリを統合するだけで、
結構小さくなります。そのあと、ports の archivers/upx を使って
さらに圧縮すると 1FD 6.x FreeBSD が作れます。

実は、USB-HDD と CD-ROM を利用できるようにした
HDD のデータ修復/削除ツールだったりします。

 
> i386 な機械でカーネルがブートして、/bin/sh が動く *だけ* みたいなシス
> テムって、どうやって作るんでしょうか?

上記の方法で、作りました。

ただ、/sbin/init に相当するプログラムは、

  /usr/src/release/picobsd/tinyware/oinit/oinit.c

をベースに改良しましたけど。このソースは小さいので改良しやすいです。
init の動作を知るのにも役に立ちます。
FreeBSD の /sbin/init のソースも読みやすいですが、
セキュリティや互換性を考慮してあるので若干大きいです。

あとは、boot loader のソースから余計なコードを削除すれば、
かなり小さくできます。C でプログラミングできる知識があれば大丈夫です。

それと、FreeBSD のソースコードを見ると分かりますが、
RELEASE_CRUNCH マクロの定義付きで make すると、
先の crunchgen(1) に対応した余計なコードを省いたバイナリを作成してくれます。

unionfs を使って /usr/src を自分のホームディレクトリのどこかに
マウントして作業すれば、システムのソースコードを壊すこと無く、
いろいろと実験できますよ。詳細は、man mount_unionfs を見て下さい。

確か、FreeBSD の /bin/sh が大きかったので ports の shells/v7sh も
利用した気がします。


> いや、もちろんもうちょっとコマンドなり daemon なりを追加しないと実用に
> ならないのはわかっているんですが、一回とことん小さくしてみたくて ^^;

ports にあるものも、ソースコードがあれば、crunchgen で統合できます。
モジュールなどを動的ロードするソフトウェアは、多少ソースコードを
修正しないとダメだったかもしれません。

ではでは。
-- 
阿部康一/Kouichi ABE (WALL)
koui...@mysticwall.com
http://www.MysticWALL.COM/ (Personal)
http://www.MagickWorX.COM/ (Business)

メールによる返信