FreeBSDをフロッピーディスク1枚で 動かすためのパッケージ

田岡智志
広島大学工学部第二類
http://www.infonets.hiroshima-u.ac.jp/~taoka/

1996年10月11日

はじめに

 

本パッケージは,FreeBSDを1枚のフロッピーディスクで動かすことのできるフロッ ピーディスク(以下,1FD BSDと省略)を作成するためのものです.PC/AT版と98 版があり,PC/AT版は2.2-961014-SNAP, 2.2-960801-SNAPと2.1.5-RELEASE,98版 は2.1.0-RELEASEのkernelとコマンド群を作ってあります.1FD BSDでは,kernel をkzipと言うコマンドにより圧縮し,またコマンド群は1つのcrunched binary fileとして作成した後,それをgzipで圧縮してあります.1FD BSD附属のkernel は,kernelのコンフィグファイルGENERICを元に作っています.但し,NFSサーバ にはなれません(クライアントにはなれます).また,1FD BSDで使えるコマン ドは以下の通りです.

マルチユーザモードで立ち上げパスワードを入力しloginできたり,pppを使っ てtelnetしたり,等ができます.1FD BSDで使うコマンドの追加,削除をするこ とも可能です(4.2章参照).

(注意)suコマンドはきちんと動いていません.psコマンドは,オプションuを付ける ことができません.passwdは1FD BSDの空き容量が少ないためこのままでは実行 できません.カーネルを作り直して小さくするか,または,コマンドを少なく しなければなりません.

(注意)本パケージで作ったFreeBSDでは,パスワードの暗号化に(FreeBSDでデフォル トの)md5方式を使うように1FD BSDのコマンドをコンパイルしています.des方 式を使いたいならば,$1FD_BSD/floppy/bin/shを$1FD_BSD/des/shと入れ 換えてから1FD BSDを作り直して下さい.(4.2章参照).

(注意)PC/AT版2.1.5-RELEASE,98版はあまりテストしていません.

本パッケージの内容

ディレクトリ image:
1FD BSDのイメージファイルを格納(md5方式)

ディレクトリ floppy:
1FD BSDにコピーする基本キット(このディレクト リ以下はフロッピーディスクにコピーされます)

ディレクトリ kernel_conf:
floppy中のkernelを作ったconfigファイルを格納

ディレクトリcrunch:
1FD BSD中のコマンド作成のための作業ディレ クトリ

ディレクトリ script:
Makefile中で使うシェルスクリプトを格納

ディレクトリ des:
des方式の暗号化ライブラリをリンクしたコマンドと1FD BSDのイメージファ イルを格納(PC/AT版2.2-961014-SNAP, 2.1.5-RELEASE,98版は作っ ていません)

1FD BSD作成方法

1FD BSDのイメージファイルを用いた作成(UNIXマシーン:FreeBSDでなくて もできるはずです)

  1. スパーユーザになる.
     % su
    

  2. このパッケージをFreeBSD上で展開する.
     # zcat 1FD_BSD1.1.tar.gz | tar xvf -
    
    もし,GNUのtarがあれば,
     # gtar xvfz 1FD_BSD1.1.tar.gz
    
    とする.それから,新たにできるディレクトリ1FD_BSDに降りる.
     # cd 1FD_BSD
    
    (注意)以下では,このディレクトリを$1FD_BSDと表します.

  3. 2HD(1.44M)フォーマットのフロッピーを用意する(98版は2HC(1.2M)のフ ロッピー).

  4. イメージをフロッピーに転送する.
     # dd if=image/boot.flp of=/dev/rfd0
    
    98版は
     # dd if=image/boot.flp of=/dev/rfd0 bs=15k count=80
    
    とします.もし,パスワードの暗号化としてdes方式を使いたければ,
     # dd if=des/boot.flp of=/dev/rfd0
    
    とする.

1FD BSDのイメージファイルを用いない作成方法(FreeBSD上に限る)

  1. パッケージの展開後,$1FD_BSDに降りる.
     # cd $1FD_BSD
    

  2. スパーユーザになる.
     # su
    

  3. フロッピーをドライブに挿入する(フォーマットしてなくても結構 です).

  4. makeを実行.
     # make
    

  5. フロッピーを取り出す.

(注意)フロッピーディスクをマウントするポイントは/mntとしています.これ を変更したいならば,$1FD_BSD/Makefile中の変数MOUNT_PTを変更して 下さい.

1FD BSD上でより良い環境の作り方

kernelの作成方法

PC/AT版は$1FD_BSD/kernel_conf/EMERGENCYを /sys/i386/confに,98版は$1FD_BSD/kernel_conf/EMERGENCY98を /sys/pc98/confにコピーし,編集する. 編集の方法は,FreeBSDに附属している

