サーバー環境の最近のブログ記事

ウチのLinuxサーバー機で、LinkStationとWindows7機の共有ボリュームをマウントできなくなりました。うーん、月初めにはできてたはずなんですが。環境は、CentOS 5.6にwingリポジトリさんで配布しているsamba36-3.6.1を入れて使っています。3.6.3が出てたので更新してみたがかわらず。

dmesgには、

CIFS VFS: cifs_mount failed w/return code = –6

と出ますが、ググってもこれといった情報がつかめず。

結局mountコマンドであれこれ試してちゃんとマウントできるパターンと、/etc/fstabの記述を見比べてわかったのは、

//machine/share/ /mnt/machinename/sharename cifs ro,user=hoge,password=fuga,noauto 0 0

の赤字の部分。このスラッシュを削ったら通常通りmount /mnt/machinename/sharenameだけでマウントしてくれるようになりました。うーん、今までこれで使えてたのになぁ。先週くらいの大量のyum updateかなぁ(普段除外されてるwingリポジトリのsamba36はそれでは更新されないはずだけど)。改めてfstabの書き方をググるとみんな最後のスラッシュつけてないので、いままでがたまたま動いてたとか、どこかでつけないルールになってたけど移行猶予で動いちゃってた、とかなんですかね。

ともあれ、上のエラーメッセージでググって誰かが幸せになれればと覚え書きを残しておきます。

Linuxサーバー機のSambaを3.0から3.6にアップデートしてみました。3.6の目玉はなんといってもSMB2への対応です。SMB2はVista世代から対応した新しいファイル共有プロトコルでパフォーマンスアップが見込めます。Microsoft製品同士では随分前から使用されてましたが、高価なWindows Serverを使用している企業ともかく、SambaベースのLinuxサーバーや多くのNASは対応してなかった為、個人レベルではクライアントがVistaや7でも実力を発揮できずにいました。それがついに、ということで胸熱です。

ウチのLinuxサーバーはCentOS5.x系でそのままではyumでインストールはできず、こちらの記事を参考にwingリポジトリを使って導入。ウチではpriorityの設定はしなくて済みました。記事からのリンク先を参考にwingリポジトリを登録した後、—enablerepo=wingオプションをつけてインストール。3つ一度に指定すると依存のエラーが出たので、まずはsamba36本体のみを指定(これでcommonも入る)し、後にclientを入れたらOKでした。

yum --enablerepo=wing install samba36
yum --enablerepo=wing install samba36-client

その後、認証絡みでちょっと苦戦。smbpasswd認証はもはやナウくないらしいので、smb.confに

[global]
max protocol = SMB2
security = user
passdb backend = tdbsam
wide links = yes
follow symlinks = yes
unix extensions = no

とし、コマンドラインで

pdbedit -a -u furuta

などとしてパスワードを設定したらOKでした。

ちなみにオレンジの部分は文字通りsmb2プロトコルを有効化、赤が認証方式の指定、紫はUNIX上のシンボリックリンク先を実ファイルとしてアクセスできるようにする為の設定です(今まではなくても平気だった)。security = userは普通なら指定済みなことが多いはずですが、何故か入ってなかったので足しました。

■ベンチ

Samba30 Samba36
Samba 3.0 Samba 3.6

 

クライアントはWindows7、GbE接続です。

シーケンシャルリードと512Kランダムリードは向上してますが期待したほど劇的な差ではないですね。あとは4K ランダムライトがエラい速くなってます。あとはトントンか逆に落ちてるとこも。体感は、、、あんましかわんないかなw。

あとは低レイテンシー時のパフォーマンスが向上するらしいので、VPNを経由した時とかに期待ですかね。

前エントリでVPN(PPTP)経由でWake-On-LAN(以下WOL)を使おうとしたら上手くいきませんでした。WOLでは相手のMACアドレスを使って宛先指定をしていますが、実際にはブロードキャストを使うみたいで、これは通常PPTPでは中継されません。

我が家のサーバーで使っているPPTP実装はPoptopで、ググってみると設定ファイルで1行変更するだけでブロードキャストパケットを転送することができました。具体的には、/etc/pptpd.confで

bcrelay eth0

のようにします。eth0の部分はサーバーのLAN側に使っているネットワークデバイスを指定します。これが受けたブロードキャストパケットをVPN側に丸投げしてくれるようになります。デフォルトでオフなのは、大量のブロードキャストが流れるLANにつないだ場合、VPNの帯域が圧迫されるからでしょう。すばらく様子をみて実際に問題なようだったらオフに戻して、WOLはサーバー経由で運用しようかと。

あと残念ながらこのオプションを有効にしてもiTunes共有などのBonjourは機能しませんでした。

計画停電や節電の関係で24時間稼働していたサーバーをスリープ運用に切り替えたり、停電空けの自動復帰が上手くいかなくて遠隔でリモート起動させないとならない場合があります。iPhoneアプリの活用も含めて、ここ最近やった準備をまとめておきます。同じことを考えてる方の参考になれば幸いです。

■我が家の構成

我が家はメインのサーバーがhpのML115G1でUPS(無停電電源装置)を使って保護しています。このLinuxサーバーがVPN(PPTP)サーバーも兼ねているので、これが落ちていると基本的に他の全てのマシンにもアクセスできません。Webサーバー、メールサーバーも稼働しているので、最低限このPCの稼働状態を保つことが最優先です。残念なことにこのマシンはBIOSでAC電源断後の自動起動を設定しても、UPS等による正常シャットダウンの場合は「不意の電源断」と見なされず自動起動してくれないようなのですが、幸いこの激安サーバーのBTOオプションでLights-Out 100cという遠隔管理ボードをつけてあり、これを利用すれば遠隔再起動できました。

2番目に重要なのはテレビ録画用の自作Windowsマシン。今までは安定性重視で24時間稼働だったのを節電時間帯はスリープに切り替えました(でもまだ録画完了後に自動でスリープに落ちないとか課題あり)。しかしこのPCはHDD容量の余裕もあることから、一時ファイル置き場にもなっていて、スリープしてるのを外から起こして中のファイルを取り出したくなったりします。これは仕事用PCなども同様ですが、これらはメインサーバーが生きていてPPTPで自宅内LANに入ることができれば、後はWake-On-Lan(LANケーブルからの特殊パケットによってPCを起動させる機能)を使って起こすことは可能です。

ついでに、先日買ったMacBook Proと同Airを「どこでもMy Mac」機能で相互に遠隔操作できるようにしたので、据え置きでスリープしているMBPを、外出先のMBAから利用できるようこちらも設定してみました。

■ML115 + Lights-Out 100cを遠隔操作で起こす

Lights-Out 100cはML115のPCIバスに装着されたボードで、本体が通電されてる限りは起動している独立したプロセッサをもつ簡易サーバーです。本体とは別のEthernetポートをもっていて、IPアドレスも独立です。Webブラウザやtelnet/SSHターミナルからアクセスして、本体のハードウェア状況(温度やファンの回転数など)を監視したり、電源のON/OFFができます(例えばOSがフリーズして全く操作を受け付けなくなっても、こちらからブチッとやれる)。また本体のグラフィック出力やキーボード入力に割り込め、ブラウザ画面から物理モニタ、キーボードの前にいるのと同じ操作が行えます(ネットワーク的に死んでいてもコンソールで操作したりエラーメッセージを読み取るなどの余地が残る)。ハードウェアレベルで画面共有付きの遠隔操作できる訳ですね。

IMG_0865 IMG_0866

今回の場合、画面共有までは不要で、電源投入操作が行えればOK。WebやSSHでもできるんですが、出先からなるべく簡単に行いたいということで、先日教えていただいたiPhoneアプリを導入しました。IPMI touchというものです。IPMIとはこうした遠隔管理システムのためのプロトコルで、Lights-Out 100cはIPMI 2.0の設定でいけます。

画面写真、左がハードの各種数値を表示した状態、右が電源操作画面です。ナウいですね。

今回のケースではLights-OutのもつIPアドレスはプライベートで、このPCが落ちてるとPPTPでも入れないという状況なので、ルーターの設定をいじってポートをリダイレクトしてやる必要がありました。セキュリティの為、必ずパスワードやユーザ名を変更しておきます。

余談ですが、このパスワード変更を失敗してしまい、Lights-Outにアクセスできなくなり焦りました。BIOS画面辺りでリセットできるかと思ったんですがそう簡単でもなく、結局と海外の掲示板で調べ、あるツールとDOSをUSBメモリにインストールし、おまじないのような長い16進数パラメーターをつけたコマンドを実行する必要がありました。これあんまりおおっぴらにするのもなんだなということで覚え書きは自粛。個人的なメモに留めておきます。

■その他のPCをWake-On-LANで起こす

Wake-On-LANは今時のEthernetボード(マザーにオンボードのものも含む)ならまず対応しているみたいなので、起こされる側は特になにも設定の必要はないと思います。ただWindowsやMacではオフにする設定項目もあるので、もし起きないようならチェックしてみると良いでしょう。

Windowsの場合、デバイスマネージャーから該当するネットワークアダプタのプロパティを開き、「電源の管理」タブで「このデバイスで、コンピューターのスタンバイ状態を解除できるようにする(O)」のチェックを確認します(細かい文言はWindowsのバージョンによって違うかも知れません)。

MacOSXの場合、システム環境設定の「省エネルギー」で「ネットワークアクセスによってスリープを解除」でいいと思います。

さて、Wake-On-LANといえど、どんなパケットにも反応して起きてしまっては困りますので、マジックパケットと呼ばれる一定のルールに沿ったパケットを受信した時だけ復帰を実行するようになっています(モノによってはそれ以外のも反応するよう設定できるみたいです)。つまり起こす側はこのマジックパケットを出力できる必要があります。あと、PCが起動していない以上、IPアドレスは不定なので、マジックパケット送信のための宛先指定はMACアドレス(全てのネットワーク機器がもつ個別の識別番号)を使います。起こしたいマシンの有線LANポートがもつMACアドレスを予め調べておいて下さい。

・Linuxで起こす

ウチの場合、どのみちPPTPサーバーであるメインサーバーが起きていることが前提なのでそこにSSHでログインしてコマンドを叩くのが簡単です。CentOSの場合、net-toolsというパッケージに含まれるether-wakeというコマンドが使えます。ウチの場合は最初からインストール済みでしたが、もしない場合は、

yum install net-tools

でインストールできると思います。

使い方はシンプルで、

/sbin/ether-wake 00:5c:a9:21:55:ff

のようにMACアドレスを指定してやるだけ。root権限が必要みたいです。

σ(^^)はマシン毎のMACアドレスを覚えるのが大変なので、rootの.bashrcに

alias wake_pc1=’/sbin/ether-wake 00:5c:a9:21:55:ff’

のように書いておきました。これで次回ログイン時からは単にwake_pc1で実行できます。

・iPhoneアプリで起こす
IMG_0867

iPhoneからでもSSHアプリを使えば上記手順でできる訳ですが、アプリで簡単にできるものはそっちを使う主義なので、専用アプリを導入しました。iNet Proというアプリで700円です。これはスキャナーなどのネットワークツールの詰め合わせアプリなのでちと高いですが、同じところが出しているWake-On-LAN専用アプリiNet WOLなら230円です。

前者のみかも知れませんが、LAN内で稼働中のマシン一覧を取得してそこからリスト登録ができるので、一台ずつMACアドレスを調べて手打ちする手間も省けてGoodでした。

また相手がMacの場合、設定画面でIDとパスワードを保存しておけば、スリープ移行やシャットダウンもできるようです。ただウチでスリープを試した限り、画面は消えるものの、スリープランプが点滅にならないという感じでした。

(iPhoneのようにVPN経由で接続した端末からマジックパケットを送る場合、PPTPサーバー側でブロードキャストパケット中継を行う設定が必要でした。これは別エントリで説明します。)
・ルーター管理画面から起こす

BUFFALOの一部のブロードバンドルーターでは管理画面からLAN内の各マシンにマジックパケットを送る機能があるみたいです。該当機種をお使いの場合、それも簡単で良いかも知れません。

ウチのやや古いTeraStation(HS-DHTGL/R5)はUPSに対応してませんが、どこかで先人がハックしていないかとググったところ、「Tera Stationをremoteからshutdownする方法」というブログ記事を発見しました。なるほど、wgetコマンドを使ってWeb管理インターフェイスのシャットダウンを実行する訳ですね。早速試してみたところ、ウチのDHTGLちゃんWeb管理インターフェイスの仕様が変わったらしく上記記事のスクリプトは使用できませんでした。そこで基本アプローチを拝借しつつ、DHTGL用に改変を試みました(以下、ファームウェアは1.15での情報です)。

■解析編

まずそもそも元スクリプトはwgetのBASIC認証用のパラメーターで認証を突破してますが、DHTGLはBACIS認証ですらない。結構苦労しましたが、まとめると、

  • /cgi-bin/top.cgiにPOSTでパラメーターを送ることで動作している(元スクリプトではts.cgi)
  • gPage、gMode、gType、gKeyといったhidden値で実際の表示ページや動作を規定している
  • ログインページから送られるhidden値はgPage=top、gMode=authでID、PWはそれぞれtxtAuthLoginUser、txtAuthLoginPasswordというフィールド名で送られる
  • 一旦認証が通ると、gSSSとgRRRというhidden値が生成されセッション管理に用いられる
  • シャットダウンの時は認証情報の代わりにgSSS、gRRRをつけ、gPage=maintenance、gMode=shutdown、gType=shutdownを送る

といった感じ。gSSSはセッション毎、gRRRはページ遷移毎にユニークに生成されてるっぽいです。gSSSは「07ae46da8acb13a7ba9c99acf3ef66f9」のような16進数値、gRRRは「463273411635750418」のような10進数値です。

つまり認証(gSSS、gRRR取得)とシャットダウン実行でwgetを2回実行する必要があるみたいでした。

■実装編

シェルスクリプトやsedに使い慣れてないのであまり綺麗な実装ではないですが晒してみます。うまいことすればTMPファイルを減らしたり無くしたりできそうなもんですが、よくわからなくて2つほど生成してます。もっとエレガントな方法があれば是非教えて下さい。

#!/bin/sh
#
# rc script to shutdown Tera Station by knakao
#

#REQUIRE LOGIN

WGET=/usr/bin/wget
SERVER=192.168.0.***
USER=admin
ADMIN_PASSWD=**********
URL="http://$SERVER/cgi-bin/top.cgi"
TMPFILE="/tmp/ts_shutdown.tmp"
TMPFILE2="/tmp/ts_shutdown2.tmp"


ts_down()
{
    # Loging in as administrator
    OPT="--post-data=txtAuthLoginUser=$USER&txtAuthLoginPassword=$ADMIN_PASSWD&gPage=top&gMode=auth -O $TMPFILE -q -T 5"
    $WGET $OPT $URL

    `cat $TMPFILE | grep gSSS > $TMPFILE2`

    gSSS=`sed 's/.*name="gSSS"  value="\([^"]*\).*/\1/g' $TMPFILE2`
    #echo 'Current gSSS is '$gSSS

    gRRR=`sed 's/.*name="gRRR"  value="\([^"]*\).*/\1/g' $TMPFILE2`
    #echo 'Current gRRR is '$gRRR

    OPT="--post-data=gPage=maintenance&gMode=shutdown&gType=shutdown&gSSS=$gSSS&gRRR=$gRRR -o /dev/null -q -T 5"
    $WGET $OPT $URL

    `rm -f $TMPFILE`
    `rm -f $TMPFILE2`
}

case $1 in
start)
;;

stop)
ts_down;
;;
esac

このファイルを実行可能にして/etc/init.d/terastation等として置きます(RedHat系)。赤字部分は適宜書き換えて下さい。

手動で実行するには

/etc/inin.d/terastation stop

などとします(なお当たり前ですがstartオプションは無視されます)。せっかくrcスクリプト形式なので適当な/etc/rc*.dディレクトリにシンボリックリンクを張るとか、/etc/rc.d/init.d/haltに書いておけば自動実行されるんですが、通常のメンテナンス時にも一緒にTeraStationまで落ちるのが難点ですね。UPSによるシャットダウンの時だけに実行できる仕組みがある場合はそちらを利用するのが良いでしょう。

あとTeraStation自体と途中のハブもUPSでまかなっていないと意味がないのでご注意を。

我が家のCentOS + Postfix + SpamAssassinで運用しているSMTPサーバーが、OS再起動後にエラーを出してクライアントからの送信や外部からのメール受け取りができなくなる現象が発生していました。原因究明は簡単で/var/log/maillogをみると、迷惑メールフィルタSpamAssassinが使用する/var/run/spamass.sockにパーミッションがないせいだとわかります。このファイルのオーナーをpostfixにしてやれば解決します。実はもうずっと前からこの現象が起きてたのですが、OSを再起動する機会自体が少ないので、都度手動で対応していました。

ですが最近の計画停電で発生頻度があがってきたので、まじめに対応をしようと。

で、このファイルを作成するのが/etc/init.d/spamass-milterです。このファイルの中に下記のようなブロックがあります。

start() {
        echo -n $"Starting $desc ($prog): "
        daemon $prog -p $SOCKET -f $EXTRA_FLAGS
        RETVAL=$?
        [ ! -s $SOCKET ] || sleep 30
        chown postfix $SOCKET
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
        return $RETVAL
}

ちゃんと6行目で同じことしてるんですね。ただタイミングが早くて実際にこのファイルが作られる前に実行されてしまい、結果としてオーナー変更ができてなかったっぽいです。直前の行にあるsleepコマンドによる待ち時間を長めにとってみたところ解決できたっぽいです。ちなみに確か最初は5だったんですが、10にしてもダメでした。どれくらいの時間が適切かはお使いの環境によると思います。

OS再起動後、/var/run/spamass.sockのオーナーが最初からpostfixになっていれば成功です。

停電を繰り返すうちにどうもUPSによるサーバーのシャットダウンがちゃんとできてないことがわかってきました。そういえばUPSは前のサーバー機から継続だけど、今のXen環境にしてからあんまり実地テストとかしてなかったなと。

我が家のUPSは三菱のFREQSHIP Fで、同社がフリーで配布しているFREQSHIP-mini for FreeUNIXをインストールして運用しています。起動スクリプト/etc/init.d/freqshipを実行するとなにやらCOMポートがどうのとエラーを返します。設定ファイルは/etc/freqship/UPSFILEで、一行目に、

Port=/dev/ttyS0

という記述があります。UPSとの通信に使用しているCOMEポートとして/dev/ttyS0を指定してあるのですが、これがなんらかの理由で使用できないようです。次に起動時のコンソールメッセージを

dmesg | grep tty

としてttyという文字を含むものを検索。すると、

Xen virtual console successfully installed as ttyS

とXen絡みのメッセージを発見。どうもXenがシリアルポートを占有してしまってるのが問題のようです。そこでググった結果の解決策は、/boot/grub/grub.confを編集し、

