Inotify və webdav istifadə edərək sadə rpm depoziti

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 SonaType NexusPulp:

  • Birçok türde artefaktın depolanması, SonaType NexusPulp tek bir arıza noktası haline gelir. SonaType NexusPulp Yüksek erişilebilirlik (high availability) ise

  • ücretlidir. SonaType Nexus Bana karmaşık bir çözüm gibi geliyor.

  • Pulp 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: SonaType Nexus 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: burada

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ırma

Varsayı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:00

Yü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. Lsyncd — 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, "Milyar dosyanın hızlı senkronizasyonu".

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 — Nginx-builder. Eğer nginx + wevdav'ı dosya yüklemek için kullanırsak, nginx-dav-ext-modulemodülüne ihtiyacımız var. Nginx ile nginx-dav-ext-module Wine 5.4 Nginx-builder kullanmayı denersek, hata alırız. http_dav_module yerine nginx-dav-ext-module kullanılır.. Aynı hata yazın biriminde kapatılmıştır. nginx: [emerg] bilinmeyen direktif dav_methods.

Bir Pull request yaptım Gömülü için git_url kontrolü ekle, refactored —with-{}_moduleeğer modül == "http_dav_module" ise ekle —with. 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 granted

Qalanı 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

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster