やっぱりfloppyfw

またそれかい!と言われもても...PCMCIA組み込み


もうすっかり 1FD + ノートPC のヒトになってしまったようだ。しかし、そのうちネタが尽きるのではないか?1FD Linux は数多く、優れたものも多い。だからこそ雑誌の特集にもなるのだが、ワタクシ的に言わせてもらうと優れてないものもたくさんあるのである。もしネタが尽きた場合どうすべきか。

1.いわゆる優れていないものもとりあげ、あたかも優れているように書いていく。

しかし、これではそのうち文句が来そうだ。


2.いわゆる優れていないものもとりあげ、コキおろしていく。

記事としては非常に面白いだろうが、アングラライターへの道が開けてしまい、人生の方向さえ決まってしまいそうである(あ、原稿段階でボツになるか)。


3.1FD ディストリビューションを自ら次々に開発して、それをネタにする。

自給自足ということだ。不可能ではない。しかし、これは「優れてないもの」を量産する結果になるであろう。話にならん。


どのみちどうにもならん。他の記事は書かせてもらえるのだろうか...(笑)。


まあ、なるようになるとして、今回は[ floppyfw ]をとりあげる。私がかつて初めて使用した 1FD Linux ディストリビューションであり、もっとも長く使っているものでもある。おそらく、ルーター・ファイアウォール関係ではかなりのシェアがあると思われる、有名なディストリビューションだ。しかし、たいした特徴がないのと、標準では PCMCIA 非対応ということで、雑誌の記事にしようとはしなかったのだ。

しかし、floppyfw には1.9系というカーネル2.4系を用いたベータバージョンがあり(リリースしたら2.0系となるだろう)、そろそろリリースするのではないかと勝手に思っている。というか、いいかげんそろそろリリースせんかい!と身勝手なことを考えている。とにかく、2.4系、つまり iptables が使える。これは私にとっては非常に強み(もう年なので ipchains はそろそろ忘れかけている)。

以前にとりあげた Mosquito は Linux 初心者でも比較的簡単に扱える(日本語マニュアル、PCMCIAの"準"標準サポート、WEBブラウザからの設定、GUI化で簡略にした各種設定)、といった面でもウケたのは間違いない。しかし、「チョイといじくってみる」という内容もよかったらしく、その流れで調子に乗って書いた tomsrtbt もウケたらしい。つーことは 1FD はちょっとした流行になっているのではないか?!という期待がにわかに浮上してきたのであった(ないって)。それならばもう少し踏み込めるぞ。「オリジナル 1FD ディストリビューション作成講座」なんて記事も書けそうだが。その前に floppyfw だ!

あ、最近、前置きが長すぎるか。スマン。ベースは カーネル 2.4.18 、pppoe 機能を持った、容量 1680KB のものを使うことにする(これは容量的にも技術的にも一番面倒なので、これができれば他はカンタンだから。たとえば CATV のヒトは pppoe なしの1440KBでOK、これは楽だよ)。

で、例のごとく以下のカスタマイズを行う。
  • 容量が足らないので、不要なものをシステムから削除しまくる。
  • PCMCIA機能を組み込む
これで、ノートPC上で動くiptablesの使えるブロードバンドルータができる。1FD もここまできた。




さて、では開始するが、あまり詳しく書くと雑誌が売れないので、少なくとも記事が出るまでは詳しく書かない(おい!)。流れだけ書いておくので、やったろか、というヒトはやってみてください。初心者の方は雑誌をお待ちください。現状では基本的に質問はしないでください。
■ 作業環境の準備 ■

今回のベースは floppyfw-1.9.20-1680K-ppoe.img で、これはカーネル 2.4.18
を使用している。glibc のバージョンはどこに書いてあるかわからないが 2.2.5
ということにしておく。あとで調べる(調べたときには新しいバージョンが出て
るだろうから、もちろん口だけである)。

ということで、同じ環境を用意する。ちなみに私は Debian の Woody を使用
し、この環境に揃えた(つーか意図せずとも揃っていた)。

とかなんとか言っておきながら実は glibc-2.1.3 だった。くそぉ!
しかし、cardmgrだけなら ldd -v で見ると2.1.3コンパチなので、
とりあえずよしとした(テキトーだなあ)。

