阿部です。
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)
[email protected]
http://www.MysticWALL.COM/ (Personal)
http://www.MagickWorX.COM/ (Business)