Lihtne rpm-repositoorium, kasutades Inotify ja webdav

Selles postituses vaatame RPM artefaktide salvestust lihtsa skripti abil, mis kasutab inotify + createrepo. Artefaktide laadimine toimub WebDAV kaudu, kasutades Apache httpd-d. Miks Apache httpd-st räägime artikli lõpus.

Nii et lahendus peab vastama järgmistele nõudmistele ainult RPM ladustamiseks:

  • Tasuta

  • Paki saadavus hoidlas kohe pärast artefaktide üleslaadimist.

  • Lihtne paigaldada ja hallata

  • Võimekus tagada kõrge saadavus (high availability)

    Miks mitte SonaType Nexus või Pulp:

  • Salvestamine SonaType Nexus või Pulp paljude erinevate artefaktitüüpide jaoks toob endaga kaasa SonaType Nexus või Pulp ühe tõrkepunkti.

  • Kõrge saadavus (high availability) on SonaType Nexus tasuline.

  • Pulp Mulle tundub, et see on liiga keeruline lahendus.

  • Artefakte SonaType Nexus salvestatakse blob. Kui elektrit ootamatult välja lülitatakse, ei saa te blob'i taastada, kui teil ei ole 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}} Viga andmete lugemisel faili 'privilege_5.pcl' 1. katse [java.io](http://java.io/).IOException: Vale aadress. Blob'i ei taastatud.

Allikasood

→ Algne kood 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 &

Installimine

Inotify-createrepo töötab ainult CentOS 7 või uuematel versioonidel. CentOS 6-l ei õnnestunud 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

Konfigureerimine

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

Seda katalooge saab muuta failis /etc/inotify-createrepo.conf.

Kasutamine

Faili lisamisel katalooge /var/www/repos/rpm-repo/ inotifywait loob faili /tmp/need_create. Funktsioon run_createrepo käivitatakse lõpmatus tsüklis ja jälgib faili /tmp/need_create. Kui fail eksisteerib, käivitatakse createrepo --update.

Failis kuvatakse järgmine rida:

/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õimekus tagada kõrge saadavus (high availability)

Kuna olemasolevast lahendusest kõrge saadavuse (high availability) saavutamiseks arvan, et võiks kasutada kahte serverit, Keepalived HA jaoks ja Lsyncd artefaktide sünkroniseerimiseks. Lsyncd — demon, mis jälgib muudatusi kohalikus kataloogis, kogub neid ja pärast teatud ajavahemikku käivitab rsync nende sünkroniseerimiseks. Üksikasjad ja seadistus on toodud postituses "Kiire sünkroniseerimine miljardi faili".

WebDav

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

WebDav-i jaoks kasutame Apache httpd-d. Miks Apache httpd 2020. aastal, mitte nginx?

Sooviksin kasutada automatiseeritud vahendeid Nginx + moodulite (nt Webdav) kogumiseks.

On projekt Nginx + moodulite kogumiks — Nginx-builder. Kui kasutada nginx + wevdav failide üleslaadimiseks, vajame moodulit nginx-dav-ext-module. Kui proovida Nginx-i üles ehitada ja kasutada nginx-dav-ext-module kasutades Nginx-builder saame vea Kasutatakse http_dav_module asemel nginx-dav-ext-module.Sama viga suleti suvel nginx: [emerg] tundmatud suunised dav_methods.

Tehtud Pull-Request Lisa kontroll git_url jaoks, refaktoreeritud —with-{}_module ja kui moodul == "http_dav_module" lisa —with. Kuid neid ei võetud vastu.

Webdav.conf konfiguratsioon

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

Ülejäänud Apache httpd seadistuse teen kindlasti ise.

Nginx Apache httpd ees

Erinevalt Apache'ist kasutab Nginx päringute töötlemiseks sündmuste mudelit, mis tähendab, et üks HTTP-serveri protsess on vajalik mistahes arvu klientide jaoks. Saate kasutada nginx'i ja vähendada serveri koormust.

Nginx-front.conf konfiguratsioon. Ülejäänud nginx'i seadistuse arvan, et teete ise.

upstream nginx_front {
    server localhost:80;
}

server {
    listen 443 ssl;
    server_name teie-virtuaalne-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;
    }
}

Failide üleslaadimine WebDav kaudu

RPM-i laadimine on väga lihtne.

curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://teie-virtuaalne-host/rpm/

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster