lsyncd + rsync on Debian(lenny) でらくらく同期

やはり Debian ですよね,いろいろと.

と言うわけで,以前は DRBD Dual Primary + GFS2 と言う構成で試していたんですが,起動や停止手順を誤るとプロセスが完全に死んじゃってシステム終了すらできなくなったりしたので,お気軽な方の検証を.

参考 : http://d.hatena.ne.jp/wadap/20090913/1252839223

下準備

いつも通り IP アドレスは手動で標準システムのみのものを用意します.そして

# aptitude install sudo vim lv openssh-server
# update-alternatives --config editor
# visudo
# addgroup wheel
# adduser user wheel
# logout

こんな感じのを2つ用意します.virt-clone を使ったやり方はkumofs を KVM 上の Debian(lenny) にインストールして動かすまで - なんとなく日記を参考に.今回は普通にインストールしました.

slave 側の準備

$ sudo adduser rsyncd
$ sudo mkdir /opt/folder
$ sudo chmod 777 /opt/folder
$ sudo chown rsyncd.rsyncd /opt/folder
$ sudo vim /etc/rsyncd.conf
uid = rsyncd
gid = rsyncd
log file = /var/log/rsyncd.log
[data]
        comment = rsync slave
        path = /opt/folder
        hosts allow = lsyncd-master
        read only = false
$ sudo rsyncd --daemon

master 側の準備

今回はパッケージ化します.

$ sudo aptitude install rsync build-essential libxml2-dev dh-make autotools-dev fakeroot
$ wget http://lsyncd.googlecode.com/files/lsyncd-1.26.tar.gz
$ tar zxvf lsyncd-1.26.tar.gz
$ cd lsyncd-1.26/
$ dh_make --createorig
$ fakeroot dpkg-buildpackage
$ sudo dpkg -i ../lsyncd_1.26-1_amd64.deb
$ sudo mkdir /opt/folder
$ sudo chgrp wheel /opt/folder
$ sudo chmod g+w /opt/folder
$ sudo vim /etc/lsyncd.conf.xml
<lsyncd version="1.25">
  <settings>
    <logfile  filename="/var/log/lsyncd"/>
    <pidfile  filename="/var/run/lsyncd/lsyncd.pid"/>
    <binary   filename="/usr/bin/rsync"/>

    <callopts>
      <option text="-lt%r"/>
      <option text="-p"/>
      <exclude-file/>
      <source/>
      <destination/>
    </callopts>
  </settings>

  <directory>
    <source path="/opt/folder"/>
    <target path="lsyncd-slave::data"/>
  </directory>
</lsyncd>
$ sudo lsyncd

適当にファイル作ったりするとファイルが転送されます.これは便利だな.

自動起動用のスクリプトはこんな感じで.

#!/usr/bin/env bash
### BEGIN INIT INFO
# Provides:          lsyncd
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop lsyncd daemon
### END INIT INFO

LSYNCD=/usr/bin/lsyncd
SRC=/opt/folder
PID=/var/run/lsyncd/lsyncd.pid

. /lib/lsb/init-functions

case "$1" in
  start)
  log_daemon_msg "Start lsyncd."
  $LSYNCD
  ;;
  stop)
  log_daemon_msg "Stop lsyncd."
  killproc -p $PID
  ;;
  restart)
  $0 stop
  $0 start
  ;;
  *)
  echo "Usage: /etc/init.d/lsyncd {stnard|stop|restart}"
  ;;
esac

注意点としては lsyncd の設定で,source の部分の最後のスラッシュです.つけると「ディレクトリの中身」になり,つけないと「ディレクトリ自体」となるようで,ここでちょっとはまりました.