/usr/share/doc/handbook/handbook.ascii
などを参考にして下さい.実行例はPC/AT版は
 # cd $1FD_BSD
 # cp kernel_conf/EMERGENCY /sys/i386/conf
 # cd /sys/i386/conf
 # vi EMERGENCY
 # config EMERGENCY
 # cd ../../compile/EMERGENCY
 # make depend; make
となり,98版は
 # cd $1FD_BSD
 # cp kernel_conf/EMERGENCY98 /sys/pc98/conf
 # cd /sys/pc98/conf
 # vi EMERGENCY98
 # ./config EMERGENCY98
 # cd ../../compile/EMERGENCY98
 # make depend; make
となります.

(注意)コンフィグレーションファイルEMERGENCY中の
 pseudo-device   gzip            # Exec gzipped a.out's
は消さないで下さい.

次に,作成したkernelをkzipと言うコマンドで圧縮し,kernel.kzができます.

 # kzip kernel
 # ls -l kernel kernel.kz 
 -rwxr-xr-x  1 root  bin  1266947 Sep  4 15:47 kernel
 -rwxr-xr-x  1 root  bin   578646 Sep  4 15:47 kernel.kz
これを,$1FD_BSD/floppyへkernelと言う名でコピーします.
 # cp kernel.kz $1FD_BSD/floppy/kernel
この後,1FD BSDを作って下さい.既に作っている場合は,そのフロッピーをマ ウントした後,kernel.kzをkernelと言う名でフロッピーへコピーすれば良いで しょう.なお,kzipを用いて圧縮したkernelには制限が付きます.詳しくは, 5章を参考にして下さい.

(98版の注意)kzipは/usr/lib/kzhead.oと/usr/lib/kztail.oをリンクして kernelを圧縮します.デフォルトではこの2つのファイルはPC/AT用なので, /sys//pc98/boot/kzipbootでmake, make installを実行して98用ものに入れ換 えて下さい.

(注意)もし,作り直したカーネルが MAKEDEV std wd0 wd1 wd2 sd0 sd1 sd2 cuaa0 cuaa1 cuaa2 cuaa3 fd0 fd1 cd0 mcd0 scd0 matcd0 wcd0 st0 ft0 wt0 tun0 vty4 pty0で生成されるデバイスファイル以外のものを使うのならば, $1FD_BSD/Makefile中の変数DEVICEに追加して下さい.エントリーの名前は, /dev/MAKEDEVを見て下さい.既に,フロッピーに1FD BSDを作っているのならば, 例えば,以下のように実行します.
 # cd /mnt/dev
 # ./MAKEDEV snd0

1FD BSD中のコマンドの増やし方,減らし方

 

1FD BSDのコマンド群は特殊な方法で作ってあります./bin/shが実体で,その他 のコマンドはすべてshへのハードリンクです.詳しくは,crunchのマニュア ルを見てください.なお,/usr/src以下のソースファイルすべてを展開してお く必要があります.

  1. $1FD_BSD/Makefileを編集します.その中の変数 BIN, SBIN, USRBIN, USRSBIN, USRLIBEXECのどれかにコマンド名を追加して下さい. 追加するコマンドは,1FD BSD作成後,エントリを加えた変数名のディ レクトリに入ります.例えば,ftpを追加する場合,
     USRBIN = passwd login ftp
    
    とすると,/usr/bin/に入ります.

  2. スーパユーザになって,make comms を実行します.これでfdbsd なる実行ファイルとそれをgzipで圧縮したfdbsd.gzを作り,fdbsd.gzを $1FD_BSD/floppy/bin/shとしてコピーします.

  3. この後1FD BSDを作って下さい.もし,既に作っている場合には以下 を実行して下さい.
     # cd $1FD_BSD
     # make mount_fd
     # make reinstall_comms
    

(注意)$1FD_BSD/Makefile中の変数 CRUNLIB に,コマンド群をコンパイルする時に必 要なライブラリを加える必要がある場合があります.

(注意)routeをコンパイルするところで,
 cc -O -I.   -c route.c
 route.c:87: keywords.h: No such file or directory
 *** Error code 1
 
 Stop.
 *** Error code 1
 
 Stop.
 *** Error code 1
 
 Stop.
 *** Error code 1
 
 Stop.
と,エラーが出ることがあります(大概はこうなります).2.2-961014-SNAPで はエラーが出ませんでした./usr/src/sbin/routeでmakeを実行 する時にkeywords.hを作るからです.この場合は usr/src/sbin/routeでmakeを実行してから,make commsを実行し て下さい.

コマンドを減らす場合,BIN, SBIN, USRBIN, USRSBIN, USRLIBEXECにあるコマン ド名を削除してmake commsを実行して下さい.tar, gzipは容量が大きいの でこれらを削除すれば容量が小さくなります.但し,ps, telnet, telnetd, tarのどれかを削除する場合,$1FD_BSD/Makefile中の変数 CRUNLIB のエント リからps は -lm, telnet と telnetd は -ltelnet, tar は -lgnuregex を消す ことができます.

