Linux’ta lsyncd kullanarak iki dizini senkronize tutma

Lsyncd (Live Syncing Daemon), bir kaynağı ve hedef dizin ağacını senkronize tutmak için kullanabileceğimiz ücretsiz ve açık bir kaynaktır.  LUA programlama dilinde yazılmış olup, kaynaktaki dosya sistemi olaylarını takip ederek ve bunları genellikle rsync ve ssh gibi araçları kullanarak hedefte kopyalayarak çalışır.  Bu eğitimde lsyncd’nin en çok kullanılan Linux dağıtımlarına nasıl kurulacağını ve yerel ve uzak dizinleri senkronize tutacak şekilde nasıl yapılandırılacağını öğreniyoruz.

Kurulum

Lsyncd, Fedora, Debian ve Ubuntu’nun resmi depolarında mevcuttur;  onu bu sistemlere kurmak sadece bu dağıtım paket yöneticilerini başlatmaktan ibarettir.  Kurulumu Debian ve Ubuntu dahil türevleri üzerinde gerçekleştirmek için apt komutunu kullanabiliriz:

$ sudo apt install lsyncd

Lsyncd’yi Fedora’ya yüklemek için bunun yerine dnf kullanıyoruz:

$ sudo dnf install lsyncd

 

dnf paket yöneticisini lsyncd’yi Red Hat Enterprise Linux ve klonlarına (örneğin Rocky Linux ve AlmaLinux) yüklemek için de kullanabiliriz, ancak bu dağıtımlar yardımcı programı doğrudan paketlemediğinden, önce EPEL deposunu şu şekilde eklemeliyiz: bir yazılım kaynağıdır. 

lsyncd’yi Archlinux’a (AUR) kurmak

lsyncd, Archlinux resmi depolarında doğrudan mevcut olmasa da, yay gibi bir AUR yardımcısını kullanarak veya manuel olarak oluşturarak AUR’dan (Arch Kullanıcı Deposu) yükleyebiliriz.  Bu derste ikinci yöntemi takip edeceğiz.

İlk olarak git’in ve base-devel paketlerinin sistemimizde kurulu olduğundan emin olmalıyız:

$ sudo pacman -S install git base-devel

Ayrıca bazı yapı bağımlılıklarını da yüklememiz gerekiyor:

$ sudo pacman -S asciidoc cmake lua53-posix

Paket oluşturma talimatlarını içeren PKGBUILD ve diğer gerekli dosyalar git deposunda tutulur;  aşağıdaki komutla klonlayabiliriz:

$ git clone https://aur.archlinux.org/lsyncd.git

Paketi oluşturmaya başlamak için az önce klonladığımız git deposuna girip makepkg komutunu veriyoruz:

$ cd lsyncd && makepkg

 

Makine kaynaklarımıza bağlı olarak süreç biraz zaman alabilir.  Paket tamamlandıktan sonra paketi mevcut çalışma dizininde bulmalıyız.  Paket, adını şu anda “2.3.1” olan lsyncd sürümünden almıştır.  Yüklemek için şunu çalıştırıyoruz: 

$ sudo pacman -U lsyncd-2.3.1-9-x86_64.pkg.tar.zst

lsyncd’yi yapılandırma

lsyncd’nin nasıl çalışması gerektiğini belirtmek için kendisi de LUA’da yazılmış olan ana yapılandırma dosyasını düzenleriz.  Fedora ve Fedora tabanlı dağıtımlarda dosya /etc/lsyncd.conf şeklindedir, diğer dağıtımlarda ise şu şekildedir: /etc/lsyncd/lsyncd.conf.lua.  Dosyanın varsayılan olarak mevcut olmayabileceğine dikkat edin, bu nedenle onu manuel olarak oluşturmamız gerekebilir.  Kaynak ve hedef ağaçları senkronize tutmak için lsyncd tarafından gerçekleştirilen eylemleri büyük ölçüde özelleştirmek mümkün olsa da, burada iki ana varsayılan uygulamayı kullanmayı öğreneceğiz: rsync ve rsync-ssh.

rsync uygulaması

“rsync” uygulamasını kullanmaya başlamak için, /usr/share/doc/lsyncd/examples/lrsync.lua örnek dosyasını yerine kopyalayarak başlayabilir ve kullanım durumumuzla eşleşecek şekilde değiştirebiliriz.  Fedora’da şunları çalıştırabiliriz:

$ sudo cp /usr/share/doc/lsyncd/examples/lrsync.lua /etc/lsyncd.conf

Bunun yerine diğer tüm dağıtımlarda:

$ sudo mkdir -p /etc/lsyncd/ && sudo cp /usr/share/doc/lsyncd/examples/lrsync.lua /etc/lscynd.conf.lua

 

İşte dosyanın içeriği: 

----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings {
▸\statusFile = "/tmp/lsyncd.stat",
▸\statusInterval = 1,
}

sync{
▸\default.rsync,
▸\source="src",
▸\target="trg",
}

Dosyada görebildiğimiz ilk şey, daemon ayarlarını değiştirmek için kullanılan ayarlar fonksiyonunun çağrılmasıdır.  Argüman olarak, konfigürasyon parametreleri ve bunların değerleriyle doldurulmuş bir ilişkisel diziyi alır (argümanın etrafındaki eksik parantez, yalnızca LUA sözdizimsel şekeridir).  Bu durumda, örneğin, durum dosyası yolunun /tmp/lsyncd.stat olarak ayarlandığını görebiliriz (lsyncd bu dosyayı periyodik olarak bir durum kaydı yazmak için kullanır) ve statusInterval, lsyncd’nin durum dosyasına yazılmasından sonraki zaman aralığı, 1 saniyeye ayarlanır.  Mevcut parametrelerin tam listesini resmi belgelerde bulabiliriz.

