Bu yazıda, basit bir inotify + createrepo betiği kullanarak bir rpm yapı deposuna bakacağız. Eserler, webdav aracılığıyla apache httpd kullanılarak yüklenir. Neden apache httpd yazının sonuna doğru yazılacak.
Bu nedenle, çözüm yalnızca RPM depolamayı düzenlemek için aşağıdaki gereksinimleri karşılamalıdır:
Bedava
Yapı deposuna yüklendikten birkaç saniye sonra paketin depoda bulunması.
Kurulumu ve bakımı kolay
Yüksek kullanılabilirlik sağlama yeteneği
Neden olmasın veya :
Depolama alanı veya birçok eser türü şu gerçeğine yol açar: veya tek bir başarısızlık noktası haline gelir.
yüksek kullanılabilirlik ödenir.
Bana aşırı tasarlanmış bir çözüm gibi görünüyor.
eserler blob içinde saklanır. Ani bir elektrik kesintisi durumunda, yedeğiniz yoksa blob'u geri yükleyemezsiniz. Bu hatayı aldık:
ERROR [ForkJoinPool.commonPool-worker-2] *SYSTEM [com.orientechnologies.orient.core.storage](http://com.orientechnologies.orient.core.storage/).fs.OFileClassic - $ANSI{green {db=security}} Error during data read for file 'privilege_5.pcl' 1-th attempt [java.io](http://java.io/).IOException: Bad address. Blob asla kurtarılamadı.
Kaynak kodu
→ Kaynak kodu bulunur
Ana komut dosyası şöyle görünür:
#!/bin/bash
source /etc/inotify-createrepo.conf
LOGFILE=/var/log/inotify-createrepo.log
function monitoring() {
inotifywait -e close_write,delete -msrq --exclude ".repodata|.olddata|repodata" "${REPO}" | while read events
do
echo $events >> $LOGFILE
touch /tmp/need_create
done
}
function run_createrepo() {
while true; do
if [ -f /tmp/need_create ];
then
rm -f /tmp/need_create
echo "start createrepo $(date --rfc-3339=seconds)"
/usr/bin/createrepo --update "${REPO}"
echo "finish createrepo $(date --rfc-3339=seconds)"
fi
sleep 1
done
}
echo "Start filesystem monitoring: Directory is $REPO, monitor logfile is $LOGFILE"
monitoring >> $LOGFILE &
run_createrepo >> $LOGFILE &Montaj
Inotify-createrepo yalnızca şu durumlarda çalışır: CentOS 7 veya üzeri. Üzerinde CentOS 6 numaralı kişi çalıştıramadı.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepoYapılandırma
Varsayılan olarak inotify-createrepo bir dizini izler /var/www/repos/rpm-repo/.
Bu dizini dosyada değiştirebilirsiniz. /etc/inotify-createrepo.conf.
kullanımı
Bir dizine herhangi bir dosya eklerken /var/www/repos/rpm-repo/ inotifywait bir dosya oluşturacak /tmp/need_create. run_createrepo işlevi sonsuz bir döngüde çalışır ve dosyayı izler /tmp/need_create. Dosya varsa, çalıştırın createrepo --update.
Dosyada bir giriş görünecektir:
/var/www/repos/rpm-repo/ CREATE nginx-1.16.1-1.el7.ngx.x86_64.rpm
start createrepo 2020-03-02 09:46:21+03:00
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 0 pkgs
Spawning worker 2 with 0 pkgs
Spawning worker 3 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
finish createrepo 2020-03-02 09:46:22+03:00Yüksek kullanılabilirlik sağlama yeteneği
Mevcut bir çözümden yüksek kullanılabilirlik elde etmek için, HA için Keepalived ve yapı senkronizasyonu için Lsyncd olmak üzere 2 sunucu kullanabileceğinizi düşünüyorum. - yerel dizindeki değişiklikleri izleyen, bunları toplayan ve belirli bir süre sonra rsync bunları eşitlemeye başlayan bir arka plan programı. Ayrıntılar ve ayarlar gönderide açıklanmıştır "".
WebDav
Dosya yüklemenin birkaç yolu vardır: SSH, NFS, WebDav. WebDav, modern ve basit bir seçenek gibi görünüyor.
WebDav için Apache httpd kullanacağız. Neden 2020'de Apache httpd ve nginx değil?
Nginx + modülleri oluşturmak için otomatik araçlar kullanmak istiyorum (örneğin, Webdav).
Nginx + modülleri oluşturmak için bir proje var - . Dosyaları yüklemek için nginx + wevdav kullanıyorsanız, bir modüle ihtiyacınız vardır. . Nginx ile oluşturmaya ve kullanmaya çalışırken vasıtasıyla bir hata alacağız . Aynı böcek yaz aylarında kapatıldı .
çekme isteği yaptım и . Ama kabul edilmediler.
yapılandırma webdav.conf
DavLockDB /var/www/html/DavLock
<VirtualHost localhost:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog /var/log/httpd/error.log
CustomLog /var/log/httpd/access.log combined
Alias /rpm /var/www/repos/rpm-repo
<Directory /var/www/repos/rpm-repo>
DAV On
Options Indexes FollowSymlinks SymLinksifOwnerMatch IncludesNOEXEC
IndexOptions NameWidth=* DescriptionWidth=*
AllowOverride none
Require all granted
</Directory>
</VirtualHost>Apache httpd yapılandırmasının geri kalanını kendiniz yapacağınızı düşünüyorum.
Apache httpd'nin önünde Nginx
Apache'den farklı olarak Nginx, olay tabanlı bir istek işleme modeli kullanır; bu, herhangi bir sayıda istemci için yalnızca bir HTTP sunucu işleminin gerekli olduğu anlamına gelir. Nginx kullanabilir ve sunucu yükünü azaltabilirsiniz.
nginx-front.conf yapılandırması. Nginx yapılandırmasının geri kalanını kendiniz yapacağınızı düşünüyorum.
upstream nginx_front {
server localhost:80;
}
server {
listen 443 ssl;
server_name ваш-виртуальных-хост;
access_log /var/log/nginx/nginx-front-access.log main;
error_log /var/log/nginx/nginx-front.conf-error.log warn;
location / {
proxy_pass http://nginx_front;
}
}Dosyaları WebDav aracılığıyla indirme
Rpm indirmek çok kolaydır.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://ваш-виртуальный-хост/rpm/Kaynak: habr.com
