投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償)
logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)
The Document Foundation Wiki

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★
ラベル asterisk の投稿を表示しています。 すべての投稿を表示
ラベル asterisk の投稿を表示しています。 すべての投稿を表示

2019年3月31日日曜日

【Asterisk 11.17.1】長いエクステンション名でDialを呼び出すとエラーが発生した。【Linux CentOS 6】

長い名前でエラー

なぜかどうしてもエラー「No such extension/context」がでてしまう部分があり、
原因究明に時間がかかってしまったのでメモしておく。

その箇所では、Dialによって、別のコンテクストのエクステンションがダイヤルされている。
CLIでそのエラー箇所を見ていると、「No such extension/context」が現れていた。
Dial("SIP/long_long_sip_device_name-000000ba", "Local/long_long_extension_name@long_long_context_name") in new stack
NOTICE[26014][C-00000024]: chan_local.c:971 local_call: No such extension/context long_long_extension_name@long_long_context_name while calling Local channel
どれだけ調べても、確かにそれらのエクステンションとコンテクストは存在している。
どうも、エラーメッセージの言う問題とは異なる問題が潜んでいるらしい。

試行錯誤していると、エクステンション名か、コンテキスト名か、あるいは、呼出元のSIPデバイス名が長いことが理由だとわかってきた。


○結局、エクステンション名を下記のように短くすることで問題を回避することができた。即ち、26文字では同様にエラーとなった。
・エクステンション名・・・25文字
そのときの、コンテキスト名、SIPデバイス名の長さは次の通りである。
・コンテキスト名・・・47文字
・呼び出し元のSIPデバイス名・・・53文字
もちろん、コンテキスト名などを短くすることによって回避することも可能かもしれないが調べていない。
エクステンション名を短くする代わりに、コンテキスト名を短くすることでもうまく動作するかもしれないということである。
もちろん、エクステンションの必須条件が25文字なのかもしれない。

これは調べていないからわからない。

2018年12月9日日曜日

【Linux CentOS 7】ASTERISK 11.25.3 をインストールし動作させた。


下記で用いている特権Dockerコンテナは、次のページで作成したイメージをベースにしている。

しかし、通常のCentOS 7でも同じ方法でASTERISKを導入できると思う。

【Linux CentOS 7】(ベースコンテナの作成)SSH接続可能なDockerコンテナでの日本用ロケールの有効化と検証(man,dateの日本語表示)【Docker-ce 18.06.1.ce】


まず、次のようにしてコンテナを動作させた。
Dockerホスト222ポートを22ポートに通して、SSH接続を受け付けている。

Asteriskの実際の動作で必要なポートの解放については、ここでは考慮していない。

(警告)
ここで作成しているDockerコンテナは、信頼のおけるローカルネットワークのみで動作するホストで運用するものとして構築している。
ホスト上のいずれかのネットワークインターフェイスがインターネットに直接接している場合、このコンテナの運用はセキュリティの観点から非常に危険なので動作させてはいけない。
(Dockerのデフォルトでは外部からのアクセスを許してしまうことになってしまうため。)

# docker run --privileged -d -p 222:22 --name asterisk11 image_centos7-ja_20181208 /sbin/init

そして、このコンテナにSSH接続を行い、下記のように設定作業を行った。



■ASTERISKのインストール

○アップデート
[root@24ad4455f276 ~]# yum update


○必要なパッケージの導入
[root@24ad4455f276 ~]# yum install gcc gcc-c++ libxml2 libxml2-devel openssl-devel ncurses-devel sqlite-devel newt-devel libuuid-devel uuid-devel make wget


○ソースファイルの展開先
[root@24ad4455f276 ~]# mkdir software/asterisk -p
[root@24ad4455f276 ~]# cd software/asterisk/


○ソースファイルの取得
[root@24ad4455f276 asterisk]# wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-11.25.3.tar.gz

[root@24ad4455f276 asterisk]# ls -l
total 34312
-rw-r--r-- 1 root root 35134682 Sep 19  2017 asterisk-11.25.3.tar.gz

○コンパイルとインストール
[root@24ad4455f276 asterisk]# tar zxvf asterisk-11.25.3.tar.gz
[root@24ad4455f276 asterisk]# cd asterisk-11.25.3

以下、(1)(2)(3)の手順がある。

(1)
[root@24ad4455f276 asterisk-11.25.3]# ./configure
(略)
configure: creating ./config.status
config.status: creating makeopts
config.status: creating autoconfig.h
configure: Menuselect build configuration successfully completed
               .$$$$$$$$$$$$$$$=..
            .$7$7..          .7$$7:.
          .$$:.                 ,$7.7
        .$7.     7$$$$           .$$77
     ..$$.       $$$$$            .$$$7
    ..7$   .?.   $$$$$   .?.       7$$$.
   $.$.   .$$$7. $$$$7 .7$$$.      .$$$.
 .777.   .$$$$$$77$$$77$$$$$7.      $$$,
 $$$~      .7$$$$$$$$$$$$$7.       .$$$.
.$$7          .7$$$$$$$7:          ?$$$.
$$$          ?7$$$$$$$$$$I        .$$$7
$$$       .7$$$$$$$$$$$$$$$$      :$$$.
$$$       $$$$$$7$$$$$$$$$$$$    .$$$.
$$$        $$$   7$$$7  .$$$    .$$$.
$$$$             $$$$7         .$$$.
7$$$7            7$$$$        7$$$
 $$$$$                        $$$
  $$$$7.                       $$  (TM)
   $$$$$$$.           .7$$$$$$  $$
     $$$$$$$$$$$$7$$$$$$$$$.$$$$$$
       $$$$$$$$$$$$$$$$.
configure: Package configured for:
configure: OS type  : linux-gnu
configure: Host CPU : x86_64
configure: build-cpu:vendor:os: x86_64 : unknown : linux-gnu :
configure: host-cpu:vendor:os: x86_64 : unknown : linux-gnu :

(2)
[root@24ad4455f276 asterisk-11.25.3]# make
(略)
updating cache ./config.cache
creating ./config.status
creating Makefile
creating makelist
creating config.h
   [LD] abstract_jb.o acl.o adsi.o alaw.o aoc.o app.o ast_expr2.o ast_expr2f.o asterisk.o astfd.o astmm.o astobj2.o audiohook.o autochan.o autoservice.o bridging.o callerid.o ccss.o cdr.o cel.o channel.o channel_internal_api.o chanvars.o cli.o config.o config_options.o data.o datastore.o db.o devicestate.o dial.o dns.o dnsmgr.o dsp.o enum.o event.o features.o file.o fixedjitterbuf.o format.o format_cap.o format_pref.o frame.o framehook.o fskmodem.o global_datastores.o hashtab.o heap.o http.o image.o indications.o io.o jitterbuf.o loader.o lock.o logger.o manager.o md5.o message.o named_acl.o netsock.o netsock2.o pbx.o plc.o poll.o presencestate.o privacy.o rtp_engine.o say.o sched.o security_events.o sha1.o sip_api.o slinfactory.o srv.o stdtime/localtime.o strcompat.o strings.o stun.o syslog.o taskprocessor.o tcptls.o tdd.o term.o test.o threadstorage.o timing.o translate.o udptl.o ulaw.o utils.o version.o xml.o xmldoc.o editline/libedit.a  -> asterisk
Building Documentation For: channels pbx apps codecs formats cdr cel bridges funcs tests main res addons
 +--------- Asterisk Build Complete ---------+
 + Asterisk has successfully been built, and +
 + can be installed by running:              +
 +                                           +
 +                make install               +
 +-------------------------------------------+

(3)
[root@24ad4455f276 asterisk-11.25.3]# make install
(略)
 +---- Asterisk Installation Complete -------+
 +                                           +
 +    YOU MUST READ THE SECURITY DOCUMENT    +
 +                                           +
 + Asterisk has successfully been installed. +
 + If you would like to install the sample   +
 + configuration files (overwriting any      +
 + existing config files), run:              +
 +                                           +
 +                make samples               +
 +                                           +
 +-----------------  or ---------------------+
 +                                           +
 + You can go ahead and install the asterisk +
 + program documentation now or later run:   +
 +                                           +
 +               make progdocs               +
 +                                           +
 + **Note** This requires that you have      +
 + doxygen installed on your local system    +
 +-------------------------------------------+

○サンプルファイルのインストール
[root@24ad4455f276 asterisk-11.25.3]# make samples


○自動起動用のスクリプトのインストール
[root@24ad4455f276 asterisk-11.25.3]# make config


以下、asteriskを起動させる段階でも、パッケージ不足や手順の不足を補っている。



■asteriskの起動

〇システム起動時に自動起動させる設定
[root@24ad4455f276 asterisk-11.25.3]# systemctl enable asterisk
asterisk.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig asterisk on

〇asteriskの起動と状態の確認
[root@24ad4455f276 asterisk-11.25.3]# systemctl start asterisk
Job for asterisk.service failed because the control process exited with error code. See "systemctl status asterisk.service" and "journalctl -xe" for details.
asteriskの起動に失敗した。