Ayarlar işlevinden sonra, kaynak ve hedef dizinlerin içeriğini gerçekten senkronize etmek için senkronizasyon bir kez çağrılır.  Bu işlevler aynı zamanda tek argüman olarak bir ilişkisel diziyi alır: kullanmak istediğimiz uygulamanın adını (bu durumda default.rsync) ve kaynak ve hedef dizinlerin yolunu içerir.  /var/www/html dizinini aynı makinedeki /opt/www/html ile senkronize tutmak istediğimizi varsayalım:

sync{
▸\default.rsync,
▸\source="/var/www/html",
▸\target="/opt/www/html",
}

Dizinin kendisi değil, yalnızca kaynak dizinin içeriği senkronize edilecektir.  Ayrıca komutun başarılı olması için hedef dizinin mevcut olması gerekir.  Hedef dizini uzak bir dizinle senkronize tutmak için tek yapmamız gereken, tıpkı rsync’i doğrudan çağırırken yapacağımız gibi, hedef tanımına ana bilgisayar kısmını dahil etmektir.  Örnek olarak, IP 192.168.122.186’ya sahip uzak bir ana bilgisayarda /opt/www/html dizinini hedef olarak kullanmak ve ona “serseri” kullanıcı olarak bağlanmak için şunu yazabiliriz:

sync{
▸\default.rsync,
▸\source="/var/www/html",
▸\target="[email protected]:/opt/www/html",
}

Bunun işe yaraması için bir ssh bağlantısının zaten yapılandırılmış ve yetkilendirilmiş olması gerekir.

rsyncssh uygulaması

default.rsyncssh uygulaması, hareketli dosyaları işleme biçimi açısından default.rsync’ten farklıdır.  İkincisi dosyaları siler ve yeniden iletir, ilki ise onları hedef ana bilgisayarda yerel olarak taşımak için ssh komutlarını kullanır.  Bu uygulamayı kullanırken, uzak ana bilgisayar adını “hedefin” bir parçası olarak dahil etmek yerine, onu özel bir parametre aracılığıyla aktarırız: “ana bilgisayar”.

Bu uygulamaya temel olarak /usr/share/doc/lsyncd/examples/lrsyncssh.lua dosyasını kullanabiliriz.  İşte içeriği:

----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
sync{default.rsyncssh, source="src", host="localhost", targetdir="dst/"}

Önceki örnekte gördüğümüz iki dizini bu uygulamayı kullanarak senkronize etmek için şunu yazacağız:

----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
sync{
▸\default.rsyncssh, 
▸\source="/var/www/html", 
▸\host="[email protected]", 
▸\targetdir="/opt/www/html/"
▸\}

Rsync ve ssh seçeneklerini aktarma

Hem default.rsync hem de default.rsyncssh uygulamalarını kullanırken, “rsync” parametresi aracılığıyla ek rsync seçenekleri belirlemek mümkündür.  Örneğin, rsync ikili dosyası için alternatif bir yol belirleyebilir, rsync’i arşiv modunda çalıştırabilir (sanki -a seçeneğini kullanıyormuş gibi) ve şunu yazarak, bir dosyanın dışında tutulacak dosyaların listesini okumasını sağlayabiliriz:

sync{
▸\default.rsync,
▸\source="/var/www/html",
▸\target="[email protected]:/opt/www/html",
▸\rsync={
▸\▸\binary="/usr/local/bin/restic"
▸\▸\archive=true,
▸\▸\excludeFrom=/etc/rsync_excludes.txt
▸\}
}

 

default.rsyncssh uygulamasını kullanırken, “ssh” parametresini kullanarak SSH seçeneklerini iletmek de mümkündür.  “rsync” ise değer olarak ilişkisel bir dizi alır.  Örnek olarak bunu kullanarak ssh bağlantısı için alternatif bir port belirleyebiliriz:

 

sync{
▸\default.rsyncssh,
▸\source="/var/www/html",·
▸\host="[email protected]",·
▸\targetdir="/opt/www/html",
▸\ssh={
▸\▸\port=15400
▸\}
}

lsyncd hizmetini başlatma ve etkinleştirme

Linux dağıtımlarının büyük çoğunluğu başlangıç ​​sistemi olarak systemd’yi benimsediğinden, lsyncd hizmetini başlatmak ve önyükleme sırasında etkinleştirmek için aşağıdaki komutu kullanabiliriz:

$ sudo systemctl enable --now lsyncd.service

Sonuç

Bu eğitimde, lsyncd’nin en çok kullanılan Linux dağıtımlarından bazılarına nasıl kurulacağını ve iki yerel veya uzak dizin ağacını senkronize tutmak için nasıl kullanılacağını öğrendik.  lsyncd’nin yalnızca tek yönde çalıştığını ve kaynak dizinin içeriğini hedefle senkronize ettiğini unutmayın.  Çift yönlü senkronizasyon mümkün değildir.

 

Hüseyin GÜÇ

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım. Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum. Son 6 yıldır  sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum. Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.