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:
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:
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:
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:
Önceki örnekte gördüğümüz iki dizini bu uygulamayı kullanarak senkronize etmek için şunu yazacağız:
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:
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:
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.