ステータスを表示させた。
[root@24ad4455f276 asterisk-11.25.3]# systemctl status asterisk
● asterisk.service - LSB: Asterisk PBX
   Loaded: loaded (/etc/rc.d/init.d/asterisk; bad; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sat 2018-12-08 11:15:37 UTC; 11s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 19926 ExecStart=/etc/rc.d/init.d/asterisk start (code=exited, status=1/FAILURE)
Dec 08 11:15:37 24ad4455f276 systemd[1]: Starting LSB: Asterisk PBX...
Dec 08 11:15:37 24ad4455f276 asterisk[19926]: /etc/rc.d/init.d/asterisk: line 42: /etc/rc.d/init.d/functions: No such file or...ectory
Dec 08 11:15:37 24ad4455f276 systemd[1]: asterisk.service: control process exited, code=exited status=1
Dec 08 11:15:37 24ad4455f276 systemd[1]: Failed to start LSB: Asterisk PBX.
Dec 08 11:15:37 24ad4455f276 systemd[1]: Unit asterisk.service entered failed state.
Dec 08 11:15:37 24ad4455f276 systemd[1]: asterisk.service failed.
Hint: Some lines were ellipsized, use -l to show in full.

必要なパッケージを導入した。
[root@24ad4455f276 asterisk-11.25.3]# yum install initscripts
Installed:
  initscripts.x86_64 0:9.49.46-1.el7
Dependency Installed:
  sysvinit-tools.x86_64 0:2.88-14.dsf.el7
Complete!

再び起動を試行した。
[root@24ad4455f276 asterisk-11.25.3]# systemctl start asterisk
^C

エラーも何も表示されない状態になったので、ctrl+c で強制停止した。
ステータスを表示させたが有益な情報は得られなかった。

ldconfigを実行した。(†1)
[root@24ad4455f276 asterisk-11.25.3]# ldconfig


再び、起動させてみる。
[root@24ad4455f276 asterisk-11.25.3]# systemctl start asterisk
Starting asterisk (via systemctl):                         [  OK  ]
起動したようである。


起動後の状態の確認
[root@24ad4455f276 asterisk-11.25.3]# systemctl status asterisk -l
asterisk.service - LSB: Asterisk PBX
   Loaded: loaded (/etc/rc.d/init.d/asterisk; bad; vendor preset: disabled)
   Active: active (running) since Sat 2018-12-08 14:29:21 UTC; 8s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 20930 ExecStop=/etc/rc.d/init.d/asterisk stop (code=exited, status=0/SUCCESS)
  Process: 20974 ExecStart=/etc/rc.d/init.d/asterisk start (code=exited, status=0/SUCCESS)
 Main PID: 21003 (asterisk)
   CGroup: /docker/24ad4455f27604b55f691aa3c35c7d948eac9334cff7b4aa216bf7ca9dcc8625/system.slice/asterisk.service
           ├─21001 /bin/sh /usr/sbin/safe_asterisk
           └─21003 /usr/sbin/asterisk -f -vvvg -c
           ‣ 21003 /usr/sbin/asterisk -f -vvvg -c
Dec 08 14:29:21 24ad4455f276 systemd[1]: Starting LSB: Asterisk PBX...
Dec 08 14:29:21 24ad4455f276 asterisk[20974]: Starting asterisk:
Dec 08 14:29:21 24ad4455f276 systemd[1]: PID file /var/run/asterisk/asterisk.pid not readable (yet?) after start.
Dec 08 14:29:21 24ad4455f276 systemd[1]: asterisk.service: Supervising process 21003 which is not our child. We'll most likely not notice when it exits.
Dec 08 14:29:21 24ad4455f276 systemd[1]: Started LSB: Asterisk PBX.


上記の状態表示で、pidファイルが(まだ)読める状態になっていないとある。
そこで念の為にpidファイルの確認をした。

読める状態であった。(asteriskはrootユーザーで動作中である。)
[root@24ad4455f276 asterisk-11.25.3]# ls -l /var/run/asterisk/asterisk.pid
-rw-r--r-- 1 root root 6 Dec  8 14:29 /var/run/asterisk/asterisk.pid

[root@24ad4455f276 asterisk-11.25.3]# cat /var/run/asterisk/asterisk.pid
21003
動作中のプロセスも確認した。
[root@24ad4455f276 asterisk-11.25.3]# ps -A | grep asterisk
21001 ?        00:00:00 safe_asterisk
21003 ?        00:00:00 asterisk
タイミング的に、pidファイルが読めなかったのではないだろうか。(†3)


また、上記の状態表示の次の行では、プロセス21003は自分の子プロセスでないもののsystemd[1]は監視していると言っている。
次のようにプロセスツリーを確認すると、systemdのツリーにasteriskが存在していることがわかった。

プロセスツリーの確認
[root@24ad4455f276 asterisk-11.25.3]# yum install psmisc
[root@24ad4455f276 asterisk-11.25.3]# pstree
systemd─┬─agetty
         ├─crond
         ├─dbus-daemon
         ├─dnsmasq
         ├─master─┬─pickup
         │        └─qmgr
         ├─rsyslogd───2*[{rsyslogd}]
         ├─safe_asterisk───asterisk───42*[{asterisk}]
         ├─sshd───sshd───bash───tmux
         ├─systemd-journal
         ├─systemd-logind
         ├─systemd-udevd
         └─tmux───bash───pstree


以上より、特に問題が発生しているわけではないと判断した。



■asteriskのCLIを表示

[root@24ad4455f276 asterisk-11.25.3]# asterisk -r
Asterisk 11.25.3, Copyright (C) 1999 - 2013 Digium, Inc. and others.
Created by Mark Spencer <[email protected]>
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.
=========================================================================
Connected to Asterisk 11.25.3 currently running on 24ad4455f276 (pid = 20563)
24ad4455f276*CLI>
!              acl            ael            agent          agi            aoc            calendar       cc
cdr            cel            channel        cli            confbridge     config         console        core
data           database       devstate       dialplan       dnsmgr         dundi          event          fax
features       file           group          hangup         help           http           iax2           indication
keys           local          logger         manager        mgcp           minivm         mixmonitor     module
moh            no             originate      parkedcalls    phoneprov      presencestate  pri            queue
realtime       reload         rtcp           rtp            say            sip            skinny         stun
timing         udptl          ulimit         unistim        voicemail
24ad4455f276*CLI>

以上




<参考>
(1)Asterisk 11
< https://www.voip-info.jp/index.php/Asterisk_11 > 2018年12月8日

(2)CentOS7のAsterisk11イメージ作った
< https://qiita.com/tukiyo3/items/6fe69285ac076672072c > 2018年12月8日

(3)PIDファイル読み取り不可
< http://www.zabbix.jp/node/4158 > 2018年12月8日

(4)How to Install Asterisk on CentOS 7
< https://www.rosehosting.com/blog/how-to-install-asterisk-on-centos-7/ > 2018年12月8日

(5)CentOS7でpstreeが無い
< https://qiita.com/todanano/items/f421c237eaa2d9adff04 > 2018年12月8日

2017年6月26日月曜日

【Linux CentOS6.9 64bit】HylafaxとIAXmodemを再起動する順序について【IAXmodem 1.2.0】【Hylafax+ 5.5.9】

Asterisk + IAXmodem + hylafax+ で、ファックスサーバを構築し動作させていたところ、
2ヶ月ほど連続稼動させたところで、急にファックスが受信できなくなってしまった。

とりあえず、IAXmodemと、hylafax+と、Asterisk の再起動を行った。

ところで、IAXmodemと、hylafax+の再起動において、その順序に注意が必要だったのでメモを残しておく。


<使用したバージョンについて>
hylafax+(5.5.9) は、CentOSにおいてyum(epelリポジトリ利用)で導入したものである。
IAXmodem(1.2.0)は、ソースから導入した。



■まず、Hylafax IAXmodemの関係について、faxgettyというプログラムと共に整理した。

IAXmodemは、動作中、/dev/IAXmodem のように、設定に応じたデバイスファイルを存在させる。
hylafaxは、faxgettyというプログラムでそれらのデバイスファイルとの関係を得る。

(例)
# /usr/sbin/faxgetty /dev/IAXmodem &

だから、IAXmodemを起動して、その後、hylafax+を起動し、そしてfaxgettyを実行する必要がある



■以下では、Hylafax+と、IAXmodemの再起動時の挙動を調べた。

○IAXmodemを再起動する場合 (Hylafaxは起動したままである。)

最初の状態である。faxgettyが動作している。
#  ps -aef | grep faxgetty
uucp     18305     1  0 04:15 pts/21   00:00:00 /usr/sbin/faxgetty /dev/IAXmodem

サービスを停止する。
# service iaxmodem stop

すでに実行中のfaxgettyは動作したままになってしまった。
#  ps -aef | grep faxgetty
uucp     18305     1  0 04:15 pts/21   00:00:00 /usr/sbin/faxgetty /dev/IAXmodem

しかし、2分ほど待ってから、調べてみると、動作していたfaxgettyのプロセスは消滅した。
#  ps -aef | grep faxgetty
root     18844  9964  0 04:17 pts/21   00:00:00 grep faxgetty

このとき、Hylafaxから以下のメールを受け取った。
Hylafaxが、faxgettyの引数に渡していたIAXmodemデバイスが利用できないことを検知したようである。
そのために、対応のfaxgettyプロセスはHylafaxによって消滅させられたのだと思う。

# tail /var/spool/mail/root
The HylaFAX software thinks that there is a problem with the modem
on device /dev/IAXmodem that needs attention; repeated attempts to
initialize the modem have failed.

Consult the server trace logs for more information on what is happening.

You will be notified again after 5 minutes if the problem persists.

サービスを再び起動した。
# service iaxmodem start



○Hylafax+を再起動する場合 (IAXmodemは起動したままである。)

#  ps -aef | grep faxgetty
uucp     18094     1  0 04:00 pts/21   00:00:00 /usr/sbin/faxgetty /dev/IAXmodem

サービスを停止する。
# service hylafax+ stop

しかし、これだけでは、すでに実行中のfaxgettyは動作したままになってしまった。
5分ほど放置してみたが、状況には変化がなかった。
faxgettyを監督しているHylafax本体が起動していないため、faxgettyは終了しないのだろうと思う。
#  ps -aef | grep faxgetty
uucp     18094     1  0 04:08 pts/21   00:00:00 /usr/sbin/faxgetty /dev/IAXmodem
そして、サービスを再び起動した。
# service hylafax+ start

サービスを再び起動した時に、動作していたfaxgettyのプロセスはただちに消滅した。
hylafaxは起動時には、動作しているfaxgettyプロセスを一掃するのではないかと思う。



■Hylafaxと、IAXmodemを再起動するためのスクリプトを作成した。

Hylafaxと、IAXmodemの再起動には、上記の性質を考慮して行う必要がある。
以下の手順で、Hylafaxと、IAXmodemを再起動すると良いだろう。

(1)Hylafaxの再起動(これによって、古いfaxgettyプロセスが消滅する。)
# service hylafax+ restart

古いfaxgettyプロセスはただちに一掃された。
#  ps -aef | grep faxgetty
root     20339  9964  0 04:34 pts/21   00:00:00 grep faxgetty

(2)IAXmodemの再起動
# service iaxmodem restart

(3)faxgettyをIAXmodemを引数につけて実行する。
# /usr/sbin/faxgetty /dev/IAXmodem &

#  ps -aef | grep faxgetty
uucp     20417     1  0 04:37 pts/21   00:00:00 /usr/sbin/faxgetty /dev/IAXmodem



(スクリプトにまとめた)

次のような再起動用スクリプトを作成したところ、うまく動作した。
念のため、待機時間を5秒挿入している。
例ではモデム数は一個だけだが、テスト環境においては20個程度存在していた。

(Asteriskは再起動に時間を要する場合があるので、一番最後が良いかもしれない。あるいは充分なウェイトを置いて最初に行う。)
/sbin/service hylafax+ restart
/bin/sleep 5s
/sbin/service iaxmodem restart
/bin/sleep 5s
/usr/sbin/faxgetty /dev/IAXmodem &

(注意)
逆の手順でIAXmodemから先に再起動させた場合、正しく動作しなかった
モデムが全て、waiting 状態のままになってしまった。



■ところで、defunctってなんだろうか。

uucp     20419     1  0 04:37 pts/21   00:00:00 /usr/sbin/faxgetty /dev/IAXmodem1
uucp     20420     1  0 04:37 pts/21   00:00:00 /usr/sbin/faxgetty /dev/IAXmodem2
uucp     20421     1  0 04:37 pts/21   00:00:00 /usr/sbin/faxgetty /dev/IAXmodem3
uucp     20446 20419  0 04:37 ?        00:00:00 [faxgetty] <defunct>
uucp     20447 20420  0 04:37 ?        00:00:00 [faxgetty] <defunct>
uucp     20484 20420  0 04:49 ?        00:00:00 [faxgetty] <defunct>
uucp     20485 20419  0 04:49 ?        00:00:00 [faxgetty] <defunct>
root     20528  9964  0 04:58 pts/21   00:00:00 grep faxgetty

着信を受けたIAXmodemに対応するfaxgettyプロセスについて、defunctとなった。
無害のようである。参考になるページを見つけた。



<参考>
・RE: [hylafax-users] "Waiting for modem to come ready" another
< http://www.hylafax.org/archive/2010-11/msg00128.php > 2017年6月24日

・Re: [hylafax-users] faxgetty <defunct> - 'Extra' FaxGetty
< http://www.hylafax.org/archive/2006-01/msg00322.php > 2017年6月24日

2013年5月30日木曜日

Asteriskに行き来するRTPパケットのIPアドレスを調べる

Asteriskで電話システムの構築中に、着信はしても片側の音声が聞こえない問題が生じた場合、
RTPパケットという音声パケット(メディアパケット)を調べると解決のヒントになるかもしれない。


たとえば、ある特殊な環境での「公衆電話網上にいる相手に音声が届かない」問題では、
AsteriskからのRTPパケットのルーティングがネットワーク上でうまくできていなかったために、
相手側へ音声が届いていないのだとわかった。

Register先アドレスとは異なる宛先のRTPパケットが、対向からの要求によってAsteriskで作られている場合、
この宛先についても正しくルーティングできなければ、相手に音声は届かない。

RTPパケットが向かうアドレスはRegister先ネットワークアドレスと必ずしも同じであるとは限らない
そしてデフォルトゲートウェイ一本だけで通用しない特殊な環境では、
SIPパケットとRTPパケットそれぞれについてルーティング設定を考慮しなければならない。

このような問題に対処するためには、
Asteriskから送出されているRTPパケットの宛先アドレスを調べればよい。
そして正しくルーティングできるように各ルーターにゲートウェイを設定する。


どのようなRTPパケットがAsteriskから送出されようとしているか、あるいは、
どこからRTPパケットがAsteriskにやってきているかは、次のコマンドで調べる。


◆使用したバージョン
 Asterisk 1.8.20.1

○次のようにして、RTPデバッグをオンにしてから、
localhost*CLI> rtp set debug on
RTP Debugging Enabled
そうして、通常通り、Asterisk電話端末から電話を掛ける。


○すると、次のようなメッセージが通話中に延々とコンソール上に流れる。

メッセージは、Got RTP(Asteriskが受け取ったRTP)と、Sent RTP(Asteriskが送り出したRTP)に分けられる。

この例ではAsteriskが電話機とVOIPゲートウェイの間で中継器として機能している。、
一方からRTPを受け取って、他方へとRTPを流している様子と、
他方からRTPを受け取って、一方へとRTPを流している様子がわかる。
Got  RTP packet from    192.168.1.10:50248 (type 00, seq 019709, ts 224768732, len 000160)
Sent RTP packet to      192.168.2.11:5968 (type 00, seq 055566, ts 224768728, len 000160)

Got  RTP packet from    192.168.2.11:5968 (type 00, seq 014666, ts 090720, len 000160)
Sent RTP packet to      192.168.1.10:50248 (type 00, seq 033646, ts 090720, len 000160) 

Got  RTP packet from    192.168.1.10:50248 (type 00, seq 019710, ts 224768892, len 000160)
Sent RTP packet to      192.168.2.11:5968 (type 00, seq 055567, ts 224768888, len 000160)

Got  RTP packet from    192.168.2.11:5968 (type 00, seq 014667, ts 090880, len 000160)
Sent RTP packet to      192.168.1.10:50248 (type 00, seq 033647, ts 090880, len 000160)

Got  RTP packet from    192.168.1.10:50248 (type 00, seq 019711, ts 224769052, len 000160)
Sent RTP packet to      192.168.2.11:5968 (type 00, seq 055568, ts 224769048, len 000160)
たとえば、この情報から、192.168.2.11というアドレスに、RTPパケットが送出されていることがわかる。
もしこの192.168.2.11がPSTN-VOIPゲートウェイだとして、そこへ正しくルーティングされないなら、
公衆電話網上の相手先に音声が届かないことになる。
この場合なら、192.168.2.11へのゲートウェイをルーターに正しく設定する必要がある。


Asteriskは、このようにデバッグ機能が充実しているので、便利だと思った。

2013年2月20日水曜日

CentOS6.3 x86_64bit minimalをインストールしたマシンにAsteriskをソースからインストールした

更新 2013年2月28日

CentOS6.3 x86_64bit minimalをインストールしたマシンにAsteriskをソースからインストールした


ハードウェアとOS

 余計なプログラムを省いているCentOS6.3 64bitのminimalに、asteriskをインストールした。
メモリ512MBで、デュアルコア(2GHz*2)マシンにインストールしてみた。


・ソースコード

asterisk-1.8.9.0(あるいは、Asterisk 1.8.20.1) を用いた。
(注意)asterisk-1.8.9.0では運用中に、「ParkAndAnnounce」を動作させるとサービスが停止した。
他にもバグがありそうなので、Asterisk 1.8.20.1を用いた方が良いと思った。

パッチ(ひかり電話アダプタにレジストさせるために必要

asterisk-1.8.9.0(あるいは、Asterisk 1.8.20.1) を、ひかり電話アダプタへの接続に対応させるために、
chan_sip.rt200ne.110205-01.patch というパッチをあてた。(‡対応パッチ) 
( パッチをありがとうございます。ホームゲートウェイ RT-400NE(Ver4.37) にレジストできました。)

この対応パッチは、「NTT東日本のひかり電話対応ルータ RT-200NE」ということになっているが、
その他のいくつかのタイプのアダプタにも対応しているようだ。(‡ひかり電話対応)
パッチはasteriskのソースのバージョンにあわせて用意されているので適切なものをあてる必要がある。


・インストール完了後の注意
インストール作業は問題なく完了したようだが、CLIでasteriskへの接続に失敗した。
そこでSELINUXを無効化したのちに、asteriskを再起動すると、CLIでasteriskに接続できた。



以下は、その手順のメモ。

■システムのインストールと準備作業

1、CentOS6.3のminimalをインストールした

300MBほどのisoイメージファイルが、CentOSのミラーサイトからダウンロードできたので、
これを使ってインストールを行った。


2、ネットワークを有効化した
/etc/sysconfig/network-scripts/ifcfg-eth0 を編集し、
次の項目がなければ加えて、さらに値も設定する。
BOOTPROTO="dhcp"
ONBOOT="yes"
ネットワークサービスを再起動して、DHCPでアドレスを取得する。
# service network restart


3、システムをアップデートした
#yum update
4、念のためシステムを再起動しておく
# reboot


■必要なツールのインストール作業

1、wgetをインストールした(ソースなどのダウンロードで使用)
# yum install wget

2、コンパイラやライブラリなどをインストールした(なければ、configureが通らない)
# yum install gcc gcc-c++ make ncurses-devel libxml2-devel

3、パッチを当てるpatchをインストールした(パッチをあてる場合に必要)
# yum install patch


■Asteriskのソースのダウンロードとインストール作業
以下は、特に断りがない限り、Asterisk 1.8.9.0を例にしている。

1、asteriskソースのダウンロード
# wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-1.8.9.0.tar.gz

2、ファイルの展開とディレクトリ移動
# tar -zxvf asterisk-1.8.9.0.tar.gz
# cd asterisk-1.8.9.0

3、必要な場合には、パッチをダウンロードしパッチをあてる

ホームゲートウェイなどのひかり電話アダプタとasteriskを接続するには、そのアダプタの種類によっては、
ソースにパッチをあてる必要がある。

ソースのバージョンに対応したパッチを、「voip-info.jp」からダウンロードする(‡対応パッチ)

今回しようしたパッチは、chan_sip.rt200ne.110205-01.patch というものである。
このパッチは、Asterisk-1.8.9.0だけでなく、Asterisk-1.8.20.1にもあてることができた。
ただし、Asterisk-1.8.9.0にあてた場合と表示されるメッセージが異なっていた。
パッチをあてたAsterisk-1.8.20.1でしばらく運用してみたが、特に問題は発生していないようだ。


パッチをあてる

# patch -p0 < chan_sip.rt200ne.110205-01.patch
patching file channels/chan_sip.c
patching file channels/sip/include/sip.h


★asterisk-1.8.20.1の場合には次のように表示された。

patching file channels/chan_sip.c
Hunk #2 succeeded at 1394 (offset 11 lines).
Hunk #3 succeeded at 18815 (offset 773 lines).
Hunk #4 succeeded at 19819 (offset 746 lines).
Hunk #5 succeeded at 19831 (offset 746 lines).
Hunk #6 succeeded at 28832 (offset 835 lines).
Hunk #7 succeeded at 29255 (offset 818 lines).
Hunk #8 succeeded at 30649 (offset 953 lines).
patching file channels/sip/include/sip.h
Hunk #1 succeeded at 102 (offset 1 line)


インストール作業は、READMEファイルを参考に行った。
4、準備作業
# ./configure
(省略)
configure: Menuselect build configuration successfully completed

               .$$$$$$$$$$$$$$$=..
            .$7$7..          .7$$7:.
          .$$:.                 ,$7.7
        .$7.     7$$$$           .$$77
     ..$$.       $$$$$            .$$$7
    ..7$   .?.   $$$$$   .?.       7$$$.
   $.$.   .$$$7. $$$$7 .7$$$.      .$$$.
 .777.   .$$$$$$77$$$77$$$$$7.      $$$,
 $$$~      .7$$$$$$$$$$$$$7.       .$$$.
.$$7          .7$$$$$$$7:          ?$$$.
$$$          ?7$$$$$$$$$$I        .$$$7
$$$       .7$$$$$$$$$$$$$$$$      :$$$.
$$$       $$$$$$7$$$$$$$$$$$$    .$$$.
$$$        $$$   7$$$7  .$$$    .$$$.
$$$$             $$$$7         .$$$.
7$$$7            7$$$$        7$$$
 $$$$$                        $$$
  $$$$7.                       $$  (TM)
   $$$$$$$.           .7$$$$$$  $$
     $$$$$$$$$$$$7$$$$$$$$$.$$$$$$
       $$$$$$$$$$$$$$$$.

configure: Package configured for:
configure: OS type  : linux-gnu
configure: Host CPU : x86_64
configure: build-cpu:vendor:os: x86_64 : unknown : linux-gnu :
configure: host-cpu:vendor:os: x86_64 : unknown : linux-gnu :
5、コンパイル
# make
(省略)
 +--------- Asterisk Build Complete ---------+
 + Asterisk has successfully been built, and +
 + can be installed by running:              +
 +                                           +
 +                make install               +
 +-------------------------------------------+

6、インストール
# make install
(省略)
 +---- Asterisk Installation Complete -------+
 +                                           +
 +    YOU MUST READ THE SECURITY DOCUMENT    +
 +                                           +
 + Asterisk has successfully been installed. +
 + If you would like to install the sample   +
 + configuration files (overwriting any      +
 + existing config files), run:              +
 +                                           +
 +                make samples               +
 +                                           +
 +-----------------  or ---------------------+
 +                                           +
 + You can go ahead and install the asterisk +
 + program documentation now or later run:   +
 +                                           +
 +               make progdocs               +
 +                                           +
 + **Note** This requires that you have      +
 + doxygen installed on your local system    +
 +-------------------------------------------+

7、設定ファイルのインストール
# make samples

8、システム起動時に自動的に起動可能にする設定

自動起動できるようにする
# make config
設定を確認する
# chkconfig --list | grep asterisk
asterisk        0:off   1:off   2:on    3:on    4:on    5:on    6:off
システム起動時に自動的に起動しないようにしておくには次のようにする
# chkconfig asterisk off


■Asteriskを起動してさらにCLIでasteriskに接続を試みた

まずシステムを再起動した。
# reboot
そのあとで、asterisk を起動した。
# service asterisk start
さらに、CLIで、asteriskに接続を試みた。
# asterisk -r
Asterisk 1.8.9.0, Copyright (C) 1999 - 2011 Digium, Inc. and others.
Created by Mark Spencer <[email protected]>
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.
=========================================================================
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)  ←エラーが発生して接続できなかった

そこで、次のようにして、いったんSELINUXを無効化した。


■SELINUXの無効化と再起動、そして再度asteriskの起動しCLIでasteriskに接続を試みた

1、SELINUXを無効化した
/etc/selinux/config を編集し、次の項目について値をdisabledとして作成し直す
#SELINUX=enforcing
SELINUX=disabled
2、システムを再起動した
# reboot
3、SELINUX無効化後に、asteriskを起動して、再度、CLIでasteriskに接続を試した
# service asterisk start
# asterisk -r
Asterisk 1.8.9.0, Copyright (C) 1999 - 2011 Digium, Inc. and others.
Created by Mark Spencer <[email protected]>
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.
=========================================================================
Connected to Asterisk 1.8.9.0 currently running on localhost (pid = 1341)
Verbosity is at least 3
localhost*CLI>?
!            ael          agent        agi          aoc          calendar
cc           cdr          cel          channel      cli          config
console      core         data         database     devstate     dialplan
dnsmgr       dundi        event        fax          features     file
group        hangup       help         http         iax2         indication
local        logger       manager      mgcp         minivm       mixmonitor
module       moh          no           originate    parkedcalls  phoneprov
pri          queue        realtime     reload       rtcp         rtp
say          sip          skinny       stun         timing       udptl
ulimit       unistim      voicemail
localhost*CLI>
無事に、asteriskに接続することができた。

さらにこの後で、/etc/selinux/config を再編集し、設定を SELINUX=enforcing に戻して、
システムを再起動し、SELINUXを有効化しても、asterisk -r コマンドでasteriskに接続することができた。



<参考>
(‡ひかり電話対応)
・ ひかり電話対応
< http://voip-info.jp/index.php/%E3%81%B2%E3%81%8B%E3%82%8A%E9%9B%BB%E8%A9%B1%E5%AF%BE%E5%BF%9C > 2013年2月18日

(‡対応パッチ)
・ RT-200NE対応パッチ
< http://voip-info.jp/index.php/RT-200NE%E5%AF%BE%E5%BF%9C%E3%83%91%E3%83%83%E3%83%81 > 2013年2月18日

・RT-200NE
< http://voip-info.jp/index.php/RT-200NE > 2013年2月18日

2011年10月16日日曜日

【ASTERISK 1.6.2.12】【iaxmodem 1.2.0】iax peer名の最大長について

ASTERISK 1.6.2.12で、iaxmodemを接続するためにiax.conf で定義したピア情報について、余りに長いpeer nameを指定すると、次のようなエラーが発生して動作しなくなった。
ERROR[17355]: chan_iax2.c:4712 handle_call_token: Call rejected, CallToken Support required.
If unexpected, resolve by placing address <192.168.yyy.zzz> in the calltokenoptional list
or setting user <USER-NAME> requirecalltoken=no

peer nameに、65文字のものを指定すると、上記のエラーになった。
正確に調べるのは面倒なのでやっていないが、peer nameで58文字に抑えた場合うまく動作した

ただし、iaxmodem側が原因なのか、asterisk側が原因なのかは調べないとわからない。


ちなみに、間違って複数のiaxmodem側でpeer nameを重複させても、このエラーが発生した。

2011年10月15日土曜日

【ASTERISK 1.6.2.12】 #include<ファイル名>に存在しないファイル名を指定したときASTERISKは正常動作しない

ASTERISKでは、”#include<ファイル名>”ステートメントで、各種.confファイルにファイル内容を挿入することができるが、
ここで存在しないファイル名を指定すると、ASTERISKは正常に動作しなくなった。

たとえばextensions.confで、#includeステートメントをつかっていくつかのファイルを挿入しようとしたとする。
このうちいくつかのファイルは存在し成功したものの、いくつかのファイルは存在せずに失敗した場合には、
存在していて挿入できたはずのファイルに書かれていたコンテクストやエクステンションについても、ASTERISKは見つけられずに運用時にエラーとなった。

次のエラーがログに見られた。
(略)
ERROR[20071] config.c: The file 'abc.conf' was listed as a #include but it does not exist.
(略)
NOTICE[20086] chan_sip.c: Call from '123456789' to extension 'test' rejected because extension not found in context 'test-context'.
(略)
上記、エラーで表示されている、
コンテクスト'test-context'もエクステンション'test'も、#includeステートメントによって挿入されたはずの存在していたファイルに書かれていたものである。
これらは存在しない'abc.conf'に含まれていたわけではない。
それなのに、ASTERISKはこれらを見つけることができずにエラーとなった。

存在しないファイルを指定しても、エラーメッセージを吐くだけで、それについては無視されるだろうと考えていたが、その認識は甘かったようだ。
どうやら、存在しないファイルを#includeステートメントで指定した場合には、
同時に指定しているきちんと存在するファイルの内容についても正常に読み込まれないようである
#includeステートメントの数に上限があるのではないかとか、コンテクストやエクステンションの最大値を超えてしまったのではないかとか、考えたがそうではなかったようだ。

存在しないファイルを指定していた#includeステートメントをコメントアウトし取り除いてやれば、
再び正常に動作するようになった

これは、ASTERISK 1.6.2.12 の話である。バージョンアップで改善しているのかもしれない。

2011年9月22日木曜日

【Linux CentOS 5.7】 HylaFaxで複数のFAXモデムを追加しモデムグループを構成しWinprint HylaFAXから使い分ける

FAXサーバーソフトHylaFaxに複数のiaxmodemモデムを追加し加えてグループ化も行い、クライアントソフトであるWinPrint HylaFaxからそれらを指定してFAXの送出を行う方法について



Hylafaxサーバーに複数のモデムを追加しておき、クライアントソフトウェアから任意のモデムを指定してFAXを送出する。
各々のモデムに関連付けられた設定ファイルにより、そのファックス文書には経由するモデムごとにユニークなヘッダーインフォメーションを付加できる
このようにすると、1台のHylafaxを複数の部署から共有しながら、部署ごとに異なった送信元情報をファックス文書のヘッダーに載せられる。

これらの複数のモデムは、モデムグループに束ねて用いることもできる。
ある部署用の設定をした複数のモデムを一つのグループにまとめ、FAXクライアントソフトウェアでは送信の際にこのグループ名を指定して用いることができる。
そうすると、グループに所属するモデムのうちスタンバイ状態にある一つが自動的に選択される。
そのため、利用可能なモデムデバイス名を個別にクライアントで指定しなくても、同時に複数のFAXを送信することができる。




前提として、以下のソフトウェアが次のような手順で正常にインストールできていること。

<使用したソフトウェアとそのバージョン>

○FAXサーバー側
・Hylafax 6.0.5
・IAXmodem 1.2.0
・CentOS 5.7 (64bit)
⇒インストール方法はこちら

○FAXクライアント側 (動作チェックで使用するだけ)
・WinPrint HylaFax 1.0.0.7
・MS Windows 7 (64bit)
⇒インストール方法はこちら



■Hylafaxサーバー側の設定■

FAXモデムとして、ASTERISKと連携できるIAXmodemを使用した。


◇追加のIAXmodemを設定する

iaxmodemのインストール後には、/etc/iaxmodem/ttyIAXがたった一個だけ存在している。
このttyIAXには、iaxmodemモデムを生成するための情報が含まれている。
これをコピーして増やすだけで、iaxmodemモデムが複数準備できる。


ttyIAXファイルをコピーし、必要なiaxmodem数分、増やす。例として4つ増やすことにする。
コピー後、それぞれ内容を編集する。


各ファイル名は、下記に示す内容のdevice項目(生成させるデバイスファイル)の設定値に対応させると良い。
(注意) このdevice名には"_"アンダーバーを絶対に使わないこと。hylafaxが動作しなかった。
[root@localhost ~]# cp /etc/iaxmodem/ttyIAX /etc/iaxmodem/ttyIAX-first-01
[root@localhost ~]# cp /etc/iaxmodem/ttyIAX /etc/iaxmodem/ttyIAX-second-01
[root@localhost ~]# cp /etc/iaxmodem/ttyIAX /etc/iaxmodem/ttyIAX-first-02
[root@localhost ~]# cp /etc/iaxmodem/ttyIAX /etc/iaxmodem/ttyIAX-second-02

コピーしたttyIAX-firstファイルを編集する
[root@localhost ~]# vim /etc/iaxmodem/ttyIAX-first-01
device          /dev/ttyIAX-first-01  ←生成させるデバイスファイルは、iaxmodemの設定ファイル名と一致させると良い。(前述したとおり、アンダーバーは絶対に使わないこと。)
owner           uucp:uucp
mode            660
port            4570
refresh         300
server          asterisk-server-address
peername        iaxmodem-first-01  ←当然、他のpeernameと重ならないようにする
secret          password
cidname         John Doe
cidnumber       8005551212
codec           slinear

コピーしたttyIAX-secondファイルを編集する
[root@localhost ~]# vim /etc/iaxmodem/ttyIAX-second-01
device          /dev/ttyIAX-second-01
owner           uucp:uucp
mode            660
port            4570
refresh         300
server          asterisk-server-address
peername        iaxmodem-second-01
secret          password
cidname         John Doe
cidnumber       8005551212
codec           slinear

同様にして、コピーしたttyIAX-thirdファイルを編集する
[root@localhost ~]# vim /etc/iaxmodem/ttyIAX-first-02
同様にして、コピーしたttyIAX-fourthファイルを編集する
[root@localhost ~]# vim /etc/iaxmodem/ttyIAX-second-02


合せて、ASTERSISK側のiax.confの設定も行う
[root@asterisk ~]# vim /etc/asterisk/iax.conf
[iaxmodem]
type=friend
username=iaxmodem
secret=password
host=dynamic
disallow=all
allow=ulaw
allow=slinear
requirecalltoken=no
context=fax_outgoing

[iaxmodem-first-01]  ←今回追加したiaxmodemに対応するASTERISKの設定
type=friend
username=iaxmodem-first-01
secret=password
host=dynamic
disallow=all
allow=ulaw
allow=slinear
requirecalltoken=no
context=fax_outgoing

[iaxmodem-second-01] ←今回追加したiaxmodemに対応するASTERISKの設定
type=friend
username=iaxmodem-second-01
secret=password
host=dynamic
disallow=all
allow=ulaw
allow=slinear
requirecalltoken=no
context=fax_outgoing
[iaxmodem-first-02] ←今回追加したiaxmodemに対応するASTERISKの設定
type=friend
username=iaxmodem-first-02
secret=password
host=dynamic
disallow=all
allow=ulaw
allow=slinear
requirecalltoken=no
context=fax_outgoing
[iaxmodem-second-02] ←今回追加したiaxmodemに対応するASTERISKの設定
type=friend
username=iaxmodem-second-02
secret=password
host=dynamic
disallow=all
allow=ulaw
allow=slinear
requirecalltoken=no
context=fax_outgoing

これで、iaxmodem増設の設定は完了した。

service iaxmodem restartコマンドでiaxmodemを再起動させる。
IAXmodemの起動後に、iaxmodemが増設される。
/dev/ディレクトリ以下に次のデバイスファイルが作成されているはず。
ttyIAX-first-01
ttyIAX-first-02
ttyIAX-second-01
ttyIAX-second-02

faxgettyに、今回追加した新モデムを渡すための追加設定を行う
[root@localhost etc]# vim /etc/inittab
(略)
# Run faxgetty in standard runlevels
iah0:2345:respawn:/usr/local/sbin/faxgetty /dev/ttyIAX
iah1:2345:respawn:/usr/local/sbin/faxgetty /dev/ttyIAX-first-01
iah2:2345:respawn:/usr/local/sbin/faxgetty /dev/ttyIAX-first-02
iah3:2345:respawn:/usr/local/sbin/faxgetty /dev/ttyIAX-second-01
iah4:2345:respawn:/usr/local/sbin/faxgetty /dev/ttyIAX-second-02
(略)



◇hylafaxの設定ファイルを追加する

hylafaxには、FAXモデムごとに設定ファイルが存在している。
これは、使用されるモデムのデバイス名に基づいて、ファックス送出の際に使用される設定ファイルである。選択されるモデムごとに、ファックス文書のタグ(ヘッダー)に記載するインフォメーションなどを設定しておける。

hylafaxの設定ファイルが置かれるディレクトリへ移動し、モデムデバイス毎の設定ファイルをコピーする。
この設定ファイル名は、config.モデムデバイス名という形式になっている。
[root@localhost ~]# cd /var/spool/hylafax/etc/
[root@localhost etc]# cp config.ttyIAX config.ttyIAX-first-01
[root@localhost etc]# cp config.ttyIAX config.ttyIAX-second-01
[root@localhost etc]# cp config.ttyIAX config.ttyIAX-first-02
[root@localhost etc]# cp config.ttyIAX config.ttyIAX-second-02


一つ目のモデムの設定ファイルを編集する(例)
[root@localhost etc]# vim config.ttyIAX-first-01
CountryCode:            81
AreaCode:               xx
FAXNumber:              +81.xxx.xxx.xxx
LongDistancePrefix:     0
InternationalPrefix:    xxx
DialStringRules:        etc/dialrules
ServerTracing:          0xFFF
SessionTracing:         0xFFF
RecvFileMode:           0600
LogFileMode:            0600
DeviceMode:             0600
RingsBeforeAnswer:      1
SpeakerVolume:          off
GettyArgs:              "-h %l dx_%s"
LocalIdentifier:        "example Co.Ltd. FIRST BRANCH"  ←ファックス送信元情報
TagLineFont:            etc/lutRS18.pcf
TagLineFormat:          "From %%l %%n   |%c   Page %%P of %%T"  ←ファックスヘッダーのフォーマット(意味は下に記載)
MaxRecvPages:           200
#
(以下省略)

ファックスヘッダーフォーマットで使われている記号の意味
%%l  ・・・LocalIdentifier項目の値
%%n ・・・FAXNumber項目の値
%c ・・・現在の日時
| ・・・ファックス文書のヘッダー領域を左右に均等に区分するもの(上の例では、二分される)

二つ目のモデムの設定ファイルを編集する(例)
[root@localhost etc]# vim config.ttyIAX-second-01
CountryCode:            81
AreaCode:               xx
FAXNumber:              +81.yyy.yyy.yyy
LongDistancePrefix:     0
InternationalPrefix:    xxx
DialStringRules:        etc/dialrules
ServerTracing:          0xFFF
SessionTracing:         0xFFF
RecvFileMode:           0600
LogFileMode:            0600
DeviceMode:             0600
RingsBeforeAnswer:      1
SpeakerVolume:          off
GettyArgs:              "-h %l dx_%s"
LocalIdentifier:        "example Co.Ltd. SECOND BRANCH"  ←ファックス送信元情報
TagLineFont:            etc/lutRS18.pcf
TagLineFormat:          "From %%l %%n   |%c   Page %%P of %%T"  ←ファックスヘッダーのフォーマット
MaxRecvPages:           200
#
(以下省略)

他のモデムについても、送信元情報などについて編集しておく
[root@localhost etc]# vim config.ttyIAX-first-02
[root@localhost etc]# vim config.ttyIAX-second-02


ロケールを英語に切り替える(ファックス文書に印字される日本語の日付が文字化けするため
[root@localhost ~]# date
2011年  9月 26日 月曜日 19:14:05 JST  ←初めはこのように日本語で表記されていた
[root@localhost ~]# cat /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"  ←変数の値は、書き換え前このようになっていた
[root@localhost ~]# vim /etc/sysconfig/i18n
LANG="en_US.UTF-8"
[root@localhost ~]# date
Mon Sep 26 19:18:18 JST 2011  ←再起動後に英語表記に切り替わった(再起動はあとで)


hylafaxサーバー側の設定は、これで完了したので、設定を有効化するためシステムの再起動を行う
[root@localhost etc]# reboot


再起動後、faxstatコマンドを実行し、追加したモデムが有効になっているか確認する。
[root@localhost etc]# faxstat
HylaFAX scheduler on localhost.localdomain: Running
Modem ttyIAX (+81.nnn.nnn.nnn): Running and idle
Modem ttyIAX-first-01 (+81.xxx.xxx.xxx): Running and idle
Modem ttyIAX-first-02 (+81.xxx.xxx.xxx): Running and idle
Modem ttyIAX-second-01 (+81.yyy.yyy.yyy): Running and idle
Modem ttyIAX-second-02 (+81.yyy.yyy.yyy): Running and idle


◇必要なら、次のようにしてモデムをモデムグループに束ねる設定も行う

○configファイル内に、次のようにモデムグループの定義を追加する。
[root@localhost ~]# vim /var/spool/hylafax/etc/config
(例)
ModemGroup:             "first-branch:ttyIAX-first-(01|02)"
ModemGroup:             "second-branch:ttyIAX-second-(01|02)"
次のような書式になっている。
ModemGroup: "モデムグループ名:正規表現によるモデムデバイス名の指定"

上の例では、first-branchという名のモデムグループには、モデムデバイスのttyIAX-first-01ttyIAX-first-02を所属させ、
second-branchという名のモデムグループには、ttyIAX-second-01ttyIAX-second-02を所属させている。

(注意) 正規表現文字列-ttyIAX-first-(01|02)の部分-は、24文字以内に収めないと動作しなかった。


○さらに構成したモデムグループに属す複数のモデムを使って同時送信を行うために、
同時送信許可を設定する。
[root@localhost ~]# vim /var/spool/hylafax/etc/destctrls
.*      MaxConcurrentJobs = unlimited

「.*」は、正規表現。相手先の電話番号を表す。
「.」が全ての1文字を表し「*」は0回以上の繰り返しを意味しているので、これは全ての文字列に該当する表現になっている。
つまり、どの相手先にも同時送信数を無制限に設定している。
この設定を書き込まなければ、同時送信することができない。


○設定の後、hylafaxサービスを再起動させる。
[root@localhost ~]# service hylafax restart
Stopping HylaFAX Servers.
HylaFAX: faxq hfaxd (without SNPP support).


(参考)
Handbook:Advanced Server Configuration:Modem Groups
< http://www.hylafax.org/content/Handbook:Advanced_Server_Configuration:Modem_Groups > 2011/10/21

Re: [hylafax-users] Designating group of modems to specific task
< http://www.hylafax.org/archive/2004-02/msg00069.php > 2011/10/21



■Hylafaxクライアント側の設定■
Hylafaxクライアントとして、Windows7にインストールした「WinPrint Hylafax」を取り上げる。
⇒インストール方法はこちら


WinPrint Hylafax側では、FAX送出で使用するモデムのデバイス名を予め指定できる
この機能を使うことで、任意のFAXモデムを指定してFAXの送出が行える
そうして、関連付けられた設定ファイルに基づきファックス文書のヘッダーに指定した送出元を印字させられる。


◇モデムデバイスあるいはモデムグループを指定する手順

スタートボタンから「デバイスとプリンター」を開く。

インストールしておいた「FAXデバイス」で右クリックメニューを表示させ、「プリンタのプロパティー(P)」を開く。

ポートタブを選び、設定済みの「HFAX:」ポートを選び、「ポートの構成」ボタンをクリックする。

「Printer port settings」ウインドウが開く。

6番目にあるmodem項目を編集する。次の例のように、使用したいモデムデバイス名あるいはモデムグループ名を入力し、「OK」ボタンを押す。

・モデムデバイス名を指定する場合
(例)ttyIAX-second-02
・モデムグループを指定する場合
(例)first-branch

ここで指定したFAXモデムは、hylafaxサーバー側においてFAX送出で使用される。
また、ここで指定したモデムグループは、hylafaxにより解釈され、その所属モデムのうちスタンバイになっているものが使用される。

こうして送出されるファックス文書には、経由するFAXモデムに関連付けられた設定ファイルに基づき、特定の発信元などが印字された。


2011年9月18日日曜日

【MS Windows7】 HylafaxのクライアントソフトウェアWinPrint HylaFaxを使ってfaxを送信する

Windows7(64bit)に、HylafaxのクライアントソフトであるWinPrint HylaFaxをインストールしFAXを送信する手順


HylaFaxサーバーとそのクライアントソフトウェアを連携させることで、リモートのIPネットワーク上にあるWindows、Mac、Linuxクライアントなどから、プリントアウトする要領で手軽にFAXを送ることが可能になる。

以下は、WinPrint HylaFaxというWindows用のクライアントソフトウェアのインストール手順である。

(前提条件)
http://akira-arets.blogspot.com/2011/09/linux-centos56-iaxmodemhylafax.html に、iaxmodemとhylafaxのインストール手順あり。



作業手順
とくに断りがない限り、Windows7側での操作である。

□クライアントソフトウェアであるWinPrint HylaFaxをダウンロードする

http://www.hylafax.org/content/Desktop_Client_Softwareのリンクリストから、Winprint HylaFAX for Windows 7のページを開く。
ダウンロードリンク からWinPrintHylafax-for-Windows7.7zをダウンロードする。


□インストール作業を行う

(注意)新しいバージョンでは、インストール方法が全く変わっているかもしれない。

7z形式で圧縮されているので解凍し、WinPrintHylafax-for-Windows7-Release_ENGフォルダを取り出す。

この内にさらに、Only-For-Windows-64bitと、Only-For-Windows-32bitというフォルダがある。
Windows7 64bitの場合は、Only-For-Windows-64bitフォルダを取り出す。

内に、3つのファイルがあるので、そのうち次の2つのファイルを選択する。
HylaPrintUI.exe
HylaPrintMon.dll
これら2つのファイルを、C:\Windows\System32にコピーする。
(このとき、windows標準のエクスプローラーを使用すること。)

そうしてから、あと一つのHylaPrintMonReg.exeを「管理者として実行」し、INSTALLボタンをクリックする。INSTALL-OK.が表示されると成功。

(Error number:3006が表示される場合、UNINSTALLボタンをクリックしてから、INSTALLボタンを押してみると解決するかもしれない。 )



□「プリンタ」を追加する

「デバイスとプリンタ」から、「プリンタの追加」ボタンをクリックする。

「ローカルプリンタを追加します(L)」をクリックする。
「新しいポートの作成(C)」を選び、ポートの種類としてWinprint Hylafaxを選択し、次へ進む。

開いたウインドウには、HFAX1:と表示されているので、OKをクリックする。

プリンターの追加ウインドウが開くので、次の通りに選択し、次へ進む。
製造元:   Xerox
プリンター:  Xerox Phaser 6120PS

後は、必要に応じて適当に設定して進めばよい。
ただし、プリンター名は、FAXとしておくと分かりやすい



□Hylafaxの動作しているLinuxマシンで、FAXユーザーを追加する

先ず、Linuxユーザーとして追加し、Linuxパスワードを設定する
[root@localhost ~]# useradd myname
[root@localhost ~]# passwd myname
それから、このユーザーを次のようにFAXユーザーとして追加する
[root@localhost ~]# faxadduser myname


□「プリンタ」を設定する

追加したプリンタのアイコンを右クリックし、メニューから「プリンタのプロパティー(P)」を開く
ポートタブから、HAFX1: WinPrint Hylafax Port ・・・を選び、「ポートの構成(C)」ボタンをクリックする。

Printer port settingウインドウが開く。
次の基本項目を編集する。上で設定したFAXユーザー情報を入力する
・ Hylafax server: 192.168.1.1  ←Hylafaxが動作しているLinuxマシンのアドレス(ファイアーウォールは開いていますか?)
・ User name: myname  ←faxuseraddで追加したLinuxユーザー
・ Password: mypswd  ←Linuxログインパスワード

また、Email:項目に電子メールアドレスを設定しておくと、FAXの送達状態をHylafaxがメールで通知してくれる。
(ただし、サーバーでsendコマンドを使ってメールが送信できるようにしておく必要がある。)
Nortification:項目で、その通知が行われるイベントを設定できるようになっている。

○ところで、6番目にあるmodem:項目には、FAX送信で使用するモデムデバイスやモデムグループを指定することもできる。
この機能を使って経由するモデムを切り替えることで、ファックス文書に印字する発信元などの情報も自動的に切り替えることが可能。
さらにまた、モデムグループを使えば、グループに所属させているいくつかのモデムのうちスタンバイ状態にあるものが一つ自動的に選択されるようになるので、同時に複数のFAX送信を行えるようになる。
⇒詳細はこちらを参照



□FAXを送信してみる。

テスト用の文書を適当なアプリケーションから開き、上で追加したプリンタを使って印刷する。
Send Faxというウインドウが開くので、「FAX number:」に相手先電話番号を入力し、「Send FAX」ボタンをクリックする。

次のような経路でFAXが送出される。
アプリケーション→ WinPrint Hylafax→ hylafax→ iaxmodem→ ASTERISK→ 電話回線

数秒後に、電話回線につながった相手先のFAX機で着信し、文書を受信することができた。

【Linux CentOS 5.7】 iaxmodemとhylafaxのインストールと基本設定作業

CentOS 5.7(64bit)に、iaxmodemとhylafaxをインストールする手順

HylaFaxというFAXサーバとそのクライアントソフトウェアを使えば、ネットワークを通じてWindowsマシンなどから手軽にFAXを送信することができるようになる。
さらに、HylaFaxで使用するモデムとしてiaxmodemを使えば、Asteriskと連携することができるようになる。

(前提)ASTERISKのインストールが完了していて、外線への発信ができていること。


今回、CentOS 5.7(64bit)にインストールしたバージョン
・iaxmodem-1.2.0
・hylafax-6.0.5

(注意)
この条件でインストールした場合、コマンドラインからsendfaxコマンドを使ってFAXを送出しようとしても、フォント周りのエラーが表示されできなかった。
しかし、そのような状態でも、代わりにhylafaxのクライアントソフト(たとえば、Hylafax WinPrint)を用いれば、正常にFAXを送出することができた
クライアントソフトを使った場合、sendfaxコマンドで必要だったプロセスがクライアントソフト上で解決されたために、FAXを送出できたのだろう。
FAXサーバーとしての本質的な機能は正常にインストールされているようだ。クライアントソフトウェアを使ってFAXを送出するなら、この条件でも問題はないと思う。(後述)

○クライアントソフトであるHylafax WinPrintのインストール手順については次のページに記載。
http://akira-arets.blogspot.com/2011/09/ms-windows7-winprint-hylafaxfax.html



■インストール共通手順■

◇システムを最新にアップデートする。

[root@localhost ~]# yum update
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-238.19.1.el5 #1 SMP Fri Jul 15 07:31:24 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux


◇コンパイルに必要なモノをインストールする。

[root@localhost ~]# yum install gcc gcc-c++
Installed:
  gcc.x86_64 0:4.1.2-51.el5 gcc-c++.x86_64 0:4.1.2-51.el5
Dependency Installed:
  cpp.x86_64 0:4.1.2-51.el5 glibc-devel.x86_64 0:2.5-65 glibc-headers.x86_64 0:2.5-65 kernel-headers.x86_64 0:2.6.18-274.3.1.el5 libstdc++-devel.x86_64 0:4.1.2-51.el5

Complete!

 
■iaxmodemのインストールと設定■


◇必要なライブラリをインストールする

[root@localhost ~]# yum install libjpeg libjpeg-devel libtiff libtiff-devel
Installed:
  libjpeg-devel.i386 0:6b-37         libjpeg-devel.x86_64 0:6b-37         libtiff-devel.i386 0:3.8.2-7.el5_6.7         libtiff-devel.x86_64 0:3.8.2-7.el5_6.7

Complete!
[root@localhost ~]# yum install ghostscript ghostscript-devel ghostscript-fonts sox
Installed:
  ghostscript.i386 0:8.70-6.el5_7.3    ghostscript.x86_64 0:8.70-6.el5_7.3    ghostscript-devel.i386 0:8.70-6.el5_7.3    ghostscript-devel.x86_64 0:8.70-6.el5_7.3
  sox.x86_64 0:12.18.1-1.el5_5.1

Dependency Installed:
  alsa-lib.x86_64 0:1.0.17-1.el5  ghostscript-fonts.noarch 0:5.50-13.1.1  libICE.i386 0:1.0.1-2.1             libSM.i386 0:1.0.1-3.1        libXt.i386 0:1.0.2-3.2.el5
  libXt.x86_64 0:1.0.2-3.2.el5    libogg.x86_64 2:1.1.3-3.el5             libvorbis.x86_64 1:1.1.2-3.el5_4.4  urw-fonts.noarch 0:2.3-6.1.1

Complete!

◇iaxmodemをダウンロードしインストールを行う
 
[root@localhost iaxmodem]# wget http://sourceforge.net/projects/iaxmodem/files/iaxmodem/iaxmodem-1.2.0/iaxmodem-1.2.0.tar.gz/download
`iaxmodem-1.2.0.tar.gz' へ保存完了 [3075769/3075769]
[root@localhost iaxmodem]# tar zxvf iaxmodem-1.2.0.tar.gz

[root@localhost iaxmodem]# cd iaxmodem-1.2.0
[root@localhost iaxmodem-1.2.0]#

一つ目のライブラリをインストールする。
[root@localhost iaxmodem-1.2.0]# cd lib/libiax2/
[root@localhost libiax2]# ./configure
[root@localhost libiax2]# make
[root@localhost libiax2]# make install
[root@localhost libiax2]# cd ../..
[root@localhost iaxmodem-1.2.0]#

二つ目のライブラリをインストールする。
[root@localhost iaxmodem-1.2.0]# cd lib/spandsp/
[root@localhost spandsp]# ./configure
[root@localhost spandsp]# make
[root@localhost spandsp]# make install
[root@localhost spandsp]# cd ../..
[root@localhost iaxmodem-1.2.0]#

これらのライブラリをシステムに登録する。すでに/usr/local/libが登録されていればこの作業は不要。
[root@localhost iaxmodem-1.2.0]# touch /etc/ld.so.conf.d/iaxmodem-i386.conf
[root@localhost iaxmodem-1.2.0]# echo '/usr/local/lib' >> /etc/ld.so.conf.d/iaxmodem-i386.conf
[root@localhost iaxmodem-1.2.0]# cat /etc/ld.so.conf.d/iaxmodem-i386.conf
/usr/local/lib
[root@localhost iaxmodem-1.2.0]# ldconfig

ビルドしてバイナリを生成し、パスの通ったディレクトリにコピーする。
[root@localhost iaxmodem-1.2.0]# ./build
[root@localhost iaxmodem-1.2.0]# ls ./iaxmodem
./iaxmodem
[root@localhost iaxmodem-1.2.0]# cp -p iaxmodem /usr/local/sbin/


◇設定ファイルを編集する

ディレクトリを作成し、iaxmodemの設定ファイルをコピーする。
[root@localhost iaxmodem-1.2.0]# mkdir /etc/iaxmodem
[root@localhost iaxmodem-1.2.0]# cp -p iaxmodem-cfg.ttyIAX /etc/iaxmodem/ttyIAX
[root@localhost iaxmodem-1.2.0]# vim /etc/iaxmodem/ttyIAX
device          /dev/ttyIAX
owner           uucp:uucp
mode            660
port            4570
refresh         300
server          127.0.0.1  ←ASTERISKの動作しているコンピューター
peername        iaxmodem ASTERISKのiax.confで設定するもの
secret          password
cidname         John Doe
cidnumber       8005551212
codec           slinear

ASTERISKのiax.confサンプルファイルの一番下に、このiaxmodemに対応した設定を追加する
[root@asterisk asterisk]# vim /etc/asterisk/iax.conf
(略)
[iaxmodem]
type=friend
username=iaxmodem
secret=password
host=dynamic
disallow=all
allow=ulaw ←実際の運用時にはulawが用いられた。
allow=slinear
requirecalltoken=no
context=fax_outgoing
(略)
念のため挙げると、[general]項目は次のようにした。
[general]
autokill=yes
maxregexpire = 300
iaxcompat=yes
language=jp
bandwidth=high
disallow=all
allow=slinear
allow=ulaw
allow=alaw
jitterbuffer=no ←yesにするとFAX伝送に時間がかかった。noのままにする。
forcejitterbuffer=no


ASTERISKのextensions.confに、fax送信用のコンテクストとエクステンションを追加する
[root@asterisk asterisk]# vim /etc/asterisk/extensions.conf
[fax_outgoing]
exten => _0.,1,Dial(SIP/${EXTEN}@外線発信用デバイス名)

ASTERISKを再起動させる
[root@asterisk asterisk]# service asterisk restart



◇iaxmodemを自動起動させるための設定

[root@localhost iaxmodem-1.2.0]# cp -p iaxmodem.init.fedora /etc/init.d/iaxmodem
[root@localhost iaxmodem-1.2.0]# chmod +x /etc/init.d/iaxmodem
[root@localhost iaxmodem-1.2.0]# chkconfig --add iaxmodem
[root@localhost iaxmodem-1.2.0]# chkconfig iaxmodem on
[root@localhost iaxmodem-1.2.0]# chkconfig --list | grep iaxmodem
iaxmodem        0:off   1:off   2:on    3:on    4:on    5:on    6:off

◇iaxmodemのログ用ファイルを置く
[root@localhost iaxmodem-1.2.0]# mkdir /var/log/iaxmodem
[root@localhost iaxmodem-1.2.0]# touch /var/log/iaxmodem/iaxmodem


◇IAXmodemを起動する
[root@localhost iaxmodem-1.2.0]# service iaxmodem start

IAXmodem を起動中:                                         [  OK  ]
[root@localhost iaxmodem-1.2.0]# ls /dev/ | grep ttyIAX
ttyIAX    ・・・デバイスが作成されている


◇念のため、Asterisk側で、iaxmodemが正常にレジストされているか確認する

Asterisk CLIを起動し、iax2のレジスト状況を確認する
[root@asterisk asterisk]# asterisk -r
asterisk-01*CLI> iax2 show peers 
Name/Username    Host                 Mask             Port          Status
iaxmodem/iaxmod  192.168.xxx.yyy  (D)  255.255.255.255  58553         Unmonitored
設定したiaxmodemモデムが、192.168.xxx.yyyからレジストしていることが分かる。



以上で、iaxmodemのセッティングは完了。


◇initでiaxmodemを起動する設定を行う

エディタをつかって、斜体で書かれた行を挿入する。
[root@localhost iaxmodem-1.2.0]# vim /etc/inittab
(略)
# Run gettys in standard runlevels
(略)
# Run iaxmodem in standard runlevels
im1:2345:respawn:/usr/local/sbin/iaxmodem ttyIAX

(略)

引数のttyIAXは、後で/etc/iaxmodemディレクトリに置かれる設定ファイルである。

◇試しに起動して、チェックを行う

システムの再起動を行い、iaxmodemを起動させる。
[root@localhost ~]# reboot

再起動後、プロセスを確認する。
[root@localhost ~]# ps -A | grep iaxmodem
 3043 pts/0    00:00:00 iaxmodem
iaxmodemのデバイスファイルが生成されていることを確認する。
[root@localhost ~]# ls /dev/ttyIAX
/dev/ttyIAX



■hylafaxのインストールと設定■

以下はソースからインストール手順である。

しかし、代わりにyumを用いてパッケージからインストールすることもできる。
(下記リンクの手順で、Hylafax+ 5.5.9 のインストールができた。)
http://akira-arets.blogspot.jp/2017/07/linux-centos69-hylafaxplus-installing.html



◇必要なモノをインストールする

[root@localhost ~]# yum install mgetty-voice zlib-devel
Installed:
  mgetty-voice.x86_64 0:1.1.33-9.fc6                        zlib-devel.i386 0:1.2.3-4.el5                        zlib-devel.x86_64 0:1.2.3-4.el5

Complete!


◇hylafaxをダウンロードしインストールを行う

[root@localhost hylafax]# wget ftp://ftp.hylafax.org/source/hylafax-6.0.5.tar.gz
`hylafax-6.0.5.tar.gz' へ保存終了 [1295267]
[root@localhost hylafax]# tar xvfz hylafax-6.0.5.tar.gz
[root@localhost hylafax]# cd hylafax-6.0.5
[root@localhost hylafax-6.0.5]#

[root@localhost hylafax-6.0.5]# ./configure
(省略)
Press Return to Continue
番号を指定し値を入力し、パラメーターを変更する。

HylaFAX configuration parameters (part 1 of 2) are:

[ 1] Directory for applications:        /usr/local/bin
[ 2] Directory for lib data files:      /usr/local/lib/fax
[ 3] Directory for lib executables:     /usr/local/sbin
[ 4] Directory for system apps:         /usr/local/sbin
[ 5] Directory for manual pages:        /usr/local/man
[ 7] Directory for spooling:            /var/spool/hylafax
[ 8] Directory for uucp lock files:     /var/lock
[ 9] Uucp lock file scheme:             ascii
[10] PostScript imager package:         gs
[11] PostScript imager program:         /usr/bin/gs
[12] Manual page installation scheme:   bsd-source-cat
[13] Default page size:                 North American Letter
[14] Default vertical res (lpi):        98
次のように質問されるので、パラメーター番号を指定する。
Are these ok [yes]? 13
設定値がわからなければ、?を入力して、説明を表示させる。
Default page size [North American Letter]? ?

"?" is not a known page size; the following are known page sizes:

Name                    Abbrev  Width   Height  Width   Height  Top     Left


ISO A3                  A3      14030   19840   13200    18480  472     345
ISO A4                  A4       9920   14030    9240    13200  472     345
ISO A5                  A5       7133    9921    6455     9236  472     345
ISO A6                  A6       5055    6991    4575     6508  472     345
ISO B4                  B4      12048   17196   11325    16010  472     345
North American Letter   NA-LET  10200   13200    9240    12400  472     345
American Legal          US-LEG  10200   16800    9240    15775  472     345
American Ledger         US-LED  13200   20400   11946    19162  472     345
American Executive      US-EXE   8700   12600    7874    11835  472     345
Japanese Letter         JP-LET   8598   12141    7600    10200  900     400
Japanese Legal          JP-LEG  12141   17196   11200    15300  900     400
設定できる値がわかったので、A4を指定する。
Default page size [North American Letter]? A4
さらに、14番のパラメーターの値も変更する。
Are these ok [yes]? 14
同様に、設定可能な値リストを表示させる。
Default vertical res (lpi) [98]? ?
ファインモードを設定するので、196を入力する。
"?" is not a valid vertical resolution; choose either "98" lines/inch
(low resolution) or "196" lines/inch (often called fine resolution)
.
Default vertical res (lpi) [98]? 196
入力された値に変更されたパラメーターリストが表示される。
HylaFAX configuration parameters (part 1 of 2) are:

[ 1] Directory for applications:        /usr/local/bin
[ 2] Directory for lib data files:      /usr/local/lib/fax
[ 3] Directory for lib executables:     /usr/local/sbin
[ 4] Directory for system apps:         /usr/local/sbin
[ 5] Directory for manual pages:        /usr/local/man
[ 7] Directory for spooling:            /var/spool/hylafax
[ 8] Directory for uucp lock files:     /var/lock
[ 9] Uucp lock file scheme:             ascii
[10] PostScript imager package:         gs
[11] PostScript imager program:         /usr/bin/gs
[12] Manual page installation scheme:   bsd-source-cat
[13] Default page size:                 ISO A4
[14] Default vertical res (lpi):        196
確認してから、yesを入力する。
Are these ok [yes]?yes
さらに、パラメーターリストが現れるが、これは変更せずにyesを入力する。
HylaFAX configuration parameters (part 2 of 2) are:

[15] Location of getty program:         /sbin/agetty
[16] Location of voice getty program:   /sbin/vgetty
[17] Location of sendmail program:      /usr/sbin/sendmail
[18] Location of TIFF tools:            /usr/bin
[19] Location of SysV init scripts:     /etc/rc.d/init.d
[20] Location of SysV start scripts:    ../rc2.d ../rc3.d ../rc4.d ../rc5.d
[21] Location of SysV stop scripts:     ../rc0.d ../rc1.d ../rc6.d
[22] Name of SysV start script:         S97hylafax
[23] Name of SysV stop script:          K05hylafax
[24] Init script starts faxq:           yes
[25] Init script starts hfaxd           yes
[26] Start paging protocol:             no
Are these ok [yes]? yes
(省略)

[root@localhost hylafax-6.0.5]# make
[root@localhost hylafax-6.0.5]# make install



◇初期設定を行う

[root@localhost hylafax-6.0.5]# /usr/local/sbin/faxsetup
(略)
Country code [1]? 81 ←日本
Area code []? xx ←日本国内の市外局番から0を除いたもの
Long distance dialing prefix [1]? 0 ←日本での場合は0
International dialing prefix [011]? 010 ←環境に適当なものを入力
(略)
Do you want to run faxaddmodem to configure a modem [yes]? no

Done verifying system setup.
この内容は、/var/spool/hylafax/etc/config というファイルに保存されていた。


ソースからコンパイル作業を行ったiaxmodem-1.2.0 ディレクトリから、IAXmodem用のconfigの原型を持ってくる。
これがなければ、たとえば送出したファックスにタグ(ヘッダー)を付けられなかった。
[root@localhost iaxmodem-1.2.0]# cp -p ./config.ttyIAX /var/spool/hylafax/etc/config.ttyIAX


ファックスのFromタグに表示させる名称を、必要に応じて編集しておく。(ただし英数字のみ可)
[root@localhost ~]# vim /var/spool/hylafax/etc/config.ttyIAX
CountryCode:            81
AreaCode:               xx
FAXNumber:              +81.xxx.xxx.xxx
LongDistancePrefix:     0
InternationalPrefix:    xxx
DialStringRules:        etc/dialrules
ServerTracing:          0xFFF
SessionTracing:         0xFFF
RecvFileMode:           0600
LogFileMode:            0600
DeviceMode:             0600
RingsBeforeAnswer:      1
SpeakerVolume:          off
GettyArgs:              "-h %l dx_%s"
LocalIdentifier:        "example Co.Ltd."  ←ファックス送信元情報
TagLineFont:            etc/lutRS18.pcf
TagLineFormat:          "From %%l %%n   |%c   Page %%P of %%T"  ←ファックスヘッダーのフォーマット(意味は下に記載)
MaxRecvPages:           200
#
(以下省略)
ファックスヘッダーフォーマットで使われている記号の意味
%%l  ・・・LocalIdentifier項目の値
%%n ・・・FAXNumber項目の値
%c ・・・現在の日時
| ・・・ファックス文書のヘッダー領域を左右に均等に区分するもの(上の例では、二分される)


ロケールを英語に切り替える(ファックス文書に印字される日本語の日付が文字化けするため
[root@localhost ~]# date
2011年  9月 26日 月曜日 19:14:05 JST  ←初めはこのように日本語で表記されていた
[root@localhost ~]# cat /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"  ←変数の値は、書き換え前このようになっていた
[root@localhost ~]# vim /etc/sysconfig/i18n
LANG="en_US.UTF-8"
[root@localhost ~]# date
Mon Sep 26 19:18:18 JST 2011  ←再起動後に英語表記に切り替わった(再起動はあとで)



◇システム起動時に、必要なプロセスが始動するように設定を行う

Hylafaxのfaxgettyというプログラムに、iaxmodemモデムに繋がる/dev/ttyIAXを渡す。

/etc/rc.local に、/usr/local/sbin/faxgetty /dev/ttyIAX を記述する方法と、
inittabを使う方法がある。いずれかの方法で設定すればよい。


[root@localhost hylafax-6.0.5]# vim /etc/rc.local
最後の行に追加する。
/usr/local/sbin/faxgetty /dev/ttyIAX

あるいは、次のようにする。
[root@localhost hylafax-6.0.5]# vim /etc/inittab
# Run gettys in standard runlevels
(略)
# Run iaxmodem in standard runlevels
im1:2345:respawn:/usr/local/sbin/iaxmodem ttyIAX
# Run faxgetty in standard runlevels
imh1:2345:respawn:/usr/local/sbin/faxgetty /dev/ttyIAX

(略)

[注意]
このfaxgettyの行は、iaxmodemの行の後に追加すること。引数/dev/ttyIAXが、iaxmodemにより設定ファイルに基づいて生成されるからである。



◇システム起動時にhylafaxが自動起動されるように設定する

 [root@localhost hylafax-6.0.5]# chkconfig hylafax on



◇iaxmodemなど必要なプロセスと共にhylafaxを起動させる

システム再起動後、全てが連動する。
[root@localhost hylafax-6.0.5]# reboot


以上でインストール作業の完了



■動作チェック■

【FAXの送信】

sendfaxコマンドを使ってfaxを送信しようとすると次のようなエラーが出て失敗した。

[root@localhost ~]# sendfax -n -d 電話番号 テキストファイル
/usr/local/sbin/textfmt: No font metric information found for "Courier-Bold".(略)
しかし、クライアントソフトウェアのWinPrint HylaFaxを使ってHylaFaxサーバーへアクセスすると、正常にfaxを送ることができた

WinPrint Hylafaxは、Windowsのプリンタデバイスのように振舞うクライアントソフトウェアである。
文書を扱う適当なWindowsのアプリで「印刷」実行するだけで、Hylafaxサーバーに文書の送出を指示し、任意の宛先へFAXを送ることができる。

この場合、次のように送出される。

Windowsアプリ⇒ WinPrint Hylafax⇒ Hylafax⇒ IAXmodem⇒ ASTERISK⇒ 電話回線

WinPrint Hylafaxの設定については、こちらのリンクを参考
http://akira-arets.blogspot.com/2011/09/ms-windows7-winprint-hylafaxfax.html


◇送信中には、ASTERISKのCLIには、次のようなメッセージが表示された
asterisk-01*CLI>
    -- Accepting AUTHENTICATED call from 192.168.yyy.zzz:
       > requested format = slin,
       > requested prefs = (),
       > actual format = ulaw, ←双方で使うコーデックとしてulawが選択されている
       > host prefs = (ulaw|slin),
       > priority = mine
    -- Executing・・・(省略)・・・
たとえばiaxmodem側とasterisk側で共にulawが使われている場合、コーデックの変換はなく、そして次に説明するPLCは用いられない。(ulawとalawの組み合わせでも問題ない)
音声FAX通信ではPLCが生じていないことは大切である。

PLCとは、パケットがロスしたときにそれがわからないよう無音を挿入するための機能である。
音声を使うFAX通信では、パケットロス時にPLCによって無音が挿入されるとうまく通信ができなくなってしまう。
通信中に20msの無音に遭遇するとFAXモデムは"carrier loss"を検出するからだ。
"carrier loss"は、FAXプロトコルでは次の手順に移るという意味を持っているため通信は失敗してしまう。

FAX送信でエラーが頻発する場合、asteriskを含めた相手先のアナログ電話への経路途中で、PLCが発生していないことを確かめる必要があるだろう

(参考)
・Asterisk IAXmodem < http://www.voip-info.org/wiki/view/Asterisk+IAXmodem > 2011/10/30
・Member "asterisk-1.6.2.20/doc/tex/plc.tex" of archive asterisk-1.6.2.20.tar.gz:
< http://fossies.org/unix/misc/asterisk-1.6.2.20.tar.gz:a/asterisk-1.6.2.20/doc/tex/plc.tex > 2011/10/30


【FAXの受信】

◇ASTERISKのextensions.confに、fax着信用のコンテクストとエクステンションを追加する
[root@asterisk asterisk]# vim /etc/asterisk/extensions.conf
[fax_incoming]

exten => incoming-fax,1,Dial(IAX2/iaxmodem)
当然、この例では、
外線から着信するデバイスの設定で、着信先コンテクストにはfax_incomingを指定し、
さらに、registerステートメントで、着信先エクステンションとしてincoming-faxを指定する必要がある。

◇外線からhylafaxへFAXを送信する

外線からFAX機などを使って文書を送信し、コンテクストfax-incomingのエクステンションincoming-faxに着信させると、
iaxmodemにダイヤルされ、hylafax側でiaxmodemが応答しfaxが受信される。


hylafaxの受信用ディレクトリを確認する
[root@localhost ~]# ls /var/spool/hylafax/recvq/
fax000000006.tif
このように、インデックスがつけられてtif形式で画像ファイルとしてFAXは保存される。

投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad