利用者:MR G

提供: VoIP-Info.jp
2008年3月6日 (木) 13:51時点におけるMR G (トーク | 投稿記録)による版 (NTP鯖だって立てちゃうYO nictスキーなのは仕様(筆者の記憶容量的意味で))
移動先: 案内検索

俺、ボーナスが入ったらCP-7970G買うんだ。

注目しているURL

Standalone Cisco 7941/7961 without a local PBX

CP-7941/7961を単独で動かす法

79XX系電話機とAsterisk

Asterisk phone cisco 79xx

ファームウェア

http://www.xs4all.nl/~graver1/cisco/7905/ 7905のファームウェア
ftp://ftp.cisco.com/pub/voice/ip-phone/sip-7960/ 7961のSIPファームウェア

Cisco 7905/7912

Cisco VoIP_INFO 7905/7912の設定

chan sccp

SCCPドライバの解説
FAQ

Cisco 79XX カスタマイズ

着メロとか壁紙とかのカスタマイズ(日本語)

短縮ダイヤル

Configuring Speed Dial
ラインキー用、ディレクトリボタン用(電話機単体用、企業共有用)短縮ダイヤル設定解説書。
SIPファームとSCCPファームで機能が別れている(らしい)

いぢくり中

Cisco IP Phone

CiscoIP Phone7900シリーズ

マルチライン動かないぞガッデム
SIPファームウェア入れたら、壁紙サイズとか日本語表示用ファイルが変わってた。
とか散々な目に遭ってしまった。

着信音ネタ(音源ファイルのつくりかた)

sox使え。とあるけど、windowsで作れるかやってみたいところ。
そもそもsoxって何。
astlinuxでの保留音作成と同じ流れでなら作れるかな?
それにしても上限が2秒というのは厳しいなぁ。以下、着信音の仕様

8000 Hz サンプリングレート
8 bits per sample
ulaw compression
240 - 16080 samples long (0.03 秒~2.01 秒)

着信音ネタ(鳴り分け)

Asterisk側で着信音を鳴り分けできるらしい。
Asterisk側にて、ダイヤルする前に"ALERT_INFO"をSIP inviteに引っ付けて電話機に送り込むと、指定した着信音が鳴るらしい
ただし、

Note that this only seems to work for the internal ringtones and not for any custom ringtones.

↑このように内線着信で、なおかつカスタマイズした着信音だと使えない(らしい)
本当に動くんだろうかと。(例によって未検証)

Asterisk version <1
 exten => 3010,1,SetVar(__ALERT_INFO=<Bellcore-dr1>) 

Assterisk 1.0 and 1.2
 exten => 3010,1,SetVar(_ALERT_INFO=<Bellcore-dr1>)

Asterisk 1.4
 exten => 3010,1,SIPAddHeader(Alert-Info: <Bellcore-dr1>)

Cisco 7961G(SIPファームウェア)

ぶち込みかた

  1. 7960/7940のファームウェア(SIP用)を解凍し、TFTPサーバーに置いておく。
  2. (DHCP Optionが指定可能な)DHCPサーバーを立てておく。
  3. DHCPサーバーの設定で、TFTPサーバーのIPを指定しておく。
  4. #キーを押しながら電源(PoEならUTPケーブル)を挿す。(着信ランプが点滅するまで#を押し続けること)
  5. 1着信ランプが点滅しはじめたら、23456789*0#の順に押す。(取り消しは、他のキー二度押し)
  6. ファームウェアが真っ白になり、電話機再起動
  7. 電話機再起動後、ファームウェアをTFTPサーバーから引っ張ってくる。

設定ファイル(SIP用)

Asterisk phone cisco 79x1 xml configuration files for SIP
SIP用cnfファイルジェネレーター
←動作未検証

ソフトキー設定

SEP<MAC Address>.cnf.xml中の
<softKeyFile>SK50719900-3bee-4594-bc3f-6400e1a33bf0.xml</softKeyFile>
という箇所が、ソフトキーのテンプレファイル読み込み設定らしい。
[元ネタ]

AutoAnswer

AutoAnswer機能を利用したスクリプト作成中
プログラム力の無さに絶望した。

AstLinux

Microclient JRにAstLinux入れてみた。

NTPサーバー

AstLinuxもNTPサーバーになれるので、設定してみる。

設定変更

NTPサーバーの設定を変更するため、rc.confを変更する。

vi /stat/rc.conf   ←標準でインストールした場合
vi /mnt/kd/etc/rc.conf  ←/mnt/kd/以下にファイルを置いている場合

/etc/ntp.confを変更しても、再起動したら中身が消えてしまうので注意。

下記のように設定を変更する。(before)

##Master NTP server. This is the NTP server that AstLinux will sync against
##upon bootup. It is also the server that the running ntpd process will use
##to maintain that time sync.
NTPSERV="us.pool.ntp.org"
#NTPSERV="europe.pool.ntp.org"
#NTPSERV="north-america.pool.ntp.org"
#NTPSERV="south-america.pool.ntp.org"
#NTPSERV="asia.pool.ntp.org"
#NTPSERV="oceania.pool.ntp.org"
#NTPSERV="africa.pool.ntp.org"

##If you would like to specify several servers to be used at the same time,
##you can specify them in NTPSERVS seperated by spaces.
#NTPSERVS="ntp1.cs.wisc.edu us.pool.ntp.org"

NTPサーバーのIPアドレスを追加する。(After)
(ちゃんと調べてないだけではあるけども)DNSが引けてない事があったので、
NTPサーバーのIPを入力してみた。

##Master NTP server. This is the NTP server that AstLinux will sync against
##upon bootup. It is also the server that the running ntpd process will use
##to maintain that time sync.
#NTPSERV="us.pool.ntp.org"   ←NTPSERV=の箇所は全部コメント扱いにする  
#NTPSERV="europe.pool.ntp.org"
#NTPSERV="north-america.pool.ntp.org"
#NTPSERV="south-america.pool.ntp.org"
#NTPSERV="asia.pool.ntp.org"
#NTPSERV="oceania.pool.ntp.org"
#NTPSERV="africa.pool.ntp.org"

##If you would like to specify several servers to be used at the same time,
##you can specify them in NTPSERVS seperated by spaces.
#NTPSERVS="ntp1.cs.wisc.edu us.pool.ntp.org"
NTPSERVS="133.243.238.243 133.243.238.244"  ←ここの行を追加

NICTが提供しているNTPサーバーのIPを入力したが、自宅内に既存NTPサーバーがあれば、そこを指定したほうがよろしい。
設定したら、再起動。

動作確認

再起動後、さきほど変更したrc.confの中身が、
/etc/ntp.confに反映されている事を確認する。

pbx ~ # cat /etc/ntpd.conf
listen on 0.0.0.0
server 133.243.238.243
server 133.243.238.244

ntpdが動いていたら、止めてしまう(動作確認のため)

pbx ~ # ps ax |grep ntp
1135 ?        S      0:00 /usr/sbin/mDNSProxyResponderPosix 192.168.0.6 pbx AstLinux PBX _ntp._udp 123
1167 ?        S      0:00 ntpd
1168 ?        S      0:00 ntpd
1170 pts/0    S+     0:00 grep ntp

pbx ~ # kill 1167

ntpdをデバッグモードで動かしてみる。

pbx ~ #  ntpd -d
listening on 0.0.0.0
ntp engine ready
reply from 133.243.238.244: offset 15.018296 delay 1.014712, next query 5s
reply from 133.243.238.243: offset 15.009712 delay 1.038980, next query 8s
reply from 133.243.238.244: offset 15.018296 delay 1.014712, next query 5s
reply from 133.243.238.243: offset 15.009712 delay 1.038980, next query 8s
reply from 133.243.238.244: offset 15.018296 delay 1.014712, next query 5s
reply from 133.243.238.243: offset 15.008712 delay 1.038980, next query 8s
(略)

peer 133.243.238.244 now valid
peer 133.243.238.244 now valid
(略)

adjusting local clock by 14.498614s

動いているっぽい動作していたら、OK牧場。
ちなみにntpdを止め忘れていると、文句言われるので注意。

pbx ~ #  ntpd -d
listening on 0.0.0.0
fatal: bind: Address already in use
dispatch_imsg in main: pipe closed
Terminating
pbx ~ # ps ax

時間のずれが大きすぎると修正できないので、予めPCの時間を合わせておいた良いだろう。

AstLinuxとchan_sccp

AstLinuxには、あらかじめchan_sccpが入っているので、ファイルを追加する必要がない。

Forneus ~ # mount -o rw,remount /
Forneus ~ # vi /stat/etc/asterisk/sccp.conf

という具合に/stat/etc/asterisk/以下にsccp.confを新規作成。
sccp.confを作成したら、再起動かけるか、
下記の手順でファイルを読みこむようにする。

Forneus # cp /stat/etc/asterisk/sccp.conf /etc/asterisk/sccp.conf 
Forneus # asterisk -vvvvvvvvvvvvvvvvvvvvr  (vを16連打)
Forneus*CLI> unload chan_sccp.so
Forneus*CLI> load chan_sccp.so

SEP<MACアドレス>.cnf.xmlの編集も忘れてはいけない
設定が正しければ、Cisco電話機がRegistする。

EXTIF

#EXTIF=eth0

/stat/etc/rc.conf内の、EXTIFをコメントアウト解除すると、PBXオンリーモードになり、
HTTPの設定とかTFTPサーバーの設定が効かなくなる。

INTIF

#INTIF=eth0

/stat/etc/rc.conf内の、INTIFをコメントアウト解除すると、ゲートウェイとして使えるモードになるが、

EXTGW="10.0.0.1"
DNS="192.168.0.1"

デフォルトゲートウェイやDNSの設定が効かなくなる。(rc.confの設定が無視される)
rc.confの設定を見直すのが正攻法ではあるものの、小細工も結構効いたりする。

DNS

INTIF=eth0を有効にしていると、/etc/resolv.conf

Forneus init.d # cat /etc/resolv.conf
search hoge.
nameserver 127.0.0.1

という具合に、外部DNSを参照してくれない。
rc.conf内のDNSの項目が無視される。 /etc/init.d/dnsmasqを開くと

if [ "$LOCALDNS" ]
then
RCONF="/tmp/etc/resolv-up.conf"
echo "search $DOMAIN
nameserver 127.0.0.1" > /tmp/etc/resolv.conf
else
RCONF="/tmp/etc/resolv.conf"
fi

とあるので、

nameserver 192.168.0.1" > /tmp/etc/resolv.conf

と小細工することで任意のDNSサーバーを参照することが出来る。

デフォルトゲートウェイ

vi /etc/init.d/network

とやると、/stat/etc/rc.conf内のネットワークの挙動が(ちょっと)わかる
デフォルトルートは

route add -net default gw "$EXTGW" dev "$EXTIF"

と設定されているようだ。

余りスペースを活用する

英語版astlinuxが使用する(CFカードの)ディスクスペースは64MB。
1GBのカード使ったとしたら残り900MBは無駄。こいつはMOTTAINAI
TFTPサーバーとして使うため、ディスクスペースを有効活用する事にした。
とりあえずメモ

スライス

fdisk /dev/hda と入力。

fdisk /dev/hda
The number of cylinders for this disk is set to 3957.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

コマンド?と聞かれたら"n"(Newの略らしい)を押す。
command actionと聞かれたらpを押す。

Command (m for help): n

 command action
   e   extended
   p primary partition(1-4)

次に2を押す。パーティション番号らしい

Partition number (1-4):

次はそのままデフォルト値でいいかな。そのままエンターキー

First cylinder (521-3957, default 521):

次はサイズを聞かれる。デフォルト値(全部使う)でいいかな。そのままエンターキー

Last cylinder or +size or +sizeM or +sizeK (521-3957, default 3957):

何も無かったように、最初に戻った。

Using default value 3957

Command (m for help):

pを押したら、スライス切れた気がする。

Command (m for help): p

Disk /dev/hda: 2042 MB, 2042191872 bytes
16 heads, 63 sectors/track, 3957 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks  Id System
/dev/hda1               1         520      262048+ 83 Linux
/dev/hda2             521        3957     1732248  83 Linux

wを押すと、実際に書き込む。 そして再起動だ。

文句言われることもある。
使用中ですかそうですか。

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table
fdisk: WARNING: rereading partition table failed, kernel still uses old table: Device or resource busy

何か忘れてると思ったら初期化を忘れていた。(だから文句言われる)
この前はどうやって使えてたんだろうか(記憶にございません)
mke2fs -c /dev/hda2 と入力してみる。

# mke2fs -c /dev/hda2
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
216832 inodes, 433062 blocks
21653 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=444596224
14 block groups
32768 blocks per group, 32768 fragments per group
15488 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Checking for bad blocks (read-only test): done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

テストとして、/mnt/kbあたりにマウントさせてみた。

# mount /dev/hda2 /mnt/kd
# mount
rootfs on / type rootfs (rw)
/dev/root on / type ext2 (ro)
none on /proc type proc (rw)
none on /dev type tmpfs (rw)
none on /var type tmpfs (rw)
none on /tmp type tmpfs (rw)
none on /dev/pts type devpts (rw)
none on /sys type sysfs (rw)
usbfs on /proc/bus/usb type usbfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/hda2 on /mnt/kd type ext2 (rw)

dfでもちゃんと空き表示される。
ちなみに、2GBのフラッシュメモリを使っている。

# df -m
Filesystem           1M-blocks      Used Available Use% Mounted on
rootfs                     248        69       179  28% /
/dev/root                  248        69       179  28% /
none                         1         0         1   0% /dev
none                         5         1         5   3% /var
none                        10         3         8  25% /tmp
/dev/hda2                 1666         3      1578   1% /mnt/kd

