UNIX 母艦化計画 その1
              BSD Filer -- FreeBSD を Filer の server に

                  Copyright (C) 1996 by Dai ISHIJIMA

v0.1のドキュメントへ, 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のファイルの一覧を参照する
  ・LXのファイルをFreeBSDにコピーする
  ・FreeBSDのファイルをLXにコピーする

ただし、

  ・LXからアクセスできるFreeBSDのファイルは、このプログラムを
    起動したディレクトリにあるものだけ
  ・FreeBSDのファイルで、名前が 8+3文字を越えるものおよび
    名前に英数字以外の文字を含むものはLXから見えない
  ・LXからFreeBSDのディレクトリを移動することはできない
  ・その他いろいろ f(^^;)

といった制約があります。


☆ 動作環境

  このプログラムそのものは FreeBSD 2.x 上で動きます。LX では動きません。
動作テストは以下の組合せで行いました。

    クライアント: HP 200LX 2Mモデル (無改造)
    サーバ: Digital HiNote Ultra CS433 / FreeBSD 2.1R / 赤外線ポート接続,
            自分で組み立てたAT互換機 / FreeBSD 2.1R / 自作クロスケーブル,
            EPSON PC-386GS2 (改) / FreeBSD(98) 2.0R / 自作クロスケーブル

なお、テストに使った速度は 9600bps です。


☆ アーカイブファイルに含まれるファイル

  アーカイブファイル bsdfil00.lzh には、

      readme.doc      このファイル
      bsdfiler.c      メインプログラム
      bsdfiler.h      そのヘッダファイル
      filemisc.c      ワイルドカードなど、ファイルまわりのプログラム
      crc.c           CRCを計算するプログラム
      tty.c           シリアルポートまわりのプログラム
      makefile        bsdfiler作成用メイクファイル
      peeping-com.c   特別付録

が含まれています。拡張子 .lzh からわかるように、このアーカイブファイル
は UNIX版 LHa (lha(1)) で作成されています。 アーカイブ内の日本語コード
はシフトJIS、改行コードは CR + LF になっていますので、FreeBSD で解凍す
る場合は、't' あるいは 'et' modifier をつけてください。

   操作例:
      FreeBSDで利用している日本語コードが SJIS の場合
      % lha xt bsdfil00.lzh

      FreeBSDで利用している日本語コードが EUC の場合
      % lha xet bsdfil00.lzh

DOS で解凍する場合は、普通に解凍してください。
  付録の peeping-com.c は、 Filer のリモート接続で使われている通信フォ
ーマットを調べるのに使ったプログラムです。また crc.c は、-DMAIN オプシ
ョンをつけて単体でコンパイルすると、標準入力からのデータの CRCを計算す
るプログラムになります。詳しくは各ファイル中のコメント文などを参照して
ください。


☆ 準備 -- 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
                                                      ↑
                                            ここを on に変更します

編集が終ったら、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 の設定を元に戻して
おきましょう。

      ttyd0   "/usr/libexec/getty std.9600"   unknown off insecure
                                                      ↑
                                            ここを off に戻します

設定を戻したら、再度 kill -HUP 1 を実行してください。


☆ コンパイル方法

  適当なディレクトリでアーカイブファイル bsdfil00.lzhを解凍し、make(1)
でコンパイルします。ここではアーカイブファイルが /tmp にあり、ホームデ
ィレクトリの下の bsdfiler でコンパイルする例を示します。

   操作例
      % mkdir ~/bsdfiler
      % cd ~/bsdfiler
      % lha xet /tmp/bsdfil00.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)

接続できたら、コピーしたいファイルの上にハイライトバーを移動させ、Copy
(F2) でコピーします。
  このプログラムは、クライアント側から接続解除要求を受けると終了します。
つまり、終了するには 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... も再度確認してください。


☆ 制限事項

  このプログラムは、Filer のサーバモードが用意している機能のすべてを
