Bu yazıda, rpm artefaktlarının depolanmasını inotify ve createrepo ile basit bir scriptle inceleyeceğiz. Artefaktların yüklemesi, Apache HTTPD kullanarak webdav üzerinden gerçekleştirilmektedir. Neden Apache HTTPD'nin daha sonra yazılacağını yazının sonunda göreceksiniz.
Yani, çözüm yalnızca RPM deposu oluşturma için aşağıdaki gereksinimleri karşılamalıdır:
Ücretsiz
Dosya depolanmaya yüklendikten sonra, paketin depoda birkaç saniye içinde erişilebilir olması.
Kurulumu ve bakımı kolay
Yüksek erişilebilirlik (high availability) sağlaması gerektiği
Neden olmasın və :
Birçok türde artefaktın depolanması, və tek bir arıza noktası haline gelir. və Yüksek erişilebilirlik (high availability) ise
ücretlidir. Bana karmaşık bir çözüm gibi geliyor.
Artefaktlar
blob içinde saklanmaktadır. Ani bir elektrik kesintisinde, eğer bir yedeklemeniz yoksa blob'u geri getiremeyeceksiniz. Bu tarz bir hata yaşadık: HATA [ForkJoinPool.commonPool-worker-2] *SYSTEM [com.orientechnologies.orient.core.storage](http://com.orientechnologies.orient.core.storage/).fs.OFileClassic - $ANSI{green {db=security}} 'privilege_5.pcl' dosyası için veri okuma sırasında hata 1. deneme [java.io](http://java.io/).IOException: Kötü adres
. Blob'u geri getiremedik.→ Kaynak kod burada bulunuyor
Mənbə kodu
Ana script şöyle görünmektedir:
Inotify-createrepo yalnızca CentOS 7 veya daha üst versiyonlarında çalışmaktadır. CentOS 6'da çalıştırmayı başaramadım.
#!/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 &Quraşdırma
yum -y install yum-plugin-copr yum copr enable antonpatsev/inotify-createrepo yum -y install inotify-createrepo systemctl start inotify-createrepo
YapılandırmaVarsayılan olarak inotify-createrepo dizini izlemektedir.
Bu dizini /var/www/repos/rpm-repo/.
dosyasında değiştirebilirsiniz. /etc/inotify-createrepo.conf.
İstifadəsi
Dizine herhangi bir dosya eklendiğinde, /var/www/repos/rpm-repo/ inotifywait bir dosya oluşturacaktır. /tmp/need_create. run_createrepo işlevi sonsuz bir döngü içinde çalışır ve dosyayı izler. /tmp/need_create. Dosya mevcutsa, createrepo --update.
Dosyaya şu satır eklenir:
/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 erişilebilirlik (high availability) sağlaması gerektiği
Mevcut çözümden yüksek erişilebilirlik (high availability) sağlamak için, iki sunucu kullanabilir, HA için Keepalived ve artefaktların senkronizasyonu için Lsyncd kullanabiliriz. — yerel dizindeki değişiklikleri izleyen, bunları toplayan ve belli bir süre geçtikten sonra rsync'i başlatan bir demondur. Detaylar ve ayar, "".
WebDav
Dosyaları birkaç yöntemle yükleyebilirsiniz: 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, neden nginx değil?
Nginx + modüller (örneğin, Webdav) için otomatik araçları kullanmak istiyoruz.
Nginx + modüller kurulumuyla ilgili bir proje var — . Eğer nginx + wevdav'ı dosya yüklemek için kullanırsak, modülüne ihtiyacımız var. Nginx ile Wine 5.4 kullanmayı denersek, hata alırız. . Aynı hata yazın biriminde kapatılmıştır. .
Bir Pull request yaptım və . Ama kabul etmediler.
webdav.conf yapılandırması
DavLockDB /var/www/html/DavLock
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
DAV On
Options Indexes FollowSymlinks SymLinksifOwnerMatch IncludesNOEXEC
IndexOptions NameWidth=* DescriptionWidth=*
AllowOverride none
Require all grantedQalanı Apache httpd üçün özünüz quracağınıza inanıram.
Nginx, Apache httpd-dən əvvəl
Apache-dən fərqli olaraq, Nginx hadisə yönümlü sorğu işləmə modelindən istifadə edir və bu səbəbdən hər hansı sayda müştəri üçün yalnız bir HTTP-server prosesi tələb olunur. Nginx istifadə edərək server yüklənməsini azalda bilərsiniz.
nginx-front.conf konfiqurasiyası. Nginx-in qalan konfiqurasiyasını özünüz edəcəyinizə inanıram.
upstream nginx_front {
server localhost:80;
}
server {
listen 443 ssl;
server_name sizin-virtual-host;
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;
}
}WebDav vasitəsilə fayl yükləmə
rpm yükləmək çox asandır.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://sizin-virtual-host/rpm/Mənbə: habr.com