1FD BSDの暗号化はmd5方式(FreeBSDのデフォルト)を使っています.もし,des 方式に変更する場合は$1FD_BSD/Makefile中の変数 CRUNLIBの -lscrypt を -ldescryptに変更して下さい.

アカウントの作り方

 

アカウントの作り方として,

  1. フロッピーディスクに1FD BSDを作ってからアカウントを作る場合,

  2. パッケージを解凍した直後に(1FD BSDを作る前), $1FD_BSD/floppy/の中にアカウントを作っておく場合(このディレクト リ以下はフロッピーディスクにコピーされるので),

があります.いずれにせよ パスワードファイルの編集は普通の方法では出来ま せん(パスワードファイルを編集するコマンドvipwを使えませんので). なお,デフォルトでは空き容量が少ないのでアカウントは作れません. まず,前者の場合の作り方を説明します. 作成したフロッピーでFreeBSDを立ち上げていると仮定します.

  1.   パスワードファイルの編集:$1FD_BSD/floppy/etc中 のmaster.passwdとpasswdへ新しい得ユーザのエントリを作る(passwdファ イルは,master.passwdがあればいらないような気がするのですが,良く 分からないのでこれも作ります.).例えば,ユーザ名:sample,ユー ザid:3303,グループid:300 (グループ名はuser),ホームディレク トリ:/home/sample,デフォルトシェル:shなるエントリを作るとしま す.

    1. ラインエディタedを使う.
       # cd /etc
       # ed master.passwd
       763
       a
       sample::3302:300::0:0:Mr. Sample:/home/sample:/bin/sh  
       .
       wq
       817
       # ed passwd 
       662
       a
       sample:*:3302:300:Mr. Sample:/home/sample:/bin/sh
       .
       wq
       712
      
      この操作で,master.passwd及びpasswdファイルの最下行に,エントリー されます.

    2. echoを使う.
       # cd /etc
       # echo sample::3302:300::0:0:Mr. Sample:/home/sample:/bin/sh >> master.passwd
       # echo sample:*:3302:300:Mr. Sample:/home/sample:/bin/sh >> passwd
      
      (注意)``>>''を``>''としてはいけません.

  2. グループuserの登録.
     # cat "user:*:300:" >> /etc/group
    

  3.  次に,パスワードのデータベースを作り直します.
     # pwd_mkdb -d . master.passwd
    
    オプション「-d .」は,この場合省略可能です.省略するとパスワード のデータベースを /etc に作ります.もし,/etc以外の場所の master.passwdに対してpwd_mkdbを実行する場合は,必ず「-d directory」を付けて下さい.詳しくは,マニュアルを見て下さい.

    次に,パスワードを設定します.

     # passwd sample
    

  4. ホームディレクトリの作成:
     # mkdir /home/sample
     # chown 3303.300 /home/sample
    
    もしくは,
     # mkdir /home/sample
     # chown sample.user /home/sample
    

  5.   後は,sampleのホームディレクトリの環境設定です.

次に,後者の場合のアカウントの作り方を説明します. 前者とはパスワードファイルの編集方法が異なるだけです.

 # cd $1FS_BSD/floppy/etc
 # vi master.passwd
 # grep "^sample" master.passwd
 sample::3303:300::0:0:Mr. Sample:/home/sample:/bin/sh
 # vi passwd
 # grep "^sample" master.passwd
 sample:*:3303:300:Mr. Sample:/home/sample:/bin/sh
 # vi group
 # grep "user" group
 user:*:300:

この後,1FD BSDを作成し,それを立ち上げてから, (3)--(5)を行なって下さい. 1FD BSDを作る前に,$1FD_BSD/floppy中で(3)--(5)と同 様なことができます.ただし,この場合,pwd_mkdbのオプションとして「-d .」 を必ず付けて下さい.そうしなければ,ハードディスクのデータベースを書き換 えますので特に注意して下さい.

なお,デフォルトでは空き容量が少ないのでpasswdは実行できません.kernelま たはコマンドを小さくして下さい.他の方法はとして,パスワードをmd5方式に より暗号化した文字列を適当なOSから持ってきて,(1)のところでそ れも一緒に入力し,pwd_mkdbを用いてデータベースを書き換えて下さい.もし des方式(SunOSなど)のOSしかない場合は,1FD BSDもdes方式のものにして下さ い.