サポートできてはいません。できることは、

  ・FreeBSDのディレクトリリストを参照すること
  ・LXのファイルをFreeBSDにコピーすること
  ・FreeBSDのファイルをLXにコピーすること

だけです。また、

  ・LXからアクセスできるFreeBSDのファイルは、このプログラムを
    起動したディレクトリにあるものだけ
  ・FreeBSDのファイルで、名前が 8+3文字を越えるものおよび
    名前に英数字以外の文字を含むものはLXから見えない
  ・LXからFreeBSDのディレクトリを移動することはできない

という制約があります。さらに、

  ・FreeBSD側のディレクトリの変更
  ・ディレクトリとその中に含まれるファイルのコピー

といった、凝った機能はまだインプリメントされていません。
  それから、このプログラムにはいろいろなバグが残っています。

  ・通信時に生じるエラーに対処してていない
  ・タイムスタンプの処理が不適切
  ・ワイルドカードの扱いが非常にいいかげん
  ・ファイル転送時にファイルサイズを誤って通知してしまい、
    そのためファイル転送時にでるバーグラフがおかしくなることがある

これ以外にもあるかもしれません (^^;;;)。


☆ おことわり

  このプログラムは (狭義の) フリーソフトウェアです。パブリックドメイン
ソフトウェア、シェアウェアではありません。このプログラムの著作権は、作
者である いしじま☆だい (BXC01416@niftyserve.or.jp) が所有しています。
  このプログラムの運用によって生じた結果については一切責任を負いかねま
すのでご了承ください。使用前には LX、FreeBSD ともにディスクのバックアッ
プをとったほうがいいかもしれません。
  このプログラムの全部、または一部をそのまま利用して商用目的のプログラ
ムを作成することはご遠慮ください。
  フリーソフトウェアの作成や個人的な範囲での利用が目的の場合は、このプ
ログラムの全部、または一部をそのまま利用してもかまいません。他機種への
移植や他のオペレーティングシステムへの移植およびフリーソフトウェアとし
ての公開は大歓迎です。その場合、作者への連絡は不要です。 (でも、報告し
てくれたり、ドキュメントに一筆書いてくれたり、さらには、そのソフトのソ
ースを公開してもらえると非常にうれしいです。)
  このプログラムを再配布する場合は、アーカイブファイル bsdfil00.lzh に
含まれるすべてのファイルを変更せずにそのまま配布してください。再配布す
る場合はメイルなどでご連絡いただけるとありがたいです。


☆ 今後の予定

  ・多数潜んでいるバグのフィックス
  ・Filer のサーバモードが用意している他の機能のサポート
  ・SunOS 4.x, NEWS-OS 4.x など、他の BSD UNIX への移植
  ・BSD から LX のファイルを操作できるようにする
    (BSD をクライアント、LX をサーバにする)


☆ 参考文献

  ・LXでの通信、ファイル転送について
      1. FMODEM携帯端末研究会: HP 100LX徹底活用ブック
         (BNN, 1994) pp.109-113.
      2. 関谷 博之, 濱田 宏貴: HP 100/200LX BIBLE
         (ソフトバンク, 1995) pp.17-27, 201-204.
  ・データ通信について
      1. 里 和政:「RS-232Cインターフェースの基礎」,
         トランジスタ技術スペシャル No.9 (CQ出版社, 1988), pp.37-42.
      2. 沖野 新:「PC9801によるBSC伝送の実際」,
         トランジスタ技術スペシャル No.9 (CQ出版社, 1988), pp.56-61.
      3. W.H.Press, et al.: Numerical Recipes in C
         (Cambridge University Press, 1992) 2nd ed., pp.896-901.
  ・FreeBSD 2.1R (UNIX) の各種設定について
      1. 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).
      2. Evi Nemeth, Garth Snyder, Scott Seebas 共著, 井上 尚司 監訳:
         UNIXシステム管理入門 (ソフトバンク, 1992), pp.106-122.


bsdfiler version 0.0                Copyright (C) 1996 by Dai ISHIJIMA