Pocket BSD をインストールしたよ
やっと, ドコモバ(以下 モバモバ とも書きます)
に PocketBSD をインストールしました.
0. 方針: 第三世代のポケビユーザー!?
メーリングリストなどでも, たまに話題になるようですが,
「聖典」(PocketBSDインストールキット)が出てから,
タコな末端ユーザーでも, 非常に簡単に PocketBSD の世界を
楽しむことができるようになったようです.
現に, わしはそういうユーザーでして, こういう奴がありがたく
PocketBSD を使わせていただくためには心がけというものが必要でしょう.
ここで, 第一世代のポケビユーザーとは, 開発者のたけむらさんをはじめとして,
果敢にもモバイルギアに FreeBSD を移植された開拓者の皆様,
第二世代のポケビユーザーとは, 聖典が生まれる以前にポケビに注目して,
アプリを書いたり, 人柱になられたり, 環境を整えて来るのに貢献された
方々です. そこで, 第三世代の我々は, タコではあるが, いつか何かの
お役に立てるかもしれないと思いつつ, とりあえずこんなに快適に
モバイルギアで UNIX 環境が手に入るので, ありがたく使わせて
いただこう, というスタンスで参りたいと思います.
この世の中に, 既に聖典は存在するわけですから, ポケビを愛用して
いくに当たって聖典は必須になります. 買わないとバチがあたります.
というか, 聖典がないと, かなり苦しいでしょう.
わし思うに, この聖典は「Linux を256倍楽しむ方法」(アスキー)の情熱と,
「Linux 入門」(トッパン)の情報量とを兼ね備えた, 素晴らしい本だと
思います. どうして Linux 本ばかり例に出すんだ?というのは,
わしが今まで FreeBSD はあんまり知らないからというだけの理由です.
ということで, これから書いていくことは, 聖典の記述を前提とします.
そんな, あんた, 一から書いていくだけの技量があればわしも本を
書きますって.
ということで, 本体の購入にあたっての tips も
聖典に書いてありますので, 基本的に省略. ちなみに, わしは
聖典の神託どおり, 「ドコモバ ワールド」の掲示板を通して
ドコモバを入手しました.
1. CFカード
PocketBSD では 唯一のPCMCIAスロットに, HDD の代わりにコンパクトフラッシュ
(CF)かFlashATAカードをさして, システムを構築します.
ということで, 容量が大きければ大きいほど良いのでしょうけれど,
お財布と相談. ポケビ本には, 最低20M, 推奨32M以上と書いてあります.
只今, 32M のCFカードは9800円くらい. でも, どうも 32M だと
gcc を入れるすき間はなさそうなので, ぎりぎり奮発して 48M にしました.
99年7月の頭の時点で, T-ZONEミナミ(本店?)で Hagiwara Syscom の CF 48 M で
15,000円でした. こいつは安い. が, PocketBSD での動作実績が怪しげ
だったので, おとなしく SanDisk の 48M を17,300円で購入しました.
タコは金で安心を買うわけですな. (って2300円の違いだが. )
うーむ, 本体からケーブルからCFカードまで, 全部含めて 4万程度で
モービルな UNIX 環境が手にはいるんだから, 素晴らしい時代です.
いやぁ, 大型汎用機 (わしの場合は日立 MP5800 など) から手のひらサイズの
ドコモバまで, 文字どおり同じアプリケーションソフト (emacs とかさ)
を使えるようになっているというのが, PocketBSD の第一の特徴だと思うのです.
携帯端末を使うときだけ DOS というのは, なんだか悲しくありませんか?
2. インストール
インストールは聖典どおり, むちゃくちゃ簡単でした.
素晴らしいインストーラを作って下さった方に感謝.
もっとも, わしの母艦は PC Card スロットのないデスクトップの
Linux & Win95 BOX なので, インストーラはシリアル接続で
母艦の「Mg Station」の「登録ソフト」で行いました.
転送が遅いため, 待ち時間 (約2時間!) はかったるいですが, まぁ待つだけです.
3. 48M だと何ができるか?
現在, 私の CF に広がる PocketBSD の世界はこんな感じです.
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/wd0a 30607 19943 8216 71% /
procfs 4 4 0 100% /proc
/dev/wd0s1 5630 1495 4135 27% /dos
|
これに, swap が 8 Mくらいです.
入れているものは,
《インストールパッケージ》
・admin・ppp・apm・diag・pkg
《エディタなど》
・nemacs (nemacs-canna-3.3.2.mini.tgz) (やっぱ軽い nemacs でしょう)
・canna (ja-Canna-3.2.2.mini.tgz) (辞書の共有)
《作業環境》
・mgterm (mgl-1.5より) (-w の謎)
・jless (ja-less-332.tgz)
・tcsh
・mg-tools (mg-tools-0.2)
《開発環境・ライブラリ》
・gcc (gcc-2.7.2.1-mini.tgz)
・make (gmake-3.76.1.tgz)
・libjpeg (jpeg-6a.tgz) (ヘッダも忘れずコピー)
・libgif (giflib-3.0.tgz) (ヘッダも忘れずコピー)
・libncurses (libncurses.so.3.1)
・libmytinfo (libmytinfo.so.2.0)
《ネットワーク》
・netfront (NetFront-2.0-demo) (友達に自慢するにはこれが一番!)
スクリーンショット
・ncftp (ncftp-2.4.2.tgz) (母艦とのやりとりには必須)
スクリーンショット
・MH (ja-mh-6.8.3-mini.tgz) (これ, 使いなれてるけど容量がでかい.
そこで)
・smpost+mh-e (smpost-current.tgz) (軽くて素晴らしい)
・w3m (w3m-beta-990625) (上に同じく)
《ユーティリティ》
・読書 (reading-1.0.1-src.tar.gz) (これも, 自慢になります)
・タスク(taskmg-1.4.2-src.tar.gz) (使いこなせてないけど. . )
・mil (mgl-1.5 から)
・nkf (ja-nkf-1.62.tgz) (reading では euc しか使えないため)
《ソース》
・mgl (mgl-1.5.tgz)
・mnw (mnw-1.1.tgz)
《ゲーム》
・jnethack (ja-nethack-3.2.2-mini.tgz)
(/usr/local/lib/jnethackdir/jnethack を strip すると小さくなる)
スクリーンショット(昇天の瞬間!)
・mkobo
・shisen
こんだけ入って Used で 20Mくらいというのは, なんだか感動ですね.
メモリはどれくらい使うかというと,
UID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND
0 0 0 0 -18 0 0 0 sched DLs ?? 0:00.92 (swapper)
0 1 0 2 10 0 1960 12 wait Is ?? 0:01.11 /sbin/init -
0 2 0 13 -18 0 0 12 psleep DL ?? 0:50.05 (pagedaemon
0 3 0 2 28 0 0 12 psleep DL ?? 0:06.45 (vmdaemon)
0 4 0 1 28 0 0 12 update DL ?? 0:03.69 (update)
0 30 1 62 18 0 1924 12 pause Is ?? 0:00.04 adjkerntz -i
0 78 1 3 2 0 1932 84 select Is ?? 0:30.21 syslogd
3 134 1 10 2 0 1056 0 select IW ?? 0:08.20 /usr/local/s
0 139 1 0 18 0 196 108 pause Ss ?? 204:45.68 /usr/local/s
102 527 526 7 18 0 580 0 pause IWs p0 0:02.97 -csh (tcsh)
102 549 527 165 3 0 1684 0 ttyin IW+ p0 0:22.77 /usr/local/l
102 466 465 2 18 0 596 356 pause Ss p1 0:06.61 -csh (tcsh)
102 512 466 7 29 0 1648 144 - TW p1 0:20.27 nemacs
102 560 466 11 30 0 632 268 - R+ p1 0:00.11 ps -axl
0 515 1 12 3 0 1944 0 ttyin IWs+ v0 0:00.21 /usr/libexec
102 464 1 11 18 0 584 0 pause IWs v1 0:02.83 -tcsh (tcsh)
102 465 464 4 2 0 248 400 select S+ v1 64:32.11 mgterm
102 523 1 0 18 0 576 0 pause IWs v2 0:03.25 -tcsh (tcsh)
102 526 523 12 2 0 248 324 select S+ v2 0:43.33 mgterm -f 10
|
$SHELL = tcsh で,
mgterm を二枚開いて, 片方で jnethack , 片方で nemacs+canna でこの文章を
書いていると, それでも 2M ほど swap は残ります.
でも, さすがに「かな」キーで両者を移動するとクソ重いですね. .
4. FreeBSD 母艦がないときの足りないファイルの導入
ネット上に公開されているパッケージなどは, FreeBSD 母艦が存在することを
前提にしているため, FreeBSD 2.2.5 からそのままコピーしてきただけで
使えるツール類は自前で用意しなければいけませぬ.
たとえば, gcc のミニパッケージを導入しても,
make がないので, make コマンドがきかない(あたりまえか),
make があっても ar がなかったり, といった感じです.
そして, たとえば ncftp を導入するためには ncftp-2.4.2.tgz という
パッケ−ジがあって, これは分かりやすいのですが,
ncftp に必要な libncurses.so のように基本的なファイルは
FreeBSD では「配布ファイル」に含まれています. 一つ一つが
tgz として固められているわけではないのです.
こいつらは, まとめて聖典の CD-ROM の /cdrom/2.2.5-Release/bin/ 以下に
入っています. これを取り出す方法ですが, 自分の Linux BOX の
適当なディレクトリで
cat /cdrom/2.2.5-Release/bin/bin.* | tar zxf -
てな感じで, だだーっと展開できました. 全部で 80MByte強あります.
tar コマンドを上手に使うと, 目的のファイルだけ取り出せますが.
まぁ, 母艦のディスクに余裕があれば, だーっと広げておいても
良かろうかと思います.
その下の bin/ には, /bin が, usr/ の下には /usrが, ってな
感じでおいしそうなファイルがごろごろしています.
これで, FreeBSD をまともにインストールしなくても, バイナリを
もらって来ることができます.
5. PPP ついでに IP Masquerade
せっかくインターネットに接続している母艦(だけどLinux)が
あるわけですから, モバからもシリアルケーブルを通して
世の中に出ていきたいです. ドコモバの場合, 公衆回線を通して
プロバイダ等にPPP接続するのは携帯経由になるので,
バカ高です. メールの確認, 野球の試合結果の確認, くらいに
しておきたい. ということで, 聖典付属の netfront が活躍するのは
母艦にシリアル接続するときなので, シリアルのPPP接続は必須.
もっとも, 母艦のつながっているネットワークの IP アドレスを
簡単に割り当てて貰えない場合は Linux では IP Masquerade を使います.
*1)
FreeBSD でも同様の機能を実現できるようですが, わしは知りません.
構成はこんな感じです.
*1) PPxP パッケージを使ったら, カーネルの IP Masquerade 機能は
必要ありません. ただし, userlink のモジュールが必要になります.
最近 (2000 年 1 月), 自宅の母艦を Debian にした機会に PPxP に乗り換えました.
その方法も, また今度まとめます.
とにかく, ネットワークの設定はなんでもそうですが,
接続がうまくいかない場合は, 問題を切り分けないといけませぬ.
モバイルギアの場合は UNISHELL で「PC接続」と「パソコン通信」の
二つのソフトがありますので, ハードウェアが動作するかどうかは
この二つで最初に確認するのが常套手段かと思います.
わしは, 母艦側のシリアル端子が「COM3」なのに Linux で「/dev/ttyS0」を
叩こうとしたりして, 無駄な時間を費しました(笑).
PocketBSD 側の設定
これは, 聖典に書いてあるとおりでいきました.
すなわち, /etc/ppp/ppp.conf を以下のように書きます.
default:
set device /dev/cuaa1
set speed 14400
set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0\\N3%C1 OK-AT-OK \\dATDT\\T TIMEOUT 60 CONNECT"
set openmode active
set timeout 300
nifty:
set phone 03-5744-XXXX
set authname NIM-ABC01234
set authkey PASSWORD
set login "TIMEOUT 30"
accept pap
accept chap
dial
provider:
set phone 03-5768-XXXX
set authname USERID
set authkey PASSWD
set login "TIMEOUT 30"
accept pap
accept chap
dial
mother:
set dial ""
set login ""
set line /dev/cuaa0
set speed 57600
set timeout 0
set openmode active
dial
|
nifty: は Infoweb 用, provider: は別のプロバイダ,
mother: は母艦(Linux BOX)との接続用です.
携帯電話を通すプロバイダへのダイアルアップには,
speed 14400 程度でないと接続できませんでした. そりゃそうか.
わしは, 246-net と Infoweb で問題なく接続できています.
それから, /etc/ppp/ppp.linkup も
nif:
add 0 0 HISADDR
shell cp /etc/ppp/resolv.conf.nif /etc/resolv.conf
provider:
add 0 0 HISADDR
shell cp /etc/ppp/resolv.conf.provider /etc/resolv.conf
mother:
add 0 0 HISADDR
shell cp /etc/ppp/resolv.conf.mother /etc/resolv.conf
|
として, DNS を決める resolv.conf を接続先ごとに書き換えるようにしています.
これで, root になって
とすると, 母艦への接続ができます. これを mgterm 上で行うと
パケットのロスがなくなるのは聖典の記述どおりです.
Linux 側の設定
上のネットワークの構成図を見ていただけるとわかりますが,
基本的に モバモバ を接続する母艦は Linux BOX
(デスクトップのSlack3.4改 Kernel 2.0.37)です.
Linux 母艦はインターネット(UT-NET)に
ほぼ常時, 接続されています. FreeBSD 母艦(デスクトップの 2.2.5)も
あるんですが, これは研究室の後輩がいないときに, おもむろに
Floppy からブートする「幻の母艦」です(笑).
夏休みだけ海辺で開業するカレー屋さんみたいなものですな.
当然というか, モバモバごときに(失礼) IP アドレスを割り振って
貰えないのですが, モバモバから外の世界に出て行きたい.
最初は, 研究室の後輩のマシンの IP アドレスをモバモバが頂いて,
そのマシンがネット上に存在しないときにモバモバを Linux 母艦に接続するという,
「幻のモバモバ」だったのですが, これだとどうにも不便.
だいたい, 一番の用途は FreeBSD 母艦との接続で,
IPアドレスを「共有」している後輩のマシンにだけ FreeBSD がのってるんだし.
ということで, IP Masuquerade の登場です.
もっとも, IP Masuquerade に関するネットや書籍上の情報は,
「NIC二枚挿し」が基本だったり, 一枚の NIC に家庭内LANが
ぶらさがっていて Linux BOX はダイアルアップでインターネットに
接続されている, といったパターンなので, 今回の「シリアル接続」では
どうすりゃいいんだ, と思ったのですが, 意外と簡単でした.
・カーネルが IP Masuquerade 対応になっているか?
まず, Linux BOX のカーネルが IP Masuquerade に対応している
必要があります. このためには, IP Forwarding などにも対応している
必要があるようです. わしはタコなので,
Linux ネットワーク 小山裕司ほか トッパン ISBN4-8101-8961-9
の説明そのままにカーネルを再構築しました.
# ipfwadm -F -l
IP firewall forward rules, default policy: deny
type prot source destination ports
# ipfwadm -F -p masq
# ipfwadm -F -l
IP firewall forward rules, default policy: accept/masquerade
|
こうなれば, IP masquerade は使えているようです.
・では, 古典的に pppd を動かす.
Linux IP Masquerade mini HOWTO および
Linux PPP HOWTO の 30章(PPP をヌルモデム(シリアル直結)で使うには)
を参考に以下のように, pppd の起動, IP masuquerade の設定を
行いました. シリアル接続はモデムを使わない分, 楽なんですね.
# pppd -detach crtscts lock proxyarp 192.168.1.1:192.168.1.2 /dev/ttyS2 57600
# ipfwadm -F -p deny
# ipfwadm -F -a masquerade -S 192.168.1.2/32 -D 0.0.0.0/0
|
(IPアドレスは例です. )
これで, まず PocketBSD 側で先ほどのように
として, 次に Linux 母艦側で上の pppd 等のコマンドを実行すると,
PocketBSD 側では
# ppp mother
User Process PPP. Written by Toshiharu OHNO.
Using interface: tun0
Interactive mode
Dial attempt 1 of 1
dial OK!
login OK!
ppp ON localhost> Packet mode.
ppp ON localhost>
PPP ON localhost>
|
PPP が大文字になれば, 成功です.
これで, PocketBSD 側からは ping だろうが telnet だろうが通ります.
DNS サーバは, PocketBSD で PPP の設定をしたときに /etc/resolv.conf
に書き込んでいるので, DNS の参照もできるでしょう.
母艦側の netstat -r の出力は
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.2 * 255.255.255.255 UH 1500 0 0 ppp0
localnet * 255.255.254.0 U 1500 0 0 eth0
loopback * 255.0.0.0 U 3584 0 0 lo
default 157.XXX.XXX.X 0.0.0.0 UG 1500 0 0 eth0
|
(IPアドレスは例です. ) てな感じです.