memo 809 件

old server

古いサーバ

CPU: AMD Athlon XP 2000+
MEM: 1GB

Primary MasterHGSTHDT725032VLA305GB
Primary SlaveSamsungSP1604N152GB
Primary MasterSeagateST3120022A114GB
Primary SlaveHGSTIC35L120AVV207-0117GB
Secondary MasterMaxstor6Y120L0117GB
Secondary SlaveMaxstor6Y160L0156GB

HGST Touro external drive

HGST Touro Desk 2TB USB 3.0 Black External Hard Drive HTOLDX3NB20001ABBは USB 3.0 ってなってるけど本当に USB 3.0 相当なのか?

型番 HTOLDX3NB20001ABB で検索すると、HGSTのページが引っかかる。日本版も見つかった。
DESCRIPTIONMODEL NUMBERSKUUPC
Touro Desk DX3 Black 2000GB NAHTOLDX3NB20001ABB0S03394705487189216
Touro Desk DX3 Black 2000GB JPHTOLDX3JB20001ABB0S03410705487189377

そこで、日本版の型番 0S03410 で検索したところ、同じくHGSTのページが引っかかった。
製品製品番号UPC
Touro Desk DX3 Black 2000GB JP0S03410705487189377

名前は違うが同じもののようだ。さて、このPDFファイルは、このHGSTのページからリンクされている。

そこで、同ページの左上にある「主な仕様:概略仕様」を読んでみると、なんと「データ転送速度(最大) 480Mb/s」と書かれている。(USB2.0 の理論値)

また、同じく左上にある「関連情報:よくある質問」を読むと、「Q1 システム要件について教えてください。」に対して「Touro シリーズ」の要件は「USB 2.0 ポート搭載」となっている。(Touro Pro シリーズでは「USB 3.0 または USB 2.0 ポート搭載」となっている)

さらに、Touroのページにある、製品仕様 (USB 3.0)は、上記のHGSTのページと同じ(和訳)のようだが、このページの技術仕様にもしっかり「データ転送レート: USB 2.0: 最大 480 Mbit/秒」と書かれていた。

というわけで、USB3.0 対応はあくまでマーケティング的なもので、実際には USB2.0 相当の速度しか出ないようだ。(嘘は書かれていないけど、あんまり誠実ではないように感じる。) USB3.0 相当の速度が欲しければ Touro Pro を使えってことだね。

POST message

POSTのメッセージが速すぎるのでメモ。
Press DEL to run Setup (F4 on Remote Keyboard)
Press F12 if you want to boot from the network
Press F8 for BBS POPUP (F3 on Remote Keyboard)

CrashPlan in a Jail

他のオンラインバックアップサービスと違い、CrashPlan は「ローカルバックアップ」と呼ばれる、同じPC内のフォルダや外付けハードディスク、またはネットワーク経由で別のPCへのバックアップができる。

初めに思いついたのは、アカウントを2つ作り、自分のサーバ上に VirtualBox で Windows を走らせネットワーク経由でバックアップをとることだった。そこで調べてみたところ、
  1. アカウントは1つでよかった。複数のPCから同じアカウントでログインすると、お互いがバックアップ先として選択できるようになった。
  2. Windows 以外にも Mac、Linux、Solaris をサポートしてる。しかも "headless" モードをサポートしてるのでバックアップ先としてサーバ上で運用するのに最適。
ということが分かった。残念ながら FreeBSD はサポートされてないようだが、少しググってみると Linux emulation で動かしてる例が複数(ここここここ)見つかったので、大丈夫そうだ。ついでに、謎のバイナリ(と言っても Java で書かれてるようだが)を動かすならやっぱり Jail の中で動かしたいでしょう、ということでさくっと試してみた。

まずは、適当なPCに CrashPlan をダウンロード・インストールして起動、アカウントを作成しておく。(複数のPCにインストールして、お互いがバックアップ先として見えるか確認しておくとよいかも)

次にサーバ側の準備をする。初めに Jail の準備。
# setenv d /home/jails/jail
# mkdir -p $d
# cd /usr/src
# make buildworld
# make installworld DESTDIR=$d
# make distribution DESTDIR=$d
# cp -p /etc/resolv.conf $d/etc
# cp $d/etc/crontab $d/etc/crontab.orig
# cat $d/etc/crontab.orig | sed -e 's/^1,31/#1,31/' > $d/etc/crontab # adjkerntz を止める
# cp $d/etc/syslog.conf $d/etc/syslog.conf.orig
# cat $d/etc/syslog.conf.orig | sed -e 's/^\*.err;kern.warning;/#*.err;kern.warning;/' > $d/etc/syslog.conf # console への出力を止める
# mkdir -p /home/jails/crashplan/compat/linux/proc
# cat << EOF >> /etc/fstab.jail # Jail 内で Linux procfs が必要になる
linproc /home/jails/crashplan/compat/linux/proc linprocfs rw 0 0
EOF
# cat << EOF >> /etc/pf.conf # prisoner へのネットワークは pf の NAT で提供する。
ext_if="em0"
jail_subnet="192.168.0.0/24"
crashplan="192.168.0.1/32"

nat on $ext_if from $jail_subnet to ! $jail_subnet -> ($ext_if)
rdr on $ext_if proto tcp from any to ($ext_if) port 4242 -> $crashplan port 4242
rdr on $ext_if proto tcp from any to ($ext_if) port 4243 -> $crashplan port 4243 # こっちはあとで削除する
# cat << EOF >> /etc/rc.conf # Jail と pf の設定。
# pf
pf_enable="YES"
pf_rules="/etc/pf.conf"

# Jail
jail_enable="YES"
jail_list="jail"
jail_jail_rootdir="/home/jails/jail"
jail_jail_hostname="jail.local"
jail_jail_ip="lo0|192.168.0.1/24" # こういう書き方だと、Jail 起動時に自動的に lo0 にアドレスがつく
jail_jail_devfs_enable="YES"
jail_jail_mount_enable="YES"
EOF
Jail を起動。
# /etc/rc.d/jail start jail
# jls # Jail ID を確認する
# jexec X /bin/tcsh # Jail 内に入る
Jail 内で準備をする。(なお、linprocfs を mount することで、linux.ko と linprocfs.ko が自動的に load される)
jail# cat << EOF >> /etc/make.conf
OVERRIDE_LINUX_BASE_PORT=f10
OVERRIDE_LINUX_NONBASE_PORTS=f10
EOF
jail# cat << EOF >> /etc/rc.conf
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
syslogd_flags="-ss"
crashplan_enable="YES" # 後で rc ファイルを作成する
EOF
jail# portsnap fetch extract
jail# cd /usr/ports/ports-mgmt/portmaster
jail# make install distclean
jail# portmaster emulators/linux_base-f10
jail# portmaster sysutils/linux-procps
jail# portmaster java/linux-sun-jre16
ここまでで Jail 内での Linux emulation の環境が整った。CrashPlan 本体のインストールは 'crashplan' という一般ユーザーを作って行なうことにする。
jail# adduser
(... add user 'crashplan' ...)
jail# su - crashplan
jail$ cd $HOME
jail$ setenv PATH /usr/local/linux-sun-jre1.6.0/bin/:$PATH
jail$ rehash
jail$ fetch http://download.crashplan.com/installs/linux/install/CrashPlan/CrashPlan_3.2.1_Linux.tgz
jail$ tar zxf CrashPlan_3.2.1_Linux.tgz
jail$ cd CrashPlan-install
jail$ /compat/linux/bin/bash install.sh