自動でmountさせる

mkdir /mnt/hda2
mount /dev/hda2 /mnt/hda2

とやると、とりあえず/mntにマウントされる。 が、さすがに毎回手動マウントする訳には行かない。

mount -o rw,remount /
vi /etc/rc

と入力し、起動スクリプトを直接編集することにした。
ここで注意すべきは"/etc/fstab"を直接編集しても意味が無いということだ。
自動マウントさせたいなら、"/etc/rc"を直接編集すべしである。

mount -t ほげ

という分を探すと111行目あたり(Astlinux日本語版なら121行目あたり)に、それっぽい設定が見つかるので、

mount /stat/dev/hda2 /mnt/hda2

という行をテキトーに追加。上書き保存して再起動
これでAstlinuxが使ってない領域を自由に使えるようになった。

# df -m
Filesystem           1M-blocks      Used Available Use% Mounted on
rootfs                     248        69       179  28% /
/dev/root                  248        69       179  28% /
none                         1         0         1   0% /dev
none                         5         1         5   3% /var
none                        10         3         8  25% /tmp
/dev/hda2                 1666         3      1578   1% /mnt/hda2

/etc/fstabの中身は、/etc/rcが自動作成した「ただのテキストファイル」なので、
変更しても意味が無いっぽい。(再起動の度に新規作成される)
以上、/etc/rcの一部を引用

echo "$ROOTDEV /             ext2    ro              0       0
proc    /proc           proc    defaults        0       0
none    /dev            tmpfs   size=200k       0       0
none    /tmp            tmpfs   size=10000k     0       0
none    /var            tmpfs   size=5000k      0       0
" > /tmp/etc/fstab

資源(あいたスペース)の有効活用

標準の保留音では「Asteriskでござる」と言わんばかりであり、ちょっち個性に欠けるので、
/mnt/hda2/に保留音をぶちこむ。みっくみくにしてやんYO!!
Astlinuxで使える保留音のファイルフォーマットはMP3ではなく、ulawファイルなので注意が必要である。
/var/lib/asterisk/moh/default以下には収まりきれないので、下記の方法で解決する

リンク張る

設定要らずで済ますなら、lnコマンドを使う。ファイルが少ないなら問題ないだろう。

Forneus # ln -s /mnt/hda2/MoH/clouds.ulaw /var/lib/asterisk/moh/default/
設定変更

/stat/etc/asterisk/musiconhold.confを直接編集しても良い。

Forneus asterisk # vi /stat/etc/asterisk/musiconhold.conf
[default]
mode=files
;directory=/var/lib/asterisk/moh/default
directory=/mnt/hda2/MoH

random=yes      ; Play the files in a random order

tftpd

Cisco電話機を動かす前にtftpサーバーを動かす必要がある。
Cisco電話機は、tftpサーバーから設定ファイル、壁紙、着信音などを引っ張ってくるからである。

Forneus # vi /stat/etc/rc.conf

(略)

##Configure TFTPD support
##Works the same as FTPD above.
TFTPD=inetd  ←コメントはずした
 
##TFTP Server options (flags to pass to TFTP)
##This only works in standalone TFTP server mode
#TFTPDOPTIONS="-l -s /tftpboot"
TFTPDOPTIONS="-l -s /mnt/tftp"   ←付け足しても無視される模様

TFTPD=inetdにすると、TFTPDOPTIONSが無視されてしまうようだ。
TFTPD=tftpdにすると、tftpd自体が動かない模様。
tftpの設定も小細工が可能である。

/vi/etc/init.d/inet
if [ "$TFTPD" -a "$TFTPD" = "inetd" ]
then
if [ -d /mnt/kd/tftpboot ]
then
ln -s /mnt/kd/tftpboot /tmp/tftpboot
else
mkdir /tmp/tftpboot
fi
echo "tftp    dgram   udp     wait    root    /usr/sbin/tftpd         tftpd -s 
/tmp/tftpboot" >> /tmp/etc/inetd.conf   ←ここの行を小細工(Before)
fi
}
fi
echo "tftp    dgram   udp     wait    root    /usr/sbin/tftpd         tftpd -s 
/mnt/hda2/tftp/" >> /tmp/etc/inetd.conf   ←ここの行を小細工(After)
fi
}

ファイルを変更したら、再起動をかける。
とりあえず動いたらしい

Forneus log # ps |grep tftp
 1226 root        272 S   tftpd -s /mnt/hda2/tftp/
 1364 root        296 S