読者です 読者をやめる 読者になる 読者になる

rdiff-backupのインストールにはlibrsyncが必要だった(追記:場合によってはmake AM_CFLAGS=-fPICする必要あり)

(2009/1/17追記)以下、けっこうハマってますが、要するに以下のポイントを押さえておけば良いらしいです

  1. librsyncがインストールされている
  2. librsyncはfPICのオプションでコンパイルされている
  3. python-devel(インクルード用のヘッダ)がインストールされている

実際にはわざわざメモするほどのことではないけどね、READMEにもこう↓書いてあるし。でも、./configure ; make ; make install しかできない人なのよ、私は*1

The setup script expects to find librsync headers and libraries in the
default location, usually /usr/include and /usr/lib.  If you want the
setup script to check different locations, use the --librsync-dir
switch or the LIBRSYNC_DIR environment variable.  For instance,

        python setup.py --librsync-dir=/usr/local build

instructs the setup program to look in /usr/local/include and
/usr/local/lib for the librsync files.

あれ?Fedora Coreの古い奴だとPython.hが無いって言われるな

もっと古いCentOS4.4なら/usr/include/python2.3/Python.hがあるんだけど...python-develのパッケージが必要なのだろうな。いつの間にかCentOSの方にはインストールしていたのかもしれない。(/root/install.logを見ると、OSインストールの時点で含まれていた。anaconda-ks.cfgの設定のせいかな)

python-develがあればコンパイルは始められる。でも、64bit環境だとなにやらエラーが出る

(追記:64ビット環境であるかどうかは特に関係ないかも。shared libraryとしてlibrsyncがうまくコンパイルされてなかったという話なのでした)
もともと手元にあったのは、ちょっと古いバージョンだったのだが、最新のstable版のrdiff-backup-1.2.5でも下記のようなエラーになる(実際には3行)

gcc -pthread -shared build/temp.linux-x86_64-2.4/_librsyncmodule.o -lrsync
 -o build/lib.linux-x86_64-2.4/rdiff_backup/_librsync.so

/パス/ld: /ライブラリのパス/librsync.a(buf.o): relocation R_X86_64_32 against 
`a local symbol' can not be used when making a shared object; 
recompile with -fPIC 

/ライブラリのパス/librsync.a: could not read symbols: Bad value

Object not found!には、librsyncのmakeの際に

# make AM_CFLAGS=-fPIC

とせよという記載が見つかった。(SuSE Linuxの例だが)
で、これを試したら成功した。

まとめ:rdiff-backupをLinuxにインストールする際、librsyncがfPICオプションでコンパイルされてないとハマる

今回はrdiff-backupを動かすためだけにインストールしたからいいが、他のユーザも利用している場合には、インストール先をデフォルト以外の場所にするなどの注意が必要。

手順をまとめると、こんな感じかな

実際に全部インストールしなきゃいけないケースは稀だと思われる。

# rpm -aq | grep python-devel
# yum install python-devel

# rpm -aq | grep librsync
# wget http://downloads.sourceforge.net/librsync/librsync-0.9.7.tar.gz?modtime=1097439809&big_mirror=0
# tar zxf librsync-0.9.7.tar.gz
# cd librsync-0.9.7
# ./configure
# make AM_CFLAGS=-fPIC
# make install
# ldconfig
# cd ..

# wget http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.2.5.tar.gz
# tar zxf rdiff-backup-1.2.5.tar.gz
# cd rdiff-backup-1.2.5
# python setup.py install

*1:註:ちなみに、rdiff-backupのインストールの際にはpythonのスクリプトを実行しますけど