May 2, 2012

Cisco IP Phone 7940G の SIP ファーム 化について

地味に面倒だったのでメモ。 

まず、dhcp,tftp環境を整える。
SELinuxは、あらかじめ例のあの方にごめんなさいをしてから、切っておく。
Firewallはudpの67,69が開いてれば大丈夫。
# yum install tftp-server
# yum install dhcp
# chkconfig xinetd on
# chkconfig dhcpd on

デフォルトではtftpは/etc/xinetd.d/tftp内の記述で殺されているので、
service tftp
{
 socket_type  = dgram
 protocol  = udp
 wait   = yes
 user   = root
 server   = /usr/sbin/in.tftpd
 server_args  = -s -v /var/lib/tftpboot
 disable   = no
 per_source  = 11
 cps   = 100 2
 flags   = IPv4
}
とでもして起動するようにしておく。
また-vオプションによって/var/log/messagesに詳細なログがはかれるようにしておく。

 dhcpは、/etc/dhcp/dhcpd.confを
ddns-update-style interim;
ignore client-updates;

option voip-tftp-servers code 150 = ip-address;
option voip-tftp-servers 192.168.1.1;

subnet 192.168.1.0 netmask 255.255.255.0 {

  option routers                  192.168.1.1;
  option subnet-mask              255.255.255.0;
  option nis-domain               "";
  option domain-name              "";
  option tftp-server-name         "192.168.1.1";


  range dynamic-bootp 192.168.1.200 192.168.1.250;
  default-lease-time 3600;
  max-lease-time 7200;
}
とでもしておけばよい。

/var/lib/tftpbootには、

Ciscoの提供するSIPファームのzipファイルに由来する

OS79XX.TXT
P003-8-12-00.sbn
P0S3-8-12-00.sb2
P003-8-12-00.bin
P0S3-8-12-00.loads

と、別途用意する

XMLDefault.cnf.xml
SIPDefault.cnf
SIPXXXXXXXXXXXX.cnf
XMLDefault.cnf.xml
dialplan.xml

を入れておけばよい。

後者の内容に関しては
http://www.junic.net/archives/325
を参照。
各項目の説明は
http://www.cisco.com/cisco/web/support/JP/docs/VAUC/IPTelep/SIPIPPhoneSW/AG/001/03_sipmn44.html?bid=0900e4b18252979a
http://www.cisco.com/cisco/web/support/JP/docs/VAUC/IPTelep/SIPIPPhoneSW/AG/001/02_sipins44.html?bid=0900e4b18252979a
を参照。

あとは、7940Gに電源とLANをつないで起動させれば、
勝手にファームを読みにきて、
勝手にファームを書き換えて、
起動してくれる。

Asteriskの設定で気をつけるべきはsip.confの[general]内で"nat = no"を宣言しておくこと。
これは、上記の7940Gに食わせた設定との整合のため。

7940Gの電源が地味に面倒である。
というのもIEEE 802.3af制定前のCiscoの独自規格のPoEを採用しているためである。
今回私はHPのProCurve 2600-PWRをつかった。
何の設定もなしに、一発給電!大変よい買い物であった。

April 16, 2012

スクリプトの存在するディレクトリを調べる

シェルスクリプトを書いていると、
「そのスクリプトが置かれているディレクトリをしりたい」
なんてことがままある。

そんな場合は、
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
とする。
非常に稀なケースとして、スクリプトが存在するディレクトリが消失している場合は、DIRが空になる。
DIRが空かどうかはチェックすべき。

これは.で読み込んだ場合でも正確に動作する。

shではエラーが出る。bashで実行すること。

出典:
http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in

April 9, 2012

Arduino と W5200 ( WIZ820IO )を接続する3

コレの続き。
W5200へのアクセステスト
34時間目にしてついにスタック!
n=3で2回スタックしたし、一週間も持たずにスタックするとかやっぱり信用出来ない。。。

W5200そのもの、あるいはWizNetのライブラリ、もしくはWebServerスケッチかなぁ?

WebServerスケッチとそれ以外の原因の切り分けのために
W5100搭載のEtherシールドをつけたやつも並行して実験しておこうかな。
結果:
W5200は約50時間(147,714回)でスタック!
リセットして再度実験して50分(2,939回)で再度スタック!
リセットして再度実験して4日と8時間(260,602回)で再度スタック!
リセットして再度実験して2日と20時間(181,085回)で再度スタック…
リセットして再度実験して6日と16時間(359,543回)で再度スタック……
リセットして再度実験して4日と10時間(262,735回)で再度スタック……
W5100は20日以上トラブル無く稼働中(854,712回)!
時間と回数が合わないのは1回が取得+1秒ウェイトである上に、
数十万個のファイルがスクリプトを回しているディレクトリ下に作成されていて、
そのあたりも原因っぽい。こんな長時間まわすと思ってなかった…