Welcome to the CrashPlan Installer.

Press enter to continue with installation.

Validating environment...

NOTE: You are apparently not installing as root. While it is recommended to
install as root it is not required. If you continue to install as crashplan
then CrashPlan will only be able to back up files readable by crashplan.

Would you like to switch users and install as root? (y/n) [y] n
installing as current user
44127 blocks

You must review and agree to the EULA before installation.

Press enter to read the EULA.
(...)

Do you accept and agree to be bound by the EULA? (yes/no) yes

What directory do you wish to install CrashPlan to? [/home/crashplan/crashplan]
/home/crashplan/crashplan does not exist. Create /home/crashplan/crashplan? (y/n) [y] y

What directory do you wish to store backups in? [/home/crashplan/crashplan/manifest]
/home/crashplan/crashplan/manifest does not exist. Create /home/crashplan/crashplan/manifest? (y/n) [y]

Your selections:
CrashPlan will install to: /home/crashplan/crashplan
And store datas in: /home/crashplan/crashplan/manifest

Is this correct? (y/n) [y]

Unpacking /./CrashPlan_3.2.1.cpi ...
44127 blocks
sed: 1: "/home/crashplan/crashpl ...": command c expects \ followed by text
cat: /proc/sys/fs/inotify/max_user_watches: No such file or directory # 単なるチェックなので無視する

Your Linux system is currently configured to watch files in real time.
We recommend using a larger value; see the CrashPlan support site for details

Starting CrashPlan Engine ... Using standard startup
OK

CrashPlan has been installed and the Service has been started automatically.

Press Enter to complete installation.

Important directories:
Installation:
/home/crashplan/crashplan
Logs:
/home/crashplan/crashplan/log
Default archive location:
/home/crashplan/crashplan/manifest

Start Scripts:
/home/crashplan/crashplan/bin/CrashPlanEngine start|stop
/home/crashplan/crashplan/bin/CrashPlanDesktop

You can run the CrashPlan Desktop UI locally as your own user or connect
a remote Desktop UI to this Service via port-forwarding and manage it
remotely. Instructions for remote management are in the readme files
placed in your installation directory:
/home/crashplan/crashplan/doc


To start the Desktop UI:
/home/crashplan/crashplan/bin/CrashPlanDesktop

Installation is complete. Thank you for installing CrashPlan for Linux.

jail$ cp crashplan/bin/run.conf crashplan/bin/run.conf.orig
jail$ sed -e 's/ttl=0"/ttl=0 -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider"/' < crashplan/bin/run.conf.orig > crashplan/bin/run.conf # http://wiki.freebsd.org/linux-kernel#Workarounds を参照
jail$ su -
jail# cat << EOF >> /usr/local/etc/rc.d/crashplan # rc ファイルを作る。'crashplan' ユーザで動かすため、少し変な書き方になってる。
#!/bin/sh
#

# PROVIDE: crashplan
# REQUIRE: NETWORKING
# KEYWORD: shutdown

. /etc/rc.subr

home="/home/crashplan/crashplan"
name="crashplan"
rcvar=`set_rcvar`
command="/usr/bin/su"
command_args="/compat/linux/bin/bash ${home}/bin/CrashPlanEngine"
pidfile="${home}/CrashPlanEngine.pid"
start_cmd="${command} -l ${name} -c \"${command_args} start\""
stop_cmd="${command} -l ${name} -c \"${command_args} stop\""
restart_cmd="${command} -l ${name} -c \"${command_args} restart\""
status_cmd="${command} -l ${name} -c \"${command_args} status\""

load_rc_config $name
run_rc_command "$1"
EOF
jail# chmod 755 /usr/local/etc/rc.d/crashplan
jail# exit
jail$ /usr/local/etc/rc.d/crashplan start
Starting CrashPlan Engine ... Using standard startup
OK
jail$ /usr/local/etc/rc.d/crashplan status
CrashPlan Engine (pid 57761
57760
57759
57758
57757
57756
57755
57754
57753
57752
57751
57750
57749
57748
57747
57746
57745
57744
57743
57742
57741
57740
57739
57738
57737
57736
57735
57734
57733
57732
57731
57730
57729
57728
57727
57726
57725
57724
57723
57722) is running.
jail$
ここまで来たらあと一息。CrashPlan のクライアントからこのサーバへつないで設定をする。(といっても、アカウントと紐付けるだけだけど) つなぎ方は CrashPlan のオフィシャルのページに Connect to a Headless CrashPlan Desktop として載ってる。

ただ Jail 内で動かすと(なのかどうかはよく分かってないけど)上記のページの説明とは違い CrashPlan Engine は(127.0.0.1:4243 ではなく) 192.168.0.1:4243 (192.168.0.1 は Jail に割り当てたIPアドレス)で Listen する。なので、わざわざ SSH tunnel を作る必要はなく、代わりに ui.properties の「#serviceHost=127.0.0.1」を「serviceHost=x.x.x.x」(サーバのグローバルIPアドレス)に変更してクライアントを立ち上げる。(なお、この時点では 4242 では Listen してないと思われるが気にしなくてよい) クライアントが立ち上がったら、他のPCで使ってるアカウントを使ってログインする。特に変更することがなければ、そのままクライアントは閉じてよい。これで準備完了。

4243 は認証がまったくないので pf.conf から「rdr on $ext_if proto tcp from any to ($ext_if) port 4243 -> $crashplan port 4243」の行を削除するかコメントアウトし、"pfctl -F all -f /etc/pf.conf" で再読み込み。(pfctl -s nat で確認)

最後に、他のPCのクライアントを起動して、サーバがバックアップ先として表示されるか確認する。されなかったら、Jail 内で netstat し 4242 で Listen してるかや、クライアントから telnet x.x.x.x 4242 などとして接続できるか確認する。うまくバックアップがとれれば crashplan/backupArchives の下にファイルが作られていく。

warnings from tcpd/tcpwrapper

security/denyhost を使ってると TCP Wrapper のせいで、
May 18 09:05:44 foo sshd[66363]: warning: /etc/hosts.allow, line 19: can't verify hostname: getaddrinfo(host.example.net, AF_INET) failed
みたいなメッセージがよく出てた。けど、正引きと逆引きの確認をする必要性を感じなかったので、しないようにした。
# diff -u /usr/src/contrib/tcp_wrappers/socket.c{.orig,}
--- /usr/src/contrib/tcp_wrappers/socket.c.orig 2012-05-31 11:24:00.000000000 -0400
+++ /usr/src/contrib/tcp_wrappers/socket.c 2012-05-31 11:24:13.000000000 -0400
@@ -176,6 +176,7 @@
int salen, alen, err = 1;
char *ap = NULL, *rap, hname[NI_MAXHOST];