1FD BSDの補足

 

  1. 1FD BSDの/etc中の各ファイルは,基本的に2.2-960801-SNAPの /usr/src/etcまたは,/usr/src/etc.i386のものを使って います(PC/AT版2.1.5-RELEASE,98版も).不必要と思われるものは省 いています.1FD BSDに含まれるもので変更したファイルは/etc 中の master.passwd, rc, rc.local, rpc, services, sysconfig, /usr/share/misc/termcapです.rpc, services, termcapは必要 なも以外は削っています.rc, rc.local, sysconfigは1FD BSD用にアレ ンジしてあります.これらは主に1FD BSDにないコマンドに関するものを コメントアウトとしました.

  2. 98版は2HD(1.44M)のフロッピーではブートでないようです.従って, 2HC(1.2M)のフロッピーで1FD BSDを作っています.98版では容量 の縮小のため/etc/pwd.dbと/etc/spwd.dbを削除しています.その代わり に/etc/rc.localで
    echo 'makeing passwd database'
    mkdir /var/etc
    pwd_mkdb -d /var/etc /etc/master.passwd
    ln -s /var/etc/pwd.db /etc/pwd.db
    ln -s /var/etc/spwd.db /etc/spwd.db
    
    を実行しています.もし,kernelやコマンドの容量を十分少なくしたな らばこれらを削除して下さい.

  3. 1FD BSDの/varは,memory filesystemを720K byteほどマウント するようにしています.ブート時にrcで,PC/AT版は
    mount_mfs -s 720 -c 1 -m 0 /dev/fd0.1400 /var
    
    98版は
    mount_mfs -s 720 -c 1 -m 0 /dev/fd0.1200 /var
    
    を実行して領域を確保しています.ただしブート時に
    Warning: changing optimization to space because minfree is less than 8%
    
    なるワニングが出ます(これはどうにかならないでしょうか). /tmp/var/tmpへのシンボリックリンクにしています.

  4. kzipで圧縮したkernelには制限が付きます. /usr/src/sys/i386/boot/kzipboot/READMEに以下のように書かれ ています.
    The main problem with packed kernel is the lack of symbol table,
    so all commands that require it, will not run.
    Among them: ps, savecore, *stat, etc.
    
    psコマンドのオプションuが使えないのはこのせいでしょう.もし netstatなどkernelのsymbol tableを必要とするコマンドを使いたいなら ば,kernelやコマンドを小さくしてkernelをkzipで圧縮しないで下さい.

  5. 2.2-960801-SNAPからmousedと言うデーモンが入っています(PC/AT版 2.1.5-RELEASE,98版はありません).これはvirtual consoleでマウス を使うためのデーモンです./etc/sysconfigに設定するところがありま すが,それを設定してもうまく動きません.mousedのマニュアルがない ので良く分かりませんが,1FD BSDを立ち上げた後スーパユーザで,
     # moused -p /dev/cuaa0 -t mousesystems
     # vidcontrol -m on
    
    とすれば,使えるようになります.mousedのUsageは
     Usage is moused [options] -p <port> -t <mousetype>
      Options are   -s   Select 9600 baud mouse.
                    -f   Don't become a daemon
                    -d   Enable debugging messages
                         -c   Enable ChordMiddle option
      <mousetype> should be one of :
                    microsoft
                    mousesystems
                    mmseries
                    logitech
                    busmouse
                    mouseman
                    ps/2
                    mmhittab
    
    となっています.

    (注意)もし,Xを立ち上げた時にはconflictするのでマウスの動き が変になります.

  6. 1FD BSDは,メモリが4M byteあれば立ち上がると思います(試してはな い).

おわりに

助言,提案,訂正等は大歓迎します.また,PC/AT版2 2.2-961014-SNAP, . 2-960801-SNAP,2.1.5-RELEASE,98版2.1.0-RELEASE 以外のバージョンで kernel, shをコンパイルされた方は,kernel, shとその時のMakefile等の変更点 を添えて送って下さい.

山形大学の阿部康一様はPC/AT版2.1.5-RELEASE用のパッケージ作成の際に協力し て頂き,ありがとうございました.

参考文献

宮川晋,増田佳泰,古場正行,BSDを256倍使うための本, アスキー出版,pp. 222--240.

小松直人,1枚のFDで実現するルーターの構築法, UNIX USER(ソフト バンク), Vol. 5, No. 2,,pp. 46--53 (1996).

この文書について...

FreeBSDをフロッピーディスク1枚で 動かすためのパッケージ

この文書は LaTeX2HTML 翻訳プログラム Version 95 (Thu Jan 19 1995) Copyright © 1993, 1994, Nikos Drakos, Computer Based Learning Unit, University of Leeds, を日本語化したもの(95 (Wed Mar 1 1995) 版)を用いて生成されました。

コマンド行は以下の通りでした:
jlatex2html -split 0 README.tex.

翻訳は Satoshi Taoka によって Fri Oct 11 09:47:50 JST 1996 に実行されました。


Satoshi Taoka
Fri Oct 11 09:47:50 JST 1996

FreeBSDの広場へ