どうもWebServerスケッチではなく、W5200かW5200用ライブラリがおかしい。
そしてW5100は安定しておるように見える。

どっから手をつけたもんかなー。
W5200の個体差というか、ハズレ個体なのかもしれんので、
もう一個買ってみるかー。

追記:4/16
実験結果更新


追記:4/22
実験結果更新

April 7, 2012

CentOS6 における gitサーバ の構築

gitの管理系としてgitoliteを採用し、環境を構築する。 
まずは各種のインストール。
gitoliteは公式レポジトリにないので、EPELから取ってくる。
# yum install git
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm
# yum install gitolite
これでgit及びgitoliteが導入された。
gitをホストするためにgitoliteという名前のユーザーがインストール時に作成されている。

注意すべきは、gitoliteアカウントがgitサーバにおけるすべてのレポジトリの所有者であり、
唯一必須のgitサーバのシステムアカウントである点である。
すべてのユーザーはgitoliteアカウントとしてgitサーバにアクセスすることになる。
各ユーザーはSSH公開鍵によって区別される。
このあたりがしばらく理解できなくて苦しんだ。

つぎにgitの管理ユーザーのための設定を行う。
gitoliteは管理情報をgitで管理するため、管理ユーザーすらgitサーバに、
(共用であるgitoliteアカウント以外には)システムアカウントを必要としない。

gitのクライアントとなる端末(サーバと同居してもいいが)のユーザーでsshの鍵を作り、
gitoliteが導入されているサーバにコピーしておく。
以下はクライアントでの作業
$ ssh-keygen -t dsa
これで、~/.ssh/id_dsaと~/.ssh/id_dsa.pubが出来ているはずである。

また、sshのコンフィグファイルを作っておくと便利である。
以下はクライアントでの作業
$ vim ~/.ssh/config
host gitserver #gitserverは適当に名前を変えてもよし
    user gitolite
    hostname 192.168.1.2 #gitserverのIPかDNSでひけるホスト名
    port 22
    identityfile ~/.ssh/id_dsa

id_dsa.pubをgitサーバにコピーし、/tmp/admin.pubなどにおいておく
(セットアップが終わったらいらなくなるのでtmpでよい) 
gitoliteは鍵の名前でユーザー名を管理することになるため注意。
(この例では管理ユーザーの名前はadminとなる)
以下はgitサーバでの作業
# chmod a+r /tmp/admin.pub 
# su -l gitolite
$ gl-setup /tmp/admin.pub
このあと設定ファイルをいじるためにvimが起動するが
ESC→:q→リターン
で抜ける。 

この時点で管理データレポジトリがたっており、あとはすべて外からgitを介して設定できる。



March 30, 2012

Arduino と W5200 ( WIZ820IO )を接続する2

ちょっとまえにこんなことをやっていた。
それの続き。

まずはおさらい。

Wiz820ioのピンアサインはこれ。














Wiz820ioとArduinoの接続は以下の表の7本。
Arduino Wiz820IO
3.3V VIM3.3
GND GND
RESET nRESET
D10 nSS
D11 MOSI
D12 MISO
D13 SCLK













入手はココ
ソフトのArduino1.0用ライブラリのDLはココ

で、前回は接続してライブラリが動く、ところまで確認した。
課題として残っていたのは、
「Wiz820ioに負荷をかけると一時間程度で死んでしまう」という点だった。
今回はこれを解決する。

解決の糸口としては、
「ライブラリに問題があるんじゃね? by マイコン風雲録さん」
が有力な気がするので、ここから手を付ける。

まず、素のW5200ライブラリだとどんな感じなのか、もう少し詳しくチェックする。
ExamplesのWebServerをロードして、Linuxから
$ watch --interval=1 wget 192.168.1.177
で一秒に一回データを取りに行き続けることで負荷をかける。

結果:
12時間ぶっ続けで負荷をかけても異常なし。
あれ????
1月にやった時は確かに不安定だったんだけどな????
前回、今回の差分とすれば、母艦がWindowsかLinuxか、という点と気温ぐらいしか…
(Arduinoは1.0のままだし、WizNetもライブラリの更新とかしてない、タイムスタンプ的には。)
Linuxに切り替えるのも面倒だし、気温依存とか考えたくもないな…

よし。あれは気のせいだった!「勝ったッ!第3部完!」
いや、えー…気のせいじゃないと思うんだけどなぁ…

