システム開発・ウェブ制作[下北沢/東京] (株)ディーゴ

株式会社ディーゴは、サービス・システム開発・セキュリティ・コンサルタント・ウェブ制作に至るまでITに関する業務を幅広く承ります。

Month: 7月 2011

Subversionでリビジョン間で追加・更新されたファイルのみを抽出する

OS X にはTortoiseSVNがないので若干不便です。
特に差分だけFTPでアップしたいとかいったときに、 リビジョン間の差分をTurtoiseSVNでは取得できるのですが、svnのみではそれはできません。
この差分を抽出するスクリプトをブログで公開されている方のものを拝見して手直ししてみました。


#!/bin/bash
N=${1}
M=${2}
BASEDIR=${3}
EXPDIR=${4}

if [ $# -ne 4 ] ; then
echo "usage: diff_export.sh [from rev.] [to rev.] [base dir] [exp target]"
exit
fi

if [ -e ${EXPDIR} ] ; then
echo "error: Export target already exists!"
exit
fi

mkdir -p ${EXPDIR}

ENTRIES=`svn diff -r ${N}:${M} ${TARGET} --summarize | grep "^[MA]" | sed -E "s|^[MA]\s*||"`

for i in ${ENTRIES}
do
DIRNAME=`dirname ${EXPDIR}/${i}`
mkdir -p ${DIRNAME}
svn export -r ${M} ${BASEDIR}/${i} ${EXPDIR}/${i}
done

winebarrelさんのブログを参考にさせていただきました。ありがとうございました。

cgiで、(24)Too many open files エラー

お客様からお預かりしているサービスで500 Internal Server Errorで動作が止まっているというご報告を受けました。
Apacheが、(24)Too many open files: couldn’t spawn child process: /usr/cgiwrap/cgiwrap を吐いています。自然回復は望めないようです。
他のアカウントでファイルが開けないなどはないので、該当アカウントで、オープンファイル数を使いきってしまっているようです。
Linuxのデフォルト値は1024。
1024以上もファイルをオープンするプログラムというのも異常ですが、ひとまず2048に上げて様子をみることにしました。
vi にて以下の設定ファイルを編集。
vi /etc/security/limits.conf

以下の2行を追加
* soft nofile 2048
* hard nofile 2048

これで以下のコマンドを使い、Apacheの再起動を行えば2048まで開けるようになります。
service httpd restart

こちらのエラーが出ていたシステムは弊社が開発したシステムではないのですが、ワンストップサービスでサーバーをご利用いただいておりますので、システムの安定稼働のためサーバー側で出来る限りの対応をさせていただいています。

システム開発案件・保守はディーゴまでご相談ください。

AsteriskNowにiLBCコーデックを追加する

VoIP over 3Gするには、g729aコーデックか、iLBCコーデックが適している。
g729aコーデックは簡単に導入できるが、iLBCコーデックは少し難しいのでメモしておく。
RPMパッケージを作って入れました。
メモなのでほぼコマンドのみです。(見る人が見ればわかるはず・・・。)

Source RPMを入れる。
cd /usr/local/src
wget http://packages.asterisk.org/centos/5/current/SRPMS/asterisk16-1.6.2.19-1_centos5.src.rpm
rpm -Uvh asterisk16-1.6.2.19-1_centos5.src.rpm

iLBCのソースをDLして、ビルド用の差分パッチを作る。
cd /usr/src/redhat/BUILD
tar xvzf ../SOURCES/asterisk16-sources-1.6.2.19.tar.gz
cp -a asterisk16-1.6.2.19 asterisk16-1.6.2.19-ilbcpatch
cd asterisk16-1.6.2.19-ilbcpatch
cat contrib/scripts/get_ilbc_source.sh
wget -q -O - http://www.ilbcfreeware.org/documentation/extract-cfile.awk | tr -d '\r' > codecs/ilbc/extract-cfile.awk
wget -P codecs/ilbc http://www.ietf.org/rfc/rfc3951.txt
(cd codecs/ilbc && awk -f extract-cfile.awk rfc3951.txt)
cd ..
diff -uNr asterisk16-1.6.2.19/codecs/ilbc asterisk16-1.6.2.19-ilbcpatch/codecs/ilbc > ../SOURCES/ast16-ilbc-codec.patch

ソースをとっておく
cd ../BUILD/
mv asterisk16-1.6.2.19 asterisk16-1.6.2.19-dist

specファイルを編集する
cd /usr/src/redhat/SPECS/
cp asterisk16.spec asterisk16.spec-dist
vi asterisk16.spec

差分は以下の通り
--- asterisk16.spec-dist 2011-07-14 13:37:53.000000000 +0900
+++ asterisk16.spec 2011-07-14 13:41:53.000000000 +0900
@@ -49,6 +49,7 @@
Patch2: voicemail-splitopts.patch
Patch3: voicemail-splitopts-odbcstorage.patch
Patch4: voicemail-splitopts-imapstorage.patch
+Patch10: ast16-ilbc-codec.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-root
URL: http://www.asterisk.org
Vendor: Digium, Inc.
@@ -332,6 +333,26 @@
%endif

#
+# ilbc subpackage
+#
+%{?_without_ilbc:%if 0}
+%{!?_without_ilbc:%if 1}
+%package ilbc
+Summary: ilbc codec module for Asterisk
+Group: Utilities/System
+Provides: asterisk-ilbc
+Provides: asterisk%{astapi}-ilbc
+#Obsoletes: asterisk-ilbc
+#BuildRequires: ilbc-devel
+#Requires: ilbc
+Requires: %{name}-core = %{actversion}-%{release}
+
+%description ilbc
+Asterisk format plugin for the ilbc codec
+%endif
+
+
+#
# Speex subpackage
#
%{?_without_speex:%if 0}
@@ -501,6 +522,7 @@
%endif

%patch2 -p0
+%patch10 -p1

###################################################################
#
@@ -520,6 +542,7 @@
echo "MENUSELECT_CORE_SOUNDS=-CORE-SOUNDS-EN-GSM" > menuselect.makeopts.defaults
echo "MENUSELECT_MOH=-MOH-OPSOUND-WAV" >> menuselect.makeopts.defaults
make USER_MAKEOPTS="menuselect.makeopts.defaults %{?_without_optimizations:menuselect.makeopts.defaults-debug}" menuselect.makeopts
+perl -pi -e "s/MENUSELECT_CODECS=codec_ilbc/MENUSELECT_CODECS=/g" menuselect.makeopts
make %{makeflags} 2> err
mv err %{name}-sources-%{version}-%{release}.make.err
mv %{name}-sources-%{version}-%{release}.make.err /var/log/
@@ -1064,6 +1087,16 @@
%endif

#
+# ilbc Subpackage
+#
+%{?_without_ilbc:%if 0}
+%{!?_without_ilbc:%if 1}
+%files ilbc
+%defattr(-, root, root)
+%{_libdir}/asterisk/modules/codec_ilbc.so
+%endif
+
+#
# Speex Subpackage
#
%{?_without_speex:%if 0}

ビルドする
rpmbuild --without odbc --without speex -ba asterisk16.spec

RPMを入れ替え
cd /usr/src/redhat/RPMS/i386/
rpm -e asterisk16-voicemail asterisk16 asterisk16-core asterisk16-doc asterisk16-dahdi asterisk16-ilbc asterisk16-addons-core asterisk16-addons-bluetooth asterisk16-addons-mysql asterisk16-addons-ooh323 asterisk16-addons
rpm -Uvh asterisk16-voicemail-1.6.2.19-1_centos5.i386.rpm asterisk16-dahdi-1.6.2.19-1_centos5.i386.rpm asterisk16-1.6.2.19-1_centos5.i386.rpm asterisk16-core-1.6.2.19-1_centos5.i386.rpm asterisk16-ilbc-1.6.2.19-1_centos5.i386.rpm asterisk16-doc-1.6.2.19-1_centos5.i386.rpm

Asteriskの再起動

service asterisk stop
killall -9 asterisk
service asterisk start

WZR-HP-AG300HのDD-WRT化

以下の情報は、電波法に触れるかもしれませんので、あくまでも実用ではなく技術的興味の実験として。

buffalo社の無線ルーターWZR-HP-AG300H ですが、DD-WRT化できます。

USではBaffaloが、Professional Firmware として、DD-WRT版のファームウェアを配布しています。
しかし、JP版のWZR-HP-AG300Hは、US版とリージョンが異なるため、このDD-WRT版のファームウェアを管理画面からアップロードしても蹴られてしまいます。
以下の手順を経ることによって、JP版WZR-HP-AG300Hのリージョンを書き換えて、US版用の、DD-WRTファームウェアを適用することが可能になります。

1. シリアルコンソール接続するために、WZR-HP-AG300Hを殻割りする。
(1) 側面のLEDランプがあるところはシールになっています。これを剥がします。
(2) 背面の黒いゴム足はその下がネジになっています。4カ所のそれを外します。
(3) あとは、上面3カ所、下面4カ所のツメで止まっています。これをマイナスドライバーでこじ開けます。
(4) 基盤にアンテナがつながっているので、セロテープをはずし、コネクタを外します。
(5) これで基盤を取り外すことができます。

2. シリアルコンソール用のピンを立てる。
写真の箇所が、シリアルコンソールのパターンになります。
左から、RxD, TxD, GND, VCC となっています。
ここに、ピンをハンダ付けしましょう。

3. TTLのシリアル接続ができるケーブルを調達します。
私は、秋月電機の、FT232RLを使いました。

http://akizukidenshi.com/catalog/g/gK-01977/

4. FT232RLのWindows 用のドライバをインストールします。
FTDIのサイトから、Driver -> VCP Driver とたどり、OSにあったものを導入します。

http://www.ftdichip.com/

ドライバを導入してからFT232RLを接続すると、新たにCOMポートが追加されます。

5. シリアルコンソール用のターミナルとしてTeraterm を導入する。
ターミナルはTeratermがおすすめです。
インストールします。

http://sourceforge.jp/projects/ttssh2/

6. FT232RL と、WZR-HP-AG300Hを以下のように接続します。
私はIC用クリップのついたケーブルで接続しました。
(FT232RL)GND <--> GND(WZR-HP-AG300H)
(FT232RL)RxD <--> TxD(WZR-HP-AG300H)
(FT232RL)TxD <--> RxD(WZR-HP-AG300H)

7. Teraterm を立ち上げ、コンソールの準備をします。
接続時に、Serial を選び、4で追加されたCOMポートを指定して接続します。
ちなみに、私の場合はCOM4でした。
TeratermのメニューからSetup -> Serial Portと たどり、通信速度、パリティなどを以下のように設定します。
Port: COM4(FT232RLをつないで追加されたポート)
Baud rate: 115200
Data: 8bit
Parity: none
Stop: 1bit
Flow control: none

8. そのままの状態で、WZR-HP-AG300Hの電源を入れます。
ショートに注意してください。

9. Teraterm上にu-bootのメッセージが流れます。
下のように、tftpのメッセージが出たら、CtrlとCを同時に押してブートを中断します。
tftp server(receive) go, waiting:4[sec]
eth0 link down
Load address: 0×84000000

ブートの中断に成功すると、以下のようなプロンプトが出ます。
ar7100>

10. リージョンを書き換える。
以下の2つのコマンドでリージョンを書き換えます。
ar7100> setenv region US
ar7100> saveenv

printenv でリージョンが書きかわっていることを確認します。
ar7100> printenv
以下の1行が出ていればOKです。
〜〜〜〜
region=US
〜〜〜〜

11. ブートして、管理画面からDD-WRTのファームをアップロード
以下のコマンドを打つと、ルーターがブートします。
ar7100> boot

ルーターのIPアドレスをブラウザに打ち込んで、管理画面を表示して、
ファームウェアのアップロードを行います。
DD-WRT版ファームは以下からDLします。

http://www.buffalotech.com/support/downloads/airstation-high-power-n600-gigabit-dual-band-wireless-router-wzr-hp-ag300h/

12. ファームが無事書きかわったら、PCとルーターを有線でつないで、DHCPでアドレスを取り直し、

http://192.168.11.1/

にアクセスすれば、adminのパスワード設定画面になり、晴れてDD-WRT版のファームウェアを
使えます。

おつかれさまでした。

iPhoneにノートンがいらないわけ

以下の記事から、抜粋です。

http://headlines.yahoo.co.jp/hl?a=20110704-00000001-bcn-sci

そもそもPCと同じようにフルブラウジングができるスマートフォンは、常にオンライン犯罪の危険にさらされている。ましてやAndroidはオープンなシステムで、犯罪者たちの標的になりやすい。また、常に持ち歩いて使うスマートフォンは、紛失や盗難による情報漏えいの可能性もある。シマンテックは、こうしたセキュリティの必要性をお客様に伝えるために、スマートフォン売り場は絶好の場だと考えた。

記事の本筋とは関係ないところに反応なのですが、この部分を読んで、そっか、Androidはノートンが必要なのかと思いました。
でも、僕の使っているiPhoneにセキュリティソフトが必要なんて聞いたことないのです。
なんでiPhoneは平気なんでしょうね?

理由をあげれば下のような感じです。
1. iPhoneのOSは最新版しか導入不可。OSレベルでの機能組み込み不可(しかしJBすれば可)
2. すべてのアプリケーションは、Appleが提供するApp storeを経由してしか配布できず、必ずAppleのチェックを通すことになる。
3. もっとも危険と思われるウェブブラウザは、Operaは例外として、SafariもしくはSafariのコンポーネントを使ったものに限定される。

つまり、ガチガチにAppleが管理してるから、iPhoneの中身にあるものは全部Appleが知っている。もしセキュリティホールが見つかれば、Apple自らがパッチするわけで安全っていうことなんです。

その分マーケットや技術的には制限が出ますから当然多くの反対意見も多々あるわけですけどね。

さて、ユーザーからすると、PCに対しての設定やセキュリティなんて利用の目的ではないわけで、ないにこしたことはないのです。

AppleはPCを使ってやることの本筋からはずれる、めんどくさい部分はどんどん隠蔽してあげることで、PCを使ったその先に集中してもらおうとしているんですね。

iPhoneやMacを使っているとそういう哲学しっかり感じますね。

Social Widgets powered by AB-WebLog.com.