+ sin = NULL; /* XXX disable forward/reverse name lookup */
if (sin != NULL) {
if (sin->sa_family == AF_INET6) {
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sin;

mozc

/usr/ports/japanese/mozc-server を 1.5.1090.102 へアップデートしようとしたら失敗したので少し調べてみたら、1.5.1090.102 から mozc_renderer という新しい変換候補ウィンドウをデフォルトにした(e.g. http://tomcat.nyanta.jp/sb2/sb.cgi?eid=421 )らしい。そのために、GTK+ が必要になったけど、GTK+ が入ってないから失敗した、というわけ。

mozc のリポジトリを確認したら、ちゃんと回避方法が書いてあったので、その通りにしたら今度はうまくいった。

--- /usr/ports/japanese/mozc-server/Makefile.orig       2012-05-31 14:33:59.000000000 -0400
+++ /usr/ports/japanese/mozc-server/Makefile 2012-05-31 14:25:46.000000000 -0400
@@ -76,7 +76,7 @@
BUILD_MOZC_CMD= cd ${BUILD_WRKSRC} && \
${SETENV} BUILD_COMMAND="${WRKSRC}/mozcmake" \
PYTHONPATH=${WRKSRC}/third_party/gyp/local/lib/python${PYTHON_VER}/site-packages \
- GYP_DEFINES="use_libprotobuf=1" \
+ GYP_DEFINES="use_libprotobuf=1 enable_gtk_renderer=0" \
${PYTHON_CMD} build_mozc.py
BUILD_GYP_CMD= cd ${WRKSRC}/third_party/gyp && ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP}

test

Schwab
FB32.59 x18.9541.54
VWO38.25 x18.9547.20

Total 88.74

Fidelity
VTI68.00 x17.9575.95

Total 75.95

S/MIME with gpgsm (on Mew)

Mew を使ってて気がついたのが、三井住友銀行からの S/MIME で署名されたメールが、
X-Mew: <body> Good S/MIME sign <[email protected]> UNDEFINED
というように "UNDEFINED" って表示されてることだった。

どういう意味なのか mew-smime.el を読むと、
(defun mew-smime-verify-check ()
(let (addr warning result trust ret)
[...]
;; xxx error code check for TRUST_UNDEFINED/NEVER?
(if (re-search-forward "TRUST_\\([A-Z]*\\)" nil t)
(setq trust (mew-match-string 1)))
(setq ret result)
(if addr (setq ret (concat ret " <" addr ">")))
(if trust (setq ret (concat ret " " trust)))
(if warning (setq ret (concat ret " -" warning)))
ret))
どうやら、gpgsm の出力の TRUST_xxx という部分を切り取って表示しているようだ。試しに Mew が生成する中間ファイルをコピーして、実際に gpgsm を使って試してみると、
$ gpgsm --verify --include-certs 3 --status-fd 1 ./mew36121HRL.sig ./mew36121HRL
[GNUPG:] NEWSIG
gpgsm: Signature made 2012-05-16 23:40:53 using certificate ID 0xFFFFFFFFCA8FEB6C
gpgsm: note: non-critical certificate policy not allowed
dirmngr[55990.0]: permanently loaded certificates: 0
dirmngr[55990.0]: runtime cached certificates: 0
gpgsm: note: non-critical certificate policy not allowed
[GNUPG:] PROGRESS starting_agent ? 0 0
[GNUPG:] GOODSIG 3C7271D19643E865FB58B036A1F20578CA8FEB6C /CN=SUMITOMO MITSUI BANKING CORPORATION/OU=Class 3
Organizational E-Mail Certificate/OU=Terms of use at https:\x2f\x2fwww.verisign.com\x2frpa (c)11/OU=Mass Retail Dept.,Consumer Banking Unit/O=SUMITOMO MITSUI BANKING CORPORATION/L=Chiyoda-ku/ST=Tokyo/C=JP/[email protected]
[GNUPG:] VALIDSIG 3C7271D19643E865FB58B036A1F20578CA8FEB6C 2012-05-16 20120516T234053 20120922T235959 0 0 1 2 00
gpgsm: invalid certification chain: No value
[GNUPG:] TRUST_UNDEFINED 26
確かに最後のところで TRUST_UNDEFINED と表示されている。("invalid certification chain" とも表示されていることに注意)

gnupg-2.0.19/sm/verify.c を読むと、
      audit_log_ok (ctrl->audit, AUDIT_CHAIN_STATUS, rc);
if (rc) /* of validate_chain */
{
log_error ("invalid certification chain: %s\n", gpg_strerror (rc));
if (gpg_err_code (rc) == GPG_ERR_BAD_CERT_CHAIN
|| gpg_err_code (rc) == GPG_ERR_BAD_CERT
|| gpg_err_code (rc) == GPG_ERR_BAD_CA_CERT
|| gpg_err_code (rc) == GPG_ERR_CERT_REVOKED)
gpgsm_status_with_err_code (ctrl, STATUS_TRUST_NEVER, NULL,
gpg_err_code (rc));
else
gpgsm_status_with_err_code (ctrl, STATUS_TRUST_UNDEFINED, NULL,
gpg_err_code (rc));
audit_log_s (ctrl->audit, AUDIT_SIG_STATUS, "bad");
goto next_signer;
}
どうやら証明書の連鎖が検証できなかった際のエラーのようだ。そもそも S/MIME なので root の証明書(とその信頼)はどうやって設定してるんだっけなぁ、と古い記憶(とメール)を掘り起こしてみると、trustlist.txt に信頼する root の証明書の fingerprint を列挙すればよかったようだ。( http://www.mew.org/ja/feature/smime.html )

とりあえず、gpgsm(1) を見ると -k で現在持ってる証明書の鍵を表示できるようなので実行してみたところ、自動的にデフォルトの鍵(gnupg の配布パッケージに含まれるもの)が読み込まれたようだ。
$ grep com-cert /usr/ports/security/gnupg/pkg-plist 
%%PORTDOCS%%%%DATADIR%%/com-certs.pem
$ gpgsm -k | & head -4
gpgsm: keybox `/home/user/.gnupg/pubring.kbx' created
gpgsm: importing common certificates `/usr/local/share/gnupg/com-certs.pem'
gpgsm: total number processed: 15
gpgsm: imported: 15
そこで、この gpgsm が持ってる証明書の捺印を trustlist.txt へ書きだせばよい。
$ gpgsm -k --status-fd 1 | grep fingerprint: | awk '{print $2 " S"}' > ~/.gnupg/trustlist.txt

なお、上記 Mew のページに、
ルート CA の証明書のバージョンが 1 の場合、拇印の最後に " S relax" と書く必要があります。
とある(次の cert.pem は "Root certificates from certificate authorities included in the Mozilla NSS library")が、
$ egrep "(^Certificate:|Version:|Subject:)" /etc/ssl/cert.pem | grep -A1 -B1 "Version: 1"
の結果を見るに、VeriSign の証明書などがバージョン1なので、適宜 "relax" をつける必要がある。たとえば、"Class 3 Public Primary Certification Authority - G2" に relax をつけるためにはこんな感じ。
$ diff -u .gnupg/trustlist.txt{.orig,}
--- .gnupg/trustlist.txt.orig 2012-05-16 21:49:56.000000000 -0400
+++ .gnupg/trustlist.txt 2012-05-16 21:48:21.000000000 -0400
@@ -14,7 +14,7 @@
C9:2F:E6:50:DB:32:59:E0:CE:65:55:F3:8C:76:E0:B8:A8:FE:A3:CA S
D5:C7:50:F2:FE:4E:EE:D7:C7:B1:E4:13:7B:FB:54:84:3A:7D:97:9B S
D7:92:BC:E6:B6:8A:5C:C0:7F:17:08:A0:94:CB:46:8D:29:6B:75:55 S
-85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F S
+85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F S relax
3C:72:71:D1:96:43:E8:65:FB:58:B0:36:A1:F2:05:78:CA:8F:EB:6C S
08:A8:3F:43:90:9E:9C:98:18:FC:78:D3:78:B3:B2:DE:B9:79:EB:C0 S
84:98:C8:6C:88:19:CD:3C:1C:58:D7:BF:8F:DA:FA:1B:6C:4F:0D:5E S
(ちなみに、ここら辺の経緯は http://lists.gnupg.org/pipermail/gnupg-devel/2006-September/thread.html の "Subject: x509 v1 certificate" で見られる。)

これをした後、再度 gpgsm で検証をしてみると、
$ gpgsm --verify --include-certs 3 --status-fd 1 mew36121HRL.sig mew36121HRL
[GNUPG:] NEWSIG
gpgsm: Signature made 2012-05-16 23:40:53 using certificate ID 0xFFFFFFFFCA8FEB6C
gpgsm: note: non-critical certificate policy not allowed
dirmngr[55999.0]: permanently loaded certificates: 0
dirmngr[55999.0]: runtime cached certificates: 0
gpgsm: note: non-critical certificate policy not allowed
[GNUPG:] PROGRESS starting_agent ? 0 0
[GNUPG:] GOODSIG 3C7271D19643E865FB58B036A1F20578CA8FEB6C /CN=SUMITOMO MITSUI BANKING CORPORATION/OU=Class 3 Organizational E-Mail Certificate/OU=Terms of use at https:\x2f\x2fwww.verisign.com\x2frpa (c)11/OU=Mass Retail Dept.,Consumer Banking Unit/O=SUMITOMO MITSUI BANKING CORPORATION/L=Chiyoda-ku/ST=Tokyo/C=JP/[email protected]
[GNUPG:] VALIDSIG 3C7271D19643E865FB58B036A1F20578CA8FEB6C 2012-05-16 20120516T234053 20120922T235959 0 0 1 2 00
gpgsm: Good signature from "/CN=SUMITOMO MITSUI BANKING CORPORATION/OU=Class 3 Organizational E-Mail Certificate/OU=Terms of use at https:\x2f\x2fwww.verisign.com\x2frpa (c)11/OU=Mass Retail Dept.,Consumer Banking Unit/O=SUMITOMO MITSUI BANKING CORPORATION/L=Chiyoda-ku/ST=Tokyo/C=JP/[email protected]"
gpgsm: aka "[email protected]"
[GNUPG:] TRUST_FULLY 0 shell
無事 TRUST_UNDEFINED が TRUST_FULLY に変わり、Mew 上でも当然、
X-Mew: <body> Good S/MIME sign <[email protected]> FULLY
に変わった。

分かってみると簡単な話だけど、以外とややこしかった。

カメラ

今のところカメラにかかった金額

LUMIX GX1 (DMC-GX1X-S)59,000円 (10%ポイント)ビックカメラ
GX1マニュアル (日本カメラムック)1,995円Amazon.co.jp
Kenko 37mm PRO1D プロテクター1,680円 (ポイントで購入)ビックカメラ
SanDisk 16GB SDHC Card (SDSDX-016G-X46)$28.08Amazon.com
Transcend 16GB SDHC Card (TS16GSDHC6)$14.95Abe's of Maine
Battery for GX1 (DMW-BLD10PP)$39.95eBay
20mm F1.7 Pancake Lens (H-H020)$339.95Samy's
Camera Bag$19.99buy.com
Marumi DHG Super C-PL 46 mm$53.95eBay
Hoya Linear PL 46 mm$28.20Amazon.com

合計 $1,286.50 (102,920 円) ($1 = 80円)

ちなみに、SDSDX-016G-X46 が $28.08 から $21.30 になり $6.78 損したが、20mm/F1.7 が $339.95 から $359.00 になり $19.05 得したので、今のところ差し引き $12.27 得してる。:-)

japanese/mozc-server

mozc が pkg-config で OpenSSL を探すから security/openssl を入れるようにした( http://www.freebsd.org/cgi/cvsweb.cgi/ports/japanese/mozc-server/Makefile.diff?r1=1.27;r2=1.28;f=h )みたいだけど、どうせならもともと入ってる OpenSSL を使いたかったので、少し patch を当ててインストールした。(あと、郵便番号辞書も一緒に入れた)

(May 3, 2012 追記:http://www.freebsd.org/cgi/cvsweb.cgi/ports/japanese/mozc-server/Makefile.diff?r1=1.28;r2=1.29;f=h で使わないように変更したみたいだ。)

# pwd
/usr/ports/japanese/mozc-server
# make extract
===> License check disabled, port has not defined LICENSE
===> Extracting for ja-mozc-server-1.5.1053.102
===> License check disabled, port has not defined LICENSE
=> SHA256 Checksum OK for mozc-1.5.1053.102.tar.bz2.
# cat -t /root/patch
--- Makefile.orig^I2012-05-01 16:58:57.000000000 -0400
+++ Makefile^I2012-05-01 16:59:04.000000000 -0400
@@ -18,8 +18,7 @@
LIB_DEPENDS=^Icurl.6:${PORTSDIR}/ftp/curl \
^I^Igtest.0:${PORTSDIR}/devel/googletest \
^I^Iprotobuf.7:${PORTSDIR}/devel/protobuf \
-^I^Izinnia.0:${PORTSDIR}/japanese/zinnia \
-^I^Issl.8:${PORTSDIR}/security/openssl
+^I^Izinnia.0:${PORTSDIR}/japanese/zinnia
RUN_DEPENDS=^Ixdg-open:${PORTSDIR}/devel/xdg-utils

USE_BZIP2=^Iyes
--- work/mozc-1.5.1053.102/base/base.gyp.orig 2012-05-01 16:51:47.000000000 -0400
+++ work/mozc-1.5.1053.102/base/base.gyp 2012-05-01 16:52:26.000000000 -0400
@@ -227,23 +227,14 @@
}
}],
['OS=="linux" and target_platform!="Android"', {
- 'cflags': [
- '<!@(<(pkg_config_command) --cflags-only-other openssl)',
- ],
'defines': [
'HAVE_OPENSSL=1',
],
- 'include_dirs': [
- '<!@(<(pkg_config_command) --cflags-only-I openssl)',
- ],
'link_settings': {
- 'ldflags': [
- '<!@(<(pkg_config_command) --libs-only-L openssl)',
- ],
'libraries': [
- '<!@(<(pkg_config_command) --libs-only-l openssl)',
+ '-lssl -lcrypto',
],
- },
+ }
}],
],
},
# patch < /root/patch
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- Makefile.orig 2012-05-01 16:58:57.000000000 -0400
|+++ Makefile 2012-05-01 16:59:04.000000000 -0400
--------------------------
Patching file Makefile using Plan A...
Hunk #1 succeeded at 18.
Hmm... The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- work/mozc-1.5.1053.102/base/base.gyp.orig 2012-05-01 16:51:47.000000000 -0400
|+++ work/mozc-1.5.1053.102/base/base.gyp 2012-05-01 16:52:26.000000000 -0400
--------------------------
Patching file work/mozc-1.5.1053.102/base/base.gyp using Plan A...
Hunk #1 succeeded at 227.
done
# cd work/mozc-1.5.1053.102/data/dictionary/
# fetch http://www.post.japanpost.jp/zipcode/dl/kogaki/zip/ken_all.zip
ken_all.zip 100% of 1798 kB 377 kBps
# fetch http://www.post.japanpost.jp/zipcode/dl/jigyosyo/zip/jigyosyo.zip
jigyosyo.zip 100% of 753 kB 276 kBps
# unzip ken_all.zip
Archive: ken_all.zip
extracting: KEN_ALL.CSV
# unzip jigyosyo.zip
Archive: jigyosyo.zip
extracting: JIGYOSYO.CSV
# python ../../dictionary/gen_zip_code_seed.py --zip_code=KEN_ALL.CSV --jigyosyo=JIGYOSYO.CSV >> dictionary09.txt
# cd ../../../..
# pwd
/usr/ports/japanese/mozc-server
# make
===> Patching for ja-mozc-server-1.5.1053.102
===> Applying FreeBSD patches for ja-mozc-server-1.5.1053.102
[...]
CXX(target) out_linux/Release/obj.target/mozc_server/server/server_main.o
LINK(target) out_linux/Release/mozc_server
Running: /usr/local/bin/python2.7 build_tools/binary_size_checker.py --target_directory out_linux/Release
# make deinstall
===> Deinstalling for japanese/mozc-server
===> Deinstalling ja-mozc-server-1.5.1053.102
pkg_delete: package 'ja-mozc-server-1.5.1053.102' is required by these other packages
and may not be deinstalled (but I'll delete it anyway):
ja-mozc-el-emacs23-1.5.1053.102_1
# make reinstall
===> Installing for ja-mozc-server-1.5.1053.102
===> ja-mozc-server-1.5.1053.102 depends on executable: xdg-open - found
===> ja-mozc-server-1.5.1053.102 depends on file: /usr/local/bin/python2.7 - found
===> ja-mozc-server-1.5.1053.102 depends on shared library: curl.6 - found
===> ja-mozc-server-1.5.1053.102 depends on shared library: gtest.0 - found
===> ja-mozc-server-1.5.1053.102 depends on shared library: protobuf.7 - found
===> ja-mozc-server-1.5.1053.102 depends on shared library: zinnia.0 - found
===> ja-mozc-server-1.5.1053.102 depends on shared library: iconv.3 - found
===> Generating temporary packing list
===> Checking if japanese/mozc-server already installed
===> Registering installation for ja-mozc-server-1.5.1053.102
===> SECURITY REPORT:
This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/bin/mozc_server

If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type 'make deinstall'
to deinstall the port if this is a concern.

For more information, and contact details about the security
status of this software, see the following webpage:
http://code.google.com/p/mozc/
#

VNC on VirtualBox

When I use VirtualBox with VBoxHeadless over VNC (not RDP, since I'm using OSE (Open source Software Edition)), mouse cursor is often out-of-sync by default. (i.e. host mouse cursor is away from guest mouse cursor)

To fix this issue, I've been using '--mouse usbtablet'.

VBoxManage modifyvm vmname --mouse usbtablet

mozc.el のキーバインド

Windows版のGoogle日本語入力で設定した config1.db を持ってきて ~/.mozc の下に置いた。

C-k カタカナに変換
C-l 半角に変換
C-n 予測変換を選択

VMware Fusion 3.1.3 でシリアルポートをつかむ

http://d.hatena.ne.jp/hirose31/20100729/1280380054 のやり方を追試した。
VMware Fusion 3.1.3 でもGUIでは設定できないように思う。

vmwarefusion_serial.png

ので、同じように .vmx ファイルを直接編集する。
[Mac:~/Documents/VMware/FreeBSD.vmwarevm] say% diff -u FreeBSD.vmx.orig FreeBSD.vmx
--- FreeBSD.vmx.orig 2012-02-12 13:36:55.000000000 -0500
+++ FreeBSD.vmx 2012-02-12 13:37:48.000000000 -0500
@@ -79,7 +79,9 @@
ide0:1.fileName = "3.vmdk"
ide0:1.redo = ""
serial0.present = "TRUE"
-serial0.fileType = "file"
+serial0.fileType = "pipe"
serial0.fileName = "/Users/user/Downloads/serial-port"
+serial0.tryNoRxLoss = "TRUE"
+serial0.startConnected = "TRUE"
scsi0:0.present = "FALSE"
floppy0.present = "FALSE"
なお、編集後は、こんな感じになる。

vmwarefusion_serial2.png

元記事と同じように socat をダウンロードして普通に ./configure && make で作った socat 1.7.2.0 を使う。

TCPポートにブリッジするには、
% ./socat unix-connect:/Users/user/Downloads/serial-port tcp-listen:1919,reuseaddr,crnl
した上で別のターミナルで
% telnet 127.0.0.1 1919
などとすればつながる。

ただ、この方法だと(少なくとも自分の環境では)入力が二重になるなどイマイチだったので、次のように Jerminal などを使ってPTYにブリッジした方が使いやすい。
% ./socat unix-connect:/Users/user/Downloads/serial-port pty,raw,echo=0,link=/tmp/socket
した上で、Jerminalで接続する。(元記事とは違い link=... は普通に使えた)
% jerm /tmp/socket
Jerminal v0.8095 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 candy
Type "Ctrl-M ~ ." to exit.
ispeed 9600 ospeed 9600
+IGNBRK -BRKINT -IGNPAR -PARMRK -INPCK -ISTRIP -INLCR -IGNCR -ICRNL -IXON -IXOFF -IXANY -IMAXBEL
-OPOST +ONLCR -OXTABS -ONOEOT
cs8 -CSTOPB +CREAD -PARENB -PARODD +HUPCL +CLOCAL -CCTS_OFLOW -CRTSCTS -CRTS_IFLOW -MDMBUF +ECHOKE -ECHOE -ECHO -ECHONL -ECHOPRT +ECHOCTL -ISIG -ICANON -ALTWERASE -IEXTEN
-EXTPROC -TOSTOP -FLUSHO -NOKERNINFO -PENDIN -NOFLSH

host# pwd
/root
host#
(ちなみに上記の元記事で "pty:raw,..." のところは "pty,raw,..." のtypoだと思う。)

FreeBSD 9.0-RELEASE インストールの練習

New Serverで買ったハードディスク(Seagate ST31000528AS)が壊れたので新しいハードディスクを探してたら、去年のタイの洪水の後ハードディスクの価格が上がったままだった。安いディスクは少ししかなく、ほぼ Seagate と Western Digital の二択だった。この二社のディスクは1TB/1.5TB/2TBくらいの容量で価格が拮抗してた。

Newegg/Amazon/Google Product search などを検索したところ、Western Digital Elements 2TB Desktop External Hard DriveSeagate Barracuda Green ST2000DL003 2TB 5900 RPM 64MB Cache SATA 6.0Gb/s 3.5" Internal Hard Drive -Bare Drive がそれぞれ 2012/02/13 まで$20引きかつ Free Shipping で $119 と $109 で売られていたので早速購入した。(ちなみに、Amazon.com と違い Newegg はNY州でも税金を徴収しないので、その分少し安い)

ちなみに、WDBAAU0020HBK はハードディスクエンクロージャーに入った外付けディスクだけど、もともと、今サーバに入ってる1TBのディスクを外につないでバックアップ用に使い、新しく購入した2TBディスクx2を内部で使おうと思ってたので、WDBAAU0020HBK からディスクを取り出し、今サーバ内にある1TBのディスクを入れることにした。(ディスクが届いたら「HDDが高いから、WDの外付けHDDを買って分解してみた。」を参考に分解する。) 内部のディスクは生産時期によって WD20EACS か WD20EADS か WD20EARS か WD20EARX かなんかが入ってるようだ。(追記:WD20EARS (というか、Greenシリーズ?)はヘッドが無駄にランディングゾーンに戻っちゃう問題もあるようだ。 S.M.A.R.T. attribute 193 (Load_Cycle_Count) が異常に大きかったらその問題をヒットしてる可能性が高い。その問題を改善するファームウェアもあるらしいが、新しいファームウェアでもバージョンが変化しないから新しいかどうか分からないらしい。)

なお、ST2000DL003 の方は検索してみるとファームウェアが C31 のものは突然認識されなくなるという問題を抱えているらしい。Seagate はファームウェアのアップデートを提供してるが、最新の CC32 でもロックアップの現象が出てるという報告もあるので、まぁ、安かろう悪かろうとして使うしかないだろう。(上の WD20EAxx とRAID1(ミラーリング)で使うから、まぁ、大丈夫でしょう。) ところで、CC3C というファームウェアもあるようだから、届くディスクがどうなるか楽しみにしよう。(追記:今メールをみたら shipping の情報が来てて、Edison, NJ からの発送だったから意外と早く着くかも。西海岸からの発送かと思ってたから嬉しい誤算だ。)

(2/14 追記:ディスクが届いた。Western Digital の方が WD20EACS-11BHUB0 (SATA2(SATA300)、16MBバッファ、5400rpm、08 FEB 2011 製、DCM: HHRNNTJCHB)で、Seagate の方が ST2000DL003 (P/N: 9VT166-302、F/W: CC3C、Date: 12194、スペックは上記の通り)だった。だいぶ性能に差があるな。こりゃ、ST2000DL003 を番号が小さい方へつないで、gmirror を prefer で使うのが良さそうかな。)

さらに、両方とも2TBのディスクなのでセクタサイズが従来の512バイトから4096バイトになっており Advanced Format Technology が使われている。Wikipediaの記事に書かれているとおり「パーティションの開始位置が4KiB単位の物理セクター境界からずれた場合に大きな性能低下が」起こるのでOSインストールの際はそこら辺も考慮に入れないといけない。今回は(既存のOSをアップグレードするのではなく、新規に) FreeBS 9.0-RELEASE-amd64 をインストールするつもりなので、9.0 でのサポート状況をざっと検索してみた。

Status of support for 4KB disk sectors (2011/07)
http://lists.freebsd.org/pipermail/freebsd-stable/2011-July/thread.html#63300

のスレッドによると、
  • kern.cam.ada.X.quirks="1" を /boot/loader.conf に設定することで、4Kバイトセクタを使ってるのに512バイトと申告してくるドライブを、4Kバイトセクタのドライブとして扱うことができるようになった。(gpart(8) はその情報を使ってアラインメントなどを行う)
  • UFSフラグメントサイズも4Kバイトに増やされた。(ので、普通に使ってれば、4Kバイト境界にそろうはず。)
  • ZFSの場合 gnop を使ってセクタサイズ4Kバイトを強制的に認識させる方法もある
といった感じで、ZFSを使うのでなければそんなに気にすることはなさそうに見える。じゃあ、gpart(8) によるアラインメントってのはどんなものかと検索してみると、

GPT and disk alignment (2011/06)
http://lists.freebsd.org/pipermail/freebsd-fs/2011-June/thread.html#11685

というスレッドの http://lists.freebsd.org/pipermail/freebsd-fs/2011-June/011704.html によると、diskinfo(8) を使って、あるGPTパーティションの stripeoffset が4096の等倍(か0)になっていればアラインメントがいい感じになってると言えるようだ。gpart(8) に "-a 4k" をつけることで4K境界にうまく合わせてくれるので、その後 diskinfo(8) で確認するのがよさそうだ。

というわけで、結論としては FreeBSD 9.0 ではパーティションの作成時に gpart(8) に "-a 4k" をつけるだけで大丈夫のようだ。(なお、FreeBSD 9.0-RELEASE のインストーラで普通にパーティションを作ってしまうと4K境界は気にしないで作られてしまうので、以下の通り、パーティションの作成時は shell から gpart(8) を使って行った方がよさそうだ。)

最後に、ディスク関連としてはFreeBSD 9.0-RELEASE から AHCI に対応してるので、インストール後 Native Command Queueing に対応してるかを確認する。(対応してれば起動時に「Command Queueing enabled」などと表示されるはず。)

以下に VMware Fusion で試した FreeBSD 9.0-RELEASE-amd64 のインストール方法を記す。(なお、http://forums.freebsd.org/showthread.php?t=27645 の手法を参考にした。)

今回は諸般の事情によりUSBメモリに http://ftp10.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/9.0/FreeBSD-9.0-RELEASE-amd64-memstick.img (654MB) を書き込んだものがすでに手元にあったので、VMware Fusion から Plop Boot Manager を使ってUSBメモリで起動させた。(単に plpbt.iso から起動し、メニュー内で USB を選択しただけ)

起動したらメニューから「2. [Esc]ape to loader prompt」を選び、「set kern.cam.ada.0.quirks="1"」を設定した後「boot」する。
FreeBSD9.0-01.png
FreeBSD9.0-02.png

FreeBSD Installer が上がってきたら「Install」を選択、
FreeBSD9.0-03.png
「Keymap Selection」では「No」を選択し、
FreeBSD9.0-04.png
ホスト名を設定し、
FreeBSD9.0-05.png
インストールする内容を選択し、
FreeBSD9.0-06.png
上に書いた通り、アラインメントを確実に行うため、パーティションの作成は「Shell」を選択する。
FreeBSD9.0-07.png

ところで今まで GEOM Mirror (gmirror) を使ってたので、新規インストールでもそのまま使うことにした。GPTパーティションを使う際のミラーリングのやり方には3つ考えられる。
  1. ディスク全体を使ったGEOMデバイスを作り、そこにGPTパーティションを作る
  2. 生のディスクにGPTパーティションを作り、パーティション単位でミラーリングをする(GEOMデバイスを作る)
  3. 生のディスクにGPTパーティションを作り、ディスク単位(全体)でミラーリングする(GEOMデバイスを作る)
1. が今回実際に選んだ手法。GEOM Mirror でGEOMデバイスを作り、そこにGPTパーティションを作った。ただ http://forums.freebsd.org/archive/index.php/t-22125.html に書かれている通り、これをすると起動時に gptboot が「gptboot: invalid backup GPT header」と文句を言う。(ただ、backup header なので動作には一応問題ない。)

FreeBSD9.0-23.png

2. が恐らく一番望ましい方法。FreeBSD 9.0のGPTでのミラー構築 に書かれてる通りの方法でパーティション毎にGEOM Mirrorデバイスを作る。1. より望ましいが、新しいディスクを追加する際に一旦パーティションを切ってからミラーに追加しないといけないなど、多少面倒なため、1. の方法を選んだ。

3. は動作しなかった。GEOM Mirror デバイスを作ることでGPTパーティションが隠れてしまった。
gpart+gmirror-1.png
gpart+gmirror-2.png

というわけで、先に geom_mirror をロードし、作成したGEOMデバイスにGPTパーティションを作成することにした。boot、swap そしてファイル用のパーティションを作った。(なお、上述の通り "-a 4k" で4Kセクタアラインメントに合わせている。) その後、ブートローダをインストールする。
kldload geom_mirror
gmirror label -b split gm0 ada0
gpart create -s GPT mirror/gm0
gpart add -s 512k -a 4k -t freebsd-boot -l "boot" mirror/gm0
gpart add -s 4g -a 4k -t freebsd-swap -l "swap" mirror/gm0
gpart add -a 4k -t freebsd-ufs -l "root" mirror/gm0
gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 mirror/gm0
gpart show mirror/gm0
diskinfo -v mirror/gm0
diskinfo -v ada0
FreeBSD9.0-08.png

できあがったらパーティションを確認し、newfs する。(小さいファイルが多いため、i-node サイズを小さくしている) その後のインストール用に fstab を作成し、/mnt へ作ったディレクトリをマウントする。
newfs -i 4096 -j /dev/gpt/root
echo "/dev/gpt/swap none swap sw 0 0" >> /tmp/bsdinstall_etc/fstab
echo "/dev/gpt/root / ufs rw,noatime 1 1 " >> /tmp/bsdinstall_etc/fstab
mount /dev/gpt/root /mnt

FreeBSD9.0-10.png

パーティション作成用の shell から exit すると、選択したモジュールのインストールが自動的に始まる。
FreeBSD9.0-11.png
FreeBSD9.0-12.png

インストールが終わると root ユーザのパスワードの設定に移る。
FreeBSD9.0-13.png

その後、ネットワークインタフェースの設定。
FreeBSD9.0-14.png

タイムゾーンの設定。
FreeBSD9.0-15.png

デーモン起動の設定。
FreeBSD9.0-16.png

dumpデバイスの設定。(なお、swapデバイスをGEOM Mirrorデバイス上に作ってしまうと、バランスアルゴリズムが "prefer" の場合以外は dump はちゃんと動作しない。(rc.early が無くなったため))
FreeBSD9.0-17.png

その他のユーザアカウントの追加。
FreeBSD9.0-18.png

インストールの終了。
FreeBSD9.0-19.png

その他の設定をするためシェルに落ちる。
FreeBSD9.0-20.png

loader.conf、boot.config の設定を行う。
echo 'kern.cam.ada.0.quirks="1"' >> /boot/loader.conf
echo 'geom_mirror_load="YES"' >> /boot/loader.conf
echo '-Dh' >> /boot.config
FreeBSD9.0-21.png

また、/etc/ttys で ttyvN を off に、ttyu0 を on に変更しておく。

ここまで行ったら、一度 chroot から exit した上で、もう一つのディスクを GEOM Mirror へ追加する。
FreeBSD9.0-22.png

再起動したら終了。

Continental OnePass card - Chase

I was about to cancel my OnePass card as $85 membership fee will be charged soon. But the person on the phone offered me $50 credit + 5,000 miles for keeping it. So, I changed my mind to keep it. I'm an easy customer, huh ?

050plusをSIPクライアントで使う

注意:以下の情報は当然ながら公式にサポートされているものではないので、将来使えなくなったり、050plus サービスに悪影響を及ぼしたり、または、誤課金などの可能性を否定するものではないので、試す場合にはあくまで自分の責任において試して下さい。

NTTコミュニケーションズのサービス 050plus の ID を手に入れたので少し試してみた。

iPhone/iPad/iPod やサポート対象のAndroid端末、もしくは Windows PC では標準のアプリケーション(iOS/Android/Windows)でサービスを利用できるが、対象外の Android 端末(たとえば僕の持ってる Asus Eee Pad Transformer)や Mac OS X デバイス(iMac/MacBook など)は現状では公式にサポートされておらず利用できない。

(関係ないけど、Windows版クライアントのページは他に比べてひどいな。10年前のインターネッツのようだ。)

しかし、先達の情報(ここここ)によると、標準のSIPクライアントでも使えるということなので試してみた。(ちなみに自分でもデバッグする際、SSLを覗き込むのに stone に活躍してもらった。)

手順は次の通り。

  1. SIPの設定に必要な情報を手に入れる
  2. SIPクライアントの設定をする

SIPの設定に必要な情報を手に入れる

https://start.050plus.com/ というサイトに特定のデータを POST することで設定に必要な情報を入手できる。wgetcURL なんかを使うと POST が簡単にできる。(ちなみに以下の例で、xmllint はもちろん無くても構わない。)

% wget -O - -q --post-data 'ifVer=1.0.0&apVer=1.0.0&earlyStFlg=0&no050=05099999999&pw050=password' https://start.050plus.com/sFMCWeb/InitSet.aspx | xmllint --format - | egrep '<(sip|nicNm|tranGwAd|payTran)'
<sipID>Nxxxxxxx</sipID>
<sipPwd>yyyyyyyy</sipPwd>
<tranGwAd>kar-f2fcp.050plus.com</tranGwAd>
<payTranGwPNm>5061</payTranGwPNm>
<nicNm>fmc99999999</nicNm>

もしくは、

% curl -o - -s -d 'ifVer=1.0.0&apVer=1.0.0&earlyStFlg=0&no050=05099999999&pw050=password' https://start.050plus.com/sFMCWeb/InitSet.aspx | xmllint --format - | egrep '<(sip|nicNm|tranGwAd|payTran)'
<sipID>Nxxxxxxx</sipID>
<sipPwd>yyyyyyyy</sipPwd>
<tranGwAd>kar-f2fcp.050plus.com</tranGwAd>
<payTranGwPNm>5061</payTranGwPNm>
<nicNm>fmc99999999</nicNm>

"05099999999"は 050plus で使う自分の 050 番号、"password"は 050plus 申し込み時に設定したパスワード。

他にもいくつかの情報が表示されるが、grep で必要なところだけ表示した。sipPwd は 050plus 申込時に設定したパスワードとは違うので注意。

  • sipID: Nxxxxxxx
  • sipPwd: yyyyyyyy
  • nicNm: fmc99999999
  • tranGwAd: kar-f2fcp.050plus.com
  • payTranGwPNm: 5061

この情報をもってSIPクライアントの設定に移る。

SIPクライアントの設定をする

PC用、モバイルデバイス用のSIPクライアントはかなりの数があるが、

  1. 無料
  2. TLS/SRTPをサポートしてる
の2つの条件を満たすものは非常に少なかった。(050plus では TLS/SRTP のサポートが必須である) そこで、今まで培ったクリック力を遺憾なく発揮したところ、以下の2つのクライアントを発見した。(というか、この2つしか見つけられなかった)
どちらもオープンソースソフトウェアで活発開発が行われており、タイミングのよいことに TLS/SRTP も2011年の暮れにサポートされた。(ここここ)

なお、Linphone は Linux/Windows/Mac OS X/iOS/Android/Blackberry/WebOS と、広範なプラットホームをサポートしているが、現時点(2012.01.08)では、 TLS/SRTP がデスクトップ版でしかサポートされていない。

以下にそれぞれのクライアントでの設定を紹介する。なお設定後、実際に(発呼、着呼ともに)通話できるところまで自分で確認した。

Linphone for Mac OS X

まずは Linphone の設定。設定はメニューの Options - Preferences からおこなう。必須の設定を取り上げる。

  • Network settings
    • Network protocol and ports:SIP (TLS) 5061 (payTranGwPNm)
  • Multimedia settings
    • (デフォルトのままでOK)
  • Manage SIP Accounts
    • "Your display name", "Your username", "Your resulting SIP address" はなんでもいい。050plus とは関係ない。
    • Proxy accounts の Account に追加するため "Add" をクリック
      • Your SIP identity:sip:[email protected] ((nicNm)@050plus.com)
      • SIP Proxy address:kar-f2fcp.050plus.com (tranGwAd)
      • Route (optional):kar-f2fcp.050plus.com (tranGwAd)
      • Registration duration (sec):3600
      • Register にチェック
  • Codecs
    • 少なくとも PCMU, PCMA, G722 を Enable しておく
  • User interface
    • (デフォルトのままでOK。念の為 "Show advanced settings" にチェックが入ってることを確認する。)
設定の画面は以下の通り。

Linphone-Settings-1.png

Linphone-Settings-2.png

Linphone-Settings-3-1.png

Linphone-Settings-3-2.png

Linphone-Settings-4.png

Linphone-Settings-5.png

以上、設定が終わったら Done をクリック。なお、IDとパスワード(sipID と sipPwd)は次のように初回接続時に入力する。

Linphone-Authentication.png

以下のように「sip:kar-f2fcp.050plus.com successful.」と表示されたら設定は成功。「sip:kar-f2fcp.050plus.com failed.」と表示されたり、「Ready」のまま変わらなかったら失敗なので、再度設定を見直す。

Linphone-success.png

"SIP address or phone number" のところに電話番号を入力して、その左にある緑のアイコンをクリックすれば相手先に電話をかけ始めるはず。

CSipSimple

次に CSipSimple の設定。初めに一番重要なポイント。現時点(2012.01.08)で Android Market に上がってる CSipSimple 0.03-01 は TLS が(設定画面にあるにも関わらず)使えない。したがって、開発バージョンである trunk を使う必要がある。trunk のインストール方法はプロジェクトのWikiに書いてあるが、要するに APK ファイルをダウンロードしてインストールすればいいだけ。ただし、Android の設定で Applications - Unknown sources をチェックしておく必要がある。

Android-Applications.png

その後、http://nightlies.csipsimple.com/trunk/ を Android 端末のブラウザで開き、最新の .apk をクリックするとダウンロードが開始する。

CSipSimple-trunk-downloading.png

ダウンロード終了後 .apk ファイルを開く。なお、先に CSipSimple を Android Market なんかからインストールしてた場合は、置き換えてもいいか?っていうダイアログが表示される。

Android-trunk-replace.png

必要とされる権限が表示され、"Install" をクリックするとインストールされる。

Android-trunk-install.png

Android-trunk-installing.png

Android-trunk-installed.png

なお、trunk (r1171)をタブレットで実行したところ、レイアウトがイマイチな感じだった。

CSipSimple-0.04-r1171.png

無事インストールが終わったら、まず CSipSimple の全体の設定を「Settigs」からおこなう。(なお、以下では Asus Eee Pad Transformer (Android 3.2.1 - Honeycomb)での設定を紹介する。)

CSipSimple-Settings.png

  • Easy configuration (変更しない)
  • Network
    • Wifi keep alive, Mobile keep alive, Resolve DNS SRV (チェックしない), Use compact SIP (チェックしない)はデフォルトのまま変更しない
    • Secure transport
      • TLS:(チェックする)
      • TLS Port:0
      • TLS Method:Auto
      • TLS server name, TLS CA file, TLS certificate file, TLS private key file, TLS password はすべてブランク(デフォルト)のままでよい
      • Check server, Check client はチェックしない
      • SRTP mode は "Optional" を選ぶ
      • ZRTP mode はデフォルトのまま変更しない
    • Enable ICE (チェックしない), Enable STUN (チェックしない)はデフォルトのまま変更しない(か、必要に応じて設定する)
    • For incoming calls/For outgoing calls は好みに合わせて設定する
  • Media (変更しない)
  • User interface (変更しない)
  • Calls options (変更しない)
  • Filters (変更しない)


Network の設定画面。

CSipSimple-Settings-Network-1.png

"Secure Transport" (TLS) の設定画面。

CSipSimple-Settings-Network-Secure-Transport.png

次に、アカウントの追加を「Accounts」からおこなう。「Add account」をクリックし、リストから「Expert」を選択する。

CSipSimple-Account-0.png
  • Account name:050plus
  • Account ID:<sip:[email protected]> (<sip:(nicNm)@050plus.com>)
  • Registration URI:sip:kar-f2fcp.050plus.com:5061 (sip:(tranGwAd):(payTranGwPNm))
  • Realm:ntt.com (追記:Register ができなかったり、発信・着信ができなかったら「*」(アスタリスク)に変更する)
  • Username (login):Nxxxxxxx (sipID)
  • Data (password):yyyyyyyy (sipPwd)
  • Data Type:Plain password
  • Scheme:Digest
  • Transport:TLS
  • Publish enabled:(チェックしない)
  • Register timeout (sec):3600
  • Register delay before refresh (sec):10
  • Force contact:(空欄)
  • Allow contact rewrite:(チェックしない)
  • Contact rewrite method:(変更しない)
  • Try to clean registers:(チェックする)
  • Proxy URI:sip:kar-f2fcp.050plus.com:5061 (sip:(tranGwAd):(payTranGwPNm))
  • SRTP mode:Mandatory
  • Voice mail:(空欄)


CSipSimple-Account-1.png

CSipSimple-Account-2.png

すべて設定できたら "Save" をクリックする。うまく設定できていれば緑色が点灯し "Registered" と表示される。

CSipSimple-success.png

メインの画面に戻り相手の番号をダイヤルすればかかるはず。