プログラマ ずんべ の日記

zunbe

プログラマ ずんべ の日記
プログラマ ずんべ の日記

探し物は見つかりましたか? サイト内検索を試してください。


[ 1  2  3  4  5  6  7  8  9 ] [] [最後>>

2009/08/03

【技術開発】cygwin + rsync で大ハマリ

cygwin + rsync で大ハマリ

最近、ちょっと仕事が忙しくてブログを放置していたのだけれど、久しぶりに更新。
で、久しぶりの技術ネタ。

最近、社内用のバックアップ・プログラムを書いていて、いろいろハマったのでメモ。

■どんな方法でバックアップする?

フリーウェアでも、シェアウェアでも、商用ソフトウェアでも、バックアップ・ツールはいろいろある。
Windows Server 2003 であれば、標準で実装されているシャドウコピー機能で済ませるという選択肢もある。
しかし、社内のサーバは Unix 系も Windows 系もあるので、できるだけ単一のツールで統合的にバックアップを取れるようにしたい。

で、いろいろ悩んだのだけれど、Windows サーバに cygwin をインストールして、rsync でバックアップを実行する事にした。

■Windows 上で sshd を上げるか。

Windows系サーバに cygwin をインストールして、sshd を立ち上げてもいいのだけれど、WEBを漁ってみると、cwRsync という、Windows 上で rsync を行う最低限のモジュールを集めたパッケージを発見し、インストール一発で使える様になるようなので、ちょっと手を抜いてこれを使ってみる事にした。

■cwRsync でバックアップしてみる。

cwRsync をインストール、Linux サーバと接続してバックアップを行ってみる。
うん、無事、バックアップできた。

次は Windows サーバと接続してバックアップを行ってみる。
エラー。(T_T)
なんですとぉ?

どうも、「表」などの文字を含むファイル名でエラーになってしまう。
「バックスラッシュ」が含まれている漢字コードが処理できないらしい。
どうするべぇ。

■Unison

WEBを漁ってみると、Unison というソフトがあり、これにパッチを当ててコンパイルすると、漢字コードをきちんと処理できるらしい。
Unison のソースと、パッチをダウンロードして適用...と思ったら、パッチが対応しているバージョンが古いらしく、うまく当らない。(T_T)
パッチ自体はそれほど大きくないので、エディタでソースコードを開いて手動でパッチを適用。
コンパイル環境は、VC++でも、cygwin 上の gcc でもコンパイルできるらしいのだが、cygwin 上の gcc でコンパイル。
意外にすんなりコンパイルは通った。

さっそく、Windows サーバと接続してバックアップを行ってみる。
おぉ、「表」などの文字を含むファイル名のファイルがバックアップでした。

が...。
今度は、「ファイルのパスが長すぎる」エラー。(T_T)
ぐおぉ...。

どうも、ファイルのパスの長さは、Unison の制限ではなく、cygwin の制限事項らしい。
バックアップ対象のファイルのパスやファイル名を短く変える事は運用上難しいので、ちょっと無理。
くっそー、どうするべぇ。

■で、結局、cygwin

WEBを探ってみると、現在βテスト中である cygwin 1.7 が、漢字コードも正しく処理できて、かつ、パスの長さも拡大されているらしい。
まだβなので、導入するのはちょっと腰が引けるのだけれど、ここで諦めるのも悔しいし、近いうちに正式リリース版が出るだろうから、試してみる事にした。

cygwin 1.7 をインストールし、sshd を起動する様に設定。
先に使用した cwRsync は使用せず、直接 rsync を叩いてバックアップを実行してみる。
おぉ、Unix サーバからも、Windows サーバからも、きちんとバックアップができた。
いいぞいいぞ。

が...。
バックアップしたファイルを一旦削除しようとすると、削除できない。(T_T)
バックアップしたファイルやディレクトリのプロパティを見てみると、パーミッションが正しく付いていない。
何でやねん。
プログラム自体は、Administrator で実行しているので、パーミッションが付けられないなんて事はないはずだが...。
くっそー、どうするべぇ。

■CACLS or XCACLS

rsync のオプションである -p、-o、-g などを調整してみても、うまくいかない。
なんでだ?
仕方がないので、バックアップした後に Windows の CACLS コマンドと XCACLS を実行する様にして、パーミッションを変更してみる。

まぁ、これであれば、パーミッションは設定されるのだけれど、バックアップしたすべてのファイルのパーミッションを書き換えに行くので、死ぬほど遅い。
う~ん、どうするべぇ。

■オプション --chmod

rsync のヘルプを丹念に見てみると、--chmod というオプションがあるのを発見。
こんなオプションがあったのか、知らなかった。(^^;

さっそく、オプションを追加してバックアップを実行してみる。
おぉ、ちゃんと削除ができるパーミッションがセットされた。
しかしながら、ファイルのプロパティを見てみると、なぜか、「セキュリティ」タブ上では、Administrator に書き込み権限のチェックが付いてない。
しかし、詳細ボタンを押して、パーミッションの詳細を見ると、Administrator に書き込み権限が付いている。
何でだ?
まぁ、とりあえず、大きな問題ではなさそうなので、直接問題にはならないだろうから、とりあえず無視する事にした。(^^;

再び、バックアップしたディレクトリを削除してみる。
が...またしてもエラー。(T_T)
今度は、Windows 上にあってはならないファイル名である、ファイル名の最後がドット(.)であるファイルが生成されている事が判明。
なろー!

■オプション --exclude-from

本当は、何らかの形でファイル名を変換するのがまっとうな方法なのだろうけれど、ファイル名の末尾にドットになっているファイルは通常は作成する事はないので、バックアップから除外してしまう事にする。
rsync に --exclude-from を追加し、除外するパターンを記載したファイルを指定。
ついでに、コロン(:)を含むファイルも除外するように指定。

■ディスク容量バカ食い

バックアップを何世代か実行すると、当然の事ながら、ディスク容量をどんどん食っていく。
現在のディスク容量だと、5世代くらいしかバックアップできない。
なんとか差分だけをバックアップできないだろうか。
バックアップ・サーバが Unix 系であれば、rsync に --link-dest を使用すれば、ファイルをハード・リンクする事で、ディスク容量を抑止してくれるのだが、Windows ではできんのだろうか。

WEBを漁ってみると...。
あれ?
え?
Windows でもファイルでハード・リンクが使えるの?
Windows のリソースキットに linkd というコマンドがあって、フォルダをハード・リンクできる事は知っていたのだけれど、ファイルのハード・リンクは fsutil というコマンドでできるらしい。
知らなかった。(^^;

さっそく、rsync に --link-dest を指定してバックアップを実行してみる。
バックアップされたファイルを、cygwin 上で「ls -i」で確認してみると、おぉ、iノードの数値が同じだ。
試しに一方のファイルを開いて書き込んでみると、もう一方の内容も変更されている。
おぉ、これでディスクを大量に消費する事なくバックアップができるようになった。(^^)

おしおし、動いた。
まだ、バックアップ中にときどき rsync が落ちてしまう事があるけど、これは少しずつ調整していく事にしよう。



このエピソードはいかがでしたか?

投稿者 zunbe : 2009/08/03 15:00:00 | コメント (0) | トラックバック (0)

2008/05/21

【技術開発】簡易スパム対策プログラム

簡易スパム対策プログラム

最近、スパム・メールの受信数が急激に増加している。
仕事柄、メールアドレスをたくさん持っているせいもあって、スパム・メールが山ほど来る。
多い日だと10000通以上、少ない日でも8000通は来る。
うっとうしくて仕方がない。
メーラの削除済みフォルダも、あっという間にいっぱいになってしまう。

プロバイダやレンタル・サーバのスパム・フィルタなどを契約すれば、かなり楽になるとは思うのだが、いかんせん、メールアドレスの数が多いので、すべてのメールアドレスにスパム・フィルタをセットするのはコスト的もけっこうな負担になるので避けたい。
とは言え、毎日10000通近いスパム・メールを削除するのは苦痛で仕方がないので、簡易スパム対策プログラムを作ってみた。
こんな感じのプログラム。

 ・定期的にメールサーバにアクセスし、特定の条件に合致するメールを排除する。
 ・特定の条件は、現在のところ、以下の通り。
   サブジェクトがASCIIのみで、かつ、本文もASCIIのみ。
   要するに、英文だけのメールはスパムとして捨ててしまう事にする。
 ・サブジェクトがMIMEエンコードされている場合は、デコードして検査する。
 ・本文がMIMEエンコードされている場合は、(今回は手を抜いて(^^;)検査しない。
 ・排除するメールは、特定のディレクトリ配下にファイルとして書き出しておく。
 ・更に、書き出したファイルは、一定期間が経過したら tar + gzip で固める。
 ・更に、tar + gzip で固めたファイルは、一定期間が経過したら削除する。

サーバサイドで処理を行うわけではないので、メーラで送受信を行うタイミングによっては、スパムと判定されるべきファイルも受信してしまうが、今回はヨシとする。
ASCII以外を含むメールは排除されないが、とりあえず、ASCIIだけのメールを排除するだけで、目に入るスパム・メールは半減するので、これでヨシとする。

まずは朝一番にメールを受信した時に、「どばぁ~」っとスパム・メールが着信すると精神衛生的にもよくないので、これで少しはよくなるだろう。
日本語を判定して排除するのは簡単ではないと思うが、なにか排除ルールを考えて実装したいな。



このエピソードはいかがでしたか?

投稿者 zunbe : 2008/05/21 19:04:01 | コメント (6) | トラックバック (0)

2008/02/22

【技術開発】IE7ブロッカー

IE7ブロッカー

2008/02/13から、Windows Update でのIE7の自動配布が始まっている。

 Internet Explorer 7 の自動更新による配布

優先度の高い更新プログラムとして配布されるので、放っておくと、自動的にIE7がインストールされることになる。
もちろん、Windows Update 手動更新に設定しておいて、毎回IE7のインストールを解除すればいいのだが、面倒だし、間違ってインストールしてしまうのを避けたい。
と、いう事で、IE7ブロッカーをインストールしておくことにした。

 自動配布の無効化ツールキット (Blocker Toolkit)

本当にブロックしてくれるだろうか。
IE7がダウンロードされ、インストール準備されているPCにIE7ブロッカーをインストールしてみた(インストールと言うか、実行内容は、レジストリをセットするだけらしいが…)。

 プログラマ ずんべ の日記:IE7ブロッカー
 IE7自動インストール直前

 プログラマ ずんべ の日記:IE7ブロッカー
 IE7ブロッカーをインストール

Windows Update を実行。
お、IE7のインストールが失敗しているようだぞ。

 プログラマ ずんべ の日記:IE7ブロッカー
 Windows Update を実行中

うむ、無事、IE7のインストールがブロックされた。

 プログラマ ずんべ の日記:IE7ブロッカー
 IE7のインストールが失敗

おしおし。



このエピソードはいかがでしたか?

投稿者 zunbe : 2008/02/22 11:00:00 | コメント (2) | トラックバック (0)

2008/02/14

【技術開発】Google 早っ!

Google 早っ!

このエピソードの続き。

 2008/02/14 ActiveXで大ハマリ

つい30分前に書いたばかりのこのエピソード、もう Google に反映されている!

 プログラマ ずんべ の日記:Google 速っ!
 「"activex.microsoft.com" 404」で検索

早っ!
すげぇなぁ。



このエピソードはいかがでしたか?

投稿者 zunbe : 2008/02/14 14:28:00 | コメント (0) | トラックバック (0)

2007/11/14

【技術開発】GoogleのPageRankが…

GoogleのPageRankが…

数週間前から、Googleのページランクの様子がどうも変だ。
このサイトのPageRankは、これまで3~4で推移していたが、数週間前から0になってしまった。
PageRankの値はよく変動するので、あまり気にしていなかったのだが、数週間が経過してもなかなか復活してこない。
どういうこっちゃい?

まさか、Google八分?
いやいや、検索にヒットするからそんなはずはないよな。

ググってみると…。
あった。

 Google PageRank急落の原因は?(ITmedia News)
 グーグル、「PageRank」のアルゴリズムを変更か?』(CNETJjapan)

ほほぅ、巷でも話題になっているんやね。

しかし、Googleのウェブマスターツールでクロール状況などを確認しても、エラーなどは一切発生していなし、ガイドラインに違反しているとも思えない。

Google君、どんなアルゴリズム変更をしたんだい?



このエピソードはいかがでしたか?

投稿者 zunbe : 2007/11/14 03:00:00 | コメント (2) | トラックバック (0)



[ 1  2  3  4  5  6  7  8  9 ] [] [最後>>