Einfach rpm Repository mat Inotify a webdav

An dësem Post kucke mir d'rpm Artefaktlagerung mat engem einfachen Skript mat inotify + createrepo. Eroplueden vun Artefakte gëtt iwwer Webdav mat Apache httpd duerchgefouert. Firwat Apache httpd gëtt um Enn vum Post geschriwwe ginn.

Also, d'Léisung muss déi folgend Ufuerderunge erfëllen fir nëmmen RPM-Späichere ze organiséieren:

  • Gratis

  • Disponibilitéit vum Package am Repository e puer Sekonnen nom Eroplueden an den Artefakt Repository.

  • Einfach ze installéieren an z'erhalen

  • Fähegkeet héich Disponibilitéit ze maachen

    Firwat net SonaType Nexus oder Pulp:

  • Lagerung an SonaType Nexus oder Pulp vill Zorte vun artifacts féiert zu der Tatsaach, datt SonaType Nexus oder Pulp ginn engem eenzege Punkt vun Echec.

  • Héich Disponibilitéit an SonaType Nexus bezuelt gëtt.

  • Pulp Schéngt fir mech wéi eng iwwerkomplizéiert Léisung.

  • Artefakter an SonaType Nexus sinn am Blob gespäichert. Wann et e plötzlechen Stroumausfall ass, kënnt Dir de Blob net restauréieren wann Dir kee Backup hutt. Mir haten dëse Feeler: 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 gouf ni restauréiert.

Quelltext

→ Quellcode ass lokaliséiert hei

Den Haaptskript gesäit esou aus:

#!/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 &

Kader

Inotify-createrepo funktionnéiert nëmmen op CentOS 7 oder méi héich. Konnt et net kréien fir op CentOS 6 ze schaffen.

yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepo

Configuratioun

Par défaut iwwerwaacht inotify-createrepo den Verzeechnes /var/www/repos/rpm-repo/.

Dir kënnt dëse Verzeechnes an der Datei änneren /etc/inotify-createrepo.conf.

Benotzt

Wann Dir eng Datei an e Verzeichnis bäidréit /var/www/repos/rpm-repo/ inotifywait wäert d'Datei erstellen /tmp/need_create. D'run_createrepo Funktioun leeft an enger endloser Loop a iwwerwaacht d'Datei /tmp/need_create. Wann d'Datei existéiert, leeft se createrepo --update.

Eng Entrée erschéngt an der Datei:

/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

Fähegkeet héich Disponibilitéit ze maachen

Fir eng héich Disponibilitéit vun enger existéierender Léisung ze maachen, mengen ech, Dir kënnt 2 Server benotzen, Keepalved fir HA an Lsyncd fir Artefakte ze synchroniséieren. Lsyncd - en Daemon deen Ännerungen an engem lokalen Verzeichnis iwwerwaacht, se aggregéiert, an no enger gewësser Zäit fänkt rsync un ze synchroniséieren. Detailer an Opstellung sinn am Post beschriwwen "Schnell Synchroniséierung vun enger Milliard Dateien".

WebDav

Dir kënnt Dateien op verschidde Weeër eropluede: SSH, NFS, WebDav. WebDav schéngt eng modern an einfach Optioun ze sinn.

Fir WebDav wäerte mir Apache httpd benotzen. Firwat Apache httpd am Joer 2020 an net nginx?

Ech wéilt automatiséiert Tools benotze fir Nginx + Moduler ze bauen (zum Beispill Webdav).

Et gëtt e Projet fir Nginx + Moduler ze bauen - Nginx-Builder. Wann Dir nginx + wevdav benotzt fir Dateien eropzelueden, braucht Dir e Modul nginx-dav-ext-modul. Wann Dir probéiert Nginx ze bauen an ze benotzen mat nginx-dav-ext-modul mat der Hëllef vun Nginx-Builder mir kréien e Feeler Benotzt vun http_dav_module amplaz nginx-dav-ext-module. Dee selwechte Käfer gouf am Summer zougemaach nginx: [emerg] onbekannt Direktiv dav_methods.

Ech hunn eng Pull Ufro gemaach Füügt Check git_url fir embedded, refactored —with- {}_module и wann Modul == "http_dav_module" addéieren --mat. Awer si goufen net ugeholl.

Config 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>

Ech mengen Dir kënnt de Rescht vum Apache httpd Setup selwer maachen.

Nginx virun Apache httpd

Am Géigesaz zu Apache benotzt Nginx en Event-baséiert Ufroveraarbechtungsmodell, deen nëmmen een HTTP-Serverprozess fir all Zuel vu Clienten erfuerdert. Dir kënnt nginx benotzen an d'Laascht op de Server reduzéieren.

Configuréieren nginx-front.conf. Ech mengen Dir kënnt de Rescht vum nginx-Setup selwer maachen.

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;
    }
}

Eroplueden Dateien iwwer WebDav

Rpm Luede ass ganz einfach.

curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://ваш-виртуальный-хост/rpm/

Source: will.com

Setzt e Commentaire