諦めきれずArduinoへの電源供給をACアダプタに切り替えて、再度実験したところ、
3時間弱、10630回アクセスした所でスタックした!!!!
おー。ACアダプタがキーなのかはわからんが、ともかく不具合は再現するな。
よーしよしよし。イイコだ。不安定だな!!!!

さすがにn=2で何かを語るのもあれなので、
そのまま、もう一回トライ。
おおおお、24時間たっても異常なし。

一番面倒なタイプの障害っぽい雰囲気。なんだこれ。。。
商用電源が揺らいだ、とかそういうのかなぁ?一応実験施設なので電源は安定してると思うんだが。

これ、シリアルコンソールつないでエラーだしておくと詳細分かる可能性があるな。
あと、W5200のresetをAVRのデジタルIOにつないでおいて、
スタックした場合にW5200のみリセットして初期化、とかそういうので切り分けてみようかな。

(追記:4/2)
とりあえず、34時間でスタックしたので、やっぱW5200だめっぽい。
特定個体の問題である可能性もあるので、もう一個買ってみよう。
というか、W5200ってリビジョン変わったりしてるんだろうか?

(追記:4/9)
とりあえず、W5100とならべて、10日ぐらいテストしてる。
http://mogtechblog.blogspot.jp/2012/04/arduino-w5200-wiz820io-3.html
もりもりW5200が固まるので難儀している。
ハズレ個体かもしれないので、他に買ってみるかなー。
なにか情報ないもんかなぁ。。。

March 24, 2012

2TB以上のHDDに CentOS6.2 をインストールする

2TB以上のディスクにCentOSなりRHELをインストールするにはひと手間いるので、メモ。

普通にDVDをいれて起動、GUI画面まではいつもどおり。
GUI画面でCtrl+Alt+F2でCUIに移行
# parted /dev/sda #sdaはインストールしたいディスク
(parted) mklabel gpt
(parted) quit
# 
としてpartedでgptに設定をし直し、partedを抜ける。
その後Ctrl+Alt+F6でGUIに復帰

あとはディスクの設定時に「すべての領域を使用する」を選ばず、カスタム設定を選ぶこと。

以上

参考:
http://godwood.allnet.ne.jp/vioret/d/?date=20110815

ML110 G7 の HP Smart アレイ B110i SATA RAIDコントローラ で作ったRAIDに CentOS6.2 を導入する

ちょっと実験したいことがあったので、
ML110G7のB110iでRAID0を作ってCentOS6.2を導入してみた。
結構めんどいので手順を残しておく。

USBメモリとネットにつながる別のLinuxマシンが別途必要なので用意しておくこと。 

まず、HPから"Driver Diskette"をDLしてくる。
Driverじゃないことに注意。
Driverはrpmで提供されるが、DriverDisketteはディスクイメージをgzで固めたものが提供される。
この記事を書いている時点での最新版はココ

DLしたらUSBメモリをアンマウントしてから
$ gunzip hpahcisr-1.2.6-11.rhel6u1.x86_64.dd.gz
$ sudo dd if=hpahcisr-1.2.6-11.rhel6u1.x86_64.dd of=/dev/sdb #sdbはUSBメモリ
としておく。

次にML110G7のB110iの設定を行う。
・POST画面でF9を押してRBSUに入って、Advanced Optionを選択
・SATA ConfigurationでRAIDを選択
・RBSUをぬけて、再起動
・POST画面でF8を押してORCAに入ってCreate RAIDで各種設定
・ORCAをぬける
でB110iの設定は終了。今回は2TBのHDDを2玉、RAID0にして4TBとした。

用意したUSBメモリを起動前のML110G7に挿す。
CentOS6.2のインストールディスクをつかってML110G7を起動。

Grubの起動画面っぽいところでESCを押しboot:プロンプトを出す。
boot: linux dd blacklist=ahci
として、ドライバを導入させる。ahciを殺さないとHDDが個別に認識されてしまう。
導入が済むと、さらに他のドライバを導入するかを聞かれるのでNoで先に進む。

あとは普通にグラフィカルなインストール画面に戻る。

RHEL5.7以降(6を含む)ならば、これだけで問題ないはず。

参考:
http://ml110.web.fc2.com/
http://h50146.www5.hp.com/products/software/oe/linux/mainstream/product/hardware/option/array/b110i.html

ML110 G7 を開けてみた

実験用にML110G7を購入した。
HDDの換装のためケースを開けてみて、G6からの変化にビビったのでレポート。

まずはG6の中身をおさらい。



