イメージやモジュールなどは[ ここ ]から持ってくる。

なお、同じ環境は手元になくてもなんとかなることもある(必要なときだけ他人
に頼むとか)。


■ 空き容量を調査 ■

そのままの状態ではとてもPCMCIAまわりは入らない、といいかげんなことを書こうと
思ったら、別にあっさり入りそうだった。うーむ.....まあ、ぎちぎちで入ったと
しても、ファイアウォールの設定が書き切れなかったりするので、多少の余裕を
見ること。と言ってはみたものの、余裕で入りそうだ。うー....まあ、とりあえず
不要なものは削除するのだ。

なお、非pppoe 版ならば、場合によって(使用するPCMCIAパッケージ容量とか)
は何も削除せずとも PCMCIA まわりが収まるかもしれない。1680KB フォーマット
にすれば間違いない。


■ 展開して中身を見て回る ■

bz2 になってるものはどしどし展開して中を見る。また、起動時の動きを把握す
るために、特に floppyfw の下の floppyw.ini はよく読んで頭に入れておく。
PCMCIAをサポートするために私はこのファイルを多少編集した(別の方法もある)。

initrd.gz は圧縮イメージなので、gzip で伸張してから mount -o loop オプシ
ョンでどっかにマウントして中を見る。


■ PCMCIAパッケージの作成 ■

PCMCIA をいつも使っていればカンタンだ。カーネルのコンフィグが公開されて
いるが、たいがいのものはモジュールでサポートされる。

要するに、

bin---+---cardmgr

etc---+---config
      |
      +---config.opts
      |
      +---network

lib---modules---2.4.18---pcmcia---+---i82365.o
                        | 
                           +---ds.o
                        | 
                           +---pcmcia_core.o
                        | 
                           +---pcnet_cs.o

★モジュールはfloppyfw サイトでも配布してるので、
 それを使うと楽。別に、自分でコンパイルしてもよいが...。

※ご注意! CardBus コントローラー搭載の場合
サイトからモジュールをもらってくる場合は i82365.o ではなく、yenta_socket.o
を使います。カーネル2.4系列ではPCMCIA機能をカーネルで用意することができるよ
うになったのですが、サイトで配布しているものはカーネルモジュールだからです。

しかし、pcmcia-cs から抽出する場合は今までどおり、CardBusコントローラーであろうと
PCMCIAコントローラーであろうと i82365.o でよいです(yenta_socket.o というもの自体ありません)。



★cardmgr は floppyfw サイトで配布してないみたいなので
 コンパイルするか、あるいは作業環境がノートPCならそのまま
 そこからコピーでいい。そのために環境をあわせているのだ。

★PCカードによって多少違うが、ワタクシは pcnet_cs を
 使うカードを愛用しているのでこうなる。このように
 2枚とも共通のモジュールを使うものにすれば容量が浮く

★config は最小限だけ書く。具体的には
 pcnet_cs とあとはカードのエントリ、config.opts 実行の行とか

------------------------------
config

#
# Device driver definitions
#
device "pcnet_cs"
  class "network" module "net/8390", "pcnet_cs"

#
# Card
#
card "Corega PCC-T Ethernet"
  version "corega K.K.", "corega EtherII PCC-T"
  bind "pcnet_cs"

card "Melco LPC2-T Ethernet"
  manfid 0x01bf, 0x2216
  bind "pcnet_cs"

card "Corega FEther PCC-TXF"
  version "corega", "FEther PCC-TXF"
  bind "pcnet_cs"

card "Planex FNW-3600T Fast Ethernet"
  version "Fast Ethernet", "Adapter"
  bind "pcnet_cs"

# shimakero
card "Planex FNW 3600-TX"
  version "Dual Speed", "10/100 Port Attached PC Card", "1.0", " "
  bind "pcnet_cs"

# Include configuration files for add-on drivers

