*lsyncd [#q00e8c1e] RIGHT:更新日&lastmod(); lsyncdを使用してリアルタイムにディレクトリ単位で別ホストにミラーリング このシステムにはファイル内容が変更された場合それを検出するソフトinotifyを利用する。これはkeranel-2.6.13以降なら動作するが、Vine4.x Vine5.xにはないのでソースから inotify-toolsをインストール ''ホスト設定'' マスタ(10.3.2.3 /home/student/lsyncd_tmp) セカンダリ(10.3.2.4 /home/student/lsyncd_tmp2) マスタのlsyncd_tmpが変更されたら、セカンダリのlsyncd_tmp2の内容も変更される 以下のtoolが必要なのでインストール # apt-get install libxml2-devel **マスタの設定 [#xad2882a] ***inotify-toolsのインストール [#l2bbc8e8] 以下からinotify-toolsをDownload http://inotify-tools.sourceforge.net/ $ tar zvxf inotify-tools-3.13.tar.gz $ ./configure --prefix=/usr $ make $ su # make install 以下のようにリンクを作成 # cd /usr/include/sys # ln -s ../inotifytools/inotify.h # ln -s ../inotifytools/inotify-nosys.h # ln -s ../inotifytools/inotifytools.h ***inotify-toolsのインストール [#i8c35037] 以下からlsyncdをDownload http://en.sourceforge.jp/projects/freshmeat_lsycnd/resources/ $ tar tzvf lsyncd-1.26.tar.gz $ cd lsyncd-1.26 $ ./configure checking for unistd.h... yes checking sys/inotify.h usability... yes checking sys/inotify.h presence... yes checking for sys/inotify.h... yes configure: creating ./config.status config.status: creating Makefile config.status: creating config.h config.status: executing depfiles commands $ make $ make all-am make[1]: ディレクトリ `/usr/local/src/lsyncd-1.26' に入ります gcc -DHAVE_CONFIG_H -DXML_CONFIG -I. -Wall `xml2-config --cflags` -g -O2 -MT lsyncd.o -MD -MP -MF .deps/lsyncd.Tpo -c -o lsyncd.o lsyncd.c lsyncd.c: 関数 `remove_dirwatch' 内: lsyncd.c:1000: 警告: `dw' might be used uninitialized in this function mv -f .deps/lsyncd.Tpo .deps/lsyncd.Po gcc -Wall `xml2-config --cflags` -g -O2 `xml2-config --libs` -o lsyncd lsyncd.o make[1]: ディレクトリ `/usr/local/src/lsyncd-1.26' から出ます $ su # make install 以下の起動ファイルを作成 ''init.d/lsyncd'' #!/bin/bash # # chkconfig: 345 56 50 # description: start and stop lsyncd # # # Source function library. . /etc/rc.d/init.d/functions PATH=$PATH:/usr/local/bin # Source networking configuration. [ -r /etc/sysconfig/lsyncd ] && . /etc/sysconfig/lsyncd option="$SHORT_LOG $IGNORE_START_ERRORS $DEBUG" RETVAL=0 prog="lsyncd" start(){ echo -n $"Starting $prog: " daemon $prog $option RETVAL=$? echo touch /var/lock/subsys/lsyncd return $RETVAL } stop(){ echo -n $"Stopping $prog: " killproc $prog RETVAL=$? echo rm -f /var/lock/subsys/lsyncd return $RETVAL } reload(){ echo -n $"Reloading configuration: " killproc $prog -HUP RETVAL=$? echo return $RETVAL } restart(){ stop start } condrestart(){ [ -e /var/lock/subsys/lsyncd ] && restart return 0 } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status $prog ;; restart) restart ;; reload) reload ;; condrestart) condrestart ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}" RETVAL=1 esac exit $RETVAL マスタのコピー元とセカンダリのコピー先およびrsyncのオプションを指定 。 target pathのモジュール名(test)はセカンダリのrsyncd.confの内容([test])とあわせる また、-ltdは-lt%rとあるページもあった(%r は lsyncd 起動時には r、それ以外は d になるそうだ) &color(red){-avzがないとdeleteがうまく動作しなかった}; ''/etc/lsyncd.conf.xml''を作成 <settings> <callopts> <option text="-ltd"/> <option text="--delete"/> <option text="-avz"/> <source/> <destination/> </callopts> </settings> <directory> <source path="/home/student/lsyncd_tmp"/> <target path="10.3.2.4::test/"/> </directory> </lsyncd> **セカンダリの指定 [#b5396ac7] rsyncサーバとしてコピー先ディレクトリ、および書き込み許可ホスト、そのユーザ、グループ、モジュール名を指定 ''/etc/rsyncd.conf''を作成 uid = student gid = student [test] path = /home/student/lsyncd_tmp2 hosts allow = 10.0.0.0/8 read only = false ''起動'' # /usr/bin/rsync --daemon --config=/etc/rsyncd.conf rc.loaclにでも書いておく ***その他 [#td0beaed] 実際マスタのディレクトリに変化が出ると以下のコマンドがマスタで動く /usr/bin/rsync -ltd --delete -avz /home/student/lsyncd_tmp 10.3.2.4::test/ ''/var/log/lsyncd''に以下の残る sent 205 bytes received 16 bytes 442.00 bytes/sec total size is 15 speedup is 0.07 Mon Aug 31 11:45:33 2009: Rsync of [/home/student/lsyncd_tmp/] -> [10.3.2.4::test/] finished Mon Aug 31 11:45:33 2009: Processing through tosync stack. Mon Aug 31 11:45:33 2009: being done with tosync stack Mon Aug 31 11:45:33 2009: inotfy event: DELETE:.#c Mon Aug 31 11:45:33 2009: event DELETE:.#c triggered. Mon Aug 31 11:45:33 2009: BUILDPATH(0, (null), (null)) - > /home/student/lsyncd_tmp/ Mon Aug 31 11:45:33 2009: BUILDPATH(0, (null), 10.3.2.4::test/) -> 10.3.2.4::test/ Mon Aug 31 11:45:33 2009: rsyncing /home/student/lsyncd_tmp/ --> 10.3.2.4::test/ building file list ... done ''logのlogrotateの設定'' /etc/logrotate.d/lsyncd /var/log/lsyncd{ weekly rotate 5 copytruncate compress notifempty missingok } &color(red){注)lsyncdが起動されるとマスタのしてしたディレクトリ自体がスレーブコピーされる。その後同じのがないの消えるが原因不明}; セカンダリに一時的に /lsyncd_tmp2/lsyncd_tmp というディレクトリが出来る