title CentOS (2.6.18-194.32.1.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-194.32.1.el5 dom0_mem=768M
        module /vmlinuz-2.6.18-194.32.1.el5xen ro root=/dev/lvm1/Domain0 xencons=off
        module /initrd-2.6.18-194.32.1.el5xen.img

のように赤字部分を追加し、Xenにシリアルコンソールを使用しないよう指示しました。grub.confには同じようなブロックが複数セット書かれていると思います。大抵は一番上がデフォルトで使用される記述だと思いますが、まぁとりあえず全てに書いておきました。

これで再起動したところ、/etc/init.d/freqshipでエラーが出なくなりました。

停電の多い地区の皆さん、いちどちゃんとシャットダウンできてるかお試しあれ。

■オマケ:XenのDomain-U仮想マシンを自動的に起動する

Domain-0が再起動した後、自動でDomain-U(仮想OS)も起動させたい場合、/etc/xen/autoに設定ファイルを置いておけばいいようです。大抵は/etc/xen/においてあるでしょうから、シンボリックリンクを張っておくのが簡単でしょう。たとえばHogeという定義ファイルなら、

ln-s /etc/xen/Hoge /etc/xen/auto/Hoge

とか。ちなみにXenはシャットダウン時にDomain-Uを自動でサスペンド状態にしてくれて、次回Domain-0起動に自動的に復帰させてくれるようです。上記の設定はちゃんとそれをチェックしてレジュームに失敗した場合のみ実行してくれるみたいなので、Domain-Uが二重に起動してしまうようなことはないようです。賢い。

当ブログを設置しているサーバーは物理的には横浜市内にあるので、東京電力の計画停電に応じて適宜停止をしています。ちなみにグループ5です。サーバーごと中部電力エリアの実家に移設することも検討していますが、とりあえず期末の仕事が差し迫ってきてまだ手を付けられていません。

とりあえずブログネタ的には録画PC用にUPSを発注したんですが発送される気配なし。脱乾電池を進めてきた結果、エネループや外部バッテリーの類はそれなりにあるので電池には困ってない感じですかね。懐中電灯もあるし。こないだ省エネ能力の高い湯沸かしポットを買ったところだったのも幸いしてます。あと、停電時でもWiMAXは意外と粘ってくれていて、年末にWM3500R買ったのも当たりだったなぁと。停電中もこれ+各種ノート/タブレット/スマートフォンでネットには不自由しない感じです。

まぁそんな感じですがとりあえずσ(^^)は元気でやっています。お互い頑張りましょう。

とある案件でsqlite2のデータベースのあるテーブルに含まれる文字列の全置換をしたくなったんですが、ググってヒットするselect文で使えるreplaceコマンドはエラーになる。どうもsqlite3からの実装っぽい?

でsubstrを組み合わせた方法とやらも見つけたんですが、いまいち意味がわからず応用できませんでした。

結局、どうしたかというと、ダンプ->sedで置換->新DBにインポートというやり方で、下記の1行で済みました。

sqlite hoge.db .dump | sed –e ‘s/MH\./MF\./’ | sqlite hoge2.db

ちと見づらいですが、色つきの部分を適宜置き換えてご使用下さい。

元データベースファイル:hoge.db

新データベースファイル:hoge2.db

置換元ワード:MH.

置換後ワード:MF.

今回のワード中に含まれるピリオドはエスケープする必要がある為、前に’\’をつけています。

で、sqlite hoge2.dbして問題なく変換されていることを確認したら、元ファイルと差し替えます。

 

我が家のWindows Home Server(以下WHS)はCentOSのXen上に完全仮想化で構築されています。で、そのHDD容量が逼迫してきたので増設を決意。今なら最大容量である2TBしかないだろう、と思ったんですが、WHSはWindows Server 2003ベースなので、WD20EARSは問題になるかも知れないと思ってWD20EADSを調達しました。

どのみちLinux用のパーティションも必要だったので分割して、1.8TBをWHS用に確保(基本パーティション)。Xenのプロファイル的にはpsy:~という形式(これなんて呼ぶんだろ?)で、Domain 0上のパーティションを仮想マシン上の/dev/hdx(IDEな物理ディスク)に見せる方法でマウントしました。以前に追加したドライブもこの方法でバッチリ動いていました。

が、今回はNG。写真のようなエラーが出てWHS管理下に追加できません(クリックで拡大)。

Hard drive initialization failed. The Wizard was unable to create a volume on the hard drive.

(日本語版の人が同じエラーでこのエントリにたどり着けるよう、一応訳を書いておくと「ハードディスクの初期化に失敗しました。ウィザードはハードドライブ上のボリューム作成ができません。」となります。まぁ一言一句同じでないとあまり意味ないかもですが…)

なんとも情報の少ないメッセージで、原因についてはまったく触れてません。ちなみにマイコンピューターを右クリックして管理->ディスク領域とかからフォーマットしてもやはり失敗。

2TBのドライブといっても実質は2TB未満なので各種2TBの壁には抵触しない気がするんですが。ちなみに別のところでAcerのWHS機に同じWD20EADSを普通に増設できたので、WHS単独の問題ではなさげ。ということは、Xen絡みかLinux周りっぽい。ただXen+WHSなんてマイナーすぎてググってもあまり手がかり無し。

で、fdiskは2TBの壁があるらしいというので、partedでパーティション分割しなおしてみてもダメ。パーティションの順番を入れ替えてみてもダメ。

結果としてはパーティションサイズを小さくしたらOKでした。で、その壁はどうやら1TB。parted上で1100GB確保すると、WHS上では1TBと表示されて失敗。同1000MBだと931.32GBとなりOKでした。うーむ、理由がわかんないですね。まぁ、別パーティションをもうひとつ作ってWHS上で結合して使えば実質的な不利益はないんですけど、なんか悔しい。それが可能かどうかは追って検証します。既にWHS用にドライブを4つマウントしてるので、Xen的に/dev/hda~/dev/hddまで消費しちゃってるので(いや、普通に/dev/hdeとか可能?)。少し様子をみて古いHDDを外してから挑戦します。

FireFoxのブックマークやパスワード、設定などをPC間で同期するWeave Syncというアドオンの正式版がリリースされました[impress]

σ(^^)のように何台ものPCを使い分けている人間にとってはとても便利そうなツールなので早速導入。ただWebサイトの認証情報まで外部サイトに預けるのはちょっと抵抗が。万全の体制で管理されているであろう公式サイトと、半端な知識で運用している自サイトのどっちが安全化は議論が別れるところですが、まぁ技術的関心もあってとりあえず自前サーバーを立ててみることにしました。

ざっとググった感じ最新の1.0プロトコルに対応したサーバーに関して日本語解説がなかったようなので、簡単にまとめてみます。まぁ、配布に含まれるREADMEのまんまなんですが。以下、既にSSLでコンテンツが公開できるApacheが設定済みという前提です。

個人運用向けに機能を絞ってリリースされているWeave Minimal Serverというバージョンを利用します。本家サーバーはMySQLを使って結構面倒なんですが、こっちはsqliteを使ってるし、DB構築もほぼ自動でやってくれるので導入が遙かに簡単です。Minimal Serverの正式な配布サイトは不明ですが、とりあえず作ってる人のこちらのブログ記事で「here」というリンクを叩けばtar玉が落ちてきます。

・インストール

解凍したファイルを適当な場所に配置します。ここでは /var/www/weaveserver/と仮定します。

次にApacheの適切な場所にssl.conf等に下記の赤字の行を追加します。

<VirtualHost _default_:443>
  Alias /weaveserver /var/www/weaveserver/index.php
</VirtualHost>

これで、https://ホスト名/weaveserverを叩くと、インストールフォルダのindex.phpを挿すようになります。SSL.confにだけ書くので、暗号化無しのhttp://ではつながらないので安全です。

またインストールフォルダ内にsqliteがDBを作成するのでApacheユーザが書き込める権限が必要になると思います。

・JSONライブラリの追加

ウチの環境(CentOS 5.4、PHP 5.1.x)ではPHPのJSONライブラリの追加導入が必要でした。PHP 5.2以降だといらないみたいです。

# pecl install json

でインストールしてから、/etc/php.d/json.iniを作成し、

extension=json.so

と記入し、Apacheを再起動しておきます。

その他、sqlite3などを利用するので環境によっては追加インストールが必要になるかも知れません。

・ユーザDB作成とユーザ登録

以上の準備が整ったらブラウザから、

https://ホスト名/weaveserver/1.0/blah/info/collection

にアクセスします。BASIC認証ダイアログが出るので、IDにblah、パスワードはデタラメでいいのでOKを押します。認証は失敗しますが、これでインストールフォルダの中にweave_dbというファイルが作成されているはずです。

最後にインストールフォルダ内のcreate_userスクリプトを(シェルから)実行します。

# php create_user

作成はcを入力し、ユーザ名とパスワードを設定(rootじゃなくてもDBに書き込み権があれば一般ユーザでもいいかも)。

FireFoxのWeave Syncアドイン上でのカスタムサーバーURLには、

https://ホスト名/weaveserver/

を指定します。

ウチでは以上で動きました。

ここんとこIPv6問題(Google等の一部のIPv6対応サイトにIPv6でつなごうとしてタイムアウトするまでの時間が無駄にかかる、もしくはタイムアウトしてエラーになる)に悩まされていました。どうもいくつかの偶然が重なって起きてたっぽいです。

  • ウチのプロバイダIIJmioはIPv6対応に積極的でDNSがIPv6対応済みのため、IPv6対応サイトに関してIPv6(AAAA)レコードも返してくる(IPv4で問い合わせた場合でも)
  • 最近のOperaはOS設定無視してIPv6優先でアクセスしようとする(→結果タイムアウトする)
  • ウチのルーターMN8300はIPv6トンネリングに対応している
  • 今までWindowsマシンではIPv6スタックをわざわざオフしてたけど、Windows7のリモートメディア共有機能を使う為にオンにした
  • (これは関係ないかもですが)NTTのBフレは地域網内専用のIPv6アドレスを振る(インターネットとは通信できない)

という条件がかさなって現象が発生していました。昨日書いたサーバー機のyum updateが遅い件もそうですね。あっちはIPv6を無効にしても困らないのでそうしましたが、Windows7機に関してはリモートメディア共有を使いたいのでIPv6自体を無効にしてしまうワケにはいきません。

で、改めて色々ググってわかったことには、DNSへの問い合わせがIPv4かv6かってことと、返ってくるレコードがv4/v6どっちかってことは全く独立であるということです。

今まではなんも考えずにLAN内のマシンはDNSサーバーとしてルーター(MN8300)を指定していました。MN8300はPPPoEで割り当てられたIIJのDNSサーバーを使うので、結果として、IPv6アドレスを含む返答が返ってきていました。

dns_iij

この結果として、Operaやyumのような一部ソフトはまずIPv6での接続をしにいってしまいトラブルになっていました。余所のDNSを勝手に使うのはマナー違反だし、じゃぁこれを回避するにはLAN内にIPv6を無効にしたDNSキャッシュサーバーを別途立てるしかないかなぁ、とため息をつきかけてふと気付きました。そういえば先日Googleが公開DNSを提供しだしたじゃんか!と。てことでDNS設定を8.8.8.8/8.8.4.4とGoogleのものに変更(さすがGoogle、こんなアドレスまで良番とってますな)。

dns_google

おぉ、IPv4だけだ。むしろGoogleの方が積極的にIPv6に対応してそうなイメージですが。実際この設定をしたマシンからならOperaも普通にGoogleが開けるようになりました。

ので、LAN内のDHCPサーバーが知らせるDNSサーバーアドレスをGoogleのものにして対応完了。Windows7導入して一ヶ月半くらいぶりに快適なネット環境が戻って来ました。

CentOS5マシンで久しぶりにyum updateしたら、パッケージのダウンロードがやたら遅いことが発覚。fastestmirrorの設定を見直しても変わらず。そもそもウチはIIJmioなので、ftp.iij.ad.jpミラーで遅いワケがない。でもほんの数十KB程度のパッケージでも2,3分かかる始末。

で、結局何が悪かったかというと、IPv6でした。DNSのフォールバックに時間食ってたみたい。こちらのブログを参考にさせてもらって無効にしたところ見違えるようなスピードでパッケージが落ちてきました。

XenのDom-0機だったので基本通信しないので今まで気付かずに使ってたんですね(^^;)。

先日までリビング録画マシンに使っていたAthlon X2 4850eが余ったので、サーバー機(ML115 G1)に転用してみました。もともとAthron 64/3500+(2.2GHz, 62W)がついていたのを、X2 BE2400(2.3GHzx2, 45W)に換装して使っていて、今回、2.5GHzx2, 45Wと微妙なクロックアップ。

ただ、ML115は倍率が整数倍しか効かないようで、BE2400では定格が11.5倍のところ11倍動作で2.2GHz動作でした。今回の4850eも同様で2.4GHzと表示されます。またモデルが「Unknown CPU」となるのも同じ(まぁ2007年からBIOS更新されてないので当たり前ですね)。

ちなみにUnkown認識だとLinuxではCool'n Quietは昨日しないみたいですね。どのみちXenカーネルの場合、3.3以降でしかpowernow-k8が機能しないのでCentOS(最新5.4でもXen3.0.3)のウチでは意味ないんですが。

前エントリの「Steins;Gate」みたいなネタバレ記事を書いていて、冒頭のみRSSに表示して、続きは「続きを読む」でパーマリンクというのがいいんじゃないかと考えました。

単純に、サイトのアクセス率を上げて収益狙いでいく意味も含め、単にMTEntryBodyのかわりにMTEntryExcerptタグにして冒頭xx文字のみRSSに掲載するのが一般的ですが、今のところそこまでガッツいてないし、RSSリーダーで読んでる人の利便性を優先。

上記記事のように明示的に「以下興味ある人だけ!」って境界をひいた場合以外は従来通り、というコンセプトで。

Windows Live Writerでは記事中に境界線を入れると、前半(「本文」)はMTEntryBody、後半(「続き」)はMTEntryMoreタグで扱えるようになります。つまり、RSSやAtom内でのタグでは今まで通りMTEntryBodyメインで、その後にMTifでMETnetryMoreが空でない場合のみ「続きを読む」リンクを表示してやればヨサゲ。

ってことで実装してみました。お使いのRSSリーダー上で不具合などありましたらご一報ください。

心づもりとしては、

  • 大半の記事は今まで通り全文表示
  • ひとつ前のStains;Gateのエントリは、「以下ネタバレ」止まりで、続きはリンクをクリック

になってればOKです。ちなみにトップページは勝手にそうなってくれたようです。

ヨドバシのPC書籍コーナーで、「Xen徹底入門」の第二版を発見。完全仮想化(HVM)なWindows OS用のPVドライバの解説も載っていたので、ウチの仮想Windows Home Serverマシンにもそろそろ入れてみるかと購入。いままでの存在は知っていたんですが、まだ不安定という話を聞いていたので見送っていたのですが、本書で取り上げるようになってきてるならそこそこ使えるようになってきたのかなと。また本書の説明では、boot.iniにエントリを追加していつでも無効設定でOS起動できるようでしたし。

DLサイトには記載バージョンよりも新しくなっており、とりあえず0.10.0.83を使用しました。boot.iniを書き換え、ドライバのmsiファイルを実行してインストール。再起動を求められるので再起動すると、とりあえずBSODに。で、一旦PVドライバ無効にして起動し、デバイスマネージャーを見ると「!」が4つのデバイスについていたので、それぞれについて「Reinstall Driver」を実行して再度、再起動。次はちゃんと起動したものの、クライアント側からは見えない。調べてみると、従来の仮想NICが無効になっており、PVドライバーによる新しいNICにDHCPによる別のIPアドレスが振られた状態でした。そこで、PVなNICに元からの固定IPアドレスを振り直すことで、無事クライアントからも認識。

共有フォルダをVistaマシンにネットワークドライブとして割り当て、CrystalDiskMark 2.1で計測した数値を貼っておきます。

(単位:MB/s) 従来 PVドライバ
Sequential Read 4.806 59.970
Sequential Write 6.480 51.225
Random Read 512KB 4.528 61.792
Random Write 512KB 6.704 49.628
Random Read 4KB 2.900 9.594
Random Write 4K 1.531 6.435

 

歴然の差ですね。ただ、Windows Home Server Console表示などのレスポンスはあまり変化が見られません。安定性も含め、バックアップの速度などに改善が見られるかしばらく検証していきたいと思います。

iPhoneのビジュアルボイスメールは慣れると激しく便利ですよね。従来の留守電はいつ誰からかかって来たのか、聞いてみないとわからない。複数ある中からある1件を探し出すなんて作業は絶望的に面倒です。

(動画的な意味での「ビジュアル」ではありませんのであしからず)

一方、自宅で使っているAsteriskの留守電は(OSSで実装してるという意味ではスゴいんですが)、通常のプッシュトーン操作による留守電としてもやや使い勝手に難があります。読み上げ順が、時間->日付->メッセージと一般の電話機とは逆で、肝心のメッセージが聞けるまでにひどく待たされます。特にうちは非通知でかかってきて無言で2,3秒という無意味なメッセージがよく溜まるので、いくつも連続で聞いてるとウンザリします。

多分、この再生順はどっか設定をいじれば変えられるんじゃないかとググっていたところ、Web Voice Mailなる機能があることを発見。早速設定してみました。

■設定方法

ウチはソースからコンパイルして入れてるので、あんまディストリ関係ないですが、CentOS 5です。

ソースディレクトリで make webvmail します。オプションでApacheのドキュメントルートを指定したりもできるみたいですが、cgiファイル1つとスタティックファイル(画像)のフォルダだけなので、make時に配置されたメッセージをみて、自分で移動してもさして手間は替わらない気がします。

CentOS 5の場合、suidでperlを動かすために、yum install perl-suidperl も必要でした。

あとは配置したcgiファイルにブラウザでアクセスすればOKでした。AsteriskのボイスメールIDと暗証番号でログインします。

asterisk

こんな感じで留守電が一覧され、「Play」でQuickTimeプラグインが起動してブラウザ上で聞くことが出来ます。なお、最初の一度だけ音声フォーマットを聞かれるので、Asteriskでの録音設定と同じものを選びます。

ちなみに、iPhoneのSafariだとエラーになって再生できませんでした。フォーマットをリニアPCMなWAVにすればいいかも。でも、メール添付で送られてくるファイルはいつも再生できてるんですけどね。

 

いや、しかしこれは便利。やっぱAsteriskはやめられません。おかげで、いつまでもBフレをNextに更新できないσ(^^)ガイル。

前エントリのiPod classicの記事から、画像リンクにLiteBoxを導入してみました。戻って写真をクリックしてもらえればわかると思いますが、拡大写真を表示するのにページ遷移をしないで、オーバーレイというかポップアップというか、うにょ~んと出るアレです。

ちょっぴりクールでちょっぴりユーザビリティが向上します。ちなみに、複数写真があるページでは、拡大写真をポイントすると、「NEXT」、「PREV」というボタンが表示され直接写真間を移動できます。試してないですが、JavaScriptが使えないブラウザの場合は従来通り画像直リンクとして機能してるんじゃないかと思います。

最近は外部ストロボを使うなどして写真撮影も気を遣ってるんですが、あまり大きい画像を貼ると重たくなって流し読みの人には迷惑だし、というジレンマがあったんですが、これで心置きなく高解像度写真も置けます(興味のある方だけクリックしてご覧下さい)。

WZR-AGL300NHが届き、実家および父親の会社の事務所の11n化完了しました。前エントリに書いたとおり、5GHzで11n、2.4GHzで11b/gという設定。ただ、11nで倍速(300Mbps)設定が機能しません。type Zでも父親のLet’s Note W8でも(どちらも無線LANチップは300Mbps対応なはずのIntel Wi-Fi Link 5100)。Web管理画面での設定はもちろん、PC側のドライバ設定のそれらしいところをいじってもダメ。Intelから最新ドライバもってきてもダメ。BUFFALOの倍速設定ツールも試してみても「対応カード無し」になるし。倍速設定ツールがやってるだろうレジストリ操作かなにかをしたりすればイケるんでしょうかねぇ。

倍速いけました。というか最初から倍速でした。どうも5100 AGNは上り150Mbps、下り300Mbpsが仕様で、Windowsは送信速度をリンクスピードとして表示するんだそうです。実際、20MHz固定にしてみたらリンクスピードは70Mbps台になりました。4965の2710pも以前から倍速でつながってたんですね。ちなみに上りも倍速でつなげるのは上位機種のWi-Fi Link 5300に換装が必要っぽいです。バルク品を見つけたら確保しておいて、保証が切れるころチャレンジしましょうかね(って、保証5年じゃんw)。

ということで、リンクスピードは150Mbps止まりなんですが、とりあえずRBBのスピードテストでは20Mbps –> 47Mbpsとアップしました(ちなみに優先接続のデスクトップ機からは63Mbps。20MHzと40MHzで違いなし)。横着してLAN内でのスループット測定はしてない(^^;)。実際、実家にはファイルサーバーとかもないですしね。インターネットが速くなればとりあえず良し。

あと、残念ながら今までのルーターを無くして、コレ+バックアップ用のLinuxマシン(CentOS4.5)のPPTPサーバーという組み合わせも上手くいきませんでした。どうもこの手の製品の「PPTPパススルー」はLAN内にクライアントがある場合にもので、サーバーを立てることには対応してないっぽいです。それでなくても自宅でCentOS4系の時はPPTPサーバーは上手くいった試しがないので、検証要素が多すぎて断念。今までのルーターを生かしたまま、AGL300NHはアクセスポイント使いに。ONU、ひかり電話ルーター、ルータ-、コレ、とルーターコーナーはゴチャゴチャ(^^;)。

使用量が96%程度になったTeraStation Living/2TBのHDDを換装しました。元が500GBx4構成だったので、1TBx4に換装し引き続きRAID5で3TB使用です。

ドライブには回転数制御機構を搭載して待機中の消費電力、静音性に優れてそうなWD10EADSをチョイス。サーバー用には余計な機構がついてない方がいいんじゃないかって説もありましたが、値段も\7,980と手頃だったので、衝動買い。

■交換手順

この世代のTeraStationはカーネルがHDD上にあるらしく、いきなり4台全てを交換すると復旧が大変ということだったので、あちこちに書かれているように以下の手順で実施しました。

  1. 中身を他のマシンにバックアップ
  2. 設定内容保存のため、管理画面をキャプチャ(FireFox + ScreenGrabを利用)
  3. HDD 2~4を新品に交換(交換手順はこちらを参考に)
  4. 電源を入れるとエラーになりつつも管理画面にアクセスできる
  5. 既存アレイを削除(←これ以降は引き返せません)
  6. HDD 2~4がフォーマットされていないというエラーが出るのでフォーマット(これによりHDD 2~4までに起動用のカーネルがコピーされる模様)
  7. 電源を切り、HDD 1も交換
  8. 当然今度はHDD 1がフォーマットされていないと出るのでフォーマット
  9. 新しくアレイを作成
  10. 共有フォルダを再設定
  11. バックアップを書き戻す

この手順であれば、ユーザやグループ、ネットワーク設定などは保持されます。ただし、アレイを削除するので、共有フォルダや中身のデータは全て消えます。あと、infoとshareは自動で復元されるかと思ったんですがinfoだけで、shareは無くなりました。バックアップも取ってなかったんですが、まぁ公式からダウンロードできるものばっかだと思うからいいや。

HDD 1の中身は消えてますが、HDD 2~4は無傷なので、RAID運用していたのであれば適当なLinuxマシンにぶら下げて中身が取り出せるのかも知れません。でもまぁリスクが大きかったので今回はキチンとバックアップをしました。少し調べて感じでは、ARMのLinux Kernelのバグで、i386なLinuxでマウントする時は修復操作が必要になるらしいです。ということは、TeraStationに戻してもマウントできなくなる可能性もあるので、リスキーですよね。

現在はディスクチェック中(自動で開始されます)。1200分(20時間)もかかるみたいなので、データの書き戻しは明日ですな。速度面などで変化があるか楽しみ。

RSSフィードとアクセス解析(その2) - Movable TypeでRSSをトラッキングする方法 -

仕事で使ったGoogle Analyticsが存外良かったので、自鯖にも導入してみました。

ページにアクセスされるたびにGoogleにシグナルを送るよう、全ページにJavaScript(トラッキングコード)を埋め込むわけですが、最近だとRSSで見てる人も多いので、それはどうやって追跡したら良いんだろう、と思ってググると、上の公式ブログが見つかりました。MovableTypeでの対応法まで書いてありナイスです。 RSSファイル自体のアクセス分析はできないけど、RSS経由できたかどうかを分析する方法ってワケですね。

早速導入しようとするも、ひとハマり。埋め込むコードの中に半角の「&」が含まれていますが、これをそのまま書いてもダメで、「&amp:」と書いてやる必要がありました。XML中に「&」はマズいんですね。

毎月某社に出す請求書ファイルを作ろうとファイルサーバー上にあるExcelファイルを開くと、なぜか「読み取り専用」になってしまいます。いつも別名保存してから元のファイル名で上書きしなおしてるのですが、今日はたまたま時間があったのでググってみました。

完全に解決したかどうかはしばらく様子をみないとわからないんですが、それらしき対処法を見つけたので覚え書きしておきます。

対処内容は、smb.confに、

dos filetimes = true

と設定するというものです。リンク先のmanによると、所有者以外でもタイムスタンプを更新できるようにするというもののようdす。上のBugzillaの議論で、Officeはファイルを開いた時点で最終アクセス時刻を更新しようとして、失敗すると読み取り専用警告を出す、とあり、パッチも提出されていますが、最後の方に上記設定だけで解決したという報告もあったのでとりあえず試してみます。

もともとこのフォルダにはマシンは違えどσ(^^)のアカウントでしかアクセスしてないはずなんで、そもそもおかしいんですけどね。ノートPCのオフラインフォルダ周りが影響してるのかな??

今のところ問題ないですが、また来月の請求書出す頃に再発しないかが焦点です。

外してたらごめんなさい。>参考にした人

ウチのスイッチはSNMP対応なので、ZABBIXで監視可能ってことで設定してみたんですが、Template_SNMPv2_Deviceテンプレートから一括登録したアイテムだと累積のオクテット数しか取得できない模様。SNMPはMIBツリーというプロパティ一覧ツリーがあって、どの項目から値を取得するかを明示できる仕組みになっているので、他の項目をZABBIX上のアイテムとして登録してやればその値を監視できます。なので、TWSNMPというフリーのSMNPマネージャーでそれらしい値が採れる項目を探してみたんですが見つからず。

うーん、これじゃあまり役に立たないなぁ、と思いながらアイテム設定画面を眺めていたところ、「保存時の計算」という項目に「無し」、「差分/時間」、「差分」という選択肢があるのを発見。これを「差分」にしてやれば、前回取得時からの増加分をデータとして記録してくれそうなので、瞬間風速を採れるのではっ?

てことで適用してみたのが下のグラフ。TeraStationがつながっているポートを対象にし、PCから2GBのファイルをコピーし、その後で書き戻しをしてみたもの。赤が送信(ifOutOctets)、緑が受信(ifInOctets)。逆っぽいですがスイッチからみた送受信なのでこれでいいんでしょう。ちなみに取得周期が60秒なので、1分毎の瞬間風速ということになります。

zabbix_2

どうやら、これでポート別の稼働状況を視覚化できるっぽいです。一安心。まぁ、できたからってどうということもないんですが(^^;)。しいていえば、NASや無線LANアクセスポイントなどSNMPで監視ができないデバイスが不正使用されてないか(自分が寝てる時間に送受信量がハネあがったりしてないか)がチェックできるとかですかね。

zabbix今月のSoftware Design(2008/11号)でZABBIXというサーバー監視ツールが特集されていたので、導入してみました。

ZABBIXの主な特徴は、

  • RDBMSにログを蓄積し、Webインターフェイスでグラフ化などができる
  • HDD、メモリなどの利用状況や、デーモンのプロセス数などが監視可能。URL指定でWebページの稼働チェックも。
  • もちろんSNMPもOK
  • 特定状況(トリガ)に応じてメールを送信するなどのアクションを定義可能
  • クライアント(エージェントと呼ぶ)はマルチOS対応

など。

とりあえず自宅のメインサーバーと、実家にあるバックアップサーバー、そしてWindows系のサーバー2台にエージェントを導入し、会社のサーバーはURL指定で稼働チェックしてみるように設定しました。あとGbEハブもSNMPに対応してるので設定。

 

■設定覚え書き

記事の通りでは上手くいかないところがあったのでいくつか覚え書き。

記事にあるEPELリポジトリは追加せずとも、日本のユーザ会のサイトにCentOS用rpmがおいてあったので、そちらを利用しました。EPELだと現在1.4.6が入るんですが、記事中にもある日本語パッチが1.4.5用しかなかったので。

また初回に管理ページにログインしようとすると、ヘッダーがすでに出力されてるぜ系のエラーが出たんですが、/etc/zabbix/zabbix.conf.phpの中(最初はコメント文しか入っていない)を空にしてやったら治りました。同時に[ERROR: Unknown database type.]というエラーも出てたんですが、一緒に治っちゃったぽいです。

また、Windows版も「公式からソースをもってきて展開するとバイナリが入ってる」との記述だったんですが、単純に1.6をもってきたらUnable to add performance counter エラーで起動せず。1.4.6から抜き出したバイナリならOKでした。1.4.3あたりで治ったらしいバグなんですが、再発したんですかね。

遠隔のNAT下サーバーも適切にポートをあけてやったらちゃんとつながりました。会社で建ててるサーバーもできれば組み込みたいんですが、ポートあけられないので、SSHポートフォワーディングでなんとかできないかなぁと思案中。

iPhone OSのファームウェア2.1で、auの絵文字入りメールが全文文字化けするようになってしまいました。以前は絵文字部分だけが化けてたので内容は読み取れたのですが、今回は全文化けてしまうのでどうにもなりません。IMAPもMobileMeもダメです。

で、対策されるまでの一時しのぎで、文字化けメールが来た時はSafariからPHPベースのWebメールASPであるSquirrel Mailを使って読んでいるんですが、このログインページがデフォルトだと写真のように表示され、フォームの選択がやりづらい。ダブルタップでも拡大してくれず、ピンチで手動ズームする必要があります。

対策前

そこで、例によってmetaタグを追加して、iPhone/iPod touchで適当な倍率で表示されるようにしてみました。

なお使用中のバージョンは1.4.8です。

手を加えたのは、functions/page_header.phpです。30行目付近にページ先頭部分のHTMLが定義されているので、赤字部分を追加するだけです。PCでは解釈されず無視されるので影響はないはずです。

    echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' .
         "\n\n" . html_tag( 'html' ,'' , '', '', '' ) . "\n<head>\n" .
         "<meta name=\"viewport\" content=\"width=device-width, hight=device-height, initial-scale=0.8, \
user-scalable =yes\">\n" .

         "<meta name=\"robots\" content=\"noindex,nofollow\">\n";

initial-scaleは0.8位だと縦画面でちょうど良い感じになりました。横画面メインの方は適宜調節してみて下さい。

対策後

こんな感じになりました。たかだかピンチ1回の手間ですが、省けるものは省いた方が気分が良いです(ピンチは片手持ちでできないので結構手間ですしね)。

AppStoreにAsteriskC2D[iTunesで開く]というアプリがあります。説明によるとiPhoneからAsteriskでダイヤルできるようなことが書いてあります。まさかSIPクライアント!と期待するワケですが、残念ながらダイヤルしてくれるだけ。実際の通話は別のSIP端末でする必要があります。

なにが便利かというと、iPhoneの電話帳に登録済みの番号へ固定電話(Asterisk)からかけたい、なんて時にiPhone上の番号を見ながら電話機のテンキーを叩かなくていい、って位ですね。\115とは言え、有料アプリ買ってまでしたいことかどうかは微妙です。

でも物好きなので試してみましたw。AppStoreの説明読んでも具体的にどう機能するのかさっぱりだし、探しても日本語の情報(どころか英語も)が見つからなかったので書いておきます。

■動作の仕組み

Asterisk(とWebサーバー)が動いているマシンに、専用のPerlスクリプトをインストールし、iPhoneからはhttpでそれを叩いているようです。Perlスクリプトは(必要ライブラリからして)Asteriskにtelnetして操作をしているようです。公式サイトによれば、元々はMac用のクライアントが主みたいですね。ブラウザ上で表示している番号などに簡単に発信するためのソフトのようです。ただし、iPhoneの場合は連絡先に登録した番号を呼び出せるだけ。まぁ、OSとしてコピペがない以上、どうしようもないんでしょうね。

■実際の操作手順

iPhoneにAsteriskC2Dアプリをインストールすると、設定画面にAsteriskC2Dという項目が追加されるので、そこから設定を済ませておきます。Extension欄に通話に使いたい電話機のSIP番号を指定します。UsernameとPasswordはLDAPを使う場合のもので、使わないのであれば、後述の設定をしておけば設定しなくて良いのかも知れません。

次にAsteriskC2Dアプリを立ち上げます。押せるのはContactsボタンのみ。押すと文字通り連絡先画面が開き、番号を選ぶと最初の画面に戻ってきます。

この状態で既に発信作業は行われており、間髪をおかずしてExtensionで指定した電話機が鳴ります。芸が細かいことに、発信者番号は発信先のものが表示されます。つまり、Aさんに発信した場合、あたかもAさんからかかってきたように見えるわけです。

電話を取ります。するとその時点で発呼がかかるようで、受話器からは呼び出し音が聞こえ、相手が出ると通話が開始できる、という流れです。

■サーバースクリプト導入のTips

サーバー側の設定は公式サイトに解説ページがあります。ただ少しいじる必要がありました。まずウチはLDAPを使っておらず、またCPANのライブラリもサクっとインストールできなかったので、LDAP関連の部分を無効化しました。

#use Net::LDAP;

設定部分直後の下記3行もコメントアウト 。

#my $ldap = Net::LDAP->new($LDAPServer, debug=>0) ||die "$@\n";
#my $ldapbind = $ldap->bind("uid=$in{'username'},$LDAPSearch", password => $in{\'password'});
#if ($ldapbind->is_error()) {print "NO! username/password incorrect\n"; die "username/password incorrect: $in{'username'} -> $in{'password'}";}

また、番号の先頭に無駄に9を追加するので、 下記の行もコメントアウト。

#if ((substr($exten,0,1) ne '9') && (length($exten) > 4) ) { $exten = '9'.$exten; }

あと、このスクリプト自体が勝手に呼ばれないよう、Apacheのアクセス制限で、LAN以外からはdenyするようにしておきます。同時にディレクトリ名やファイル名も適当に変えておくといいでしょう。

このスクリプトは以下のようなURIで簡単に電話がかけられるので、他にも応用が利くかも知れません。

AsteriskC2D.pl?deskphone=[使いたい電話機のSIP番号]&toCall=[発信したい電話番号]

ASP型2chリーダーのrep2は、PCとケータイで2chの未読やお気に入り管理を共通管理できて重宝しています。そのrep2のケータイ用UIをiPhoneに最適化しようってスレ「p2をiPhoneに対応させようぜ」が当の2chのiPhone板に立っていて、非常に活発に改良が進んでいます。

現状の画面はこんな感じ。

IMG_0010 IMG_0009
お気に入りスレ一覧 レス表示

 

■試験導入

今のところ、ケータイ用ビュー(&b=k)を上書きする形でパッチが配布されているのと、まだ開発途上ということなので、ウチでは本環境をいじらずに済ませるべく、以下の手順で導入してみました。

  1. 既存インストールフォルダ(例. rep2)を、丸ごとコピーする(例. rep2i)
  2. rep2i/data/フォルダを削除し、rep2/dataからシンボリックリンクを張る(例. ln -s rep2/data rep2i/data)
  3. 最新パッチをrep2i側に上書きコピーする

これで一応、動いています。まぁ、iPhoneがあれば、わざわざ通常のケータイからアクセスすることはないとは思いますが。

■お気に入りスレ一覧へ簡単に戻れるようにする

σ(^^)は基本的にPCでお気に入りスレ一覧を管理してあり、ケータイからはそこの最新レスを読むだけなので、スレ一覧画面が基本画面となります。しかし、現状ではレス表示画面からはトップ画面にしか遷移できません。ブラウザの「戻る」だと、レスが何ページにも及んだ時に手間になります。トップ画面へはお気に入りスレ一覧から戻れるので、とりあえず、レス表示画面下のTOPボタンのリンク先をお気に入り一覧に書き換えてみました。

補足:以下、2008年9月末時点のバージョンに即して修正しました。

iphone/read_footer_k.inc.phpの75行目付近

書き換え前:

<li class="home"><a href="index.php?&b=k">TOP</a></li>

書き換え後:

<li class="home"><a href="subject_i.php?spmode=fav&sb_view=shinchaku">お気に入り一覧</a></li>

これで移動中の2ch閲覧がかなり快適になりました。電車の暇潰しに最高です(^^)v。

iPhoneとPCのデータ同期を手軽に行えるMobileMeですが、残念ながらメモに対応していません。AppStoreも毎日眺めてますが、なかなか満足のいく同期機能付きメモソフトが出てきません。

そこで、当座しのぎとして簡単なASP型メモシステムを作ってみました。単なるPHP + RDBMSを使ったテキスト保存ページなので、iPhoneが圏外の時はアクセスできませんが...

iPhone専用っぽいUI部品やCSSを使って、外観をネイティブアプリっぽく仕上げたのがポイントです。

 

トップページ

トップページ。リストで見えてるのはカテゴリ一覧です。

右上が新規作成ボタン、左上が検索ボタンです。


メモ一覧 

カテゴリを選んで、メモ一覧に遷移したところ。

この画面から新規作成を押した場合、デフォルトで当該カテゴリが選ばれてる、とかいう細かいとこまで作り込みました(^^;)。


閲覧画面

閲覧画面。

PalmやiPhoneの内蔵メモなんかだと、いきなり編集状態になるのが普通なんですが、textareaに入れてしまうとスクロールが大変、というiPhone特有の問題を考慮して、とりあえずフォームにせず全文を表示する閲覧モードを設けることにしました。

写真には映ってないですが、下の方に編集と削除ボタンがあります。実は編集ボタンを押さずとも、textarea自体を触っても編集モードに移行できます。

電話番号、URLは自動的にリンクになります。


編集画面

編集画面。

こっちがtexeareaを使ったフォームです。

閲覧画面と間違えにくいよう、背景色を微妙に変えています。

widthを微妙に調整して、閲覧画面と折り返し位置が同じになるようしてみましたが、完璧にはなりませんでした(画面だと、一番下の行は折り返し位置がズレてます)。

下の方にカテゴリ選択メニューと保存、取り消し(保存しないで戻る)ボタンがあります。

編集中にページを閉じたりSafariを終了しようとした場合にも保存を促すようにしたいなと思っています。

検索画面

検索ページ。

全文検索ができます。


PCで見たところ

PC用のページをOpera9.5で表示させたところ。


待望のPower Pack 1が登場しました。>Windows Home Server

日本語リソースは含まれなかったっぽいですが、お目当ての64bit版クライアントはバッチリ入ってました。第1四半期に登場予定だったので、春に仕事用マシンを64bit、しかもRAID-0で組んでしまってたのが、ようやくバックアップできます。いやぁ、今まで何事もなくて良かった(^^;)。

他にもパフォーマンスや省電力面の改善やリモートアクセスの向上なども含まれている様子。目に見えにくい改良が多いですが、とにかく嬉しい限りです。

さっそく導入。64bitマシンにも問題なくクライアント入りました。これから初回バックアップかけます。

リモートアクセスはなにが変わったんでしょうね?後で出先からログインしてみます。

組み込み済みハードが売られていない日本ではさっぱり話題になりませんが、個人的には非常に重宝しています。既に何度も助けられました。マシン毎にバックアップ時間帯を決められないのが不便ですが(夜中に寝室マシンが起きるとこっちまで目が覚めてしまう)、もはや手放せないソリューションです。

iPhone/iPod touchのSafariでrep2のケータイ用ページを開くと、初期倍率が小さめで文字が極小になってしまいます。

2chのiPhoneスレで、

20 :名称未設定 :2008/07/14(月) 04:18:41 (p)ID:ivqRmU3q0(7)
使う気あるならこれを。
rep2(モバイル表示用ファイル)の修正点。
menu_k.php、/lib/index_print_k.inc.php、/lib/read_header_k.inc.php、/lib/sb_header_k.inc.php
にある<head>の下に
<style type="text/css">
<!--
body { font-size:50px; }
-->
</style>

という書き込みを発見。これだと横向き状態で文字が大きすぎたり、他のCSS対応のデバイスでの表示にも影響しそう。

そこで、<style>~</style>の代わりに、iPhone/iPod touch専用のmetaタグ記述で、初期倍率を指定してみました。

<meta name="viewport" content="initial-scale=1.00">

これならiPhone/iPod touch以外のデバイスでは無視されるだけで影響もないはず。

before after
対策前 対策後

 

P.S.

ちなみに、iPhoneで画面写真を撮るには、電源ボタンを押しながらHomeボタン、でいいようです。

Asteriskは録音した留守電メッセージを音声ファイルとして添付してメールで送ることができます。試しにMobileMeアドレスに送信する設定に変更してみたんですが、iPhoneでばっちり再生できました。メールを開くと添付ファイルアイコンが出ており、それをタップすると即座に再生されます。E61だともう少し手間がかかったんですが、随分楽になりました。

ちなみにフォーマットはWAVにしてます。デカそうなイメージですが、レートが低いので、7秒で12.5KB程度です。

Softbankが提供している留守電サービス(ビジュアルボイスメール)同様、オンラインの時に受信しておいてくれるので、例えば地下鉄で移動中にヒマでケータイ開いてみたら不在着信に気付いた、なんて時、圏外でも聞くことができるので便利です。ただし、音声ファイルとしての再生なので、スピーカーから鳴ってしまうのが難点です。音楽用にイヤフォンつけてればいいんですが、そうでなければ周りに聞かれてしまうので困りますね。

EMONSTER等のGPS内蔵WindowMobile端末向けにTrackMeというアプリケーションがあります。端末内でGPSログを保存することはもちろん、リアルタイムでサーバーに位置情報を送信することもできます。このサーバー用のPHPスクリプトも上記ページで公開されており、自前のサーバーで運用することもできます。自動リロードで常に端末の現在位置をGoogleMapsで表示するモードなどもあり、サイバーです。バックエンドにMySQLを利用しており、テーブル構成などをのぞけば、色々と応用が広がりそうです。

■日本語ランゲージ定義の追加

で、そのスクリプトによるWeb画面はマルチランゲージ対応されているのですが、残念ながら日本語の設定はありません。中を覗いてみたところ、定義ルーチンが独立していて簡単に追加できそうだったのでサクっと作業してみました。下記の2ファイルを更新すれば使えるようになると思います。

一応、開発者の人に送ってみるつもりですが、自前でパッチ当てしたい人向けに貼っておきます。

index.php (818行目辺りに赤字部分を追加)

$html .= "                        <select name=\"language\">\n";
$html .= "                            <option value=\"english\""; if($language == "english") { $html .= " SELECTED"; } $html .= ">English</option>\n";
$html .= "                            <option value=\"italian\""; if($language == "italian") { $html .= " SELECTED"; } $html .= ">Italian</option>\n"; //trackmeIT
$html .= "                            <option value=\"german\""; if($language == "german") { $html .= " SELECTED"; } $html .= ">German</option>\n";
$html .= "                            <option value=\"spanish\""; if($language == "spanish") { $html .= "SELECTED"; } $html .= ">Spanish</option>\n";
$html .= "                            <option value=\"french\""; if($language == "french") { $html .= "SELECTED"; } $html .= ">French</option>\n";
$html .= "                            <option value=\"dutch\""; if($language == "dutch") { $html .= "SELECTED"; } $html .= ">Dutch</option>\n";
$html .= "                            <option value=\"japanese\""; if($language == "japanese") { $html .= "SELECTED"; } $html .= ">Japanese</option>\n";
$html .= "                        </select>$display_language_text<br>\n";
$html .= "                        <select name=\"units\">\n";
$html .= "                            <option value=\"imperial\""; if($units == "imperial") { $html .= " SELECTED"; } $html .= ">Imperial</option>\n";
$html .= "                            <option value=\"metric\""; if($units == "metric") { $html .= " SELECTED"; } $html .= ">Metric</option>\n";
$html .= "                        </select> $display_units_text<br>\n";

language.php (356行目辺りに赤字部分を追加)

(↑ 他の言語定義が並んでいる部分 Italian Language Data)
       $speed_metric_unit_balloon_text      = "km/h";
       $distance_metric_unit_balloon_text   = "chilometri";
       $height_metric_unit_balloon_text     = "metri"; 
     }
   elseif($language == "japanese")
    {
        $title_text                          = "TrackMe Display";
        $trip_button_text                    = "軌跡表示";
        $location_button_text                = "リアルタイム更新ON";
        $location_button_text_off            = "リアルタイム更新OFF";
        $filter_button_text                  = "更新";
        $filter_none_text                    = "全て表示";
        $filter_photo_comment_text           = "写真、コメント付きポイントのみ";
        $filter_photo_text                   = "写真付きポイントのみ";
        $filter_comment_text                 = "コメント付きポイントのみ";
        $filter_last_20                      = "最新20ポイントのみ";
        $filter_daterange                    = "日時範囲指定";
        $footer_text                         = "軌跡データ生成:";
        $incomplete_install_text             = "インストールが正しく終了しませんでした。ファイルinstall.php、database.sqlはまだTrackMeフォルダに存在します。これらを削除するまで地図表示は有効になりません。";
        $no_data_text                        = "DB内の1つ以上のTrackMe テーブルにデータがありませんY。Windows MobileデバイスでTrackMeアプリケーションを実行し、軌跡データを生成する必要があります。";
        $database_fail_text                  = "DBとの接続が切断され、表示が中断されました。";
        $trip_none_text                      = "なし";
        $trip_any_text                       = "全て";
        $display_options_title_text          = "表示オプション";
        $display_header_text                     = "ヘッダーを表示";
        $display_showbearing_text                = "方向矢印を表示";
        $display_crosshair_text              = "中心の十字マークを表示";
        $display_clickcenter_text            = "クリックした位置を中心にする";
        $display_overview_text               = "ミニマップを表示";
        $display_language_text               = "表示言語を選択";
        $display_units_text                  = "表示単位を選択";
        $display_button_text                 = "設定を保存"; 
        $startdate_text                                          = "開始:"; 
        $enddate_text                                            = "終了:"; 
        $trip_title                                                      = "Trip:"; 
        $filter_title                                            = "フィルタ:"; 
        $date_title                                                      = "日付:";
        $tripsummary_title                                       = "Trip 概要";
        $tripstatus_title                                        = "現在位置";
        $summary_time                                            = "トータル時間:";
        $summary_photos                                          = "写真数:";
        $summary_comments                                        = "コメント数:";
        // Public Display Information
        $user_button_text                    = "ユーザ切替";
        $showconfig_button_text                          = "設定";
        $showconfig_button_text_off                      = "設定";
        // Private Display Information
        $page_private                                        = "ページの表示にはユーザ名とパスワードのよる認証が必要です。";//trackmeIT
        $trip_data                                                   = "ユーザ名:"; //trackmeIT
        $login_text                          = "ユーザ名";
        $password_text                       = "パスワード";
        $login_button_text                   = "ログイン"; 

        // Balloon Fields Information
        $user_balloon_text                   = "ユーザ";
        $trip_balloon_text                   = "Trip";
        $time_balloon_text                   = "時間";
        $speed_balloon_text                  = "速度";
        $altitude_balloon_text               = "高度";
        $total_time_balloon_text             = "累積時間";
        $avg_speed_balloon_text              = "平均速度";
        $total_distance_balloon_text         = "移動距離";
        $point_balloon_text                  = "ポイント";
        $comment_balloon_text                = "コメント";
        $speed_imperial_unit_balloon_text    = "mph";
        $distance_imperial_unit_balloon_text = "miles";
        $height_imperial_unit_balloon_text   = "feet";
        $speed_metric_unit_balloon_text      = "km/h";
        $distance_metric_unit_balloon_text   = "km";
        $height_metric_unit_balloon_text     = "m";
    }
    else
    {

(↓ 以降、デフォルトの英語表記のデータ Defaults English Data)

 

■ユーザ選択がリセットするバグの修正

リアルタイム表示のON/OFFをすると、ユーザ選択がリセットされてしま現象が出たので、場当たり的対応してみました。

index.php (305行目辺りの赤字部分を追加)

$html .= "                      function livetrack()\n";
$html .= "                      {\n";
$html .= "                              if(document.getElementById(\"last_location\").value == \"$location_button_text\")\n";
$html .= "                              {\n";
$html .= "                                      location=\"index.php?ID=$ID&last_location=yes\";\n";
//$html .= "                                            document.getElementById(\"last_location\").value = \"$location_button_text_off\";\n";
$html .= "                              }\n";
$html .= "                              else\n";
$html .= "                              {\n";
$html .= "                                      location=\"index.php?ID=$ID\";\n";
//$html .= "                                            document.getElementById(\"last_location\").value = \"$location_button_text\";\n";
$html .= "                              }\n";
$html .= "                      }\n";

σ(^^)は2chの閲覧にASP型ビューワーのrep2を愛用しています。複数マシンやケータイ閲覧でもお気入りスレや未読の管理が一元化できるのがポイントです。

で、そのケータイ閲覧画面で1つ不満が。スレ表示画面のフッターにトップへ戻るショートカットしかなく、閲覧の起点となる「お気に入りスレの新着」に戻れません。スレ表示が1画面の時にはブラウザバックで戻ればいいんですが、何ページも遷移した場合に不便です。そこで、カスタマイズを企てました。ソースを追って該当箇所を見つけるのに苦労したので覚え書きです。

該当ファイルは、インストールディレクトリ/conf/conf.inc.phpでした。このファイルの348行目あたりに赤字部分を追加しました。

$_conf['k_to_index_ht'] = <<<EOP
<a {$_conf['accesskey']}="0" href="subject.php?spmode=fav&sb_view=shinchaku&b=k">0.お気に新着一覧</a><br />
<a href="index.php{$_conf['k_at_q']}">TOP</a>
EOP;

accesskeyの0は元々Topに割り当ててあったんですが、個人的な使用頻度から追加部分に割り当て直しています。

ただ、rep2は新着一覧画面を呼ぶ度に、各スレッドの更新チェックをするので、読み込みに時間がかかるのが難点です。スレッド表示が単一ページで足りた場合は、ブラウザバックで戻る方が合理的でしょう。

少し前のエントリで実現して、TeraStation上のDivX動画ライブラリを、Apache経由で公開する実験ですが、実家から検証してみました。

結論から言ってラクショーでした。光->光なら問題ありませんね。今までのVPN+SMBであれこれ苦労してたのがおポンチでした。SMBは応答速度が低いと極端にパフォーマンスが落ちるプロトコルであることを最近知りました。

■ADSL + 無線LAN + PS3でも割とイケる

あと、妹のアパートに貸し出してあるPS3/40GB(たまに帰省した時に使う様に折半で購入)でも試しました。妹宅はADSLでしかもLANは11gの無線ですが、予想外に健闘。1ファイル最後まで完走させたワケじゃないですが、試した限りでは1280x720pのファイルでも大丈夫そうでした。ただ逆に720x400でも途切れまくるのもあったり。ウチは品質保持エンコだから、瞬間レートが跳ね上がるようなのはツライのかも知れません。ただ、PS3のブラウザからファイルを選んですぐ再生できるし、BASIC認証のパスワードもちゃんと保存できるので、この方式用のVOD端末としてはかなり重宝すると思います。これでレジューム再生ができればいうことないんですけどね。

■PC上からもストリーミング再生したい(1) Opera + VLC編

こうなってくると、PS3だけでなくPCブラウザ上からもストリーミング再生したくなります。で、色々試行錯誤した結果、Opera + VLCという方法を発見しました。VLCは「URLで開く」メニューがある動画プレーヤーのうちで、唯一マトモに再生できました。DivXデコーダーも内蔵しているので、ネットカフェなどで使うにも便利。パスワード保存はできませんが、BASIC認証には対応しています。

で、Operaの方でMIMEタイプがvideo/x-msvideoなストリームに対して、VLCを使うよう設定します。この時、唯一Operaだけが、URLのまま渡すことが可能なようで、IEやFireFoxだと、一度ローカルに保存してからVLCで開く、という動作にしかなりませんでした。

ともあれ、Opera + VLCで正しく設定すれば、Operaで一覧を表示して、目的の動画をクリックしたら自動でVLCが起動して(IDとパスワードを改めて入力しなきゃいけないけど)ストリーミング再生開始、という流れを実現できました。

ただ、VLCにはタイムスライダーがないので、途中を飛ばして観られないのが難点です。あと、(1)、(2)共通の問題ですが、2GBを超えるファイルは扱えないようです。まぁ、そんなサイズをストリーミングすんな、って話ですな。

■PC上からもストリーミング再生したい(2) DivX Web Player編

DivXのストリーミングといえば、普通にDivX Web Playerプラグインがあります。実は当然これも最初に試しました。Apache側で.aviの拡張子に対して、video/divxというMIMEタイプを定義しておけば、各ブラウザでDivX Web Playerが起動するようになります。ただ、これだけではダメなようで、当初断念して、(1)の方法に流れていました。

で、改めて調べたところ、DivX Web Playerによるストリーミング再生には、単にAタグによるリンクではなく、OBJECTタグによるページ上への埋め込みが必要なようでした。具体的には、

<object classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616" codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab">
    <param name="src" value="http://(ユーザ名):(パスワード)@(ファイルのパス).avi" />
    <param name="bannerEnabled" value="false" />
    <param name="minVersion" value="1.0.0" />
<embed type="video/divx" src="http://(ユーザ名):(パスワード)@(ファイルのパス).avi" width="640" height="372" pluginspage="http://go.divx.com/plugin/download/" bannerEnabled="false">
</embed>
</object>

って感じ。DivX LABSのDivX Web Player Code Generatorでサンプルソースを生成してもらえます。動画の縦ピクセル数に20を足すのがポイントのようです(コントローラーの分)。DivX Web Player自体はBASIC認証ダイアログを持ってナサゲなので、パスの部分にユーザ名とパスワードを埋め込んでみました。

で、Aタグしか生成してくれないApacheのインデックスリストではダメだということがわかりました。ということは本来はフォルダ中のファイル名一覧を取得して、上記HTMLを個別生成するPHPスクリプトでも自作しなければ、ということになるんですが、そこまでは気力がわかなかったので、手抜き対処。具体的には、ファイルインデックス画面のフッター部分にHTMLを挿入するApacheのReadmeNameディレクティブを使って極簡単なPHPによるHTMLフォームをインクルードし、ブラウザ上で目的動画ファイルのリンクをコピペして再生ページに投げます。で、再生ページもやはりPHPで受け取った動画のURIを使って、上記のDivX Web Player用HTMLを生成するだけです。

画面例

動画のサイズも取得する術がないので、とりあえず手動で指定しています。まさに超手抜き(^^;)。

補足:ffmpeg-phpを使って、phpから動画ファイルのサイズを取得できました。

更に補足:フォームを使わずとも、JavaScriptを使って実現できました。>URL書き換え

でもまぁ、自分と家族などごく身近な人間しか使わないのでこれでOK。基本はダウンロードかPS3利用推奨ってことで。

とりあえず、上記の手順でブラウザ上のストリーミング再生ができるようになりました。本来は.aviではなく.divxでないとダメっぽいですが、一応観れてます。DivX Web Player自体、タイムスライダーもあるし、どこまでDLできてるかバーでわかるし、ブラウザから切り離したり、全画面再生もできるしと、VLCよりは使い勝手が良いです。

 前エントリでTeraStationにたまってるDivXファイルを、なんとかHTMLリンク一覧としてHTTP共有できると、DLNAとかより便利かも、ということに気付いたので、早速チャレンジしてみました。

■CIFSでマウントする

TeraStationをLinuxマシンでマウントするには、とりあえずSMB、FTP、ちょっとゴニョってNFSという選択肢があるわけですが、とりあえず手軽そうなSMBを試してみたところできない。調べてみると、CentOS5ではsmbfsやsmbmountの代わりにCIFSというあたらしいWindowsファイル共有プロトコルを使えば良いとわかりました。

mount -t cifs -o user=<ユーザ名>,password=<パスワード> //<TeraStation名/<共有名> /mnt/terastation/

って感じでOKでした。

あとは、このフォルダをApacheのドキュメントルート下に適当にシンボリックリンクして、BASIC認証をかけます。

ただ、これだけだと、リストは取得できるんですが、動画ファイルにアクセスするとエラーになってしまいます。ターミナルからcpなどでコピーはできるんですが、Apacheを経由するとダメ。

これは

EnableSendfile Off

で解決。パフォーマンス向上のための機能のようなので、当該ディレクトリのディレクティブ内に設定するのが良いでしょう。

■Apacheのインデックスリストをカスタマイズして利用

さて、これでアドレスでディレクトリ名を指定すれば、(そのフォルダにindex.htmlが無いので)Apacheが生成するインデックスリスト(ファイル一覧画面)が表示され、PS3からそれをクリックして再生できるのが確認できました。しかし2バイト文字が文字化けしています。ブラウザの設定でUTF-8にすれば正常に表示されるんですが、ページ遷移するたびにするのは面倒だし、それこそ実家向けには難しすぎます。なんとかインデックスリストの文字コードを指定する方法を模索して、

IndexOptions Charset=UTF-8

でいけることを突き止めました。これも当該ディレクトリ内だけで良いんでしょうけど、特に他で弊害もでなさそうだったので、グローバルに指定しておきました。これで、きちんと日本語ファイル名で表示でき、先の実験でダメだったPS3からの再生/DLもなぜか出来てしまいました。

ついでに、インデックスリストをカスタマイズするオプションを色々見つけたので、最終更新日付を非表示にする、.AVIファイルのdescriptionに「DivX/etc Video Files」と表示する、Thumb.dbを隠す、などカスタマイズ。外部スタイルシートも指定できました。

ざっとこんな感じ。

IndexOptions Charset=UTF-8
AddDescription "DivX/etc Video File" .avi

<Directory /xxxxx/xxxxx/video/>
  Options FollowSymLinks Indexes IncludesNOEXEC
  AllowOverride None
  IndexOptions SuppressLastModified SuppressHTMLPreamble HTMLTable
  IndexIgnore *.db *~
  IndexStyleSheet "video_list.css"
  EnableSendfile Off
</Directory>

PS3はファームウェア2.0から動画ファイルをダウンロードしながら再生する「プログレッシブダウンロード」に対応しました。基本的に、PlayStationStoreのMPEG4ファイル用と思ってたんですが、ふと思い立ってDivXなAVIファイルで実験。

できました!

適当なHTMLにリンク書いておけば、内蔵ブラウザでリンクを選択するだけで再生が始まります(PlayStationStoreのように再生するかどうかのボタンは出ない)。ローカルに保存することも可能。ただし、2バイト文字のファイル名はダメっぽいです。

PS3/40GBを購入した実家向けに、手軽に動画を見せる/渡す方法として地味に重宝しそうな予感。適当なポータル作っておいて、今度帰省した時にブックマーク登録してこよっと。

ウチのDivXファイル群はTeraStation上に保存してあるので、FTPかSMBでサーバーからマウントして、適当な半角英数ファイル名を生成するゲートウェイスクリプトを書いたら、帰省中の動画消化にも良いんじゃないかとか。

 MovableType4化でコメント認証がOpenIDに対応したはず、ということで、早速先日対応したYahoo! JAPANでIDを取得して動作確認してみたもののダメ。

 どうもYahoo!のOpenIDがセキュリティレベルの高いOpenID 2.0にしか対応していないせいっぽい。PlaceEngineのサイトでもYahoo!のOpenIDははじかれるみたいだし、現状では(日本のサイトでは特に)あまり使い道なさそうですね。

 MovableTypeのOpenIDモジュールを差し替えるワザもあるっぽいけど、そもそもOpenID使いが日本ではまだあんまりいなさそうなので、まだいっか、という気も。

 といあえず、↓のサインインボタンを押した時のデフォルトがOpenIDではなくTypeKeyにする方法はないものか。

 前回に続いて、MT3→MT4のテンプレート更新の覚え書きです。今回は、コメントフォーム部分。ウチではフォームのテキスト欄が表示されず、見出しだけになる現象が発生しました。

 コメントに関係しそうなのは、テンプレートモジュールでは、「コメント」、「コメント入力フォーム」、「コメント詳細」。システムテンプレートでは「コメントプレビュー」、「コメント完了」の計5点のようです。MT3時代に作成したブログでは、テンプレートモジュールは3点とも存在せず、システムテンプレートはアリ、という状態でした。

 ついでにトラックバックもほぼ同様の作業なので一緒に処理してしまいます。

■テンプレートモジュールを作成

 この3点は「エントリ・アーカイブ」(MT4では「ブログ記事」)でインクルードされるモジュールです。「コメント」が他の2点をインクルードするようです。おそらくフォームが正しく表示されないのはこの部分の影響でしょう。元々この部分はたいしていじっていなかったはずなので、新モジュールをそっくり使ってしまいます。トラックバック関係は「トラックバック」のみのようです。

 計4点、新規に作っておいたテスト用のブログからコピペで作成します。

■新コメントモジュール利用する設定

 MTデフォルトではコメント欄は個別の「エントリー・アーカイブ」で使われているだけだと思うので、そこだけ修正すれば良いはず。「アーカイブ・テンプレート」→「エントリー・アーカイブ」テンプレート(名称は作成時期で多少違うと思います。MT2の頃だと英語だったり)を開き、コメントは、<MTIfCommentsAcrive>~</MTIfCommentsAcrive>、トラックバックは、<MTIfPingAcrive>~<MTIfPingAcrive>の部分をそれぞれ下記のように置き換えて下さい。

<$MTInclude module="トラックバック"$>
<$MTInclude module="コメント"$>

 更に、<body>タグに以下の属性を追加します。前回の検索フォーム対策をしてある場合は、「ヘッダー」テンプレートの中にあると思います。また、元々class属性がある場合は、残して置いた方が良いかも知れません。でないとスタイルシートが正しく適用されなくなります。

<body class="<MTIf name="body_class"><$MTGetVar name="body_class"$> </MTIf><$MTGetVar name="page_layout" default="layout-wtt"$>"<MTIf name="body_onload"> onload="<$MTGetVar name="body_onload"$>"</MTIf>>

 コメント、トラックバック部分がモジュールに追い出せたので、直接コードを書いてあった元のテンプレートに比べると、かなりスッキリしますね。もともと細かくいじる部分ではないので合理的です。

■JavaScriptテンプレートを作成

 さて、これで試しに適当なエントリを再構築してみると、無事コメント欄が正しく表示されるようになると思います。ただし、TypeKeyなどの認証サービスを利用するリンクが表示されません。これはJavaScriptファイルであるmt.jsが存在しないためのようです。

 「インデックステンプレート」を開くと、古いmt-site.jsというファイルに紐付いた「JavaScript」テンプレートがあるので、削除するなりして無効化し、やはりこれも新ブログからコピペします。「テンプレートの種類」は「JavaScript(javascript)」を選び、ファイル名は元あったmt-site.jsなど、現在のヘッダ部分で記述しているままを指定します。

(そういえば、この「テンプレートの種類」という項目、他のインデックステンプレートでも再設定しておく方が無難かも知れません。)

 以上で、コメント欄は正しく表示、動作するようになったはずです。MT4では最初、コメント欄は隠れており、「サインイン」か「匿名でコメント」というリンクをクリックするとそれに応じた動作をする、という仕様のようです。

■システムテンプレートの更新

 さて後は、「確認」ボタンを押した時のプレビュー画面を定義する「コメントプレビュー」(旧名は「Comment Preview Template」)と、コメント送信後の完了画面を定義する「コメント完了」の2点のシステムテンプレートを、やはり新ブログからコピペします。前者は旧名のテンプレートをクリックして中身を書き換えたら名称も自動的に更新されました。

 以上で、ブログの外観はほとんど変わらず、コメント周りが正しく機能するようになると思います。動作チェックの後、残りの個別エントリを全て再構築して作業完了です。

 MovableType3.6のデータを4.1にコンバートしたら、一部機能が正常に機能しなくなりました。 大きくは検索でエラーが出る点とコメントフォームが正しく表示されない点です。

 あれこれいじってなんとか動くようになったんですが、ウチでホストしている他のブロガーの為に、外観、テンプレートを極力書き換えずに機能させる手順をまとめてみました。

 ドキュメント等を見ずに我流で編み出した方法なので、もっとスマートなやり方があるのかも知れません。というか従来のデザインにあまり名残が無いのであれば、いっそテンプレートをリセットしてMT4のものをベースに再構築した方が、後々シアワセになれるかも知れません。モジュール化、サイドバーへのウィジェット配置機能などせっかくのコンセプトが活かせるからです。実際、このブログは練習も兼ねてそうしてみましたが、かなり見通しがよくなった気がします。

■なぜ検索でエラーが出るのか?

 DBコンバートしただけの状態では「 検索結果の作成に失敗しました。」と出てしまうワケですが、この原因は、「システムテンプレート」→「検索結果」テンプレートの中で呼んでる(インクルードしている)「ヘッダー」、「ブログ記事の概要」、「フッター」という3つのテンプレートモジュールが存在しないからのようです。この3つを用意してやれば正常に機能するというワケです。

 「検索結果」テンプレートを開いた画面で、右サイドバーの「インクルードモジュール」という見出しの下に、各モジュールを新規作成するリンクがあるので、そこから作れば簡単です。

■「ヘッダー」

 文字通り<html><head>~</head>辺りのテンプレートです。MT4の標準テンプレートを見ると、<body>以降も共通となる部分は若干含んでいるようです。「メインページ」テンプレートからごっそりコピーするのが簡単でしょう。

 MT3の標準的な2カラムレイアウトのテンプレートをベースにしている場合、

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

から、<MTEntries>で記事データが始まる直前の、

<div id="pagebody">
<div id="pagebody-inner" class="pkg">
<div id="alpha">
<div id="alpha-inner" class="pkg">

あたりまででよさそうです。

■「フッター」

 同様にフッターも「メインページ」から最後の部分をコピペします。サイドバー部分もメインページ同様に表示されるようにするには、</MTEntries>直後からざくっと行きましょう。

■「ブログ記事の概要」(→別名で作成)

 さて、問題は検索に該当した記事の表示フォーマットを既定する部分です。一番簡単には、「メインページ」テンプレートから上記の「ヘッダー」、「フッター」にもってった部分の残り、つまり<MTEntries>~</MTEntries>の中身を流用する手がありますが、これだと本文が全て表示されてしまうので、ヒット数が増えた時に一覧性がよろしくありません(MT4標準ではそうなるようです)。

 そこでこの際、シンプルに日付入りのタイトルのリストになるようにしましょう、

<li class="search-list-item"><$MTEntryDate format="%Y.%m.%d"$>: <a href="<$MTEntryLink$>"><$MTEntryTitle$></a></li>

です。

 「ブログ記事の概要」というテンプレート名はMT4のテンプレート群の中では重要なものなので、中身を大きく改変したものを重複する名前で作っておくと、将来MT4テンプレートを一括導入した時に問題になりそうなので、ここでは「タイトル一覧項目」という名前で作成しておきます。

■「検索結果」テンプレートの調整

 上記モジュールを呼び出すシステムテンプレート「検索結果」を調整します。元々

<$MTInclude module="ブログ記事の概要" hide_counts="1"$>

と書かれた行があるので、これのモジュール名を変えつつ、<ul>タグを追加します。下記のように置き換えて下さい。

<div class="search-content">
       <ul class="search-list">
              <$MTInclude module="タイトル一覧項目" hide_counts="1"$>
        </ul>
</div>

 ■スタイルシートの調整

 例えば、リストの文字が小さいな、という気がしたら、「インデックステンプレート」→「スタイルシート」テンプレートに

.search-list-item a {
   font-size:medium;
   margin-left:3px;
}

 などと調整しましょう。

 既にMT3環境がなく、検索結果画面のレイアウトが調べられないので、適当にでっちあげてしまいましたが、以上でとりあえず動くようにはもってけると思います。

 次回は、コメントフォームを動かすための最低ステップをまとめてみたいと思います。

 MovableType4.1ではデフォルトで、ファイル名が「hoge-fuga.html」とハイフンで生成されます。今までは「hoge_fuga.html」のようにアンダースコア区切りだったので、このまま再構築してしまうと、過去のページのURLが変わってしまい、外部サイトからリンクされている場合などに不都合が生じます。

 通常、この設定はアーカイブテンプレートで「ブログ記事」の「アーカイブマッピング」の設定をいじることで変更できるのですが、なぜか「yyyy/mm/entry_basename.html」を選んで「保存」を押すとエラー(Bad Request)になってしまいます。ブラウザを変えてもダメ。

 このままではいつまでも全再構築ができないので、MySQLで直接データベースを書き換えるという暴挙に出ました。おそらく、テンプレートを初期化した場合などにも再度設定が必要になると思われるので覚え書きしておきます。

 まず、MT管理画面で該当の設定画面を呼び出します。個別記事の場合、MT4では「ブログ記事」というアーカイブテンプレートが相当するようです。そして、この時のURIを見て、 テンプレートのID番号を探ります。

https://.../cgi-bin/mt/mt.cgi?__mode=view&_type=template&id=265&blog_id=7

 で、MySQLのコマンドラインツールで、

update mt_templatemap set templatemap_file_template='%y/%m/%f' where templatemap_template_id='265';

というSQLを発行します。 「%y/%m/%f」というのは、管理画面のソースから読み取りました。

 ターミナルでログインできるサーバーか、DB編集ユーティリティの提供されているレンタルサーバー等でしか使えない技ですが、ご参考までに。

 Webサーバーを新マシンに移行するついでに、MovableType4のオープンソース版に移行することにしました。そして、同時にかねてからの課題だったUTF-8化に挑戦(BlogWriteIIから投稿した時に「~」が化けなくなるように)。

 様々なページを参考にしましたが、それぞれ微妙に事情が違っていて苦労しました。基本的には、

  • MTはEUC-JPで構築していた
  • MySQLのテーブルはlatin1だった
  • バックエンドDBはMySQL

という状況です。

 結果としては効いたのは、迷惑コメントの消去です。これでMySQLのダンプサイズが劇的に減っただけでなく、奇妙な文字化けによるインポートエラーを回避することができました。MTの管理画面からは見えにくいですが、迷惑コメントタブの方に万単位に溜まってたのでしたorz。

 MT管理画面で一通り不要なデータを削除した後、ターミナルから、

mysqldump --default-character-set=ujis -u user -p dbname > mtdb.sql

としました(もしかすると--default-character-set=binaryだったかも)。赤字部分は環境に応じて修正すべし。次に、これをUTF-8にコンバートし、ファイル内部のlatin1という文字列をutf8に置換します。

nkf -w mtdb.sql > mtdb_utf.sql
perl -pi -e 's/latin1/utf8/' mtdb_utf.mysql

 ついでに、今までの化けた「~」を修正するため、emacsで、波ダッシュを「~」に置換しました。これで下準備は完了です。

 次に、新サーバー側の準備として、/etc/my.cnfの、[mysqld] 、[mysql]、[mysqldump]の項に、

default-character-set=utf8

を追記。[mysqld]には更に、

skip-character-set-client-handshake

も追記。この辺はどれが必須かは不明です。 これで、MySQLの作るDBのデフォルト文字コードがUTFになるので、新しくMovableType用DBを作成し、先ほどのダンプを流し込みます。

mysqladmin create dbname
mysql dbname < mtdb_utf.sql

 ここの流し込みで散々エラーに悩まされましたが、迷惑コメントのデータを一層し、nkfでUTF-8に変換したところ上手くいきました(lvではダメでした)。

 あとは、新規インストールしたmT4のmt-config.cgiでPublishCharsetをutf-8にし、mt.cgiにアクセスしたら自動的にDBの変換が実行され、管理画面で文字化けしてなければOKです。再構築すればUTF-8でページが生成されるはずです。

meta (HTMLタグ リファレンス)

 iPod touchのSafariでは、携帯電話向けに作った横幅の狭いページもデフォルトではやたら縮小されて表示されてしまいます。せっかくドットバイドットで表示できる画像を用意してもわざわざ小さく縮小表示してくれやがります。bodyタグやpタグにwidthとか指定してみてもダメ。そこでググってみると、上記のリファレンスページにmetaタグでの指定方法が載っていました。

<meta name="viewport" content="width=300">

のように記述しておけば良いことが判明。

<meta name="viewport" content="initial-scale=0.75">

のようにズーム率で指定することもできるようですが、どっちを使うべきかは不明。とりあえず前者にしときます。

 現状ではPCのブラウザでは無視されるっぽいので、iPod touchでアクセスする可能性のあるページに気軽に埋め込んでおけそうです。

 他にも、最小倍率、最大倍率、ピンチ禁止などができるようです。

 日経Linuxの2008/2月号の特集を見ながら、SpamAssasinを導入する経過で、MeCabという形態素解析エンジンを利用するCPANモジュールText::MeCabを入れる段でつまづきました。makeやmake testが通らない。どうも64bit環境であることが問題っぽい。

 以下に解決法を書いておきます。

cpan -fi Text::MeCab

をしてエラーになった後で、/root/.cpan/build/Text-MeCab-0.20001に移動します。そこにあるMakefile.PLを編集し、

my %INFO = (
    ABSTRACT     => 'Alternative Interface To libmecab',
    AUTHOR       => 'Daisuke Maki <daisuke@endeworks.jp>',
    CCFLAGS      => $result->{cflags},
    DEFINE       => join( " ", @define ),
    DISTNAME     => 'Text-MeCab',
    INSTALLDIRS  => 'site',
    LIBS         => `mecab-config --libs`,
    NAME         => 'Text::MeCab',
    OBJECT       => '$(O_FILES)',
    PREREQ_PM    => {
    LD           => `mecab-config --cxx`,
    INC          => `mecab-config --cflags`,

てな感じで書き換えます。下2行は丸ごと追加です。後半の括りはアポストロフィではない点に注意。/usr/bin/mecab-configコマンドをパラメーター付きで実行して、その結果を渡してる訳ですね。

 一応これでmakeもmake testも通って、無事make installした訳ですが、その前に以下も試してますので、一応書いておきます。もし上記だけでダメならお試し下さい。

 mecab-0.96とmecab-ipadic-2.7.0-2007080をコンパイルする時に、64bit環境であることを明示します。

LDFLAGS='-m64'
CFLAGS='-m64'
CPPFLAGS='-m64'
CXXFLAGS='-m64'
export LDFLAGS CFLAGS CPPFLAGS CXXFLAGS

で、./configureは元記事ではファイルパスを細かく指定してたのを、シンプルに

./configure --with-charset=utf8  (mecabの時)

./configure --with-mecab-config=/usr/bin/mecab-config --with-charset=utf8 (mecab-ipadicの時)

だけにしてみました。

 ググっていくつものページを参考にしたんですが、もう色々見過ぎてとてもまとめられないので、個別リンクはご勘弁下さいませ。それぞれを執筆された方、本当にありがとうございました。

追記:

 んが、ここにsrpmが揃ってました。こっちをリビルドすれば良かったかも...

 ML115を購入する時に、BTOでLights-Out 100というリモートマネジメントカードをつけました。これは、内蔵NICとは別のLANポートから、ハードウェアを監視し、万一OSがフリーズしても別ポートからログインしてリセットや電源断を行ったりできるものです。また、Virtual KVMというVNCベースの技術で、遠隔からコンソール(ターミナルではない)を利用できる機能も搭載しています。

 例えば、外部からのログインを一切受け付けなくなった遠隔地のマシンに関しても、直接モニタ出力をのぞくことで、カーネルパニックを起こしているのか等の診断ができる訳です。実際に、実家に帰省中にサーバーがとまって、わざわざリセットボタン押しに横浜までトンボ帰りしたことがあるσ(^^)には非常に有り難い機能です。前々からDELLやHPのサーバー機には搭載されていたのですが、激安のML115でも選択可能ということで、今回のサーバーリプレースの目玉でありました(ちなみに単体の外付け機器だと\10万コース。Lights-out100は2.5万位)。

 さて、このVirtual KVMですが、なぜウチの環境ではJavaがエラー吐いて動きませんでした。OperaでもIEでもFireFoxでもNG。「java.lang.NoClassDefFoundError: com/serverengines/nativeinterface/NativeInterface」となります。ググってもヒットしないし、あれだけ勢いのある2chのML115スレでもLights-out 100の話題は全くでないので聞いてもダメそう。

 マニュアルにはJava 1.4.2以降と書かれてますが、どうせJREのバージョンによる互換性の無さが原因だろうと、1.6環境に1.4.2を追加導入してみてもダメ。どうも、ブラウザが呼び出すJavaアップレット用のVMは無条件に最新版が使われてしまうようで、JavaコンパネでもIEの詳細設定画面でも1.6.0しか表示されません。

 で、結局、1.6系をすべてアンインストールして、1.5系以下のみの状態にすることで無事起動できました。もしかしたら1.6系を保持したまま1.5系を使わせる手段もあるのかも知れませんが、ざっとググった限りでは見つかりませんでした。特にJava依存のサービスと普段使ってるわけでもないので、当面は1.5系にしてアップデートをかけない運用にしてみようと思います。

2007.10.24追記: どうも1.5.0_11(=JRE 5.0 Update 11)以下でないとダメなようです。

 最近のタグ書式ではJREのバージョンを指定したりもできるようですが、Light-outが出力するHTMLではappletタグ(廃止予定の非推奨タグ)を使っているところからして、やや古い実装のようですね。

 ともあれ、なんとか動作までこぎつけたので記念写真。Vista機からXP機にリモートデスクトップ接続をし、XP機のIEからVirtual KVM接続でML115を表示し、Ml115のDomain0のX上から仮想マシンマネージャー経由でDomainUのログインプロンプトを表示したものですw。

lights-out100 動作の様子

 Xen上のCentOS5サーバーに環境を移行中です。

 実はVineやGentooでは使っていたpoptopが、なぜかCentOS4ではずっと使えずにいて、PacketiXなどで代用していました。が、ディストリをバージョンアップした機会に再挑戦。

 結論から言えば、随分簡単にできました。以前は、kernelにMPPEパッチ入れたりだのが一苦労だったんですが、今のkernelはそういうの不要みたいですね。

 CentOS5でも使える、RHEL用パッケージは、poptop公式のyumレポジトリにありました。ちゃんとx86_64版もあります。ppp-2.4.4は多分最初から入っているので、pptpd-1.3.4-1.rhel5.1.x86_64(32bitの人はi386).rpmだけとってきてrpm -ivhすればOKです。

 あとは普通に、/etc/pptpd.confや/etc/ppp/options.pptpdなどを編集すればOKです(設定例はあちこちに書かれているので割愛)。

 自分が「CentOS5 pptpd」でググってみた時点ではあまり情報がなかったので、これから入れる誰かの参考にメモっと。

 仕事帰りに何ヶ月ぶりかの秋葉原に立ち寄ってみました。で、その勢いで先週出たばかりのAthlon X2 BE-2400を購入。ML115のAthlon 64/3500+と換装してみました。

 当初、LinuxでメールやWebなどの対外サーバーにつかう予定だったんですが、せっかくXenを入れたので欲がでてWindows Media Serverを入れてみたりしだしたので、デュアルコアにしてみると良いかなと。また、ついてきたAthlon 64/3500+はOrleansコアなので1.35V駆動でTDPが62W。対してBE-2400は1.25Vで45Wとデュアルコアになってるのに消費電力、発熱面ではむしろ有利になってるので、借りにパワーをもてあましたとしてもメリットはあるかなと。

 ML115での実績はBE-2350までで、まだ2400までは情報がなかったんですが、人柱になってみました。

 で、結果はイマイチ。動くことは動いてるんですが、CPUIDが認識されずunknownになり、倍率が11.5倍(2,300MHz)にならなければいけないところ11倍(2,200MHz)で動いちゃってます。手動指定の選択肢でも11倍までしか出てこない。BIOS画面上ではMaximux 11.5という表示も見えるので、倍率自体は認識してるが、対応する倍率が11x止まりってことですかね?1つ下で\2,000位安いBE-2350が2,100MHz駆動なので、一応損はしてないんですが...

 まぁ、BIOS更新で対応すると期待しましょう。

 先日導入したWindows Home Server(以下WHS)ですが、とりあえずXenでも普通に動いています。パフォーマンスとかは測ってないですが、XenはCPU効率は高いですが、ネットワーク周りがまだ弱いみたいなので、読み書き速度とかはあんまり期待できないかも知れないですね。

■物理ディスクを追加

 500GBのHDDも無事認識させられました。Domain0(ホストOS)上でパーティションを切って、DomainUの定義ファイルで、

disk = ['file:/var/lib/xen/images/guest,hda,w','phy:/dev/sdb2,hdb,r']

としたら、Windowsから認識してくれました(/dev/sdb2の部分は環境にあわせて適宜修正してください)。fdiskでパーティション区切る時に念のためタイプをNTFSにしておきましたが意味があったかどうかは定かではありません。Domain0上ではフォーマットはしませんでした。

■集中管理、バックアップ

 どんな感じで動作するのか簡単に説明してみます。

 まずクライアント1台1台に、付属のHome Server Connectorというツールをインストールします(CD-ROMでついてますし、初期状態で共有フォルダにも置かれています)。そうするとクライアント側ではタスクトレイにアイコンが常駐し、またサーバーの管理画面にマシン名が現れます。これでWHS側でマシンの管理ができるようになります。例えば、ファイアウォールがオフになってたりウィルス検知ソフトが導入されていないマシンがあると警告が表示されます。これはクライアント側のタスクトレイアイコンにも通知されます(他のマシンに関する警告も全マシンのトレイアイコンで報知される模様)。

 フルバックアップはこのまま放置しておけば始まるようです。デフォルトでは0:00時開始。クライアントがスタンバイ/休止状態になっていても自動で起動するようです。これはWOLではなく、クライアント側のタスクスケジューラーと使ってるぽいです。一度に1台のバックアップしかとれないので、各マシンが起床するタイミングをどうやって制御しているのかは謎です。このまま何日か放置しておけば、各マシン間で適当にシフトが組まれるんでしょうかね?

 デフォルトでは日ごと、週ごと、月ごとのスナップショットを3パターンずつ保持してくれます。それらの中から特定のファイルを取り出すことのできるようです。また手動で開始した場合は名前をつけて別保存(上書きしない)することもできます。

 バックアップの除外設定はフォルダ単位のみです。.MPGを除外とかはできません。

 圧縮効率ですが、前にも書いたように、別システム間でも重複するシステムファイルなどは上手く排除して記録する仕組みのようで、1台分のバックアップがどれだけ占有しているかを知る術はありません。ただ印象としては思ったより縮むな、という感じ。逆に時間は結構かかります。初回はデスクトップ1台に半日かかりました。以後の差分はそんなにはかからないはずですが、ノートPCも初回だけは有線でつないでバックアップした方がよいでしょうね。

 集中管理画面(Windows Home Server Console)はタスクトレイやスタートメニューから呼び出せます。仕組み的にはリモートデスクトップ接続してるみたいですが、基本的にデスクトップ画面はみえず、簡単な管理インターフェイスシェル(往年のMacOSを知る人には、AtEaseとでも言えばわかるかw)が映ります。そこからバックアップの設定、開始、ユーザの追加、ディスク使用量のチェックなど簡単な設定ができます。

 このまま平穏無事に動けばという条件付きですが、バックアップソフトの存在感が希薄なのは良いです。タスクトレイとその吹き出しでしか意識することはありません。バックアップ先の外付けディスクをいちいちつないだりという手間もないですしね。逆にバックアップ中なのに気付かずに電源落としたりしないかなとも思いますが、基本的には夜中に勝手に起動してやっておいてくれるコンセプトなんでしょう。なので負荷が問題になる可能性も低いかな。寝室のマシンとかだと夜中に動き出してびっくりすることもあるかも知れません。ちなみにノートPCはACアダプタがつながっていないとバックアップは実行されませんので、朝持ってでかけようとしたら電池が切れてた、なんてことはないでしょう。逆にいえば、夜はちゃんと電源につないでおかないとバックアップされないので注意が必要です。

■ファイル共有、公開

 LAN共有は特に苦労することもないでしょう。普通にマイネットワークにあらわれます。共有は1つだけで、少なくとも管理UIからは共有を追加したりはできなそうです。Photos、Videos、Music、Software、Publicといった公開フォルダと、Users下にプライベートなユーザ毎のフォルダがあります。市販のNASに比べてもかなりシンプルな作りです。ユーザもグループ定義とかはできなそうなので、もう少し凝ったことがやりたい人はNASの方が良いかも知れません。

 インターネット公開は上手くいってません。UPnPで自動設定してくれるはずですが、使用ポートが80、443など普通にWebアクセスに使うポートなので、ウチのように既に公開サーバーが立っている環境ではぶつかってしますのです。IISを自分でいじればいけるかも知れませんが、HTMLファイル内のリンクもいじらないとダメじゃないかなぁと思ったり。Apacheのmod_proxyでリバースproxyとかやってみたいんですが、どうもSSL(443)の方が上手く機能しませんでした。もうちょっと検証してみます。また、xxxxx.homeserver.comというダイナミックDNSによるホスト名も取得できますが、これも本当にただのダイナミックDNSで、ウチの場合、ウチのWebサイトが見えるだけです。

追記:普通に外からみたらポート変更だけで動いてました...

 普通に動的なIPアドレスで、サーバーなんて公開してないよ、という人には非常にお手軽で便利なソリューションだと予想されます。良いホスト名を取りたい人は急いで導入しましょうw。

■メディア共有

 うちは一人暮らしなので、別に写真や音楽を共有する必要がないし、既にDLNA環境は組んであるので、あんまり試す気がないです(^^;)。ただざっと見た感じでは、上記のパブリックなフォルダにおいて、XBox360などを経由してリビングで観ようってレベルで、別段メタデータで整理ができるとかまでは考えられていないようです。もしかしたらVistaのメディア管理機能と組み合わせればなにかできるのかな??

 投稿者別にアルバムとか作れて、おたがいに評価したりできると面白いんですけどね。そういうAdd-Inが出ないかなぁ。

■コストパフォーマンス

 完成品に関しては、現在手に入る某ショップのものは250GB1台で129,900円とちょっと高い印象です。Athlon X2とかRadeonとかサーバーにはちょっとオーバースペックな仕様も気になります。HPのアレはデザインもいいし、値段がどれくらいになるのか気になりますね。

 あまりCPUやメモリの要求スペックは高くないので、手頃なお古のマシンがあればHDDだけ買ってDSP版で導入してみる方が割安でしょうね。ただ、大容量HDDをつけてナンボなので、せめてSATA環境は用意した方が良い気がします。また24時間稼働なので静音、省スペース、省電力である点も優先したい。そんなケースやベアボーンが色々と出揃ってくると良いなぁと期待。

 普通のNASやバックアップソフトと比べてどうか、ってことですが、細かい除外設定やスケジューリングなどの面では専用ツールに劣りますが、リカバリDVDでブートして、サーバーからイメージコピーして復元できる、個別ファイルも取り出せるなどリストア面では充分な機能と使い勝手を備えているので、お手軽度はなかなかのものだと思います。システムファイルなどの重複を避けてくれる仕組みも、OSメーカーならではという気がします(少なくともσ(^^)はサードパーティ製では知らない)。ので、

  • 家庭にマシンが3台程度以上あって、既にLAN環境も組んである、という人
  • ついでにVPNルーターなどリモートアクセスソリューションも揃えたいと思っていた人
  • 家族のマシンもちゃんと安全に運用されてるか気にする人
  • 手頃なマシンが余っている人

なんかは、WHSの方がシアワセになれるかも知れない気がします。

 現在新しいサーバー機を購入し環境を移行中なんですが、今回はXenを使ってサーバー機自体を仮想化する試みをしています。そのついでに、新サーバーの余力でWindowsサーバーも稼働させることを思いつきました。そこへ、Windows Home Serverなるシステムが発売になったので、500GBのHDDと一緒にDSP版を買ってきました。

■Windows Home Serverの特徴

・ディスクをつなげばどんどん保存領域が増える

 仮想ボリュームになっているので、物理的には別ドライブでも、みかけ上は単一の大きなフォルダに見える仕組み。しかもRAIDに似た仕組みでドライブ間相互バックアップをとってくれる模様。しかもしかも、そのドライブは他のマシンで普通にNTFSマウントできるとか。至れり尽くせりですな。

・集中バックアップ

 各マシンに専用ソフトを入れておけば、決まった時間に勝手に差分バックアップしてくれます。差分なのに復旧時はディスクイメージリストアが可能というのが高ポイント。サードパーティでもありそうだけど、MS製だと信頼性高そうな印象。
 面白いのは、複数マシンのバックアップをとっていて、システム系ファイルなど重複は避けて保存する点。何台もOS丸ごとバックアップしても、割と容量は抑えられるらしい。DLLとか微妙にバージョン違いそうなのは、MD5とかで比較して管理したりするんですかね?

・リモートアクセスゲイトウェイ

 Windows LiveポータルからHome Serverマシンにアクセスし、さらにそれを介してLAN内の各マシンにリモートデスクトップ接続できるらしいです。


■しかも仮想環境で構築してみるっ!

 とはいえ、これ以上24時間稼働マシンを増やしたくないということで、新サーバーマシン上に、Xenの完全仮想化で入れてみました。
 もとから入っていた160GBに、ホストOS(CentOS5)とメインサーバーになるゲストOS(CentOS5)を入れて、余った93GBに導入。追々500GBは追加予定。

 CPUはAthlon x64/3500+と普通のWebサーバー、メールサーバーには余裕ありまくりなので、負荷的にもいけるんじゃないかと(WHSの要求CPUは1GHz以上)。メモリは注文したのが明日にでも届けば計2GBになるので、これも余裕かと。
 仮想化技術ってスゲーなぁ

 安定して使えるようなら、TeraStationや現在24時間稼働しているWindows機(エンコ、PacketiX、Orb、TVersityサーバー等)の役割を集約できれば、かなりの省エネになる予感。

・インストールで若干トラブル

 インストールはLVM上の論理パーティションに行い、CentOSの仮想マシンマネージャーからインストールしました。

 途中、再起動がかかった際、青画面で「Setup is starting Windows」となったまま進まなくなる現象がおきました。さすがにWindows Home ServerをXenで動かす情報はまだ見あたりませんでしたが、WHSはWindows Server 2003ベースなので、そちらでググってみると、RedHat Knowledgebaseに情報がありました。どうも、インストールの過程で再起動がかかった時に、仮想マシン側から光学ドライブが見えなくなるのが原因のようです。仮想マシンマネージャーが作った定義ファイルを編集して、光学ドライブを追加登録します。

 (Hogeという名前で仮想マシンを作製した場合)/etc/xen/Hogeをエディタで開き、下記を追加します。

disk = ['file:/var/lib/xen/images/guest,hda,w','phy:/dev/scd0,hdb:cdrom,r']

boot = "d"

 disk行の前半は環境に応じて仮想マシンマネージャーが定義してくれているはずなので変更しなくて良いはずです。追加の赤字部分のうち、「/dev/scd0」部分はホストOS側での光学ドライブデバイスを適宜指定します。それを仮想マシン側で/dev/hdbに指定することで、Windows的にはDドライブに割り当たります。boot行は文字通りWindowsを光学ドライブからブートさせる指定です。Windowsの起動メディアは自動的に2回目以降はスルーしてHDDブートしてくれるのでこうしておくのが無難のようです。ただしインストールが終了したらboot行は削除します。

 とりあえずこれでインストールは完了でき、いまんところ普通に稼働しているようです。パフォーマンスなどはこれから追々検証してみます。

 σ(^^)が管理してるMovableTypeサーバー2台が、ときどきハングアップしたように無反応になることが時々ありまして、topによるとmt-tb.cgiが原因ぽい。つまり、トラックバック処理でリソースが食いつぶされているということですね。

 spamトラックバックのフィルタリング自体はMT内蔵機能でほぼ解決できるんですが、この処理自体が重すぎて、山のようにトラックバックが来た場合にDoS状態になってしまう訳です。

 そこでApacheレベルで特定のリクエストを排除できるmod_securityを導入してみました。1.8/1.9系の設定例はたくさん見つかるんですが、設定文法がまるっと変更された2.x系の情報は見つからず苦労しました。なにも考えずに最新版を導入してしまった...

 とりあえず設定してみたって段階ですが、覚え書きしておきます。

■インストール

 ウチの環境だと、mod_unique_idは導入済みでした。libxml2はlibxml2-develパッケージまで入れておく必要があるみたいです。

 で、後はアーカイブを展開し、Makefile内のtop_dir = 行に、httpd.confのServer rootで指定してあるパスを記入し、make、make installします。

 Apache側の設定として、httpd.confの然るべき場所に、

LoadFile /usr/lib/libxml2.so

LoadModule unique_id_module modules/mod_unique_id.so
LoadModule security2_module modules/mod_security2.so

 を記入します。

■日本語を含まないトラックバックを弾く

 公式サイトには、USER-AGENTやIPアドレスなどのブラックリストを定義した設定ファイルが色々置かれていますが、この手は最新版を入れ続けないと効果が薄そうだし、ルックアップの負荷も大きそうなので、とりあえず日本の皆さんがやられている「日本語(2バイト文字)を含まないものを弾く」というアプローチを採ってみます。

 具体的な設定は、同じくhttpd.confで、

<Files "mt-tb.cgi">
    SecRuleEngine On
    SecRequestBodyAccess On
    SecDefaultAction deny,log,status:406,phase:2,t:urldecode
    SecRule REQUEST_BODY "^[\x00-\x7F]+$"
    SecAuditEngine On
    SecAuditLog /var/log/httpd/mod_security.log
</Files>

としてみました。Filesディレクティブでトラックバック用スクリプトにだけ働くように指定しています。1.x系から変更になったコマンド名だけを書き換えるだけでは上手くいかず試行錯誤したんですが、どうやらSecDefaultActionにt:urlencodeを追加したら上手くいったっぽいです。

 動作試験しようにも、ウチのブログはブログ名が日本語なので、 一時的に

SecRule ARGS:excerpt "^[\x00-\x7F]+$"

 のように、POSTデータの内、excerpt(トラックバックで送られる概要)のみを検査対象にし、本文に日本語を含むエントリと含まないエントリからトラックバックしてみたところ、一応後者のみが弾かれました。

 これでしばらく様子を見てみたいと思います。

 が、しかし本ブログに関してはそもそもトラックバックが正しく受信できない問題が発覚しました。別途原因究明しないと...

 ともあれ、このmod_securityはかなり柔軟にレシピが書けるので、Webアプリケーションのセキュリティ対策に色々と活用できそうです。

 寝室のテレビをDLNA対応のBRAVIAにしたことで、ルームリンクVGP-MR200が退役したので、 実家に設置してみました。

 当然、直接自宅のDLNAサーバー群を参照することはできないので、VPN(PacketiX)を使ってややトリッキーなことをしています。

 Zebedeeやstoneなどで単純にパケットが通ってもMPEG2では帯域が不安なのと、DLNAはuPnPを使ってるのでフォワードも難しそう、ということで、やや美しくないですが、DLNAサーバー(TVersity)は実家のマシンで稼働させました。で、そのマシンがPacketiXで自宅のファイルサーバーにあるDivXファイル群を参照しています(直接DLNAをVPN経由させてると期待した方、申し訳ありません)。

 こうすることで、VPNを通るのはDivXストリームなので割と帯域的には余裕みたいです。ただ欠点として、

  • 実家側でもPCを立ち上げておかないとならない
  • しかも結構パワーがいる

ということがあります。とりあえず少し前にやはり自宅で退役したAthronXP/2500+マシンでもそれなりにトランスコードできているようです。

 ルームリンクではなく、LinkTheaterなど直接DivXを再生できるメディアプレーヤーなら、もう少し別の方法があったでしょうが、とりあえず追加投資するほどでもないので、これで使ってみようかと。

 話題になってるので一応試してみようということで、twitterにアカウント作りました。

http://twitter.com/do_gugan/

 ハイフンが使えなかったので、アンダースコアにしてみたところ、リンクの下線とカブって見づらいことが発覚orz。

 とりあえず、Web更新はマンドクセーので、Opera用のウィジェットであるTwipperaと、PHP実装のケータイ用ゲートウェイtwitterMobileを設置。出先では911Tから更新できる体制にしてみました。

 受信、というか読む方はGoogle Talkと連携したりもできるようですが、GoolgleTalkは普段立ち上げていないのでとりあえずなにも無し。コメントいただいても気づくのは遅めかと思われます。

 TeraStation Livingの導入の際にトラブッたJumboFrameについて、マニュアルの注意書きを確認したので覚え書き。

TeraStationのJF設定 ハブ 相手PC 通信可否
ON 対応 対応
ON 対応 非対応
ON 非対応 非対応
ON 非対応 対応 ×

△:通信はできるが、標準フレームサイズにフォールバック

 わかりにくいのが、ピア同士がJumboFrame対応しているのに、途中経路のハブが非対応だった場合に通信ができなくなることですね(まさにこの状況でした)。ハブもPCも非対応ならフォールバックして通信できるのに、意外ですね。おそらくネゴシエーション的には通ってしまうので、パケットサイズが大きいままやりとりしようとしてしまうんでしょう。

 JumboFrame設定は見た目わかりにくいので、ネットワーク不通トラブルの際には気づきにくい要素だと思います。しっかり頭の隅に置いておきたいものです。

 実家からの接続が切れまくって使い物にならなかったPacietiXが突然安定しました。

 たまたまメインのLinuxサーバーが外から反応しなくなったんで、常時稼働でPacitiXサーバーのWindowsマシンにリモートデスクトップで接続してLAN側からアクセスを試みたんですが、どうも切れない。

 特に設定もかえておらず、状況が変化したといえば、

  • いぜんLinuxマシンにもPacietiXサーバーを入れてみようとしたことがあって、使ってないつもりだったんだけど、そっちも起きててなにかコンフリクトしていた?
  • フリーズしてたLinuxマシンがDHCPサーバーも兼ねてたためIPアドレスがとれず、クライアント側で固定IP設定にしてみた

くらいかなぁ。帰宅してLinuxサーバーを再起動した時、PacketiXサーバーは自動起動しなかった。ただこれはrcの設定がそうなってただけで、フリーズ前に動いていなかったことを証明はできない。

 DHCPに戻すのはすぐに試せるけど、まぁちゃんと動いてるならいいやw。それにLANからと外からで同じマシンに同じIPがふられてる方がなにかと便利な気もしてきたし。

 ただ、やはりSMBのパフォーマンスはZebedeeの方がいいカンジ。PacietiXはコネクション数とかチューニングの要素がいろいろありはするのだけれど。

 とりあえず一番パフォーマンスが必要な動画サーバーへの接続はZebedee。それ以外のファイルサーバーを使ったり、リモートデスクトップ、iTunesなどに用がある場合はPacketiXってカンジですかね。

 そうそう、PacketiXといえば、Homeのパッケージ版にはUSBメモリから再起動無しで起動でき、PCに痕跡も残さないユーティリティが同梱されてまして、こないだはじめてネットカフェで使ってみたんですがちゃんと動きました。便利便利。

 帰省中、自宅のTeraStationにあるDivX動画をジュークボックス的に流したい、ということで帰ってくる度に試行錯誤しています。

■いままでのおさらい

 自宅はBフレハイパーファミリー+IIJmio固定IP。実家はBフレ光プレミアム+BB exciteです。

  • なぜかPPTPがつながらない
  • なぜかPacketiXが切れまくる
  • OpenVPNだと時々途切れる

という感じ。実家以外(公衆無線LAN経由など)はPacketiXで無問題。実家でもリモートデスクトップを使ったりするにはOpenVPNでOKです。

 しかし、動画とスムースに再生するにはどれも不十分。

 そこで、VPN系から視点をかえて、プロトコルをSMBに絞ってポートフォワード(トンネル)系に挑戦。少し前にSMB over SSHを導入。これはなかなかのパフォーマンスでしたが、

  • Vistaだと仮想NIC(ループバックインターフェイス)を作成してもポートが空かない
  • SSHのコンソールがデタッチできない

という難点がありました。

■そこでZebedeeですよ

 で、他にポートフォワード系のソリューションを探していて見つかったのがstoneとzebedee。zebedeeは以前、まだメール環境をSSL/TLSでつなげなかった頃、トンネルに使ってました。Windowsクライアントでもサービス化すればいちいち接続操作がいらずバックグラウンドで自動的にトンネルがつながるのがお気に入りでした。

 久しぶりに名前をきいて、「そんなのあったなぁ」と思い再設定。しかも、今回の帰省でリモートバックアップ用の常時稼働のLinuxサーバーを立てたので、そいつに常時トンネルを張らせようと。それであればVistaでローカルインターフェイスでSMB用のポートが占有される問題も回避できるし、最近のLinkPlayerやMovie CowboyなどSMB共有にアクセスできるメディアプレーヤーを買ってくれば単体でアクセスできる可能性大。

 で、久々の設定に四苦八苦しつつなんとか開通。公開暗号鍵方式でパスワード不要のデーモン動作でトンネルが張れました。このLinuxサーバーのIPアドレスに対してSMBアクセスすれば自宅のTeraStationの中身が見える、という寸法です。

 期待していたパフォーマンスも良好。マニュアルによるとストリーミングには圧縮にbzip2を使った方が良いと書いてありましたが、比べた感じではzlibの方がスムースでした。圧縮率は最高の9。目的が圧縮動画の転送なのであまり意味はないかも知れませんが、一応。むしろ遅くなってるような気配はないようです。

■OpenVPN vs SSH vs Zebedee

 あくまでウチの環境で、SMBサーバー上の動画ファイルに特化した比較ですが、

Zebedee >>>> SSH >>OpenVPN

って感じ。

 動画を観る上で重要なのは、

  1. 途切れないこと
  2. タイムスライダーなどによるサーチのレスポンスが良い

という2点。1つ目は当然としても、2つ目も快適さに大きくかかわってきます。σ(^^)の場合、DVというホイールで一定秒数の前後ジャンプができるプレーヤーを使ってCMスキップなどで15秒飛ばしなどをするんですが、ストリーミングだと再生が復帰するまでに待たされがちです。このレスポンスもZebedeeがもっともよく、ついでOpenVPN。ただしOpenVPNは1.の方でたまにつっかかることがあるのでSSHに負け、です。

 またなんといってもZebedeeは一度デーモンを起動してしまえば都度の接続操作が不要、というのが扱いやすいですね。

SSH のポート転送を用いて Samba にアクセスする

 ちょっと自宅のSambaサーバーの調子が悪かったのでググっていたら、偶然、SMB over SSHなる技術(というかテクニック)を発見しました。読んで字のごとく、Windowsのファイル共有プロトコルとSSHのポートフォワーディングで転送して、WAN越しで使ってしまおうというものです。

 帰省中にファイル共有、特にメディアサーバーの動画を視聴したいということがしばしばなんですが、

  • PacketiXはなぜかブツブツ切れる(実家から使った場合のみ?)
  • OpenVPNだと遅い
  • PPTPはCentOSにしてからつながらなくなった

という状態。なんか良いVPNの代替案がないかなぁ、と思っていたところなんですが、SMBが直接WAN経由で使えるってのもわかりやすくていいなぁ、と。もしかしてVPNのオーバーヘッドがない分、スループットも期待できるかな、とか(それでもSSHの暗号化はあるんですが)。

 設定も簡単そうだったので冒頭のリンク先を参考に試してみました。

 サーバー側は特に設定の必要無し。

 クライアント側にはループバックの仮想NICを作成し、適当なIPアドレスを振ります。ポートは137で固定なので、マウントしたいファイルサーバーの数だけ仮想NICを作るのがちと面倒だし、美しくない感じ。

 SSHクライアントはいつも使っているputtyで。トンネル設定を追加した状態で普通にログイン。プロンプトが出たままで放置しておけばOK。1つの設定に複数のトンネルを書き込めるので、SSHサーバーが1つであれば、ファイルサーバーが複数であってもセッションは1つ張ればOKです。

 とりあえず快活CLUBのマシンから接続を確認。NICのインストールは再起動を必要としないので、こういうネットカフェとかでも利用できますね。一応、DivXファイルを再生できることは確認。ビットレート高めのWMVはカクカクでした。どこがネックになってるんだろ?

 VPNに比べた時のデメリットは、IPアドレスが変わること。実家マシン用はHOSTSファイルで上手いこと置き換えれば良いですが、LAN内でも使うノートPCなんかは実体は同じサーバーなのに、LAN内と外からとでIPアドレスがかわるのは気持ち悪いですよね。オフラインフォルダなんかとも相性がよくないはず。

 まぁ、今度帰省した時に実用的なスループットが得られたら、実家からのストリーミング用に使おうかってとこですかね。

2007.05.05追記

 逆にメリットとしては、ファイルサーバー側のアクセス権制御が活かしやすいってとこですかね。VPNだと丸ごとLANを公開することになってしまうんですが、こっちなら特定サーバーの特定共有だけ見せる、ということがやりやすい。

2007.05.12追記

 どうもVistaではこの方法が使えないようです。Vistaの場合、ループバックデバイス側もローカルのSMBクライアントがポートを占有してしまうみたいで。実家にバックアップ用のLinuxサーバーを立てたので、そいつにポートフォワードをやらせるしかないみたいです。まぁ、その方が毎回セッションはらなくていいから楽なんですけどね。

 実家からもDivXのストリーミング程度は使えました。常時SSH転送してるマシンが立ってるってことは、LinkTheaterみたいなのも使えるってことかも。

 「マウントしたいファイルサーバーの数だけ仮想NICを作る」ってのは勘違いでした。プロパティの詳細設定から1つの仮想NICに複数のIPアドレスを持たせられました。

:: SiteBar :: The Bookmark Manager | The Bookmark Server

 σ(^^)はPC多数持ちだし、普段はOperaだけど、ちょっとDeveloper's Tools使うのでFireFoxとか、上手く表示されないからIEで、とかブラウザを切り替えることも良くします。そういう時にオンラインブックマークで同期を気にしないで済むのは助かります。以前は、Bookmarkerというシステムを使っていたんですが、いい加減更新されなくなっていしまったので使用を控えていました。ただ、外部のASPサービスを利用するのは基本的に嫌いで、なんかOSS系で良いのがないかなぁ、と思っていました。

 Yahooブックマークのニュースを見て、久しぶりにググってみると、ちょいと良いオンラインブックマークシステムを発見しました。SiteBarというシステムで、各種ブラウザのサイドバー内(IEならエクスプローラーバー、Operaならホットパネル)に統合できるのが特徴で、Ajaxで作り込んであるので、ブラウザ内蔵感が高いです。UIも日本語化済みです。

 公式サイトでは有料ASPサービスとして提供していますが、システム一式がオープンソースで公開されているので、自サーバーに設置するなら無料で利用できます(でも気に入ったのでPayPalで10ユーロほど寄付してみました)。

■インストール

 大雑把にはこんな手順でした。

  1. MySQL上に、Apacheが読み書きできるデータベースを作っておく
  2. 解凍したフォルダをDocumentRoot下に配置し、ブラウザからアクセス
  3. DB設定画面で1.で作ったDBの情報を入力(ApacheにDB作成権限があれば1.をスキップしてここで作成可)
  4. 設定が検証されると、config.ini.phpというファイルが生成される
  5. Apacheに書き込み権があれば、CGIが直接保存してくれるが、そうでない場合、一旦ローカルにダウンロードして、インストールディレクトリ直下のincディレクトリに配置する
  6. 再読み込みすると初期設定画面になるので管理者アカウントを作成する

■ブラウザ側の設定

 ブラウザからアクセスしログイン後、「統合方法のページを開く」リンクをクリックし、自分の使っているブラウザを選択すると、それぞれへのインストール用のリンクが表示されます。またブックマーク用のブックマークレットも表示されるので、ブラウザのショートカットバーなどに登録すると良いでしょう。Operaの場合はスタートバー辺りがオススメ。

 

 ユーザテストなんかで見てると、エクスプローラーバーにお気に入りを出して使ってる人って結構いるんですよね。ウチの妹もそっち派。自分はプルダウンメニュー派なんですが、どのマシン&ブラウザでも同じブックマークが参照できるなら転向してみても良いかもという気になってきました。

 マルチユーザな作りになっているので、周りで使ってみたい人がいれば声かけて下さい。

 最近、オンラインのPHP、PEARマニュアルにお世話になることが多いので、いっそ自分とこにもミラーしたらどうか、と思って調べてみました。

 それぞれ、PHPの公式サイトからパッケージを取得できました。PHPはここから、PEARはここから

 面白いのは、Windowsのオンラインヘルプ形式であるchmフォーマットでも配布されてる点です。これだと単一のファイルでローカルHDD上に置いておけるし、検索などのUI面のメリットもあります。ただ、ちょっと字が小さかったりPEARの方は目次の作りがイマイチでHTML版の方が使いやすいかなぁ、という印象。一応、ノートPCには入れておいてモバイルでパケ代かけずに見る用にしてもいいかも。でもまぁ、PHPの開発をオフラインでそもそもしないしなぁw。

 

 公開サーバーの/home領域が残量5%を切ったので、交換用を物色。(検査体制が違うだけでモノはDiamondMaxと同じとも聞くけど)やはりブランドイメージでいくとMaxstorのMaxLine系かなと単純に思ってたけど、MaxLineIIIはもう終息してしまったらしい(考えてみればもう2年前くらいだし、Maxstor自体あんなことになってるし)。IDEで見かけるのはMaxLinePro500ばかり。さすがに500GBはいらないしなぁ。

 横浜ビックでSATA版ならIIIの250GB、300GBが残ってるぽかった。ただせっかく信頼性を基準にするのに、ここでSATA->IDEアダプタをかますのもどうかと...

 そんな中でAmazon.co.jpで在庫無しながらIDE版のMaxLineIIIの注文を受け付けているのを発見。ダメもとで注文してみました。結果は乞うご期待。

[dgg]: dovecot mbox環境でInvalid messageseと出てメールが読めない時の覚え書き

■再発、おさらい

 またまた再現しました。あらためてググってみてもめぼしい情報無し。海外のブログでもわざわざウチの上記エントリを翻訳したものにリンクしてるほど情報が乏しいようです。

 わかっているのは、

  • X-UIDはmbox環境のimapサーバー(dovocot以外も)がキャッシュ用につけるヘッダで、1ずつ増える
  • dovecotの0.99.14以前はこの値が一定以上になるとオーバーフローして負の数に解釈されるためエラーになる
  • 最後の番号は最後のメールではなく、メールボックスの先頭のメールのX-IMAPbaseヘッダの2番目の数値
  • 同時に~(ユーザ名)/imap4/.imap/INBOX/.imap.index*にもキャッシュデータがあるので消すべし

ということ。dovecotの1.0は未だ正式リリースされず。

■番号を振り直す

 で、今回はそもそもの数字がもう何年分も積算して(振り分け前の迷惑メールでもカウントアップするし)かなり大きい数字になるので、1から振り直すことにチャレンジ。

 上記の海外のエントリによりスマートな方法が載っていました。まず、作業中にメールアクセスが発生しないようdovecotとpostfixを停止し、クライアントも念のため終了しておきます。

cd /var/spool/mail
grep -v '^X-UID: ' hoge > hoge2
grep -v "^X-IMAPbase: " hoge2 > hoge

で、hogeのスプールからX-UIDとX-IMAPbaseで始まる行をすべて除去します。

 次に前回同様、dovecotがメールボックスのヘッダ情報をキャッシュしているらしいファイルを削除します。

rm ~hoge/imap4/.imap/INBOX/.imap.index*

 上記ブログではこれで大丈夫だったようですが、ウチではきっちり元の番号で振り直されてしまいました。どうも、X-IMAPbaseの最初の引数がメールボックスを特定するためのIDのようなので、この数字をエディタで適当にいじってみたところ上手くいきました。

 Thunderbirdを立ち上げると、受信箱内の一覧を全て再読込しました。モバイルでも使う人は、パケット代節約のため、自宅LANにつながっている時にいちどつなげておいた方がよいかも知れません。

■番号スキップの犯人を発見

 で、前回も不明だった番号が突如ハネあがるトリガなんですが、どうも通販ショップuWorksからの広告メールが原因らしいということをつきとめました。何度か現象が起きている中で、毎回共通して境界にいるのがここのメーリングリストからのメールだったのです。どうも、最初からX-UIDヘッダが大きな数字でついたまま送られてくるらしく、以降のメールのX-UIDがすべて大きく跳ね上がってしまいます。ここのショップのメルマガはお値打ち情報があって重宝してるんですが、とりあえず解除しておきました。

 

 

 超私的なメモです。

 たぶん、出来るだろうなぁ、と思いつつ、ちゃんと調べたことがなかったPostgreSQLの既存テーブルに後から列を追加するコマンド。

alter table (テーブル名) add (カラム名) (形式);

であっさり成功。うん、これは便利だ。たぶん次使う時には忘れているのでここの書いておこう。

 ついでにカラム名の変更方法。

alter table (テーブル名) rename (変更前) to (変更後);

 ただしカラムを削除したり形式変更したりはテーブルを作り直すしかない模様。

MT-Keystrokesプラグイン Movable Typeコメントスパム対策 - WEBデザイン BLOG

 昨日、サーバーが一切のレスポンスを返さなくなったので何事かと調べてみると、どうもブログへの迷惑コメント、トラックバックが大量に届いて過負荷状態に陥っていた模様。ディスククラッシュとかでなくて良かったけれど、これはそろそろキチンと対策せねばと。

 で、今回は上記の紹介されているMT-Keystrokesというプラグインを導入してみました。JavaScriptでフォーム上でキー入力があったかどうかを検知してチェックするようです。自動スパム送信ツールだとフォームを経由しないのでキー入力のフラグがたたない訳です。以前、似たような仕組みで、フォームにhiddenを埋め込む方法を採っていたんですが、それよりも厳重だし、プラグインなのでMTをバージョンアップするたびにソースを書き換えなくても良い点がメリットです。

 テンプレートは各コメント欄部分ごとに3カ所ずつ。個別アーカイブだけでなく、システムテンプレートのコメント一覧、コメントエラー、コメント確認の方も適用しないといけない点がポイントですね。個別アーカイブだけだと、確認画面経由の時に正しく投稿されないので要注意です。ただ、元テンプレートのバージョンによって、システムテンプレートにはフォームがないものもありました。

 これで迷惑コメントが減ってくれるといいなぁ...

SquirrelMail 微調整: linux(vine)と猫とラーメンと

 そういえば、先週帰省していた時に、久しぶりにSquirrelMailを使おうと思ったら「このページにアクセスするにはアカウントが必要です。」と言われてログインできませんでした。

 上記のブログエントリで解決策を発見。/var/lib/php/sessionのオーナーをWebサーバーにしたら解決しました。ありがとうございました。

 風邪かインフルエンザかとにかく体調が悪いというのに、いきなりメールが読めなくなりました。

 Spoolにはちゃんと新着がためっているんですが、THUNDERBIRDでアクセスすると「コマンドは成功しませんでした Invalid messageset : -2147483648」みたいなエラーが返ってきます(日本語部分はうろ覚え。数字は毎回異なります)。ググっても日本語でめぼしい情報がなく、英語で手がかりを得られたので、覚え書きとして記しておきます。

 見つけた情報はこちら。dovecot(imap4サーバー)をmbox環境で利用する場合に起きるトラブルで、メールサーバーがメールボックス管理に使うX-UIDというヘッダの数字が大きすぎると発生する模様。(問題が発生しているアカウントをhogeだとして)試しに、

 tail /var/spool/mail/hoge -n 5000 | grep X-UID

などとしてみると、

X-UID: 1731077
X-UID: 1731078
X-UID: 1731079
X-UID: 1731080
X-UID: 1731081
X-UID: 3356154939
X-UID: 3356154940
X-UID: 3356154941

といきなりケタ数がはね上がっていました。とりあえずhogeを編集して10ケタのX-UIDを行ごと削除します(spoolが大きすぎてemacsで開けず、慣れないviで苦労しました)。

 次にdovecotがメールボックスのヘッダ情報をキャッシュしているらしいファイルを削除します。我が家の環境では、

rm ~hoge/imap4/.imap/INBOX/.imap.index*

でイケました。で、dovecotを再起動します。するとあろうことか、またもや10ケタの数字でX-UIDが振られてしまいました。これはどこかに最後の番号を記憶してるだろうと思い、探してみたところ、spoolの頭にメールに見せかけたデータがあり、赤字の部分がX-UIDの最終番号のようでしたので、7ケタの最後の番号に1を足した1731082に書き換えたところ、上手くいきました。

From MAILER-DAEMON Fri Feb  3 04:02:46 2006
Date: 03 Feb 2006 04:02:46 +0900
From: Mail System Internal Data <MAILER-DAEMON@hoge.com>
Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA
Message-ID: <1138906966@hoge.com>
X-IMAP: 0935368447 0000060250 NotJunk Junk JunkRecorded NonJunk $Forwarded $MDNS
ent $Label5 $Label1 $Label2 $Label3 $Label4
Status: RO
X-IMAPbase: 1138911336 1731088 Junk NonJunk $Label1 $Label2 $Label3 $Label4 $Lab
el5 $Forwarded $MDNSent

  発生原因は不明のままですが、とりあえず対処できたので、これでようやく寝られそうです。

 公衆無線LAN経由時など、帯域が細めの時にどうもOpenVPNは不安定なので、やっぱりお金だしてPacketiX買ってきました。店頭パッケージで買える同時接続数1のHome Editon。

 で、買ってきて唖然。これWindows専用版ジャン...

 なんでさっ!接続制限数違えてビルドするだけだろうに...。>Linux版サーバー

 せめてノンサポートでいいからID通らないかなぁ、と思ってLinux版に入力してみたけどダメorz。

 まぁ、SoftEther時代はWindowsマシンで動かしてたからいいんだけどね。でも知ってたら倍だして接続数3のSOHO Editionにしてたのになぁ...

 だがしかし、さすがに動作は安定。現在、MobilePoint対応マックから通信中。さすがに11b無線じゃ動画ファイルはレスポンス悪いけど、リモートデスクトップくらいでエンコ設定くらいはできるカンジ。

 OpenVPNもオフィスや実家など有線環境だと問題ないんだけどなぁ。まぁ、安定第一。当分こっち(PacketiX)使います。

 PacketiXの無料ライセンスがなんだかぁゃιぃ理由付けで廃止されましたね。\9,800のSOHOエディションでも用は足りるので、それくらいなら出しても良いと思ったんだけど、関連情報を見ていると、あちこちで代替案としてOpenVPNが話題になっていたので、試してみました。

 結果としてはいいカンジ。SSL/TLS VPNで、サーバー、クライアント双方に証明書も使えるのでパスワード認証のSoftEther1.0よりは安全な感じ。クライアント(Windows)側のUIもタスクトレイからConnect/Disconnectできるので悪くないです。SoftEtherと違ってツールが常駐して7MBほど食うのは、たまにしか使わない場合はやや不経済な気もしますが。

 ユーザモードで動くのでパフォーマンスがイマイチと指摘しているページもありましたが、とりあえず光<->光ならLAN内のSMBサーバー(TeraStation)上のDivXファイルを再生するくらいは平気みたいです。PacketiX 2.0は外からVPNサーバー自身が見えないとうヘンな現象が出てましたがそれも無し。

 しばらくこれで行ってみようかと。

■実家にPPTPアクセス可能に

 帰省中、運良く(?)無線LANルーターが壊れ、無線がまったく接続できなくなってしまったので、右の機種に買い換え。

 リモートアクセス(PPTPサーバー)機能付きのモデルです。これで横浜からでも実家のネットワークプリンタやルーター自身をメンテできるようになります。

 更には、前々から計画していた、実家にNASをおいて、サーバーの重要データを遠隔バックアップする、というディザスタリカバリ実践もできようかと。次の帰省時にはLinkStationか玄箱を用意して来よう。まぁ、それだけなら、SSHポートだけ開けてrsyncで同期すりゃいいんですけどね。一応その他のこのも色々できるかも、と思ってPPTPモデルにしてみました。

■NAS選び

 LinkStationなら退役待ちなのが一台あるんだけど、最近のLinuxBox化事情はどうなんだろ?SSHとrsyncが動けば十分なんだけど。GbEも必要ないし、安い方の玄箱買ってくる方が楽かな?ちょっと最近の事情をリサーチせねば。父親の会社のLinkStationのバックアップとしても使えれば共同出資を提案できるかも知れないし、できればLinkStation+ハックが一番なんだけど、SSHが難しい気がする。

 あぁ、LinkDe録が使えれば、テレビ愛知のアニメ録って横浜で観るなんつーこともできるかも。

 うーむ、LinkStationでPPTP経由NFS+rsyncが無難か?

■MACアドレス管理

 本当は無線LANアクセスポイントは接続許可MACアドレスに名前がつけられる[使いやすさ日記]IO-DATAが好きなんですが、IOにはPPTPモデルがないんだよなぁ。

 実際、今までの無線LANルーターに18ものMACアドレスが登録してあったけれど、もはや何がどのマシンのものかトレースできないので、仕方なくすべてコピペで以降してしまった。たぶん、もう使ってないマシンのとかもあるんだろうけど。

■ダイナミックDNSサービス

 実家はCATVのグローバルIP環境。原則IPは滅多にかわらないんだろうけど、やはり完全な固定アドレスではないので、ダイナミックDNSサービスを利用。なにも考えずに設定画面からBUFFALOが提供してるサービスでアカウントを取得して登録。そしたら一ヶ月お試し期間の後は有料ですとっ!?速攻で設定を書き換えて老舗のdynDNSでもホスト名取得。どうせなら自分のドメインに収容したかったけど、よしんばダイナミックDNSシステムのオープンソース実装があったとしても、ルーターが自動更新に対応してなきゃしょうがない罠。


RSSリーダー:フレッシュリーダー

サーバー型 RSS リーダー - フレッシュリーダー

 サーバー設置型RSSリーダーのFreshReaderの正式版がついにリリースされました。 ブログで紹介するとブロガーライセンスがもらえ無料で利用できるということなので、早速紹介記事をばw。

 まぁ、以前の記事にも書いたかも知れないですが、このRSSリーダーはサーバー設置型ということで、ブラウザを使って閲覧します。なにが便利かというと、複数台のマシンで同期の問題を気にしなくてよくなる点です。自宅とモバイル、会社など複数のマシンでネットを閲覧する場合、あるマシンに入れたRSSリーダーでは全て既読になってる記事が、別のマシンでは未読扱いで表示されてしまう、なんてことがありません。またフルブラウザ搭載のケータイやPDAからも利用できるので、電車などで暇つぶしにもってこいですね。

 β版からの変更点としては、検索機能やバックログ機能などがついたようです。あと、ユーザ間での関連サイト表示のような機能がついたようですね。ソーシャルブックマーク的に興味がわきますが、一人じゃ試せない(^^;)。何ライセンスもらえるんだろ?

 β版からの上書きアップグレードは非推奨だったのでデータ移行がちょっとメンドウだったけれど、基本的には今後は上書きでメンテナンスできそうで楽。そもそもインストールも展開して、dbフォルダにhttpdが書き込める権限を付与するだけなので敷居が低いのも良いですね。前に使っていたFeed on FeedsみたいにEUCがダメとか、日本語文字コード的な不安もなく。

 当面の一番の不満だった、Operaで秋葉ブログのFeedをみた時に画像が読み込まれない(一度記事を読んで戻ると入ってる)のは直ったかなぁ(そういや忙しくて報告してなかった...)。次のクローラー作動待ち。

 ブラウザのデフォルトURLに指定して、ネットにつないだらまずFreshReaderをチェック、という日課になってます。

 

P.S.

 現在、ブロガーライセンスを申請中です。実際に記事URLを送信して2~5営業日待って人手によるチェックを受けるようです。この手続きを始めたら「フレッシュリーダーを利用するには個人ライセンスを登録してください」と出てライセンスコードを入れないと使えなくなりました。「おいおい、このまま2~5日待つのかよっ!?」と思いましたが、一旦、ライセンス選択を解除すれば試用状態に戻るようです。参考までに。

 前エントリで「そろそろちゃんとしたサーバー証明書でもとるか」と書きましたが、本当に取ってみました。某企業サイトを見て、やっぱりオレオレ証明書はダサいなと。

 で、割と安価なCA(認証局)を発見。GeoTrust系列で1年たったの$31(普通は10倍しても不思議ではない)。暗号強度は128bitで、ブラウザ互換率(つまりルート証明書があらかじめインストールされてる率)99%(Netscape 4.5などが漏れるらしい)。とりあえずeコマースサイトを開くワケでもなく、身内利用がメインなので充分。「24時間発行保証」はどうした?って感じだったけど、とりあえず中一日程度でオンライン発行。admin宛のメールが受信できることをもってリアル認証。郵送手続きなどは無し。

 証明書はホスト名に対して出されるので、www.do-gugan.comとdo-gugan.comは別扱い。メールサーバーにも転用するので、do-gugan.comで取りました。https://www.do-gugan.com/にアクセスすると、ホスト名と証明書が食い違ってるから危険、という警告が出ると思います。というワケで、当サーバーのブログやWebメールをhttps://(SSL)で利用してる人で、証明書エラーが出る場合は、ブックマークをwww.無しに変更してみてください。 *.do-gugan.comに対するワイルドカード証明書というのもあるが高かったので断念。

 というワケで、気持ちいい暗号通信ライフが送れるぞ、と。

ALPSLAB clip!

 hkondo氏のブログ経由で知った、地図ソフトのアルプス社が実験的に提供している、ブログに簡単に地図を貼り付けられるサービス、ALPSLAB clip!のプラグインをインストールしてみました。

 ブログ記事中に、ここにある書式で、目的地の住所や緯度経度を書き込むと、構築時に自動的に地図になるようです。

 早速テスト、σ(^^)がよく行く回転寿司スシロー上鶴間店です。

[map:神奈川県相模原市上鶴間3-2-15]

 お、できたできた。実際にソースに書いているタグは、

[ map:神奈川県相模原市上鶴間3-2-15 ]

 こんな感じ(実際には[]の内側の半角スペースは不要)。縮尺変更やドラッグスクロールはできないのね。リンク先が全画面地図になっていて、そっちでやってくれと。で、そっちに他の人がその近辺に対してトラックバック付きでポストした記事や、多分広告なんかが出ると。
 お、市区町村別のRSSも配信してるんだ。

 当サーバー利用者で使ってみたい人は、テンプレートを一部書き換える必要があります。ここの「インストールの手順」→「MovableType」の項を参考にするか、σ(^^)に相談して下さい。

 vodafoneの702NKIIは、海外ではNokia 6680という型番で売られており、国内出荷台数とは比べものにならない数が出回っています。そのため、さまざまな社外パーツも販売されており、以下のiPod風ガワもそのひとつです。ヤフオクで\3,000くらいでゲット。

702nk2_ipod.jpg

 文字通り表がアクリルちっくな白、裏がメッキになっています。本当は白いキーパッドもついてきてたんですが、表記が中国語なのと、タッチもふにゃふにゃして使いにくそうだったので、純正のものを使いました。

 裏面は指紋つきまくりなところまでiPod風(^^;)。普通にソリッドなカラーやラバー調のものなら\1,000も出せば手に入るので、飽きたら適当に着替えさせていきたいと思います。

 あと、自宅のサーバーのIMAP4サーバーをDovecotに入れ替えたので、試しに内蔵メーラーを使ってみました。今までのimapdだと、フォルダ一覧としてユーザのホームディレクトリを返していたので、何百というファイルがあるとケータイやPDAのIMAPクライアントだとフリーズしたようになって使いものになりませんでした(OSXのMailも)。Devcotだとちゃんと~/imap4/下のみを返すようにできるので、あっさり使えてます。これは(゜∀゜)イイ!。もちろん、M1000のようにフォルダに対応してない、なんてことはありません。ちゃんと購読フォルダを指定しておけば、新着もチェックしてくれさえしますからprocmail環境でもバッチリ。実は、ケータイ用のWebメールシステムであるx-Gateのフリー版を使ってたんですが、新サーバーではどうもTomcatのインストールが上手くいかずに困ってました。でも、これがあれば別にいらないかも。ちゃんとTLS/SSL/SMTP-Authにも対応してるし。ウチが自局認証なので毎回確認ダイアログ出るけど...

 (実用的な)IMAP4環境、MSNメッセ互換ソフト、Opera miniと急激に株が上がってきましたよ。>702NKII

 これで液晶がQVGAで、もう少し文字入力がしやすければ神機なんだけどなぁ。かなり下よりにキーパッドがあるので、ずっと打ってると親指の付け根が痛くなってくるんですよね。

 そして相変わらずテレビ電話の出番は無し...

 Asteriskの設定を更に煮詰めてみました。

■050番号へかける時だけプロバイダIP電話で発信させる

 現在、我が家は主番号045のNTTひかり電話回線と、050番号のプロバイダIP電話回線へ発信できるのですが、NTT提供のルーター&VoIPアダプタ環境だと、普通にダイヤルすると050で発信、頭に0000をつけるとNTTで発信となります。しかしNTT回線をひかり電話にすると、もはや050発信は同一基盤番号相手の無料通話しか価格メリットはないワケで、それ以外は一般的なNTT番号を通知して発信したいと思う訳です。つまり、デフォルトはひかり発信で、何かしらのプレフィクスをつけたら050発信、としたい。

 9発信すると050というのはすぐに設定できました。ただたいていの電話機には電話帳登録してある番号の先頭に特定の数字を付加、ということが簡単にはできないので不便です。どうせなら050番号相手に発信した時は自動的にIP電話で発信、くらいはやりたい。これが結構ハマりました。

 最初、ダイヤルプランを定義する、extension.confに

exten => _050.,1..(050発信処理)
exten => _0.,1....(NTT発信処理)

のようにしてみました。正規表現的に言えば、「_」は先頭にマッチ、「.」は任意の桁にマッチの意味です。しかし、どうしても上がスルーされて下にマッチしてしまいます。前回書いた本にも、日本語のWikiにも情報がなく、仕方ないのでもっともAsterisk情報が集まっていると言われる海外のWikiを読みあさって、こんなドキュメントを発見。どうも、extention.confに書いたパターンを内部的にソートしてから適用するらしく、記述順に関わらず_050.よりは_0.が先にマッチしてしますようです。CLIから

show dialplan [コンテクスト名]

で表示される順が、実際に適用される順のようです。

 で、解決法としては、

exten => _050.,1,...
include => ntttel

[ntttel]
exten => _0.,1,...

のように、後からマッチさせたい部分を別コンテクストに追い出して、メインコンテクストでincludeすれば、includeされた部分の適用順位は下がるとのことです(複数includeさせた場合はさせた順)。

 実際、これで上手くいきました。本当は、050番号の中でも、ウチのプロバイダと無料通話提携しているところへ発信する場合だけ、といった分岐をしたいのですが、適用範囲を全部定義するとextensions.confがやたら長くなって管理が大変そうなので断念。

■VoIPアダプタをATAとして利用する

 プロバイダIP電話サービスをAsteriskで待ち受けることに成功したので、NTT東日本からレンタルしているVoIPアダプタ(\380/月)は返却できそう、と思ったんですが、ふと思い立って実験。あっさり、Asterisk配下にREGIST成功しました(^^)/。管理画面から、普通にサーバー情報を手動設定し、UPnPをオフにしただけです。つまり、VoIPアダプタに接続したアナログ電話をAsteriskの内線端末として利用できるワケです。今まではAsteriskより上(ひかり電話側)にあるRT-200KI配下だったので、050着信した場合には鳴らなかったんですが、これでバッチリです。こういう働きをするアダプタをATAと呼ぶのですが、日本語で扱えて入手もしやすい製品として、このNTTのVoIPアダプタは狙い目かも知れません。レンタル継続決定w。

■留守番電話機能

  留守番電話機能も順調。応答時に特定のナンバーをプッシュするとメッセージ再生フローに分岐するといった、市販の留守電と遜色ない動作も成功。ただし、Asteriskで電話をとってしまうと、FAXやエアコンの遠隔操作デバイスが機能しなくなるので、これは後日専用番号を取得してから利用することに。

 機能としては、吹き込まれた音声ファイルをメールに添付して送信したりとかもできるのでまた色々遊べそう。

 そういえば、普通の電話機と違って、HDD容量はタンマリあるので、通話は無条件に録音しとくなんてライフログ的な試みもできたりするワケだなぁと思ってみたり。

 

 

 

 

 

 少し前のエントリで紹介したFreshReaderをインストールしてみました。バックエンドにSQLサーバーなどを利用しないので、PHP環境なら基本的にディレクトリ展開だけでOKな手軽さでした。

 ベータ版なせいか、普通に複数アカウントも作成できるようです。同じRSS feedをみてる人が何人いる、なんての表示も出たりで、ソーシャルブックマークっぽくもありますね。

 準備中の仮サーバーに設置してあるので、近日中にURLが変更になる可能性がありますが、とりあえず使ってみたい人は、アカウント作りますので連絡ください。>身内

 RSSアグリゲーター(リーダー)でWebをウォッチしてるけど、マシンが複数あって同期に困ってる、でもBloglinesみたいな英語サービスはどうも、なんて方にはオススメです。

 自宅の電話環境のIP化(ひかり電話&050IP電話)に絡んで、色々遊べそうだったので、オープンソースのIP-PBXシステムAsterisk(アスタリスク)を導入してみました。

 現在、新サーバーとして準備中のCentOSマシンに導入。yumリポジトリにはなかったので、ソースから構築。右の本には大変お世話になりました。Asterisk本としては現在日本唯一で、非常にわかりやすかったです。一部、バージョンやOSの違いからか、説明通りにいかなかった部分もありますが、なにやらいじってるウチに動いてしまったカンジ(^^;)。

 構成としては、ひかり電話ルーターであるRT-200RIがNTT東日本のSIPサーバーにクライアントとしてぶら下がっており、主回線の045番号を待ち受けています。Asteriskはアナログ電話機やフレッツフォンVP1000と同様にRT-200KIの内線子機としてぶら下がる形になります。更に、Asteriskには先日購入したWI-100HCと各PC上のソフトSIPフォンがレジストされています。更にプロバイダ提供の050IP電話もAsteriskで待ち受けに成功。Asterisk配下のWI-100HCやソフトフォン群なら045番号と050番号を両面待ち受けできています。WI-100HCをRT-200KI直下ではなく、Asteriskにレジストしたのは、前にも書いたとおり、WAN経由レジストの目論見があったのと、050番号を待ち受けられるのがPC上のソフトフォンだけでは不便そうだから、という理由です。

 AsteriskはSIPプロキシ以外にも様々な機能があり、保留や転送はもちろん、留守番電話なども実装されています。吹き込まれたメッセージはWAVやGSM形式のファイルとして保存され、そのままメールに添付して通知、なんてことも楽勝。保留音を自分の好きなMP3ファイルにするなんてこともできちゃいます。

 デフォルトの音声ファイルは、上記書籍の著書である高橋さんが日本語版を作って配布してくださっているんですが、なんとその声は声優の竹田えりさん。ミリア・ファリーナ・ジーナスですな。

 しかし、これはスゴいソフトですね。IPさえ届けば、遠隔の拠点間をつなぐ本格的な内線システムも簡単に作れてしまいます。設定ファイルをいじるだけで、あらゆる設定が瞬時に反映されます。どの番号にかかってきたらどの内線端末が鳴動するか、それで出なければ次は誰のを鳴らして、etc.本当に自由度が高いです。某オフィスで、PHSベースの内線システムの設定を変えるのにわざわざ業者を呼んで作業してもらわなければいけないのがバカらしく思えてきますな。しかも、内線番号ごとに伝言ボックスも設置できるし、メール通知もできるし、三人以上で電話会議をする仮想会議室なんてのも。今のあのオフィスの電話システムが毎月どれくらい払ってるか知らないですが、このAsteriskを含めて、IPセントレックスの技術・サービスは電話業界に相当なインパクトを与えるよな、と今更ながらに感心することしきりです。

ユーザーがRSSを共有できるサーバインストール型RSSリーダー「FreshReader」登場 - CNET Japan

 自サーバーにインストールして使える、サーバー型RSSリーダー(bloglinesのようなの)で国産品が登場したようですね。


  1. ブロガーライセンスなら無料

  2. Ajax対応

  3. RSS未対応でも解析で対応

  4. ユーザ間共有機能

  5. RSS内の危険なスクリプトを除去

  6. 日本語完全対応


と、今使っている(最近更新がなさげな)Feed on Feedよりはかなりヨサゲ。

 画面はこんな感じ。>画面直リン

 ちょうど今、サーバーの入れ替え作業をしているので、新サーバーへのToDoとして挙げておこう。利用希望者がいれば連絡下さい。>身内

 impressの記事だと、ブロガーライセンスと、一般(個人)ライセンスはマルチユーザでは使えないかも知れず。一般ライセンスは「3,000円/ユーザ」と書いてあるけど、じゃぁ6,000円で2ユーザになるのかどうか不明。さすがに10ユーザ版5マソはちょっと無料提供できナサゲ...

WI-100HC

 本日の購入備品はコレ。 ひかり電話用の無線LAN型子機。ひかり電話ルーターは、SIPという規格でLAN内の機器を子機として登録することができ、X-Liteなどのパソコン上で動く電話ソフトなどで自宅電話を受けたりかけたりできちゃうのですが、この「ひかりパーソナルフォンWI-100HC」は、無線LAN経由で単独で子機として動作する端末というワケです(というかむしろこっちが標準の使い方で、X-LiteとかはNTT推奨の利用形態ではないw)。

 詳しいレビューは、清水隆夫氏のブログが参考になります。

 電話機としては割とオーソドックスですかね。ケータイではあまり無いシボ加工の表面が、プラスチッッキーな安さを感じさせません。ツルテカなケータイよりも持ちやすいかも。

 充電器の端子がUSB-miniBなのに、本体のPC接続用の同端子に挿しても充電できないっつーのはどうよ、と思いますが...

 あと、イヤホンマイク端子もないですね。まぁ、コードレス子機なんだからってのはありますが、それならむしろハンズフリーは欲しかった。

 一方で内線ボタンはなく、「1+発信」のような形を採るので、子機としても半端っちゃ半端。ちなみにショートカット発信は数字キーの長押し。

 さて、一人暮らしな上に、HS登録したPHSも含めると4台もの子機がトイレにまで設置してある我が家に、なぜこれを追加してみたか、というと、

  • Webサーバーが動いていて楽しげだったから
  • インターネット経由で自宅の電話を使ってみたかったから

という2点(^^;)。

■httpサーバー内蔵の電話機

 Webサーバーといっても、任意のコンテンツを公開できるワケではなく、PCからブラウザで設定画面を呼び出して、電話帳を操作したりできるってだけ。先述のUSB端子でPCにつなげば同じことはできるので、別にLAN経由する意味は全くないんですが...。まぁ、ガジェット好きな人ならこの気持ちはわかってもらえるかとw。PDAやiPodでLinuxが動く、ということ自体がワクワクするのと同じですわ。

 でも電話帳の一括バックアップ&レストアなんかも簡単なCGIで実装されてるようので、たとえば大規模な事業所でこれを利用した場合、簡単なスクリプトで一斉更新とかできちゃうでしょうね。

■WAN経由利用

 さて、問題はWAN経由利用が本当にできるのか?ということです。X-Liteで試した限りでは、単にルーターのポートをあけるだけではダメっぽかったです。X-Liteの場合、ホストOS自体をSoftEtherなりで自宅のLANにVPN接続してやれば利用可能でした。しかし、WI-100HCには当然VPNスタックがないので、そういうワケにもいきません。ちなみにブラウザも搭載されていないので、Webで認証するタイプの公衆無線LANスポットでも利用は無理でしょうね。FreeSpot位?あとは実家とかオフィスとか。暗号化はWEPとWPA-PSKに対応していて、複数の設定を切り替えることもできます。

 話を戻して、SIP登録。ググると、LAN内にAsterisk(オープンソースのIP-PBXソフト)を立て、それをひかり電話ルーターに子機として登録し、WI-100HCはAsteriskに対してクライアント登録、という方法では成功例があるみたいです。Asteriskの方が汎用性が高いので、さもありなんですね。ちょうど来月あたり、そろそろ自宅のサーバーを刷新しなければと思っているので、Asteriskにも挑戦してみようかと。

 道具眼もそのうちアシスタントを雇いたいなぁと思ってるわけですが、IP-PBX環境が整えば、アシスタントの人は自宅にいながらにして、道具眼宛の電話がとれるわけで、σ(^^)は日中寝ていても大丈夫なワケでw。

 つーか、そろそろ道具眼とプライベートで電話番号をわけることも考えとくべきかな。ひかり電話なら追加番号がたったの\100/月だし。

 ひかり電話の工事が終わりました。

 ひかり電話はBフレッツのハイパーファミリーが必須とのことで、ついに切り替え。心配していた速度低下は見られず(向上もせず)でした。フレッツスクウェアの速度測定で最高88Mbpsってとこですね。とりあえず落ち込まなくて一安心。

 さて、前のエントリでひかり電話用ルーター(RT-200KI)を自身のハブを使って分岐したと書いたんですが、RT-200KIのLAN側にSIPフォンをぶら下げて遊べそうなので、LAN側を自宅LANに接続することにしました。そこで単体のハブを調達し、結局下の図のように配線しました。

配線図

 どうやらRT-200KIの内蔵ハブはあまり質がよろしくなかったようで、Planexの5ポートスイッチにかえたら、以前見られた速度低下は皆無になりました。ワイヤースピードが出ているようです。

 次にBroadBand Watchの清水さんの記事を参考に、X-Liteを導入。あっさり通話に成功。WindowsでもMaxOSXでも自宅の045-番号で発着信できています。これでSkype用にMac miniにリンクしてあるBluetoothのヘッドセットで自宅の電話も受けられるようになりました。すごい世の中だ。留守電とFAXの問題がなければアナログ電話を全廃できそう。

 つーか、VPNと組み合わせたら外出先からでも自宅番号で受発信できちゃったりして?アリバイ作り(なんの?)に使えそう。今度オフィスか実家から試してみよっと。

 ちなみにひかり電話では時報に発信できないですね。IPネットワークの遅延があるからアテにすんな、ってことですかね。まぁ、NTPがあるので自宅のPCを信用して、時報にかけるなんてこともめっきり減ったからいいんですが。あとは0570-にかけることがどれくらいあるか...

外部記憶:クイック投稿(QuickPost)の文字化け解消

 長らくご迷惑をおかけしました。>当サイトのMT利用者
 上記の外部記憶さんの記事を参考にクイック投稿の文字化け対策を完了しました。管理画面からクイック投稿のブックマークを再作成するか、既存ブックマークを編集し、「escape」を「encodeURIComponent」に置換(三ヶ所)すれば大丈夫そうです。

 わかりやすい記事をありがとうございました。>外部記憶さん

 このブログも月数を数え、右メニューの月別アーカイブへのリンク行数が増えてきたので、カレンダー下にプルダウンメニューとして移設してみました。

 メインインデックスのテンプレートを二ヶ所ほどいじるだけです。

 まずプルダウンメニューを触るだけでページ遷移が実行されるJavaSriptをヘッダ部分に書きます。今までページ内で他にJavaScriptを使っていない場合は、</body>の直前あたりに以下を挿入します。すでにJavaScriptを使っている場合には、4行目から8行目を適当なところに貼ってください。

<meta http-equiv="Content-Script-Type" content="text/javascript">
<script language="JavaScript">
<!--
function jump(url) {
  if (url != ""){
    location.href = url;
  }
}
-->
</script>

 つぎに、プルダウンメニューを表示したい場所に、

<form>
月別一覧:<select name="month" onChange="jump(this.options[this.selectedIndex].value)">
<option value="">年月を指定してください</option>
<MTArchiveList archive_type="Monthly">
<option value="<$MTArchiveLink$>"><$MTArchiveTitle$></option>
</MTArchiveList>
</select>
</form>

を挿入します。<form>と</form>は不要かも。σ(^^)は、カレンダー定義部分の</table>と</div>の間に入れてみました。

  同じようなことをしてみたい方の参考になれば幸いです。

 本当はカレンダーの上の「2005年10月」ってラベル自体をプルダウンにしてしまえば直感的なんでしょうけど、それにはジャンプした後の月別表示テンプレートも同じようなレイアウトにしないとUIとしてはヘンなので、それはテンプレートをがっつりいじれるヒマが出来たときに考えよっと。

 

 

 朝の4時頃、仕事部屋の方から「ピーーーーー」っと音がするのに気付いて、音源を探してみると、普段存在すら意識していなかったUPS(無停電電源装置)が鳴っていました。LEDの点灯内容をマニュアルで調べると、故障だからサポートに連絡しろ、とのこと。とりあえず一度サーバーを止めてUPSを再起動すると音は止んだものの、バッテリーレベルゲージが最低のまま。しかも数分でバチっと電源が遮断orz。TeraStationは再起動後、RAIDチェックモードに突入...

 こりゃダメだと思い取り外す。背面のラベルをみると導入は2000年5月。この製品のバッテリ期待寿命は5年。ちょうど5年たってら。今回の故障はバッテリと無関係かも知れないけれど、どのみちバッテリも交換時期で、さらに修理代までかけると新品買った方が安いかも、とリサーチ。購入したぷらっとホームにメールしてみると、ユーザでバッテリ交換できるタイプではないので、メーカー送りになって買った方が安いとのこと。ちなみに新品は送料込みで\2マソ強。最初から交換前提の製品じゃないのね(まぁ、5年前はもっと高かった気がするけど)。

 修理だけで済めば安くあげられる可能性もありますが、そもそもが個人宅でのUPSなんて精神的な安心感が目的みたいなものなので、ケチらず買い換えることに。最近ではAPCやomronのものが量販店で安く買えるようになってきましたが、サーバー側に停電連動シャットダウンのドライバをインストールしなおすのが面倒なのと、まる5年間不安なく働いてくれた信頼性を買って、再度まったく同じ製品、三菱のFreqship-Fに決定。メールの返信も迅速で丁寧だったのでショップも再度ぷらっとホームを利用。

 5年も立ってまったく同一の製品を買い直したのなんて初めての経験かも。っていうかまったく同じモデルが現役だなんてUPSのライフサイクルって長いんですねぇ。

 

 最大1TBのディスクとして使えるNAS(ファイルサーバー)、TeraStationがファームウェアのアップグレード中にお亡くなりになりましたorz。RAID5にしてたので750GB。動画が中心で500GBほどデータが入ってた。

 といっても症状からしてディスクは無事で、フラッシュROMのBIOSの書き換えに失敗したらしい。こうなると起動しようがないので、打つ手無し。修理決定。しかし、BUFFALOのサイトをみると、動作確認のために内容を消去します、と書いてある。保険としての「消去する場合があります」という書き方ではなく、必ず消すような口ぶり。それならバラして各HDDをLinuxマシンにつなげて中身を吸い出さないと修理出せないじゃん。

 ということでTeraStationをもう一台購入。アフォだ。20%還元とはいえ、とりあえず現金10マソとびました。作戦はこう。フラッシュROMさえ生きていればブートはできるので、古い方のHDDを新しいガワに入れて復活。古いガワには新品のドライブを入れて修理にだす。初期化でもなんでもしてくれ、と。

 高くついたけど、やっぱりこのデータを失うわけにはいかない。RAID5といえどアボーンする事例も少なくないようなので、結局TeraStation二台体制でバックアップをとるしかないかと。ミラーするなら1TBとして使えるし。

 と自分を納得させてみる...

 当サイトのブログに使っているCMS、MovableTypeを3.2のアップグレードしました。
 MySQLのパーミッション絡みでエラーが出ててこずりましたが、とりあえず順調に動いているカンジ。
 といっても見ている方にはほとんど関係ないですね。

 目玉は迷惑コメント、トラックバックの管理機能の強化ですね。トラックバックも一括消去できるようになりました。久しぶりにコメントを整理していて、せっかく書いてもらったのに未掲載のものがいくつか。すみません。>TypeKeyを使わずに書き込んでもらった方
 コメントが記入されたらメール通知されるはずが、こない時があるんですよね。

■業務連絡


 というワケでアップグレード作業完了。なにか問題があればお知らせ下さい。>当サイトのブロガー諸氏 
 制限事項としては、とりあえずケータイからの投稿プラグインが動かなくなっています。まぁ、σ(^^)くらいしか使っていないようなので、追々なんとかします。 
 あと、BlogWriteIIで投稿できないっぽいです。これは向こうの対応待ちかな?

こちらの手順でBlogWriteは使えるようになりました。

 サーバー、特にHDDとディストリがかなり古くなってきているので、そろそろ刷新を考えようと思いつつはや数ヶ月。

 マシンだけは用意して、hkondo氏協力の下、Gentoo2004を入れてはみたものの、放置気味。結局本格稼働前に2005とか出ちゃうし。ffmpegがどうしてもコンパイル通らないとかいくつかアヤシげな点もあるし、いっそクリーンインストールからやり直そうかと思ったりも。 無理にX無し構成にしたのがイカンかったのかしら。当時はCinema Displayで良いDVI切り替え機がなかったので、モニタレス運用を想定してたので。が、現在はDELLにかえてアナログ入力が空いているので、最近のX環境を触ることも動機付けの材料にしつつ。

 で、どうせ新規インストールするならディストリ変更も視野にいれようかと。Gentooの思想は非常によくわかるし、便利だと思うんだけど、いまいちやってることが不透明でいまだに馴染めなかったり。普通にルーチン化してしまえばなんてことないんだろうけど、なんか、最近の興味の低さでは新しい作法を覚えるのが億劫なんだよなぁ。 

 今考えてる候補としては、Gentoo2005、Vine3、Fedora4、Suseあたりですかね。Vineはやっぱり一番慣れてるので安心感がある。でもなんか失速感も不安。Gentooはどれくらい元気なんだろ?Fedraはサーバー用には“新しモノ好き”すぎな感もあるけど、逆にパッケージでなんでも揃うことを考えれば楽は楽だろうなと。ただメジャーバージョンアップ後のメンテナンスが心配だったりも。今のメジャーリリースのペースにつきあう気はサラサラ無い。そうすっと、数万程度の出費は覚悟するから、数年はメンテリリースしますって約束してくれるSuseみたいな商用パッケージてもいいかなと思ったり。

 オススメのディストリあったら教えてください。

 動かしたいサービスは、Apache+PHP、Samba、WebDAV、sshd、postfix(with SMTP Auth)、imap4、pptpd、DHCP、ntp、SquirrelMail、xGate、MovableType、Feed on Feedくらいかなぁ。SoftEtherもLinux版が出たら移行したい。

 つーか、ホント時間がとれないから、いっそ誰かバイトでやってくれんもんかなとも思ったり。

レッドハット | トレーニング | コース診断テスト

linux_skill.png RedHatが実施しているオンラインのLinux 習熟度テストの基本コース。

26point...orz

 ヤマカン無しで、わからないものは「わからない」を選択。まぁ、100点満点ではないみたいですが。

 「あなたの知識は偏りがあります」って、そりゃvimとか使ったことないしなぁ。いっぱしのLinux使いはそれくらい使えないとダメですか、そうですか。

 それにしてもあまり実用性の高くない設問が多かった気がします。サーバーコースとかだとまた違いのかなぁ。今度時間みつけてやってみよっと。


 来月結婚する妹夫婦へのプレゼントとして、二人が経営する店の名前でドメイン名を取ってみました。汎用JPドメインを年額3,690円でDNSまでやってくれるレジストラを発見し、そこで申し込み。Webサーバーとメールサーバーはウチでバーチャル・ホスト。
 Webの方はApacheで何度もやってるので問題無し。今回、Postfixでメールのバーチャル・ホストに初挑戦。

 やってみると結構簡単でした。大規模な管理だとDBと連携して、とかあるみたいですが、当面二人+営業用アドレスだけなので、UNIXユーザに紐付けする方法を採りました。

まずmain.cfに


virtual_maps = hash:/etc/postfix/virtual

の1行を追加。
 続いて、virtualというファイルを作成して、

rolls.jp anything
user1@rolls.jp user1
user2@rolls.jp user2
shop@rolls.jp user1, user2
webmaster@rolls.jp furuta

などと記述。1行目はお約束。2行目以降はヴァーチャルなメールアドレスとUNIXユーザ名を対で書きます。
 できあがったらpostmap virtualすれば、ハッシュファイルvirtual.dbが作成されます。
 あとはuser1、user2といったUNIXユーザアカウントを作成し、postfixを再起動すればOK。mydestinationなどのリレー設定は自動でやってくれるみたいです。

 妹は色々アレなHotmail使いで今時どうよってカンジだから、これを機にウチでPOPなりIMAPな環境に移行させたいところ。THUNDERBIRDかリスメールでも覚えてもらおうか。Hotmailって外部アドレスへの転送機能ってないんだろうか?ないだろうなぁ...
 義弟の方はそもそもメールをあんまりしないみたいだけど使うだろうか?まぁ、今時、飲食業といえど仕事のやりとりにも必要ではないだろうか。最悪、ケータイに転送してでも。

 後はWebサイトだなぁ。

 うを、ツカケン宛にIPAのセキュリティ・センターから「おたくのサイトのとあるページに脆弱性があるので担当者のアドレスを教えれ」というメールが。そのメールに具体的な脆弱性の内容は書いてないけど、対象URIを見た感じクロス・サイト・スクリプティング(XSS)に関する脆弱性だろう。あのサイトは時期によってPerlとPHPのコードが混在していて、指摘は随分昔に書いたPerl部分。もうPerlは引退して久しいし、手元にリファレンスも無かったので、Webで情報を探しながら、とりあえずタグの除去処理を追加。
 更に調べてみるとPHP部分でもフォームの内容をそのまま表示している部分があることを発見し修正。
 これでいいのかな?IPAからの詳細連絡待ち。

 やれやれ。こういう被害を防ぐために行われている人的、計算機的資源って世界的に見たらスゴいんだろうな。世界中のマシンで稼働しているNortonとかスパムフィルタの処理パワーを振り替えるだけでサクっと宇宙人が見つかったり、癌の特効薬が見つかったりするんじゃないだろうか...

シックス・アパート、脆弱性を修正した「Movable Type 3.15」を公開

 MovableTypeがアップグレードされた。旧バージョンのスパムの踏み台にされる可能性のある脆弱性はプラグインにて対処済みだったが、他にも色々直ってるみたいだし、今日はオフ気分だったので着手してみる。

 アップグレードは普通に完了。手順書の「mt-upgrade31.cgiを実行」ってApache経由って意味ね。コマンドラインから実行してエラーが出て悩んでしまった。

 問題は個別に修正している部分が全てやり直しになること。以下、過去のエントリから拾い集めた備忘録。

・カレンダーを月曜始まりに

 lib/MT/Template/Context.pmを修正する。
my $days_in_month = days_in($m, $y);
my $pad_start = wday_from_ts($y, $m, 1);
my $pad_end = 6 - wday_from_ts($y, $m, $days_in_month);

require MT::Entry;
my $days_in_month = days_in($m, $y);
my ($sdow);
$sdow = 0 unless ($sdow = $args->{sdow});
my $pad_start = (wday_from_ts($y, $m, 1) + 7 - $sdow) % 7;
my $pad_end = 6 - (wday_from_ts($y, $m, $days_in_month) + 7 - $sdow) % 7;

require MT::Entry;

・検索対象を自ブログのみに限定

過去のエントリを参照。

・コメントスパム対策

 kawagutiの指摘による改変作業。

 mt-comment.cgi冒頭に赤字部分を追加。


use strict;

# Check spam comment
# die when value "spammer" is null.
use CGI qw(:standard);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
my $data = param('check');
die unless($data);
}


 lib/MT/Template/Context.pmに、赤字部分を追加(二カ所)。


<input type="hidden" name="entry_id" value="$entry_id" />
<input type="hidden" name="check" value="hoge" />

 後はユーザ毎のテンプレートなので今日の作業では上書きされていないはず。とりあえず、各利用者(ブログ開設者)の方は再構築やコメント周りの動作確認をお願いします。

 朝起きてみるとayanから道具眼のサーバーがおかしいのでは?とMessengerでメッセージが入っていた。ウチでaliasしているメールアドレスがエラーになるとのこと。naokAもブログが書けないらしい。そのアドレスにはとある経緯があって「どうせアドレスを間違えているんじゃねぇの?」と疑いつつAliceにログイン。あれ、弾かれるぞ?どうもDisk Fullになっているらしい。

 AliceがDisk Fullになるのは相場が決まっている。NFSでマウントしてrsyncでバックアップをとってるLinkStationのHazukiが問題を起こしてるからだ。調べると電源が落ちてる。あー、昨日ブレーカーが落ちた時に復帰してなかったんだ。
 現在は毎朝4時にシェルスクリプトでHazukiを/mnt/hazuki/下にマウントして、そこにバックアップを書き出す。ところがスクリプトが手抜きなので、マウント成功かどうかをチェックしてなかった。UNIXをご存じな方は知ってると思うが、マウントに失敗してもローカルのHDDに普通に読み書きできてしまうので、スクリプトは自分自身のHDDにバックアップを始めてしまう。おかげであっという間に空き容量が食われてしまう訳だ(rsyncで同期していても、バックアップ先が空なのでフルコピーされる)。

 いつもはこの状態でもログインだけはできてたのに。ログインできないとファイルを消す作業もできないので焦ったが、hkondo氏のアドバイスに従い、物置からアナログCRTを引っ張り出してきてつなぎ、キーボードはUSBのものをMacから引っこ抜いてきて無事コンソールでログイン。ファイルを削除。

 再発防止のためにスクリプトを改良してみた。-dコマンドを使って、マウント後なら見えるはずのディレクトリが存在しているかどうかチェック。そのままスクリプトを終了してしまうとバックアップが行われないままになってしまうので、else節に警告メール(hazuki_down.txt)を送信するように設定してみた。

#! /bin/sh

mount /mnt/hazuki/

if [ -d /mnt/hazuki/etc/ ]; then
 /usr/bin/rsync -av --delete /home/ /mnt/hazuki/home/
 以下、rsync群がズラっと...
else
 mail furuta@do-gugan.com < hazuki_down.txt
fi

umount /mnt/hazuki/

 それにしてもこういう時にモニタがないのは不便だなぁ。というかCRTを担いでくるのが大変。かといって普段からつなげておく場所もないし。いっそこういうの→を買ってみようか。CD-ROMドライブなどを入れる5インチベイにスッポリ収まる4インチ液晶モニタ。ちょうどベイ空いてるし。でもこれで5万は高いよなぁ。うーむ。



 さて、容量を空けたら無事に動作復旧したようで、ayanにメールの再送を依頼。え?まだダメ??って、やっぱりアドレス間違ってんじゃんっ!

 どうもLinkStation(HG)の時計ずれる。LAN内のNTPサーバーと同期させてるのに...。ファイルサーバーとしては秒単位のズレはあまり気にならないけど、LinkDe録で録る番組が頭数秒~十秒程度欠けてしまうのはいただけない。

 telnet化してあるので、ログインしてコマンドラインでntpdateしてみると、その瞬間はNTPサーバーや117とバッチリ同期してるっぽい。cronで定期実行させる辺りの問題か?

 /etc/crontabをみると、


SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

02 4 * * * root /etc/cron.d/chk_proc.sh
05 4 * * * root /etc/cron.d/logrotate
08 4 * * * root /etc/cron.d/calib_time.sh
00 */12 * * * root /etc/cron.d/scheduler
30 */3 * * * root /etc/cron.d/ntpdate

となっていた。calib_time.shとntpdateの2つも時刻合わせ関係のスクリプトがある。試しに手動で実行してみると、前者はむしろ2秒ほど狂いが発生する。中身を読み込むのも面倒なのでw、とりあえずntpdateだけにして様子を見てみよう。

 Bフレッツのニューファミリー→ハイパーファミリーの移行、一応申し込んであって、今月下旬の工事も決まってるんだけど、やっぱキャンセルしようかと。

 偽(非共有)ニューファミリー状態の方が、実質ベーシック的に使えてヨサゲ。現状でもフレッツスクエア内で70Mbps以上出てるし、工事費に\2万も払うのはねぇ。

 どうも、NTTが行政指導を受けてニューファミリーをちゃんと共有型に移行していかないといけなくて、その費用を捻出するための苦肉の策ってことらしい。NTTが自腹切ってでも本当にニューファミリーを共有型に変更する頃に乗り換えるのを待ちつつ、適当にお得なキャンペーンがあったら、って感じかな。

 ファームウェアをバージョンアップする度に設定が初期化されるLinkStationのLinuxBox化とNFSマウント許可の覚え書き(自分用。超不親切)。近々、LinkDe録の正式ファームが出た際にまたやると思うので。

別マシンでマウントする

  • ここからマジックナンバー修正ツールとLinux Box 化ツールをゲット。
  • LinkStationからHDDを取り出し、Linuxマシンにつける。
  • (我が家特有のメモ)IEEE1394ケースを使ってとりつけるので、/dev/sda1になる。ディスクが上手く認識されない場合は、ieee1394とohci1392モジュールをrmmod -> insmodする。
  • fix_ext2_magic /dev/sda1でマジックナンバーが0xef54なのをチェック
  • fix_ext2_magic --fix /dev/sda1で書き換え
  • /sbin/fsck -f -n /dev/sda1でエラーチェック。修復は-f -y。
  • マウント(我が家ではfstabに設定済みなので、mount /mnt/rackでOK)

LinuxBox化

  • tar xzvf linuxbox.tar.gz -C /mnt/rack/ (最近のファームではftpは入っているので、我が家では上記アーカイブからproftpdを抜き、下記テンプレートを追加したアーカイブを使う)。
  • /mnt/rack/etc/inetd.confを覗き、telnetの設定がコメントアウトされていたら外す。もし記述がなかったらinetd.conf.addをコピー
  • /mnt/rack/etc/securettyにpts/0が含まれているのを確認
  • passwdファイルはファーム更新ではクリアされないっぽい。初回LinuxBox化時はrootのパスワードを消しておく。
  • HDDをアンマウントして、LinkStationに戻す。

NFSマウント許可(HGLANのみ)

  • telnetする
  • /etc/hosts.allowを portmap: 192.168.0.1 :allow のように書き換え(IPアドレスは適宜読み替え。シャットダウンの度にクリアされる?)
  • /etc/exportsに /mnt/backup/hoge 192.168.0.1(rw,sync,all_squash,anonuid=0,anongid=0) のように追記(hogeとIPアドレスは適宜読み替える)。
  • inetdデーモンを再起動。/etc/rc.d/init.d/inetd restart

 こんな感じだったような気がする。

 お、いつのまにかSubVersionのヨサゲな解説本が出てる。そのうち本屋で探してみるための覚え書き。


 んが、表だの裏だの言ってるけど、検索ボックスの検索対象が同一ホスト上の全ブログ横断になっていることが発覚。
 表裏どころか、ウチでホスティングしている方々のブログまでヒットしちまうぢゃんか。

 これはヤヴァいとかいう前にかえって不便な気がする。

 ココを参考にさせてもらい、search_template/default.tmplの

の中に、

<input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" />

の一行を追加。本当は表ブログからは速記やお作法のコーナーは検索できても良いんだけど、このテンプレートは共通設定にしかできないようで、当サイトで運営しているブログはすべて、そのブログ内のみが検索対象となりました。>関係各位


 いい加減、サーバー移行作業に借りている(返してもらっている)PCを返す目処をつけないといけないので、まじめに作業するべく、Apache(Webサーバー)とPostfix(メールサーバー)の解説本を買ってきた。どっちも2.0系列は初めてなので、この際、環境設定ファイルを一から整理しなおそうかと。

 WindowsXPのWebフォルダでApache+mod_davなWebDAVリポジトリがマウントできない件、ユーザ名に勝手にドメイン名が付加されちゃう件を防止する設定とかをサーバー側に色々してもダメ。
 最後の決め手は、URI指定時に、

http://do-gugan.com/hoge?

みたいに末尾に?をつけるってとこだった。なんじゃそりゃ。でも、これでvalid-usersやhtpasswdにドメイン付きのパスワードを設定しなくてもヨサゲ。

 忘れないようにメモ。

 いまだにPHPすらまともに動かせないorz。素でPHPコードがブラウザに表示されるし、漢字も全部化ける。php.iniやapache2.confをかれこれ2時間くらいいじり回してるが解決せず。

 うぅ、Gentoo挫折気味...

AUSGANG SOFT

画面サンプル

 σ(^^)はAmazonアフェリエイト(売れると紹介料が入るIDが入った)リンクを作成するのに、ここに自前のフォームを作ってASINという商品IDを打ち込んでたんですが、単なるテキストリンクではなく、製品写真も含められると彩りとして良いなぁと思ってました。

 で、それを簡単に実現できるツールを探して、上記のAsociateHelperを発見しました。いくつかバージョンがありますが、σ(^^)のメイン・ブラウザはIEではないのでHTML版を利用させてもらいました。画像も何種類からか選べたり、大きさやテキストの付き方もプレビューを見ながら調整できたりとなかり良い出来です。

 Bookmarketになっているので、Amazonで目的の商品を表示した状態で、AsociateHelperのブックマークを呼び出すだけで、左の様なウィンドウが表示され、出力されたHTMLをコピペするだけで、こんなカンジ(→)にできあがります。スパシーボー!

 フォームのレイアウトが少しわかりづらかったのと、bk1対応など不要なボタンが多かったので、少し改造してみました。MT投稿も文字化けしたりエラーになってしまうのでガバっと削除。CSSのIDの付け方もウチで使いやすいように少し変えてみたり。Bookmarkletのリンクも埋め込んでしまったので、HTMLファイル1つで設置できます。

 もし利用した方がいればお知らせ下さい。クリップボード経由の貼り付けに特化させたので、MovableType以外のブログツールや、ブログ以外でも有用だと思います。

 有益なツールを公開して下さっているAUSGANG SOFTさんに感謝です。

(ちなみに画像はAmazon.co.jpからの直リンクになるので、Amazonで該当商品のエントリーが消滅すると、画像が表示されなくなる可能性もあります。)

 道具眼の主サーバーAliceのOSをクリーンインストールすることにしました。メンテナンスログによると、現行のVineLinux(当時2.5CR)をセットアップしたのが2002年5月1日。Vineは3.0がリリースされてますが、今回はhkondo氏に紹介してもらったGentooLinuxを採用。既成RPMパッケージを利用するのではなく、自身でコンパイルオプションを指定した上で、最新ソースからのビルドを自動で行ってくれるPortageという管理システムの話を聞いてビビッと来た。ApacheやPHPなど複雑なオプションがあるソフトにヨサゲ。それもあってディストリビューション自体のバージョンにあまり意味がなく、常に個々のパッケージを最新の状態に保てる。ハード的なトラブルを除けば、こうしたクリーンインストールからのバージョンアップの必要性を減らしていけるだろうという目論見(開発コミュニティがパッケージを提供してくれる限り、ではあるが)。クリーンインストールはどうしてもサーバーのダウンタイムが長期化するので避けたい。

 さて、では今回のクリーンインストールによるダウンタイム発生はどう回避するのか?
 サーバーのスペック(PentiumIIIs/1.2GHz)にはさほど不満がないので、ガワは現行のベアボーンで続投。HDDだけほぼ新品のDiamondMax Plus9(購入当時静音&低温で好評だったモデル)に交換。幸いなことに某所に同型のベアボーンを貸してあったので、それを一時的に返却してもらい、現サーバーのHDDを移設。しばらくは身代わりサーバーを努めてもらう。当時お買い得だったベアボーンTerminatorTu、都合3台も買っておいて良かった(^^;)。おそらく次にクリーンインストールする時は、ハードを刷新する時だろう。

 とりあえずこの交換作業が終了。元のサーバーマシンは色々静音対策が施してあったので、それに比べると身代わり機は五月蝿いな。これからしばらくこの音が鳴りっぱなしだと思うとちょっぴりブルー。作業を急ごう。

 元サーバー機内部には埃がビッシリ。静音の関係で通風口も減らしてあるせいもあるかな。その辺も少し見直しが必要かも知れない。

 今日は朝からオフィスのネットワークがつながらないと一騒ぎ。日曜の深夜からWANが死んでるのは認識してたけど、そんな時間に渋谷の鯖管F氏を電話で叩き起こしてもどうにもならんと思い放置。朝イチでルーターを再起動でもすりゃ直るだろ。

 朝になってWANが復旧するも、横浜ブランチのLANが死んだままらしい。珍しくそんな時間に起きたので、横浜ブランチのあるビルに入ってるカレー屋でランチを食べようと出社。早速渋谷からの電話でF氏に捕まり、ルーターや基幹ハブの再起動をさせられる。効果無し。σ(^^)が管理しているファイルサーバーと実験サーバー間は通信ができるので、DHCPの問題かとも思ったけど、同じく固定IPのはずのプリンタにpingが通らない。どうも一部のハブかケーブルに障害がでているらしい。基幹ハブの全ポートのLEDが激しく明滅。ヘンなブロードキャストパケットがどっかから出てるっぽい。F氏によると、以前ケーブルのループ接続(1台のハブに1本のケーブルで2ポートを直結)で同じことが起きてたらしい。2時間くらいしたら管理業者が来て各ハブをチェックして回るというので、「そんなの基幹ハブのケーブルを1本ずつ抜き差しすりゃわかるやん」と提案。2本目を抜いたところで明滅が止まる。この状態でほとんどのマシンは復旧するはず。オフィス全員に声をかけて未だに不達の島に手を挙げてもらえば、ほら判明。やはりその島のハブにケーブルがループで刺さってました。周辺の席の人は身に覚えがないらしい。まぁ、いいや犯人追及はσ(^^)の仕事ではない。ayan嬢には「また物理ケーブルの問題でしたね」といわれる。うむ、確かに。

 話を聞くと、前にも起こったことがあるらしい。スパニングツリーとかいう機能がついたハブならループしても平気らしい(つまり普段からハブ間のケーブルを多重化しておける)が、台数を考えると全部リプレースってワケにもいくまい。なんか安上がりな再発防止策はないもんだろうか?

 我が家はブロードバンドルーターや無線LANアクセスポイントに内蔵のものもいれると、ハブが16+8+4+4で32ポートあり、たぶん20本くらいのケーブルが部屋中を這い回っている。ハブ側のコネクタにはどのマシンから来てるケーブルかわかるようにラベルが貼ってあり、ケーブルの色や形(フラットなど)もなるべくバラして買うようにしているので、ループなんてしたことないなぁ。

 まぁ、横浜ブランチだけでもそれなりのポート数があるので、いちいちラベルはつけてられないかも。ケーブルがすべて水色一色で統一されてるってのも管理上はデメリットなんだよなぁ。ちょっと思いついたのは、全ケーブルの片方のコネクタに当たりにカラーのテープを巻いといて、必ずそっちをハブに刺すというルールにすれば、テープがついていないクセにハブに刺さってるヤツがぁゃιぃということで、ループ接続がすぐに見つけられるのでは?ってこと。

 鯖管、ネット管経験者の方、なんか定番or独創的な防止策があったら教えてください。

バッファロー、RAIDに対応した容量1TBのLAN接続型HDD「TeraStation」 [BroadBand Watch]

 お、噂のアレが発表になってる。RAID5で750GB(250GBx4台構成)で11マソかぁ。ビミョーな値段だけどそそられるなぁ。

 今250GBが\15,000位だからHDD部分が6マソ。残り5マンでLinuxなファイルサーバーを自作できないことはないんだろうな。

 自作に比べると、
・管理の手間がかからない
・ケースのデザインが好みw
・静音&省電力(多分)
あたりがポイントかな。現行LinkStationみたいにLinux化してカスタマイズが効くなら買いかなぁ。


続・質問箱/29 - PukiWiki.org

 なぜかウチで頻発する、プレビュー時に中身が空欄になってしまう問題。
 最新のPukiWiki 1.4.4_php5.0では、edit.inc.phpに上記に該当する行が存在しなかったが、にたような部分の書き換えで解決。

40行目の、

if (isset($vars['template_page']) && is_page($vars['template_page'])) {

if (isset($vars['template_page']) && is_page($vars['template_page']) && $post['template_page']!='') {

のように書き換えたら解決しました。

補足
 おや、これだとテンプレートの読み込みが反映されない模様。

 今朝もそろそろ寝るかと思った頃、Messengerでオフィスの自席で稼働させてるトンネル・サーバーAsunaが動いてナサゲと連絡。確かにVPNでLANに入ってもsloginできない。別マシンに入ってそこからpingを打ってみても反応なし。
 昨日の落雷で瞬電でもあって落ちたかな?あのマシン、オートリブートしなかったっけ?fetchmailも動いてないと不便だから診に行くか、とノロノロとベッドから起き出し、服を着込んで髪ボサボサのまま出社。

 σ(^^)は毎日は出社しないので、留守中誰かが席を使ったり。今朝も誰かのノートPCが広げられてたけど、それを避けてAsunaのキーボードを引っ張り出す。
 ふむ、電源は入ってる。コンソールからログインもできる。ただしトンネルが生きてない。w3mでWebを見ようとしてもDNSが引けないとエラー。他の人は大丈夫らしい。このマシンはDHCPを使ってないので、週末にDNSサーバーのアドレスがかわるような工事があって、コイツにだけ反映されてないのか?管理者からそんな連絡ももらってないけどなぁ。他の人のマシンのDNS設定を見せてもらうが同じ。うーむ、わからん。とりあえずNICだけ再起動してみよう。

 % /sbin/ifdown eth0 ...OK

 % /sbin/ifup eth0 ...

あれ、あがってこない?ゲートウェイと通信できないのか?もう少し待ってみようと視線が辺りを泳ぐ...

 んが、Etherケーブル抜かれて、手前の誰かのノートPCにつながってるじゃん...orz

このThinlkPad誰んじゃ、(キ゜Д゜)ゴルァァ!!

 ケーブルを戻し、「使ってないようでもサーバーですんでケーブル抜かないで下さい」と書き残してオフィスを出る。噂では会長のではないかと。

 しかしこんなひと目見りゃわかるはずの問題に気付かずあれこれ試して時間を無駄にしたσ(^^)はまだまだか。ネットがつながらない時はまず物理レイヤーから疑うのは基本ですか、そうですか?

 鬱だ、寝よう。


私信:
 とりあえずAsuna復活したからメールとれると思います。>naokAっち
 Pismoの無線LANの不調も診ようと思ったけど、当分戻ってこなさそうだし、日も高くなってくるので一旦帰って寝ます。日が沈んだら起きてまたお伺いします。おやすみなさい。

 たぶん、MT3.1にした時からだと思うのですが、TypeKeyによるコメントができなくなっていたようです。既知の問題だったようで、MT2.6時代から使ってたテンプレートのブログに問題が発生したようで、コメント部分を適当に移植して直しました。
 ご迷惑をおかけしました。>利用者の人&コメントしようとした人

 この辺り、まだまだデザインとシステムが分離しきれてないなぁ、と思いますね。>MT

 何日か前からWebメール“SquirrelMail”にログインできなくなる現象が発生していたので、検証。

 1時間くらい悩んだ結果、えふきむ日誌(2004-08-28)さんの記事で解決。そういや、ウチもFEED on FEEDでmbstringが働かなくて、mbstring.func_overload = 7にしてみたんだった。結局役にたっていないようなので0に戻す。
 おっし、直った。えふきむさん、ありがとう。

 ついでにプラグインも更新したり新しい便利そうなものを追加したり。

○更新
・compatibility
・secure_login
 httpで来ても強制的にhttps(SSL)にリダイレクト
・quicksave
 間違えてブラウザを閉じても書きかけの文章をCookieに保存
・autocomplete
 Outlookなどのように宛名欄でアドレスの補完を実現

○追加
・login_auto
 ログイン名とパスワードをCookieに保存。ログイン名だけ保存する設定にしました。


 問題があればお知らせ下さい。>利用者の人

 こちらのエントリで報じたトラブルを解決すべく作業しました。

 あれこれ試行錯誤したんですが、結局文字コード変換は断念。書き出し->変換->読み込みというステップだと、おそらく個別エントリのURLがかわってしまうので。 
 で、こちらの情報とスクリプトを利用させてもらって、一旦BerkeleyDBに書き出してMySQLに取り込むという方法をとりました。漢字コードを変換しなければバッチリ。

 再構築後、トップのカテゴリ一覧の並び順だけ変わってしまったみたい。おそらくPostgreSQLとMySQLとのデフォルトのソート順の違いでしょう。

 その他、特にユーザ側でかわったところはないと思いますが、何か問題があったら知らせて下さい。>利用者の人

 ついでにこのブログの文字色が薄いのが、Safaliだと顕著なので、少し濃い目にしようと思ったら、エラーが出てテンプレートを保存できない。マズい。こないだ適当なアップグレードこいた影響かも。
 すみません。風邪なおったらなんとかします。>利用者の人

追記

 うーん、動的生成も使いたいし、PostgewSQL、EUC-JPな環境から、MySQL、UTF-8な環境に新規インストールしなおすか、って気になってきました。MT開発陣的にも主軸はそっちっぽいし、検証がしっかりしてそう。今後も新機能は早く使えるようになるでしょうし。週末の夜中にでも作業してみます。  UTF-8にした時の問題点ってなんだっけ?Safaliでちゃんと表示されない?それって今でもそうなんかしら?

Coppermine Photo Gallery

 ふと三澤さんに「オンラインでデジカメ写真を管理したい」と言われていたのを思い出し、先日FEED on FEEDSを見つけるのにもお世話になったオープンソース・プロジェクト検索サイトfreshmeatで物色。あるわあるわ。30くらいのWebアルバム管理システムを見比べて、CoppermineというPHP+MySQLベースのシステムに行き着く。

 これはスゴい。プリント・サービスがないことを除けば、カメラ・メーカーなんかがやってるオンラインアルバム・サービスに近いことまでできてしまう。主な特徴は、

・柔軟なユーザ管理(フォームから登録可)
・パブリックなアルバムとプライベートなアルバムを別に管理できる
・他人のアルバムや写真にコメントやレイティングが可能
・パブリックアルバムや他人のアルバムにゲストが写真を投稿可(オーナーによる掲載承認制)
・サーバー上で回転や切り抜きなど編集が可能
・当然メタデータで検索可能
・招待用のeカードを送付可能
・ZIP圧縮で一括ダウンロード可能
・ZIP圧縮で一括アップロード可能
・日本語を含む多言語対応
・カテゴリの階層化対応
・トップページにランダムや新着の写真を表示可
・etc.

 公式サイトのデモはこちら

 色々ある中で、このシステムを選んだ決めては、WindowsXP標準の「このファイルをWebに公開する」リンク(Web発行ウィザード)を使って一括アップロードができる点。デジカメやメモリカードをマウントして、写真を選択して直接流し込めるワケですよ。これは簡単&便利でしょう。画面デザインもスッキリしていてかつ手抜き感が漂わない程度にはデザインされてると思います(テーマもいくつか選べる)。

 これでどうよ?>三澤さん
 後でアカウント教えるから、とりあえず使ってみ。

○インストールTips

 出力漢字コードをEUC-JPにしていると、Web発行ウィザードに登録するためのレジストリ・ファイルもEUP-JPで出力され、プロバイダ一覧画面で文字化けしてしまう。xp_publish.phpの581行目を以下のように書き換えて、レジストリ・ファイルはShiftJISで書き出すようにしたら直りました。

修正前:print join("\r\n", $lines);

修正後:print mb_convert_encoding(join("\r\n", $lines), 'SJIS');

Movable Type 3.1 日本語版が公開。ソフトバンクBBによる法人展開も

 ようやく出ました。>MovableType 3.1日本語版

 ページの動的生成(ダイナミック・パブリッシング)に対応して、再構築地獄から抜け出せそうなので、早速導入。

 ところがアップグレード・スクリプトのmt-upgrade31.cgiでエラー出まくり。ひとつは追加しようとするテーブルの列がすでにあるよ、というもの。これはスクリプトから該当行を削除して回避。次もテーブルの再編絡みでSQL文のNOT NULL制約がエラーに。調べてみると、PostgreSQL7.2系では非対応の制約らしい。しょうがないのでこれも該当処理を削除。これで一応スクリプトは完走。こんなんでいいのかw?
 あとは管理画面でMovableTypeニュースが文字化け。
 うーむ、早まったかなぁ。

 とりあえず毎度修正が上書きされて戻ってしまう、カレンダーを月曜始まりにするための書き換えを再度実行。こんなもんだったかなぁ。他に不具合があれば報告して下さい。>利用者の人

 さて、ダイナミック・パブリッシングはどう使うんだ?とマニュアルを読む。

ダイナミック・パブリッシングには、リレーショナル・データベースの処理速度と即応性を必要とします。 したがって、Berkeley DBはサポートされません。 (PostgreSQLおよびSQLiteのサポートを予定していますが、3.1ではまだ未対応です。)

 なんだよ、PostgreSQL環境じゃ使えないじゃん...orz。

P.S.
 最近、ネタ体質だなぁ。墓穴掘りまくり。鬱だ...。マヨイガ逝ってきます。

 というワケでFEED on FEEDSですよ。

 RSSは便利なんですが、σ(^^)のように複数のPCを使い分ける人間にとって、メールやブックマーク同様、RSSアグリゲーターのデータ共有は問題です。RSSのURL(いわばブックマーク)自体はOMPLと呼ばれる標準フォーマットで読み書きできるソフトが多く、それを使ってウォッチ対象サイトの設定自体は複製できますが、個々の未読管理まではやってくれない。例えばモバイルで読んでしまった記事が、自宅マシンでは新着として再度表示されたりするワケです。

 で、サーバー・サイドなRSSアグリゲーターを探していました。つまりホームページ型のRSSリーダーです。そのページにアクセスすると、登録しておいたサイトのRSS更新チェックが一度にできてしまう。あるマシンから「すべて既読」にしておけば、別のマシンでもそれが反映されるって仕組みです。サービスとして提供しているところはいくつか知ってたんですが、無料とはいえ広告がウザそうだし、やはり自分のサーバーで運用したいなと。で、Linuxで動くものを物色していたところ、冒頭のFEED on FEEDにたどり着いたワケです。

 PHPで動いていて、最新版ではiconvや国際化関数を使ってEUC-JPなRSSもUTF-8に変換して表示可能、ということでしたがどうもエラーが出て登録できません。ウチのPHPの問題でしょうけど、PHPの再コンパイルは骨なのと、ウォッチしてるところでEUC-JPなのは自サーバー絡みのとこばっか(笑)。前記事に書いた通り、そっちをUTF-8にしてしまうことで解決しました。まぁ、EUC-JPなところでどうしても登録したいサイトを見つけたらまた考えることにしよっと。

 機能的にもまだまだ不満はあります。リンクを辿って記事を読んだだけじゃ既読フラグが立たないので、一通り読んだら「Mark All Read」を手動でしたりしないといけないし、表示順なんかもカスタマイズできない。PHPなんで、そのうち自分で少しいじるかも知れません。とりあえずケータイには対応させたいですね。AGENTがケータイのものだった場合、URLもMT4i対応のものに置換するとか。

 そういうことならコイツでできるぜ、とか他のサーバーサイド処理型のアグリゲーターをご存じの方、是非教えて下さい。

 後述のFEED on FEEDSでどうしてもEUC-JPなRSSが文字化けしてしまうし、RSSってUTF-8で配信するのが正しいようなので、下記を参考にEUC-JPな当サイトの各ブログもRSS配信のみ文字コードをUTF-8で出すように変更しました。

Ruby site: RSS1.0情報のみEUCでなくUTF-8で出力

 何が不具合があればお知らせ下さい。
 

本ブログ及び道具眼Blogをケータイ対応してみました。
太鉄(たいてつ)さんのMT4iを使わせていただいています。

 通常のトップページに「i/」を追加した以下のURLでアクセスして下さい。

道具眼blog: http://do-gugan.com/blog/i/
古田-私的記録: http://do-gugan.com/~furuta/i/

 DoCoMo用のQRコードも貼っておきます。

http://do-gugan.com/blog/i/http://do-gugan.com/~furuta/i/
道具眼blog古田-私的記録

 機能的には時系列とカテゴリ別の絞り込みができます。コメント投稿は試してませんが、当然TypeKey経由は非対応ではなかろうかと。また本文内のリンクは基本的にPC向けのサイトなので、辿っても見られないかと思います。
 まぁ、電車移動中のヒマつぶしなどになれば幸いです。

アーカイブ

ウェブページ



Powered by Movable Type 4.25