Lihtne rpm hoidla Inotify ja webdav abil

Selles postituses vaatleme rpm artefaktihoidlat, kasutades lihtsat inotify + Createrepo skripti. Artefaktid laaditakse üles webdav kaudu, kasutades apache httpd-d. Miks apache httpd, kirjutatakse postituse lõpus.

Seega peab lahendus vastama järgmistele nõuetele ainult RPM-salvestuse korraldamiseks:

  • Tasuta

  • Paketi saadavus hoidlas mõni sekund pärast artefaktihoidlasse üleslaadimist.

  • Lihtne paigaldada ja hooldada

  • Võimalus tagada kõrge kättesaadavus

    Miks mitte SonaType Nexus või Pulp:

  • Säilitamine sisse SonaType Nexus või Pulp mitut tüüpi artefaktid viivad selleni, et SonaType Nexus või Pulp muutuda üheks ebaõnnestumise punktiks.

  • Kõrge saadavus sisse SonaType Nexus on makstud.

  • Pulp Mulle tundub liiga läbimõeldud lahendus.

  • Artefaktid sees SonaType Nexus salvestatud blob. Äkilise elektrikatkestuse korral ei saa te blobi taastada, kui teil pole varukoopiat. Meil oli selline viga: 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. Blobi ei saadud kunagi kätte.

Lähtekood

→ Lähtekood asub siin

Põhiskript näeb välja selline:

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

Paigaldamine

inotify-createrepo töötab ainult CentOS 7 või uuemates versioonides. CentOS 6-s ei saanud seda tööle panna.

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

Seadistamine

Vaikimisi jälgib inotify-createrepo kataloogi /var/www/repos/rpm-repo/.

Seda kataloogi saate failis muuta /etc/inotify-createrepo.conf.

Kasutama

Kui lisate kataloogi mis tahes faili /var/www/repos/rpm-repo/ inotifywait loob faili /tmp/need_create. Funktsioon run_createrepo töötab lõpmatu tsüklina ja jälgib faili /tmp/need_create. Kui fail on olemas, käivitage createrepo --update.

Failis kuvatakse kirje:

/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

Võimalus tagada kõrge kättesaadavus

Olemasoleva lahenduse kõrge kättesaadavuse tagamiseks võite kasutada kahte serverit, Keepalived HA jaoks ja Lsyncd artefaktide sünkroonimiseks. Lsyncd - deemon, mis jälgib muutusi kohalikus kataloogis, koondab need ja teatud aja möödudes hakkab rsync neid sünkroonima. Üksikasju ja seadeid kirjeldatakse postituses "Miljardi faili kiire sünkroonimine".

WebDav

Failide üleslaadimiseks on mitu võimalust: SSH, NFS, WebDav. WebDav tundub olevat kaasaegne ja lihtne variant.

WebDavi jaoks kasutame Apache httpd. Miks Apache httpd aastal 2020, mitte nginx?

Sooviksin kasutada Nginx + moodulite ehitamiseks automatiseeritud tööriistu (näiteks Webdav).

Nginx + moodulite ehitamiseks on projekt - nginx-ehitaja. Kui kasutate failide üleslaadimiseks nginx + wevdav, siis vajate moodulit nginx-dav-ext-moodul. Kui proovite Nginxit koos luua ja kasutada nginx-dav-ext-moodul abil nginx-ehitaja saame vea Kasutab http_dav_module nginx-dav-ext-module asemel. Sama viga suleti suvel nginx: [emerg] tundmatu direktiiv dav_methods.

Tegin tõmbamistaotluse Lisage git_url, et leida manustatud, ümbervormistatud --with-{}_module и if module == "http_dav_moodul" lisa --with. Kuid neid ei võetud vastu.

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

Arvan, et ülejäänud Apache httpd konfiguratsiooni teete ise.

Nginx Apache ees httpd

Erinevalt Apache'ist kasutab Nginx sündmustepõhist päringute töötlemise mudelit, mis tähendab, et mis tahes arvu klientide jaoks on vaja ainult ühte HTTP-serveri protsessi. Saate kasutada nginxi ja vähendada serveri koormust.

nginx-front.conf konfiguratsioon. Arvan, et teete ülejäänud nginxi konfiguratsiooni ise.

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

Failide allalaadimine WebDavi kaudu

Pöörete arvu allalaadimine on väga lihtne.

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

Allikas: www.habr.com

Lisa kommentaar