2006年12月に初めて 512MB USB メモリを購入した時にいろいろポータブルアプリケーションを揃えたりファイル同期を手順化したりしたんだけれど、それ以降あまり変更を加えていなかった。
定期的にやってくる「データとポータブルアプリケーション」の持ち運び熱がちょっときたので再整備を開始。しばらく前から検討していたけれど結局基本は同じになりそう。
今まで Windows ではそれほど Unison を使わなかったのと、自分では日本語ファイル名をつけないということで気がつかなかったんだけれど、Unison は Windows 上では日本語ファイル名処理に問題があるらしい。
Unison 2.27.57 で日本語ファイル名のファイルを同期しようとすると `The name of this Unix file is not allowed in Windows' というエラーメッセージが表示されることがある。 チェックは正規表現 "\\.*|aux|con|lpt1|prn|(.*[\000-\031\\/<>:\"|].*)" でしているらしい。 マルチバイト文字だとこれで誤認識されることがあるようだ。
パッチあててもいいけれど、Windows 上で Ocaml ビルド環境入れてとかちょっと面倒。 他のファイル同期ツール探すか、Linux 上で同期するかどちらかだな。
Windows で Unison が駄目そうなので代替を探したのだが、ファイル同期関連で探して試しみたもののどれも自分の使い方にあわなかった。 双方向同期で、Unison のように差分について個別に同期方向を選べるものが見つからなかった。
そんななか、仕事でディレクトリの差分を確認する必要が出てきたのでソフトウェアを探したところ、WinMerge に行きついた。 WinMerge は以前 TortoiseSVN のビューアとして設定したことがあって、ファイルの差分表示・編集のイメージが強かったのだが、ディレクトリの比較に使うのにも非常に便利だ。
で使ってみると、比較するディレクトリ間で異なるファイル/ディレクトリに対して個別に指定した方向でコピーをしたり、また削除したりすることができることを知った。 お、Unison っぽい。 タイムスタンプだけでなくファイルの内容を見て同一かどうかをチェックできるのも良い。 望むことができるではないか。
日本語化もできるし、ポータブルアプリケーション版もある。 USB メモリの同期にバッチリ。 ようやく辿りついたという感じ。
なおファイル比較のオプションの File Compare method を標準の Full Contents にしておいた場合、ファイル数が多くなると遅い USB メモリでは差分のチェックに結構時間がかかってしまう。Quick Contents にしておくのが良さそうだ。 それでも遅い場合は(信用できるならば) Modified Date and Size 等を選ぶ必要があるかもしれない。
10日ほど前に Twitter へのフィード投稿を twitterfeed 経由から FriendFeed 経由に変更してみた(記事)のだけれど、挙動がニーズにマッチしないので twitterfeed に戻した。
FriendFeed の Twitter 投稿機能だと date がちょっと古いフィードアイテムは新着でも投稿されないっぽいのである。
nDiki で使っている DiKicker の RSS フィードでは、アイテムの date を最初の公開日時ではなくファイルシステム上にある記事ファイルの更新日時としている。 このためローカルホスト上で記事ファイルを作成し、例えば半日後に Unison で Web サーバへファイル同期させて公開するとその時点で半日前の日時の記事が新着となる。 twitterfeed ではこのような場合でも新着として Twitter へ投稿してくれるのだが、FriendFeed ではどうも新着であってももう旬ではない記事として投稿してくれないっぽい。 挙動の設定も変更できなさそう。
ということで FriendFeed の Twitter 投稿を止めて、twitterfeed の設定を再アクティブ化。twitterfeed も OAuth に対応したり利用できる URL 短縮サービスが選べるようになっていたりと着実に改良されているので今後も継続してサービスされていくことを期待したい。
[ Twitter 関連サービス ]
先週の大型台風では、都心の JR 線は軒並み運転見合わせ。 出社しようにも交通手段がないので復旧するまでは自宅に戻ってできる作業をすることにした(記事)。 しかし前日の夜に残業を終えて帰る際「明日は台風で運転本数も7割ぐらいにする計画という情報が出ている。混雑した電車で潰されたり豪雨で濡れたりする可能性があるので母艦ノート PC は今日は会社に置いて帰ろう。どうせこの時間なら帰宅しても使わないし」と持ち帰らなかったのが仇になった。
いつものノート PC がないので自宅の妻のノート PC を借りて、USB メモリに入れてあるポータブルアプリケーション環境とネットサービスでできることをしておこうと思ったのだが、これが以外に手間取った。
ということで、ポータブル環境の見直しが必要かなと。
このあたり、DropboxPortable を使って見直してみることにした。 方針は以下。
これで USB メモリがあれば、TrueCrypt 仮想ボリュームをマウントしていつもの環境が使える。 The Internet 接続があるならば DropboxPortable を起動して、サーバ経由で最新の環境・データに同期することができる。
この方法の場合メディア的には TrueCrypt 仮想ボリューム上にファイルがあるので、紛失などしてもちょっと安心。 そのかわり Dropbox とのやりとりでは生ファイルになる(Dropbox 自体も暗号化はしているはずだが)。
当初は TrueCrypt 仮想ボリューム自体を Dropbox で共有しようと思ったが、これだと DropboxPortable のデータファイルが保護できない。TrueCrypt 仮想ボリュームの中に TrueCrypt 仮想ボリュームを作ればメディア的にも Dropbox 上的にも暗号化できるが、手間だしパフォーマンス的にもつらそう。 TrueCrypt 仮想ボリューム内で Dropbox で同期しているファイルについては、重要なファイルのみ個別に暗号化で対応したい。
あと、今回使ってみてわったのだが DropboxPortable はメインで動かしている Dropbox とは別に同時に起動できるのね。 これは便利。Dropbox を複数アカウント同時に使う時にも活用できるな。
そろそろマジで naney.org 移転先のサーバ設定せねば。ローカルとのファイル同期用に Unison をインストール。
bash mkdir tmp cd tmp wget http://caml.inria.fr/pub/distrib/ocaml-3.11/ocaml-3.11.1.tar.gz tar zxvf ocaml-3.11.1.tar.gz cd ocaml-3.11.1 ./configure -prefix $HOME/tmp make world make opt make install cd .. wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.32.52.tar.gz tar zxvf unison-2.32.52.tar.gz cd unison-2.32.52 PATH=$PATH:$HOME/tmp/bin gmake UISTYLE=text ./unison -version mkdir -p $HOME/local/unison-2.32.52/bin mkdir -p $HOME/bin cp -p unison $HOME/local/unison-2.32.52/bin ln -s $HOME/local/unison-2.32.52/bin/unison $HOME/bin rm -rf $HOME/tmp
[ さくらのレンタルサーバ プレミアム ]
naney.org メールサーバの移転に次いで、Web サーバの移転作業。
現行 Web サーバと Unison でファイル同期している Web コンテンツを、さくらのレンタルサーバへ Unison でファイル同期。
nDiki 用に DiKicker (WiKicker) を make install。
%bash $perl -MCPAN -e mkmyconfig $perl -MCPAN -e shell o conf makepl_arg PREFIX=/home/naney/local/WiKicker o conf mbuildpl_arg --install_base=/home/naney/local/WiKicker o conf commit notest install CGI::SpeedyCGI $tar zxvf WiKicker-0.420.tar.gz $cd WiKicker-0.420 $export PERL5LIB=$HOME/local/WiKicker/lib/perl5/site_perl/5.8.9 $perl Makefile.PL PREFIX=$HOME/local/WiKicker $make $make install
以前きっちり Module::Install で Makefile.PL を作っておいたおかげで、比較的スムーズにインストールできた(自画自賛)。
ちょっとはまったところは CGI::SpeedyCGI の make test を実行する(される)と SSH 接続がサーバ側から切られてしまうという現象にあったところ。 テスト用に大量にスクリプトが起動されるの検出して自動的に kick されたのだろうか。
さくらのレンタルサーバでは .htaccess Options が使えないようなので削除。 ExecCGI や MultiViews が有効になっているようなので問題なし。
Perl 5.005_03 用に書いてあったスクリプトについて、Perl 5.8.9 で文字化けしないように utf8 まわりを修正。
1時間毎に実行したい処理を列挙するシェルスクリプトを1つ作って、コントロールパネルから1時間毎に実行するように設定。
現行サーバでは任意の crontab を設定できたので、1時間毎はちょっと物足りない。 おいおい負荷にならない範囲で、外部から定期的に HTTP アクセスして処理を定期的に実行できるようにもするかな。
まだ動いていないスクリプトもあるけれど(大きいところだと NaneyOrgWiki (Wiki))現行サーバの解約日もせまっているので、サーバ移転させてしまうことに。
VALUE-DOMAIN で DNS サーバ設定を変更し www.naney.org でさくらのレンタルサーバにアクセスできるように A レコードを変更。
今のところ特に重い等もなく順調。 現行サーバでは深夜非常に重くなる時間帯があったのだが、それが無くなるのが嬉しい。 また容量が100MB*1から10GB*2になったので心理的にセーブしなくて良くなった。
年内に移行できて良かった良かった。
[ さくらのレンタルサーバ プレミアム ]
Windows 上で作成・更新したファイルをサクッと Linux 上に反映させるのに、やっぱり Unison File Synchronizer を使うことにした。Windows 上の Unison から SSH 経由で Linux 上と同期させる構成ってしたことなかったな。ちょっと調べつつ設定。
Unison-2.40.102.zip をダウンロードしてきて C:\Uers\Naney\local\Unison-2.40.102 として展開。テキスト版(CLI 版)を使いやすいように unison.exe という名前に変える。
SSH 経由の接続については PuTTY についている Plink を使うことにした。OpenSSH とはちょっと違うので下記のようにバッチファイル C:\Uers\Naney\local\Unison-2.40.102\plinkunison.bat を作る。
@c:\Users\Naney\local\PuTTY\plink.exe -l naney -ssh remote.example.com unison -server
同期先のホスト remote.example.com にアカウント naney で SSH 接続して unison をサーバとして起動するというバッチファイル。
次に Unison 同期設定を書いたプロファイルファイル c:\Users\Naney\.unison\test.prf を作る(テスト用)。内容は以下。
root = c:\Users\Naney\unisontest root = ssh://naney@remote.example.com/home/naney/unisontest sshcmd=c:\Users\Naney\local\Unison-2.40.102\plinkunison.bat times = true fastcheck = yes
双方の unisontest ディレクトリを同期する設定になってる。
最新の OCaml (Unison のビルドに必要)と Unison を取ってくる。
wget http://caml.inria.fr/pub/distrib/ocaml-4.00/ocaml-4.00.1.tar.gz wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.40.102.tar.gz
Windows のコマンドプロンプトから
unison test
で同期できることを確認。
あとは実際の同期したいディレクトリのペアにあったプロファイルファイルを作っていけば OK。
昨日 Linux から AirMac Time Capsule をマウントできるようになったので次はファイルの双方向同期の設定。AirMac Time Capsule の共有ディスク上に写真を置いて家族共有するのだけれど、AirMac Time Capsule にしかファイルが無い状態は当然避けたいので、ローカルディレクトリとファイル同期しておく。
OS X 用の良さそげな双方向ファイル同期アプリが無いかなと探していたんだけれど、これっというのが無いので結局 Linux や FreeBSD 上で長年使っている Unison File Synchronizer を使うことにした。 OS X だといちおう GUI 版もある。Unison はメンテが止まるかなーと思いつつもたまにアップデートされているので今のところまだしばらく使えそう。
Unison の設定は下記の通り。違う共有ディスクがマウントされている時に間違えて実行しないように mountpoint を指定。パーミッションの変更ができなくて Unison がエラーになるので perms = 0 にしておいた。
times = true root = /Users/naney/archive/family root = /Volumes/Data/archive/family mountpoint = family-photo perms = 0
Unison の設定は下記の通り。/mnt にマウントした状態で実行する。マウント間違い対策として mountpoint を指定。
times = true root = /home/naney/archive/family root = /mnt/archive/family mountpoint = family-photo
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
nDiki は1999年1月に始めたコンピュータ日誌を前身とする Naney の Web 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。
※内容は個人的見解であり所属組織とは関係ありません。