UNIX 母艦化計画 その1
BSD Filer v0.1 -- FreeBSD を Filer の server に
Copyright (C) 1996 by Dai ISHIJIMA
v0.0のドキュメントへ,
v0.2のドキュメントへ,
LX Filerの目次へ
HP 100/200LX (以下LX) を十二分に活用するためには、母艦となるパソコン
が欠かせません。このプログラムはパソコン用 UNIX のひとつである FreeBSD
が動いているマシンを LX の母艦にするための最初のステップです。このプロ
グラムは LX の内蔵アプリケーションである Filerのサーバモードのフリをし、
LX・FreeBSD間のファイル転送を容易にします。
☆ このプログラムでできること
LX の内蔵アプリケーションのひとつである Filer にはリモート接続の機能
が用意されています。これを使うと、赤外線ポートやシリアルケーブルを介し
て、もう一台の LX や Connectivity Pack が動いている AT互換機とのファイ
ルのやりとりが可能になります。
このとき、 接続要求を受け取った LX (あるいはAT互換機) はサーバになり
ます。サーバ側では (サーバモードを終了する以外には) 何もできませんが、
クライアントであるもう一台の LX からは、サーバ側のファイルもまるで手元
にあるかのように操作することが可能となります。
このプログラムは、この Filer のサーバモードの真似をして、FreeBSDのフ
ァイルをクライアントである LX から操作することを可能にします。今回のバ
ージョンでは、LXから以下の操作ができます。
- FreeBSDのファイルの一覧を参照する
- FreeBSDのカレントディレクトリを変更する
- LXのファイルをFreeBSDにコピーする
- LXのディレクトリをまるごとFreeBSDにコピーする
- FreeBSDのファイルをLXにコピーする
- FreeBSDのファイルを表示する
- FreeBSDのファイルの名前を変更する
- FreeBSDのディレクトリを作成する
ただし、
- LXからアクセスできるFreeBSDのディレクトリ・ファイルは、 このプログ
ラムを起動したディレクトリより下にあるものだけ
- FreeBSDのファイルで、名前が DOSの規則にあわないもの (8+3文字を越え
るなど)、英大文字を含むものはLXから見えない
- FreeBSDのディレクトリをまるごとLXにコピーすることはできない
- その他いろいろ f(^^;)
といった制約があります。
☆ 動作環境
このプログラムそのものは FreeBSD 2.x 上で動きます。LX では動きません。
動作テストは以下の組合せで行いました。
- クライアント: HP 200LX 2Mモデル (無改造)
- サーバ: Digital HiNote Ultra CS433 / FreeBSD 2.1R / 赤外線ポート接続
なお、テストに使った速度は 9600bps です。また、以前のバージョンでは、
- 自分で組み立てたAT互換機 / FreeBSD 2.1R / 自作クロスケーブル,
- EPSON PC-386GS2 (改) / FreeBSD(98) 2.0R / 自作クロスケーブル
をサーバにした場合の動作も確認しています。
☆ アーカイブファイルに含まれるファイル
アーカイブファイルbsdfil01.lzh には、
- readme.doc
- このファイル
- bsdfiler.h
- ヘッダファイル
- main.c
- コマンドラインパラメータを調べるプログラム
- emul.c
- サーバエミュレータ本体
- file.c
- ワイルドカードなど、ファイルまわりのプログラム
- packet.c
- データパケットを処理するプログラム
- crc.c
- CRCを計算するプログラム
- tty.c
- シリアルポートまわりのプログラム
- makefile
- bsdfiler作成用メイクファイル
が含まれています。拡張子 .lzh からわかるように、このアーカイブファイル
は UNIX版 LHa (lha(1)) で作成されています。 アーカイブ内の日本語コード
はシフトJIS、改行コードは CR + LF になっていますので、FreeBSD で解凍す
る場合は、't' あるいは 'et' modifier をつけてください。
操作例:
FreeBSDで利用している日本語コードが SJIS の場合
% lha xt bsdfil01.lzh
FreeBSDで利用している日本語コードが EUC の場合
% lha xet bsdfil01.lzh
DOS で解凍する場合は、普通に解凍してください。また、DOS で解凍したファ
イルを FreeBSDに転送する場合は、日本語コードや改行コードに注意してくだ
さい。
☆ 準備 -- LX と FreeBSDの接続
このプログラムを使用するためには、LX と FreeBSD マシンをきちんと接続
しておく必要があります。まず、F1015 などのクロスケーブルを用意して物理
的に接続します。(以下の説明では FreeBSD 側の COM1: (/dev/ttyd0) に接続
した場合の例を示します。)
つぎに LX と FreeBSDの間でデータのやりとりができることを確認しましょ
う。これには、FreeBSD 側でシリアルポートからログインできるようにし、LX
から DataComm で FreeBSD にログインしてみるのがいいでしょう。FreeBSDの
/etc/ttys ファイル (ttys(5)) を編集し、LX を接続したシリアルポートから
のログインを許可します。
/etc/ttys の編集例 (抜粋):
ttyd0 "/usr/libexec/getty std.9600" unknown on insecure
編集が終ったら、kill(1) コマンドで変更を有効にします。
操作例:
# kill -HUP 1
BSD側の設定がすんだら、LX で DataComm を起動し、通信条件をあわせてか
らログインします。/etc/ttysを上のように設定した場合は、MENU -> Connect
-> Settings...で Baud を 9600, Interface を Com1, Parity を none, Data
Bits を 8, Stop Bits を 1 に設定します。
DataComm の通信条件設定後 ENTER キーを押し、FreeBSD のログインメッセ
ージがでてきたら準備完了です。 FreeBSD の /etc/ttys の設定を元に戻して、
BSD Filerがシリアルポートを使えるようにしておきましょう。
ttyd0 "/usr/libexec/getty std.9600" unknown off insecure
設定を戻したら、再度 kill -HUP 1 を実行してください。
☆ コンパイル方法
適当なディレクトリでアーカイブファイル
bsdfil01.lzhを解凍し、make(1)
でコンパイルします。ここではアーカイブファイルが /tmp にあり、ホームデ
ィレクトリの下の bsdfiler でコンパイルする例を示します。
操作例
% mkdir ~/bsdfiler
% cd ~/bsdfiler
% lha xet /tmp/bsdfil01.lzh
% make
☆ 使用方法
転送したいファイルのあるディレクトリに移動し、このプログラムを起動し
ます。起動時のオプションとして、LXを接続したシリアルポートを指定してく
ださい。
操作例
% cd test-for-lx
% ~/bsdfiler/bsdfiler /dev/ttyd0
起動できたら、LX で Filer を動かし、通信条件を設定後に接続します。
操作例
FILER -> MENU -> Communications -> Remote Settings...
Baud を 9600, Interface を Com1 に設定 -> OK {F10}
Connect {F10} -> Remote {F6}
接続できたら、LXどうし、あるいはConnectivity Packにつないでいる時と同
様に操作してください。このバージョンでは、LX から次の操作ができます。
- カーソルキー、ENTERキー、ESCキーを使ったディレクトリの移動
- MENUキーから呼び出す、あるいはファンクションキーを使った以下の操作
- File
-
Copy {F2}
Delete {DEL}
Rename
Create Dir
- View
-
File List {F9}
Directory Tree {F9}
File View {F8}
Local {F6}
Remote {F6}
- Communications
-
Connect {F10}
Disconnect {F10}
このプログラムは、クライアント側から接続解除要求を受けると終了します。
つまり、終了するには LX側で Disconn {F10} を押します。
☆ トラブルシューティング
・DataComm で FreeBSD にログインできない。
→まず、ttys(5) や LXの設定を確認してください。次に、
# stty -f /dev/ttyid0 clocal -crtscts hupcl
# stty -f /dev/ttyd0 clocal -crtscts hupcl
でフロー制御を無効にしてみてください。それでもダメなら、FreeBSD を動
かしているマシンで DOSを起動し、Connectivity Pack や通信ソフトで接続
できることを確認してください。その後、FreeBSD に戻って設定を再確認し
てください。
・bsdfiler を起動させようとすると can't open /dev/ttyd0 と表示されて
起動しない。
→/dev/ttyd0 へのアクセス権限がないのが原因だと考えられます。
root になってから chmod(1) してください。
操作例
% ls -l /dev/ttyd0
crw------- 1 root wheel 28, 0 May 19 21:17 /dev/ttyd0
% su
# chmod 666 /dev/ttyd0
# exit
% ls -l /dev/ttyd0
crw-rw-rw- 1 root wheel 28, 0 May 19 21:17 /dev/ttyd0
また、そのポートで getty(8) が動いているかもしれません。この場合は
/etc/ttys を編集して kill -HUP 1 で getty を止めてください。
・bsdfiler の起動には成功したが、LX で Connect {F10} を押しても接続で
きない。
→stty(1) コマンドで、シリアルポートの設定を確認してください。
操作例
% ~/bsdfiler /dev/ttyd0 &
% stty -f /dev/ttyd0 everything
speed 9600 baud; 0 rows; 0 columns;
lflags: -icanon -isig -iexten -echo -echoe -echok -echoke -echonl
-echoctl -echoprt -altwerase -noflsh -tostop -flusho -pendin
-nokerninfo -extproc
iflags: -istrip -icrnl -inlcr -igncr -ixon -ixoff -ixany -imaxbel ignbrk
-brkint -inpck -ignpar -parmrk
oflags: -opost -onlcr -oxtabs
cflags: cread cs8 -parenb -parodd hupcl clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
discard dsusp eof eol eol2 erase intr kill lnext
<undef> <undef> <undef> <undef> <undef> <undef> <undef> <undef> <undef>
min quit reprint start status stop susp time werase
1 <undef> <undef> <undef> <undef> <undef> <undef> 0 <undef>
また、LX側で Filer の Remote Settings... も再度確認してください。
☆ 制限事項
このプログラムには、以下の制限があります。
- LXからアクセスできるFreeBSDのディレクトリ
- ファイルは、 このプログ
ラムを起動したディレクトリより下にあるものだけ
- FreeBSDのファイルで、名前が DOSの規則にあわないもの (8+3文字を越え
るなど)、英大文字を含むものはLXから見えない
- FreeBSDのディレクトリをまるごとLXにコピーすることはできない
- FreeBSDのファイルを *本当に* 削除することはできない
- File View {F8} で日本語コードの変換を行わないので SJIS以外のファイ
ルは文字が化ける
- LXからFreeBSDへのファイルコピーでタイムスタンプは保存されない
それから、このプログラムにはまだいろいろなバグが残っています。
- 通信時に生じるエラーへの対処が十分ではない
- UNIX側ファイルのパーミッションなどを調べていない
(つまり、読みだし許可のないファイルをコピーしようとしたり、書き込み
許可のないディレクトリに書き込もうとすると、エラー終了してしまう)
これ以外にもあるかもしれません (^^;;;)。
☆ おことわり
このプログラムは (狭義の) フリーソフトウェアです。パブリックドメイン
ソフトウェア、シェアウェアではありません。このプログラムの著作権は、作
者である いしじま☆だい が所有しています。
このプログラムの運用によって生じた結果については一切責任を負いかねま
すのでご了承ください。使用前には LX、FreeBSD ともにディスクのバックアッ
プをとったほうがいいかもしれません。
このプログラムの全部、または一部をそのまま利用して商用目的のプログラ
ムを作成することはご遠慮ください。
フリーソフトウェアの作成や個人的な範囲での利用が目的の場合は、このプ
ログラムの全部、または一部をそのまま利用してもかまいません。他機種への
移植や他のオペレーティングシステムへの移植およびフリーソフトウェアとし
ての公開は大歓迎です。その場合、作者への連絡は不要です。 (でも、報告し
てくれたり、ドキュメントに一筆書いてくれたり、さらには、そのソフトのソ
ースを公開してもらえると非常にうれしいです。)
このプログラムを再配布する場合は、アーカイブファイル
bsdfil01.lzhに
含まれるすべてのファイルを変更せずにそのまま配布してください。再配布す
る場合はメイルなどでご連絡いただけるとありがたいです。
☆ 今後の予定
- SunOS 4.x, NEWS-OS 4.x など、他の BSD UNIX への移植
- BSD から LX のファイルを操作できるようにする
(BSD をクライアント、LX をサーバにする)
☆ 謝辞
このプログラムの最初の版である BSD Filer version 0.0 を
Windows NTに移植
し、 公開してくださった
伊藤 栄一郎
(GHC02331@niftyserve.or.jp) さん、
そして、このプログラムを他のUNIXに移植した、あるいは移植にトライし
ているNIFTY-Serve FHPPC
のみなさんに感謝します。
Sun SPARCstation, Sony NEWS, SGI Indy 他でコンパイルにチャレンジして
くれた
京都工芸繊維大学の
太田勝巳さん、
夏コミ本編集会議にて「xmkmf -a;
make か ./Configure; make 一発で、どの UNIX でも動くようにしよう」と圧
力をかけて^H^H^H^H^H^H提案してくれた
"かふぇ・ぱらだいす" &
"うちゅーせーはProject" のみなさんに感謝します。
☆ 参考文献
- LXでの通信、ファイル転送について
- FMODEM携帯端末研究会: HP 100LX徹底活用ブック
(BNN, 1994), pp.109-113.
- 関谷 博之, 濱田 宏貴: HP 100LX/200LX BIBLE
(ソフトバンク, 1995), pp.17-27, 201-224.
- データ通信について
- 里 和政:「RS-232Cインターフェースの基礎」,
トランジスタ技術スペシャル No.9 (CQ出版社, 1988), pp.37-42.
- 沖野 新:「PC9801によるBSC伝送の実際」,
トランジスタ技術スペシャル No.9 (CQ出版社, 1988), pp.56-61.
- W.H.Press, et al.: Numerical Recipes in C
(Cambridge University Press, 1992) 2nd ed., pp.896-901.
- FreeBSD 2.1R (UNIX) の各種設定について
- The FreeBSD FAQ Team, FAQ@FreeBSD.ORG:
"FreeBSD Frequently Asked Questions for FreeBSD 2.X",
Section 11, Serial Communications
(2.1Rの /usr/share/doc/FAQ/freebsd-faq91.html).
- Evi Nemeth, Garth Snyder, Scott Seebas 共著, 井上 尚司 監訳:
UNIXシステム管理入門 (ソフトバンク, 1992), pp.106-122.
- Windows NT/95版について
- 伊藤 栄一郎: [W32 Filer] V0.0ベータ版,
NIFTY-Serve FHPPC LIB(8) #553.
- 伊藤 栄一郎: [W32 Filer] V0.02ベータ版,
NIFTY-Serve FHPPC LIB(8) #555.
☆ 改編の記録
- 96/06/12:
- BSDFIL00.LZHを
NIFTY-Serve FHPPC LIB(8) #550 に登録
- 今回:
- カレントディレクトリの変更やファイルの表示など、version 0.0 で
サポートされていなかった機能を追加
- ワイルドカードの扱いを改善
- ファイルのタイムスタンプがおかしくなるバグの修正
- エミュレータ部の関数の大幅な見直し、ソースファイルの分割
BSD Filer version 0.1 Copyright (C) 1996 by Dai ISHIJIMA