といった感じで見た目は普通のPCと同じでかなり質素。
iLOとかついていて痒いところに手が届くし、
PCIe x16とかも普通につかえて、ATXの電源をのせかえればGPGPUとかの実験にも使える。
激安”パソコン”風サーバでした。

一方、G7は、















と、ミドルクラスサーバっぽい雰囲気に!

細かくみていくと…
















ファンが前部に追加&メンテナンス性が向上してたり、




















サイドパネルやHDDへのアクセスを制限する鍵がついたり、




















HDDがトレイ式にかわってたり、




















それにあわせて、ストレージ用にバックプレーンがついてmini-SAS式になったりしてます。

また、G6には内部にUSBのポートがありましたが、
G7では内部USBポートは廃止され、SDカードスロットが追加されています。





















機能面でもiLO3の搭載をはじめいろいろ近代化していて面白いです。
一番試したかった機能はML110G7では無理なようでしょんぼりですが…

というわけで、
安さを追求した質素なG6、
エントリークラスの”サーバ”であるという主張をうるさいぐらいにしてくるG7、
と言った感じ。

これなら電源の冗長化までオプションに入れちゃってもよかったんじゃないかなぁ?
BTOオプションで対応してるみたい。総額4万追加すると460Wの冗長化電源に対応。
これで「パワーもメモリもいらないけど、物理サーバがほしいな」という案件には十分対応可能になった。すごい!
でも、HPのストアで買うとやっぱり高いのよね…

G6ほどの安さはもはや望めないのでどうしたものかなーと。ぐぬぬ。
とおもっていたら、2台で2万みたいなキャンペーンしててワロタwwwww
NTT-Xストアの在庫も△になってるしそろそろモデルチェンジ?ML110 G8も出たら買うよ!

March 20, 2012

MACアドレスの申請・取得について(IABタイプ)

仕事で"とあるネットワーク機器"を販売することになり、MACアドレスの申請・取得を行った。
その手順をまとめておく。

まずIEEEの登録関係のTOPから IAB関連ページに飛ぶ。

つぎに、申請フォームに移動する。

一番上の設問にAgreeした後は、順に記入していく。
Part1では申請者の情報、Part2では管理者の情報、を記入する。

Part3では、
・今回が初めての申請か否か
・初めてでないならば何故追加の申請をするのか
・親会社か子会社か
を記入する。
親会社でも子会社でないならばPart4は飛ばして良い。


Part5では、今回の申請内容を秘密にするか否か、秘密にする場合はその理由を記入する。
秘密にする場合は初回及び年毎に手数料が発生する。年間1000$とかで結構高い。
試作機等をフィールドテストする場合等、
MACアドレスと会社名を結び付けたくない場合に利用するようだ。

Part6では、支払い方法等を記入する。 今回はクレジットカードで決済する。

クレジットカードでの支払いの場合のフォームは普通に埋めてOK

すべてが終わると、こんな味気ないメッセージが出る。

人手で審査しているようなので即発行というわけではない。
しばらく待っていると、メールに添付される形で
割り当てられたMACアドレスの範囲が書かれたPDFが送らえてる。

なんら詰まること無く、さらっと終わってしまった。
なんというか、拍子抜けではある。
しかしコレで堂々と使えるMACアドレスが手に入った。 

たかだか625$で4096個のMACアドレスが使えるようになるので、
今回のように"ネットワーク機器を販売する"といった場合以外にも、
"VMを納品したい"みたいな時にもつかえるかも? 

ちなみにIABのMACアドレス単価は15¢程度だがOUIでとったら0.01¢位になる。
それはそうと、IABではなくOUI-36でとればよかったかなー。
なんでIABを選んだのかすでに覚えていない。

March 8, 2012

Express5800/GT110d に Ubuntu10.04 TLSを導入する

DVDから普通に導入したらどうもNICを認識していない。
Ubuntuにしては大変珍しい、という印象。
BCM5718用のドライバをBroadcomから取ってきて導入する。

ここからリンクをたどってDLする。
この記事を書いてる時点では、2012年1月末リリースの3.122gが最新の様子。
適当にDLして~/local/srcにでも置いておく。
$ cd ~/local/src
$ unzip linux-3.122g.zip
$ cd ./Server/Linux/Driver
$ tar zxvf tg3-3.122g.tar.gz
$ cd tg3-3.122g/
$ make
$ sudo make install
$ sudo modprobe -r tg3
$ sudo modprobe tg3
これで認識されるようになる。

Kernelをアップデートするたびにコンパイルして入れ直しなので注意。
これどうやったらやらなくて良くなるんだっけ。。。?
DKMSとか使えばいいの?ゲロめんどい。