Subversion リポジトリのバックアップとレストア

CentOS 上でのSVN(Subversion)リポジトリを新しいサーバに移動する必要があったのでその簡単な方法の備忘録です。
手順は現行サーバーのリポジトリをバックアップ(dump)して、それを新サーバーでレストア(load)するだけです。

1. リポジトリのバックアップ

# svnadmin dump /var/www/svn/projects > projects.dump

2. リポジトリのレストア
※ レストアの前に、こちらの手順で予めサブバージョンのインストールとレポジトリを作成しておきます。

# svnadmin load /var/www/svn/projects < projects.dump

Asterisk TLSとSRTPでより安全なコール (パート2: SRTP編)

前回はTLS設定で呼制御の暗号化を試みました。今回は通話の暗号化を試みます。

1. sip.conf の変更
/etc/asterisk/sip.conf のSIPクライアント(例 2001 )の定義に “encryption=yes” を追加します。

[2001]
type=peer
secret=password    ; this is NOT a secure password
host=dynamic
...(省略)...
transport=tls
encryption=yes

2. クライアントの設定
Zoiper で 暗号化 を有効にして確認します。

Preferences -> Accounts -> Advanced -> Use rport media をチェック
Preferences -> Accounts -> Advanced -> Use TLS with SDES SRTP を選択

以上です。

通話を開始すると Zoiper 上にカギのアイコンが表示されます。

また、今回の設定は Zoiper 以外にも AGEphone Business の評価版での試用をしました。
サポートの方に教えて頂きました AGEphone Business の設定方法は下記のとおりです。

Windows - AGEphone Biz3
TLS
- アカウント設定 > 接続種別 = TLS
- アカウント設定 > 全般の設定 > トランスポートにTLSを使う = ON
SRTP
- アカウント設定 > 全般の設定 > メディア暗号化(SRTP) = ON

Asterisk TLSとSRTPでより安全なコール (パート1: TLS編)

Asterisk には TLS(Transport Layer Security)SRTP(Secure Real-time Transport Protocol) により通信を安全に行う方法があります。

TLS は Asterisk と SIPクライアントの SIP によるやりとりを暗号化し、SRTP は電話の音声ストリームを暗号化します。
ここでは CentOS6.x 上で Asterisk 13 をソースをビルドしてインストール方法は省略します。ただし、Asterisk 13 のビルドは下記の必要なパッケージをインストールしてから行ってください。

1. 必要なパッケージのインストール
まず、暗号化にに必要な OpenSSL と LibSRTP をインストールします。

# yum install openssl openssl-devel
# yum install libsrtp libsrtp-devel

2. 自己署名証明書の作成
Asterisk で利用する自己署名証明書を生成するために Asterisk のソースディレクトリ下の contrib/scripts/に ast_tls_cert という便利なツールが付属しています。これで サーバー証明書とクライアント証明書を生成します。

# mkdir /etc/asterisk/keys
# ./ast_tls_cert -C foo.com -O "Foo Company" -d /etc/asterisk/keys
# ./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C foo.com -O "Foo Company" -d /etc/asterisk/keys -o sipclient

※ foo.com や "Foo Company" は実際のサーバーのFQDN またはIPアドレス、社名に置き換えてください。また、コマンドの途中でパスフレーズを数回入力するように促されますので適切なものを入力します。

コマンドを実行すると以下のファイルが /etc/asterisk/keys ディレクトリに生成されます。

# ll /etc/asterisk/keys 

asterisk.crt
asterisk.csr
asterisk.key
asterisk.pem
sipclient.crt
sipclient.csr
sipclient.key
sipclient.pem
ca.cfg
ca.crt
ca.key
tmp.cfg

3. sip.conf の変更
/etc/asterisk/sip.conf に以下を追加します。

tlsenable=yes
tlsbindaddr=0.0.0.0:5061
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1

続けて、SIPクライアント(例 2001 )の定義に “transport=tls” を追加します。

[2001]
type=peer
secret=password    ; this is NOT a secure password
host=dynamic
...(省略)...
transport=tls

4. クライアントの設定
Zoiper で TLS を有効にして確認します。

Preferences -> Accounts -> Advanced -> Use rport をチェック
Preferences -> Accounts -> Advanced -> Use TLS transport を選択
Preferences -> Advanced -> Security -> Extra CA certificate に sipclient.pem ファイルを選択
Preferences -> Advanced -> Security -> Protocol suite: から TLS v1 を選択
Preferences -> Advanced -> Security -> Disable certificate verification をチェック ※1

※1 このチェックボックスは DANGEROUS DO NOT USE! と表記されていますが、これをチェックしないと
Certificatge: Issuer untrusted/not found/not valid/wrong purpose というエラーになります。
自己署名の証明書のためと思われます。また、再起動するとチェックが解除されていますので、起動のたびにチェックをする必要があります。
これが、フリー版の制限なのか、自己署名証明書のせいなのかはわかりません。;)

xargs で指定したコマンドに引数を渡す場合の工夫

xargsは標準入力を読み込み、それを引数として指定したコマンドを実行することができます。

例えば、以下のシェルスクリプトを実行すると指定したディレクトリにある更新日時が3日前のファイルを削除することができます。

$ find /tmp -mtime +3 -type f | xargs rm 

ところが find でファイルが見つからなかった場合、 rm のオペランドが不足ということになります。

rm: missing operand
Try `rm --help' for more information.

そこで、xargs に –no-run-if-empty というオプションを指定し実行することで、ファイルがない場合の対処ができます。

$ find /tmp -mtime +3 -type f | xargs --no-run-if-empty rm

以上です。

CPI レンタルサーバーでPHP/PDO MySql接続エラー

CPIレンタルサーバーにWebシステムを構築していてはまってしまった件なのですが、PHP で PDO を使って MySql へ接続すると以下のエラーが。。。

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

ローカルのサーバーでは出ていなかったので、Unixソケットも調べたが /tmp/mysql.sock で問題なし。

原因は、host=localhost で接続していたためでした。’localhost’ を ‘127.0.0.1’ に変更したら接続ができました。