Linux Diary 5

Linux 日記 No.1
Linux 日記 No.2
Linux 日記 No.3
Linux 日記 No.4
いま見ているのが Linux 日記 No.5 です。
Linux 日記 No.6

JF に登録されている HOWTO の翻訳(by Chie Nakatani)リスト


1997 Atlanta

June 7-8 1997,Atlanta Ga
案内はこちらで。
Atlanta Linux Showcase



日記5:Contents

  • ハードディスク追加(sdc)

  • mgetty:PPP/FAX サーバー
    FAX の受信送信、そして私のマシンへ外からログインできるように

  • ttyS* と cua*

  • ttyS* と cua* の違い

  • ttyS* の Permission

  • mgetty:FAX の受信






    ハードディスクの追加

    これは珍しく衝動的だったかもしれない。3つ目のハードディスクをつけました(1997/02/20)。
    scsi : 1 host.
    (1) Vendor: QUANTUM Model: FIREBALL1280S Rev: 630C
    Type: Direct-Access ANSI SCSI revision: 02
    Detected scsi disk sda at scsi0, channel 0, id 0, lun 0

    (2) Vendor: IBM Model: DORS-32160 Rev: S82C
    Type: Direct-Access ANSI SCSI revision: 02
    Detected scsi disk sdb at scsi0, channel 0, id 1, lun 0

    (3) Vendor: SEAGATE Model: ST32155N Rev: 0532
    Type: Direct-Access ANSI SCSI revision: 02
    Detected scsi disk sdc at scsi0, channel 0, id 2, lun 0

    (4)これは CD-ROM ドライブ(id 3)
    Vendor: PLEXTOR Model: CD-ROM PX-8XCS Rev: 1.01
    Type: CD-ROM ANSI SCSI revision: 02
    Detected scsi CD-ROM sr0 at scsi0, channel 0, id 3, lun 0
    scsi : detected 1 SCSI cdrom 3 SCSI disks total.

    ハードディスクは以下のように。
    SCSI device sda: hdwr sector= 512 bytes. Sectors= 2503872 [1222 MB] [1.2 GB]
    SCSI device sdb: hdwr sector= 512 bytes. Sectors= 4226725 [2063 MB] [2.1 GB]
    SCSI device sdc: hdwr sector= 512 bytes. Sectors= 4197405 [2049 MB] [2.0 GB]

    scd にはもちろん Linux をいれますが、どのようにお料理しようかと現在思案中。 RedHat 4.1 を試してみるのも悪くないと思いつつも、慣れた slackware をインストールし、 XFree86 3.2 を試すのも悪くない。
    いずれにしろ、この HDD はやりたくてなかなかできなかったことをいろいろ試してみたいと思って衝動的につけたものなので、そのように使いたいです。
    その後、この HDD のはもうひとつ slackware3.1 が入っておりますが、いまのところはいれてあるだけ。RedHat に挑戦も悪くないと思っていたのですが、現在のところ、私のマシンに外からログインを設定中。



    mgetty:PPP/FAX サーバー

    「私のマシンにアクセスしてね!」いつかこう言ってみたかった!mgetty という FAX ソフトがあると知ったのはもう1年も前のこと。mgetty で興味を持った点は、FAX の送信受信ができるということよりも、外から自分のマシンにログイン、つまり着信ができるという点でした。いつかやろうと思いつつ、ちょっと時間はたってしまったのですが、やっと mgetty の設定をしてみました。

    参考にしたもの
  • UNIX USER 4 月号プレイパーソナルLinux22回「Linux から使う FAX ソフトウェア(2)PPP/FAX のサーバを構築する
  • Serial HOWTO
  • Mgetty + Sendfax Documentation Centre
  • Yahoo! Search Results
  • fax-faq
  • mgetty + sendfax - Table of Contents
  • mgetty + sendfax - Zoltrix

    インストールの手順
    (1)mgetty099-May31.tar.gz は /usr/local/src に置き、展開。
    tar fxvpz mgetty099-May31.tar.gz
    chie:/usr/local/src$ ls
    mgetty-0.99/ mgetty099-May31.tar.gz

    (2)mgetty-0.99 に入り、
    policy.h-dist をpolicy.hという名前でコピーし、それを編集する。
    cp policy.h-dist policy.h

    (3)policy.h の変更箇所

    モデムの種類を調べるためには以下のようにします。
    Linux Kermit>c
    Connecting to /dev/cua1, speed 19200.
    The escape character is Ctrl-? (ASCII 127, DEL)
    Type the escape character followed by C to get back,
    or followed by ? to see other options.
    (Session logged to kermit.log, text)
    at
    OK
    at+fmfr?
    ROCKWELL

    OK
    at+fmdl?
    AC/V34

    OK
    at+frev?
    V1.300-V34_DS

    OK

    このようにすれば、使っているモデムが ROCKWELL かどうかわかります。

    policy.h の変更箇所

    #define LOG_PATH "/var/log/log_mg.%s" log ファイルを記録するディレクトリ
    #define LOCK "/var/lock/LCK..%s" lock ファイルのディレクトリ
    #define LOCKS_BINARY 1
    #define MODEM_INIT_STRING "ATS0=0Q0&D3&C1" 一応デフォルトで使用
    #define FAX_RECV_SWITCHBD 19200 ROCLWELL タイプのモデムなので有効にした。
    #define FAX_STATION_ID "075-***-****" 電話番号
    #define FAX_DIAL_PREFIX "ATDT"
    #define FAX_MODEM_TTYS "ttyS1" シリアルデバイス
    # define MAILER "/usr/sbin/sendmail"

    (4)
    make
    make install

    (5)/etc/inittabu に以下の記述を加えた。
    s2:345:respawn:/usr/local/sbin/mgetty ttyS1

    (6)書きかえたinittab を有効にするため、
    /sbin/init q

    以上で準備完了。

    mgetty が起動しているかどうかを確認する。
    chie:~$ ps ax |grep mgetty
    274 ? S 0:00 /usr/local/sbin/mgetty ttyS1
    この状態になっていれば、tail コマンドで mgetty の動きを見ることができます。
    chie:~$ tail -f /var/log/log_mg.ttyS1 &
    [2] 295
    chie:~$ 04/16 16:56:06 yS1 mdm_command: string 'OK' -> OK
    04/16 16:56:06 yS1 mdm_send: 'AT+FLID="075-***-****"'
    04/16 16:56:06 yS1 mdm_command: string 'AT+FLID="075-***-****"'
    04/16 16:56:06 yS1 mdm_command: string 'OK' -> OK
    04/16 16:56:06 yS1 mdm_send: 'AT+FDCC=1,5,0,2,0,0,0,0'
    04/16 16:56:06 yS1 mdm_command: string 'AT+FDCC=1,5,0,2,0,0,0,0'
    04/16 16:56:06 yS1 mdm_command: string 'OK' -> OK
    04/16 16:56:06 yS1 waiting for line to clear (VTIME), read:
    04/16 16:56:07 yS1 removing lock file
    04/16 16:56:07 yS1 waiting...
    このように mgetty は waiting の状態になっているので、別のマシンから電話でアクセスしてみました。

    CONNECT 28800/ARQ/VFC/LAPM/V42BIS

    Wecome to Linux 2.0.0.


    chie!login: jeanne
    Password:
    Last login: Wed Apr 16 11:35:12 on ttyS1
    Linux 2.0.0.

    I'm rated PG-34!!

    chie:~$ ls
    #*mail*#a00603# lilo.17.tar
    #.bash_history# linuxdoc/


    現在のところはここまでです。mgetty の機能を本格的に使うにはもう少々の設定が必要です。

    (7)tryal and error
    (1)から(6)までの設定はそれほど難しいことは何もありません。けれど、やっぱりいくつか失敗もあるし、いわゆるはまった状態になってしまったことも。こういうことは「難しい」ことだから起きるわけではなくて、できなくなる、わからなくなる原因は、ただただ自分で、自分のマシンがどうなっているかをちゃんと知ってるかどうか、そして、これから設定しようとすることについての周辺知識をちゃんと持っているかどうか、そこいらあたりにあるようです。 そういう意味では、いじっていたらできちゃったというような状態よりは、エラーにぶつかるほうがはるかに得るところは多い。

    一通りの設定が終った後、mgetty は waiting 状態になっているけれど、ppp 接続をしようとしたらモデムにアクセスしないという状態に陥りました。

    原因は ppp-on スクリプトのなかの記述にモデムデバイスの設定が /dev/cua1 となっていたからでした。この部分を /dev/ttyS1 に書きかえることで、mgetty がwaiting 状態(つまり着信待ち)で、 ppp 接続(発信)をすることができました。原因としたら単純なことにしかすぎないのですが(この件は ttyS* と cua* の項をご覧ください)、もしやここに原因が!と思いつくまでにちょっと時間を食ってのまわり道となってしまいました。

    私の頭のなかでは、
    /dev/cua* は発信
    /dev/ttyS* は着信
    のようになっていて、でも、mgetty をいじっていたらどうも???違う。 そこで最新の Serial HOWTO や FAQ そして mgetty + sendfax - Table of Contents などに目を通しました。


    ttyS* と cua*
    mgetty では ttyS* を使うように設定します。
    Slackware3.1 の/etc/rc.d にある rc.serial ファイルでは
    # ${SETSERIAL} /dev/cua0 ${AUTO_IRQ} skip_test autoconfig
    このような記述になっているので、私はデバイスは cua* で設定していました。

    現行では、 PPP のスクリプトも、kermit などの設定も /dev/cua1 になっていました。 その状態のところに、 mgetty で ttyS1 を使うように指定したので、しばらく混乱してしまいました。

    mgetty + sendfax - Table of Contents mgetty + sendfax - Linux の項 section51 で

    ttyS と cua についてのノートがあることがわかりました。
    For some background about `ttyS' vs. `cua', you might want to read a mail from the author of the Linux serial drivers, Ted Ts'o, posted to the Linux-PPP mailing list. I have included it in `doc/ttyS-cua.txt'.

    ttyS* と /dev/cua* は何が違うかということが気になったのですが、 "The only difference" について、以下の部分に簡単な説明があります。 私は、ttyS1 と /dev/cua1 の設定を混在させてしまったので、 section51 に書かれているような状態になってしまいました。

    Some guys seemingly can't resist posting misinformation to the net all the time, don't believe 'em. The `/dev/cua*' devices are not different from the `/dev/ttyS*' devices concerning data flow or modem control lines. The only difference is how the device reacts if you do an open(): Opening `/dev/ttyS*' normally blocks until the "carrier detect" line goes active (unless open() is called with the O_NDELAY flag; mgetty and all dial-out programs do that), and opening `/dev/cua*' will return an error message (errno=EBUSY) if another process has the device already open, thus preventing dial-out on `/dev/cua*' if mgetty is active on `/dev/ttyS*'.


    slackware3.1 を使っているのですが、私はppp やkermit の接続に /dev/cua1 を使っていました。けれど、改めて /usr/sbin にあるオリジナルの ppp-on ファイルのなかを見てみましたら、

    exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyS0 38400 \

    となっていました。私はここを自分で /dev/cua1 に変更していたので、 mgetty を設定すると、/dev/cua1 が busy になってしまうという現象にぶつ かったのですが、これがなかなかおもしろいのです。

    ttyS* と cua* の使い分けとその理由についていろいろ文書を探していたので すが、/usr/sbin/ppp-on のコメントにはちゃんと以下のようなことが書かれ ています。(目に入ってなかったですねぇ)ほんとに、 Please, don't forget !! でした。

    # I put most of the common options on this command. Please, don't
    # forget the 'lock' option or some programs such as mgetty will not
    # work.

    ttyS* を使っている mgetty が動作している状態では、/dev/cua* は使えない。 (これは次の文でも説明してあるように、 lock ファイルの動きをみたらわか るのですが) dial-in と dial-out 両方で ttyS* を使えば問題はないという ことになります。

    mgetty + sendfax - Table of ContentsSection51
    We use `/dev/ttyS*' all the time for dial-in and for dial-out, and believe me, it works, and it's the only combination that will work properly. The kernel locking mechanism only works if you use modem auto-answer (the getty process sleeps until the modem gets a carrier), and mgetty uses manual answer (it waits for the RING message from the modem), which will save your callers a lot of grief because their calls will only be answered if your computer is ready to receive a call. Part of the motivation for writing mgetty was being tired of losing lots of money for useless calls to a hung machine.



    ttyS* と cua* の相違
    この件に関しては、JF で教えて頂きました。
    To: JF@jf.gee.kyoto-u.ac.jp (Japanese Linux FAQ Mailing List)
    Subject: [JF:4334] Re: about ttyS* & cua*
    Date: Fri, 18 Apr 97 14:46:33 +0900
    From: Shinya Hanataka
    Posted: Fri, 18 Apr 1997 14:45:11 +0900
    ---------
    ttyS? と cua? の話ですが、歴史的にはモデムがまだダイアラーを内蔵してい なかった大昔に遡ります。ttyS? の方は通常の通信用ポートでモデムや端末に 接続しておりましたが、cua? の方はダイアラーというダイアル発信専用の装 置に接続していました。

    モデムがダイアル機能を内蔵するが一般的になってきた時、互換性を保つため に cua? はモデムと同じシリアル・デバイスに接続するようになりましたが、 ttyS? の方は通信用なのでオープンする時に回線が確立するまでは待つ、cua? の方は発信用なのでいつでもオープンできるといような仕様になっています。

    まこと良い方法のようなのですが、大きな問題がありまして、発信と受信を一 つの回線を使用しようとした場合にロック・ファイル名の違いなどにより、デ バイスの取り合いが発生してしまいます。それで linux において最近は受信 にも発信にも ttyS? の方を使うのがあたり前になっています。発信の場合に はソフトでオープンの時のみ non-blocking モードしてやることで cua? と同 じように使用することができます。

    結論として発信専用の場合やデバッグ時を除いては ttyS? を使用するです。
    ----
    ここで言っている「通信用」とは「発呼用」という言葉があたるかもしれません。(これもある方から教えて頂きました。

    「ttyS? の方は通信用なのでオープンする時に回線が確立するまでは待つ、cua? の方は発信用なのでいつでもオープンできるといような仕様になっています。」ttyS* と cua* はどう違うかというのは、このような動きの違いがあるということで、このあたりの違いはとてもおもしろいと思います。

    mgetty は ttyS のこのような動きを利用しているのだろうけれど、 mgetty はどのように動くか(Section 8)で、ttyS* のロックファイルの操作は tricky だと書いてありました。
    The lock file handling is tricky, but very important. It is essential
    確かにtricky かもしれないなと思う。

    mgetty が waiting になるとき、一旦作られた lock file は 取り除かれて、 その状態で waiting になっている。waiting になっている時は lock file が ないので、最初、waiting の時は cua* は動くのかと思っていたのです。

    Section8 の記述も興味を持って読みました。
    The lock file handling is tricky, but very important. It is essential that all programs that use the modem agree on one locking protocol, otherwise one program might not know that the modem is in use and will try to dial out anyway. A typical lock file is a file called `/var/lock/LCK..ttyxx', containing the process ID (PID) of the process currently using the modem. Other processes can read it and tell if the lock file belongs to an existing process or if it is "stale" and can be removed. This will obviously not work if the processes look for lock files in different places, or if one of them writes its PID in ASCII and another one tries to read it as a binary number (while mgetty and sendfax do not care whether foreign lock files are written in binary or ascii format, other programs do! mgetty can sometimes detect this problem, and will then log a warning).


    ttyS* の Permission
    mgetty はちゃんと動き、FAX の受信も ppp 接続(発信)もちゃんとできるよう になって、通常の使用にはさしつかえはない状態にはなったのですが、今、ちょっ とぶつかっているのが、ttyS* のpermissions に関することです。この件に関 してはmgetty + sendfax - Table of Contents section51 に以下のような記述がありました。

    Section51
    If you get into trouble with write permissions on ttySx, you may add a new group `dialout' to `/etc/group', then chown .dialout /dev/ttySx your device, and add your users to the dialout group. Don't forget to add the system user `uucp' to that group (UUCP needs to have modem access), and make sure, port-group in mgetty's configuration file is set up correctly. The concept of such a dialout group is already used in most Linux distributions today.

    ttyS* の write permissions に問題があるなら、
    `dialout' という group を作りなさいとのこと。

    私はいま、slackware3.1 を使っているのですが、
    確かに、/etc/group には dialout というグループはありません。

    sention51 にこんな記述がありました。
    The concept of such a dialout group is already used in most Linux distributions today.

    最近の Linux には dialout という group がおかれているそうです。mgetty で ttyS* を使った場合、ひとつのデバイスで着信発信の両方に使えるわけだから、ttyS* は「着信用デバイス」、cua* は「発信用デバイス」とだけ説明すると少々混乱します。 なぜ group 登録をするかということに関しては、mgetty 添付の FAQ に回答がありました。

    Q: every time mgetty starts up, the permissions of my tty device get changed and I have to issue "chmod +w /dev/ttySx" to be able to dial out.

    A: that's not a bug, that's a feature. You don't *want* to allow anybody using your machine to be able to dial out (think of your phone costs!), so it's a security issue. If you *want* to allow dialout for everyone, #define FILE_MODE 0666 in policy.h. I would not recommend it, I would give access to a special group, and put every one that may dial out into this group.

    Q: mgetty が始動するといつも私の tty device のパーミッションが変更されます。そうすると私はダイアルアウトできるように "chmod +w /dev/ttySx" をしなければなりません。

    A: それはバグではありません。それが仕様です。あなたはあなたのマシンを誰でもがダイアルアウト(あなたが払う電話代を考慮して!)できるように望んではいけません。それはセキュリティの問題です。 誰にでもダイアルアウトを許可したいなら、policy.h で #define FILE_MODE 0666 にします。そのようにするのをお勧めしたくありません。私は特定のグループにアクセス権を与え、そしてこのグループにダイアルアウトする許可を与えます。

    ローカルユーザの誰でもが使えるようにするよりは特定のグループにのみ許可をしておけば、自分が使用する限りにおいては問題はないわけですから。実は、私もttyS1 に対して、数回 chmod +w /dev/ttySx このようにして permission を変更していました。ところがもとに戻ってしまうのです。なぜだろうと思っていたのですが、that's not a bug, that's a feature. ということだそうで、なるほど、納得。


    mgetty:FAX の受信
    ちょっと感激、 FAX の受信は大成功!mgetty を waiting の状態にさえしておけば、mgetty はかかってきた電話が、通常の声の電話か、 FAX か、パソコンへのログインかを見分けてくれます。

    そこで FAX の受信実験を行いました。送ったものは、日本語で書かれたもの。 パソコンは自動的に FAX を受け取り、 /var/spool/fax/incoming に入ります。

    chie:/var/spool/fax/incoming# ls
    ff354cfa6S1-_075-464-3091-54_.01 ff355822cS1-_075-464-3091-54_.01
    ff35580e4S1-_075-464-3091-54_.01 ff355832aS1-_075-464-3091-54_.01
    ファイルの名前が長いのが少々難点ではありますが、ff というのはファインモード、ちなみに fn はノーマルモードということになります。

    さて、受け取ったファイルはそのままでは見ることはできないので、 mgetty-0.99 のディレクトリの下tools のなかにある g3topbm を使います。このツールを使って、まずは xv で画面に表示する、あるいは受信ファイルを *.pbm というファイルに変換して、xv 等で見ることができます。

    chie:/usr/local/src/mgetty-0.99/tools# ls
    g3cat g3topbm pbmtog3

    g3cat g3topbm pbmtog3 これらのツールがパスのあるディレクトリにないと面倒なので、これらを /usr/local/bin にコピーしました。
    こうすれば、xv を起動して一発で受信ファイルを見ることができます。
    chie:/var/spool/fax/incoming# g3topbm /var/spool/fax/incoming/ff355832aS1-_075-464-3091-54_.01 | xv -

    あるいは一度 *.bpm に変換します。
    chie:/usr/spool/fax/incoming# cat ff355832aS1-_075-464-3091-54_.01 | g3topbm >/tmp/fax2.pbm
    chie:/usr/spool/fax/incoming# cd /tmp
    fax2.pbm
    というファイルにしておいて、それを xv で見ることもできます。 xv でfax2.pbm を表示させ、そのファイルを jgp でセーブしてみました。 日本語文のFAX サンプルです。


    Linuxmemo(このファイル)の先頭に戻る




    back to Home Page(English)

    ホームページに戻る(日本語)