Raspberry Pi と Asterisk + iaxmodem + hylafax と Fusion IP-Phone Smart で作る FAX サーバ(2)
の続きです。
セットアップの確認
前回であらかたのセットアップが終わったので、セットアップが出来ているかをまずは確認しましょう。
まず、 Asterisk のコンソールを起動します。
$ sudo asterisk -vvvr Asterisk 1.8.13.1~dfsg1-3+deb7u3, Copyright (C) 1999 - 2012 Digium, Inc. and others. Created by Mark Spencer <markster@digium.com> Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= == Parsing '/etc/asterisk/asterisk.conf': == Found Running as group 'asterisk' == Parsing '/etc/asterisk/extconfig.conf': == Found Connected to Asterisk 1.8.13.1~dfsg1-3+deb7u3 currently running on rpi120 (pid = 10820) Verbosity is at least 4 rpi120*CLI> sip show peers
まず、sip show peers で SIP の状態を確認します。
rpi120*CLI> sip show peers Name/username Host Dyn Forcerport ACL Port Status fusion-smart/12345678 61.213.230.153 N 5060 OK (11 ms) 1 sip peers [Monitored: 1 online, 0 offline Unmonitored: 0 online, 0 offline]
「Status OK」になっていれば大丈夫です。
次に、iax2 show peers で、 iaxmodem が見えているかを確認します。
rpi120*CLI> iax2 show peers Name/Username Host Mask Port Status iaxmodem/iaxmod 127.0.0.1 (D) 255.255.255.255 4570 Unmonitored 1 iax2 peers [0 online, 0 offline, 1 unmonitored]
iaxmodem のモニタが通りませんが(というよりモニタ機能がない?)、このように登録ができていれば大丈夫です。
あとは、Fusion IP-Phone Smart の 050 番号に FAX を送ってみて、動作を確認してください。
動作確認のポイント
モデムの状態
faxgetty は、/var/log/daemon.log にログを出しています。モデムのログがまずここに出ます。
$ sudo cat /var/log/daemon.log | grep FaxGetty (略) Dec 25 05:28:16 rpi120 FaxGetty[2378]: MODEM set DTR OFF Dec 25 05:28:16 rpi120 FaxGetty[2378]: MODEM set baud rate: 0 baud (flow control unchanged) Dec 25 05:28:16 rpi120 FaxGetty[2378]: DELAY 75 ms Dec 25 05:28:16 rpi120 FaxGetty[2378]: MODEM set DTR ON Dec 25 05:28:16 rpi120 FaxGetty[2378]: DELAY 2600 ms Dec 25 05:28:19 rpi120 FaxGetty[2371]: STATE CHANGE: RUNNING -> LOCKWAIT (timeout 30) Dec 25 05:28:19 rpi120 FaxGetty[2371]: MODEM input buffering enabled Dec 25 05:28:19 rpi120 FaxGetty[2378]: MODEM set baud rate: 19200 baud, input flow XON/XOFF, output flow XON/XOFF Dec 25 05:28:19 rpi120 FaxGetty[2378]: DELAY 10 ms Dec 25 05:28:19 rpi120 FaxGetty[2378]: MODEM flush i/o Dec 25 05:28:19 rpi120 FaxGetty[2378]: <-- [4:ATZ\r] Dec 25 05:28:19 rpi120 FaxGetty[2378]: --> [2:OK] Dec 25 05:28:19 rpi120 FaxGetty[2378]: DELAY 3000 ms Dec 25 05:28:22 rpi120 FaxGetty[2378]: MODEM flush i/o Dec 25 05:28:22 rpi120 FaxGetty[2378]: <-- [10:AT+VCID=1\r] Dec 25 05:28:22 rpi120 FaxGetty[2378]: --> [9:AT+VCID=1] Dec 25 05:28:22 rpi120 FaxGetty[2378]: --> [2:OK]
また、送信・受信時の詳細ログが、キューごとのファイルになって /var/spool/hylafax/log に格納されています。
$ sudo cat c000000186 Dec 26 23:10:39.40: [ 2382]: SESSION BEGIN 000000186 8150XXXXXXXX Dec 26 23:10:39.40: [ 2382]: HylaFAX (tm) Version 6.0.6 Dec 26 23:10:39.40: [ 2382]: CallID: "XXXXXXXXXXX" "XXXXXXXXXX" "<NONE>" "s" Dec 26 23:10:39.40: [ 2382]: MODEM set XON/XOFF/FLUSH: input ignored, output disabled Dec 26 23:10:39.40: [ 2382]: <-- [4:ATA\r] Dec 26 23:10:42.19: [ 2382]: --> [10:NO CARRIER] Dec 26 23:10:42.19: [ 2382]: ANSWER: Ring detected without successful handshake Dec 26 23:10:42.19: [ 2382]: Ring detected without successful handshake Dec 26 23:10:42.19: [ 2382]: SESSION END
このログは、FAX ではない電話からテストコールしたときのものです。
faxstat
faxstat コマンドは、送受信のキューの結果を表示します。 faxstat -d でこれまでに処理したジョブの一覧が出ます。
$ sudo faxstat -d HylaFAX scheduler on rpi120: Running Modem ttyIAX (+81.50.XXXX.XXXX): Running and idle JID S Number Pages Dials Date Time Status 16 F 050XXXXXXXX 0:1 2:2 2014/12/26 16.21.06 No response to PPS repeated 8 D 050XXXXXXXX 1:1 2:2 2014/12/26 11.24.32 15 F 03XXXXXXXX 0:1 2:2 2014/12/26 16.19.48 No carrier detected; too ma 12 D 03XXXXXXXX 1:1 1:2 2014/12/26 12.55.46 20 F 050XXXXXXXX 0:4 2:2 2014/12/26 16.47.17 Failure to train remote mod 10 F 03XXXXXXXX 0:1 2:2 2014/12/26 11.54.15 Failure to receive silence 9 F 03XXXXXXXX 0:1 2:2 2014/12/26 11.24.55 Busy signal detected; too m 14 F 03XXXXXXXX 0:1 2:2 2014/12/26 16.01.47 Failure to train remote mod 18 F 03XXXXXXXX 0:1 2:2 2014/12/26 16.29.45 Failure to train remote mod 13 D 03XXXXXXXX 1:1 2:2 2014/12/26 15.29.03 17 F 03XXXXXXXX 0:1 2:2 2014/12/26 16.25.11 Busy signal detected; too m 11 F 03XXXXXXXX 0:1 2:2 2014/12/26 11.57.10 DIS/DTC received 3 times; D 19 D 050XXXXXXXX 1:1 1:2 2014/12/26 16.37.46 21 F 03XXXXXXXX 0:1 2:2 2014/12/26 16.50.44 Failure to train remote mod
ジョブの番号順には出力されない、というちょっと不思議な仕様がある *1 ため、 faxstat -d | sort -n とかのほうが見やすいかもしれません。
faxstat -s はキューに入ったジョブの一覧が出ます。キューになにもいない場合はモデムの状態だけが出ます。
$ sudo faxstat -s HylaFAX scheduler on rpi120: Running Modem ttyIAX (+81.50.XXXX.XXXX): Running and idle
faxstat は、root 以外で実行すると「Bad (null) user name; your password file entry probably has bogus GECOS field information.」と出ることがありますが、これ無視していいんじゃないかと思います。 /etc/passwd の5番目のフィールド見てるって、そこに何か書いてある人っていまほっとんどおらんのと違うか… *2
FAX 送信
$ /usr/bin/sendfax -n -f USERNAME -d 03XXXXXXXX /path/to/faxsendfile.txt
faxadduser でユーザの登録を…という記事をたまに見かけますが、少なくとも aptitude でインストールする sendfax コマンド*3では -f オプションで自分のユーザー名を書いてしまえば送信出来ちゃいました。あと、 -d で送信先の電話番号をハイフン抜きで記述してください。
/path/to/faxsendfile.txt で送信するファイルを指定しますが、テキストファイル、PDFファイルを指定可能です。
オチ
さて、ここまで書いておいてなんですが、Raspberry Pi に FAX サーバをやらせてみると、実に送受信が安定しないことがあります。安定するときもあるししない時もありました。どうも Fusion IP-Phone Smart の音声品質自体がたまに落ちる *4 のか、それとも Raspberry Pi に何かが起きているのか、相手方 FAX のネゴシエーションが 2400bps でも成立しないことも一度二度ではありませんでした。SIPのコーデックを ulaw から gsm に変えて遅延を減らそうとしたら却ってひどくなった(送受信の9割近くがエラーになる)ので、ちょっと打つ手が見つかりません。
ただ、top をガン見したり sar をガン見する限りでは、 CPU やメモリが足りないという感じもなかったので、この「具合の悪さ」の正体がいまいちまだわかっていません。もうちょっとだけ続くのじゃよ…
*1:http://www.hylafax.org/archive/2005-07/msg00121.php によると、ジョブファイルの名前ではなく、inode でソートするという意味不明な仕様になっているんだそうな。
*2:http://www.hylafax.org/archive/2001-05/msg00353.php 参照
*3:hylafaxをインストールすると一緒に入ります
*4:といっても、普通に通話をする分にはあまり気にならない程度の遅延なのですが