source ./*.conf

# Include local configuration settings

source ./config.opts
------------------------------

こんなカンジ

★network はfloppyfwの場合はダミー。実行権限をつけておく。

★8390.o モジュールも必要だが、これは基本モジュールとして
 デフォルトで組み込まれるため重複するので、ここでは組み込まないでよい。

とかなんとかいったツリーを作り、

% tar cvf pcmcia *
% bzip2 -z pcmcia

とかなんとかして pcmcia.bz2 とかいうのを作ればよい。
名前は何でもいいが、8.3 で命名すること。

これを package ディレクトリに放り込む。


■ 不要ファイルを削除し、再パッケージング ■

削除できそうなのはまずは NIC のドライバモジュールだ。
modules 下のbase.bz2 を展開し、8390.o 以外は全部消して、作り直す。

でもまだ容量が危ない場合は、

floppyfw 下の add.bz2 を展開し、dhcp 関連(バイナリ、スクリプトとか)と
DNSキャッシュサーバーのdnsmasq, あと identd を思い切って削除する。
もったいない気がするが、ここまできたら仕方ないのだ。
で、add.bz2 を作り直す。

で、これをフロッピーに書き戻す。これでまあまあ容量の余裕ができる。
まあ、add.bz2 は削除しても激ヤセするわけでもないので、通常はほっといてよいでしょう。

■ 設定 ■

PCMCIA を動かすための設定をする。やり方はいろいろあるが、私の場合

opt-card.iniとかいうのをつくり、floppyfw.ini にこのファイルを実行する行
を記述した。PCMCIA.iniにはモジュールのロードと cardmgr の起動を書く。
floppyfwではモジュールは modules.lst に記述すればロードしてくれるが、
今回はこうする。cardmgr 起動との前後関係をフィクスにするためである。
また、pre-*.ini や post-*.ini という名前でなんたらかんたら書いて package
ディレクトリ下に置くとスクリプトとして実行してくれる仕掛けになっている
のだが、PCMCIA関連モジュールは modules.lst に設定されている isa-pnp より
あとでロードせねばならず、しかもネットワーク設定の network.ini 実行前
に cardmgr が起動し、デバイスを有効にしておかねばならない、という
ややこしいものなので、後のことを考えて floppy.ini に手を加えて独立さ
せたのである。

------------------------------
opt-card.ini 

/bin/insmod /lib/modules/2.4.18/pcmcia_core.o
/bin/insmod /lib/modules/2.4.18/i82365.o
/bin/insmod /lib/modules/2.4.18/ds.o

/bin/cardmgr -m /lib/modules/2.4.18
echo "cardmgr..."
sleep 10
------------------------------
★sleep 10 は何故あるのか。むろん、この間に祈るためである。

★ちなみに多くの 1FD ディストリビューションでは  bin も sbin も同じだ。
 シンボリックリンクになっていることが多い。

★削除してしまった不要モジュールのエントリを modules.lst でコメントアウト

------------------------------
modules.lst

#
# Modules.lst
# 
#
# Plug and play module, may not be needed.
#
isa-pnp     <--- これは残す
#
#
# Network Interface Cards:
#
#3c509
#3c59x
8390         <--- これは残す
#ne2k-pci
#
# The ne module cannot autoprobe and needs an io port.
#ne io=0x300 
#mii
#tulip
#eepro100
#8139cp
#8139too

以下略
------------------------------

------------------------------
floppyfw.ini

ここまで略

#   modprobe ${myline}
    insmod -f ${myline} >> $DEBUG_LOG 2>> $DEBUG_LOG
    if [ $? -eq  0 ] ; then
       echo -n "${myline}  "
    fi
    ;;
  esac
 done < /etc/modules.lst

#
#shimakero
#
echo
echo "Looking for option- scripts..."
for i in /mnt/tmp/opt-*.ini; do
	if test -f $i
	then
		PRE=${i#/mnt/tmp}
		stripcr $i /etc/$PRE 755
		fi
done
for i in /etc/opt-*.ini; do
	if test -f $i
	then
		echo "Running $i"
		chmod 755 $i
		$i
	fi
done
echo "...scripts done." 

echo
echo "Initializing network: "
/etc/network.init
echo 

以下略
------------------------------


■ 起動して動作確認 ■

config, firewall.ini などを自分用に設定すればOK


なかなか不親切な説明で申し訳ないが、つまり雑誌を買ってほしいのである。 しばし待たれよ。



トップページ