レンタルサーバーで運用しているWEBサイトのコンテンツを、OSXの社内サーバーにバックアップしようという試み。(レンタルサーバーはCORESERVER)
問題点
レンタルサーバーで使えるrsyncではOSXのエンコーディングに対応できないのです。
完成形
–iconvでUTF-8-MACが指定できるrsyncの作成。
インストール場所は$HOME/tool/bin。
下準備
OSX側のファイルシステムは「大文字小文字区別」するようにしておくこと!
うっかり区別しないにしているなら、バックアップ用のパーティションを別途作成しておきましょう。
macportsでrsyncを入れておくこと。 最初から入ってるrsyncだとなぜかうまくいかない。
バックアップ用のユーザーを作っておき、ssh用のキーペアを作っておく。作った公開鍵はレンタルサーバーの$HOME/.sshに置く。
ソースコードのダウンロード
rsyncとlibiconvが必要です。ここからの作業はサーバーにSSHして行います。コマンドラインが使えない人は諦めましょう。
rsyncはオフィシャルサイトから最新のもの(ここでは3.0.9)をwgetしときます。
libiconvはappleのサイトからlibiconv-13.2.tar.gzあたりをwgetします。(新しいとコンパイルが大変…)
ダウンロードしたソースコードを$HOME/tool/srcに置いて解凍します。
libiconvのコンパイル
libiconv-13.2/libiconvにcdして、./configure –prefix $HOME/tool しておきます。
その後にいくつかのファイルを編集します。(こちらのサイトから抜粋)
lib/utf8mac.hの
#include <libkern/OSByteOrder.h>
を
//#include <libkern/OSByteOrder.h> #include <byteswap.h> #define OSSwapInt16(x) bswap_16(x)
と修正します。
aclocal.m4の
AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"])
は
AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.9"])
同ファイルもう1カ所
[AM_AUTOMAKE_VERSION([1.7.5])])
を
[AM_AUTOMAKE_VERSION([1.9.6])])
に変えます。(バージョンが違ってたら環境に合わせてください。 automakeのバージョンは automake –version で調べることができます。)
さらに、libiconv直下にam–refreshというファイルを作ります。touchしてください。
ここまでできたらやっとmake install。
おわったら $HOME/tool/bin/iconv -l | grep MAC で、「UTF-8-MAC」が出ることを確認。
rsyncのコンパイル
export LDFLAGS=-L$HOME/tool/lib
しておいて、あとは ./configure --prefix=$HOME/toolしてmake installすればおしまい。
実行で気をつけること
--iconv=UTF-8,UTF-8-MAC を付けるのはもちろんのこと、--rsync-path=/opt/local/bin/rsyncを忘れずに。(こちらのサイトで言及)
最終的には以下の様なコマンドになる。(1行で。パスは適宜環境に合わせて書き換え)
$HOME/tool/bin/rsync --rsync-path=/opt/local/bin/rsync
--iconv=UTF-8,UTF-8-MAC -avz --delete
-e ssh ~/public_html backup@<サーバー名>:/Volumes/Backup/coreserver
エラーと対処
libiconvのmakeで「No rule to make target `am–refresh‘. Stop.」
「touch am–refresh」しとけ。
rsyncの実行時に「rsync error: syntax or usage error (code 1) at main.c(1318) [server=2.6.9]」(的な)
–rsync-path忘れてる。

