Einföld rpm geymsla með Inotify og webdav

Í þessari færslu munum við skoða rpm artifact repository með því að nota einfalt inotify + createrepo forskrift. Artifacts er hlaðið upp í gegnum webdav með apache httpd. Hvers vegna apache httpd verður skrifað undir lok færslunnar.

Þannig að lausnin verður að uppfylla eftirfarandi kröfur til að skipuleggja aðeins RPM geymslu:

  • Ókeypis

  • Aðgengi pakkans í geymslunni nokkrum sekúndum eftir að hlaðið er upp í gripageymsluna.

  • Auðvelt að setja upp og viðhalda

  • Geta til að gera mikið framboð

    Af hverju ekki SonaType Nexus eða Pulp:

  • Geymsla í SonaType Nexus eða Pulp margar tegundir af gripum leiðir til þess að SonaType Nexus eða Pulp orðið að einum bilunarpunkti.

  • Mikið framboð í SonaType Nexus er greitt.

  • Pulp Mér sýnist þetta vera of hönnuð lausn.

  • Munir í SonaType Nexus geymt í blobsi. Komi til skyndilegrar rafmagnsleysis muntu ekki geta endurheimt kubbinn ef þú ert ekki með öryggisafrit. Við fengum þessa villu: 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 náðist aldrei.

Kóðinn

→ Kóðinn er staðsettur hér

Aðalhandritið lítur svona út:

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

Uppsetning

inotify-createrepo virkar aðeins á CentOS 7 eða hærra. Gat ekki fengið það til að virka á CentOS 6.

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

Stillingar

Sjálfgefið er að inotify-createrepo fylgist með möppu /var/www/repos/rpm-repo/.

Þú getur breytt þessari möppu í skránni /etc/inotify-createrepo.conf.

Nota

Þegar einhver skrá er bætt við möppu /var/www/repos/rpm-repo/ inotifywait mun búa til skrá /tmp/need_create. Run_createrepo aðgerðin keyrir í óendanlega lykkju og fylgist með skránni /tmp/need_create. Ef skráin er til skaltu keyra createrepo --update.

Færsla mun birtast í skránni:

/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

Geta til að gera mikið framboð

Til að gera mikið framboð úr núverandi lausn held ég að þú getir notað 2 netþjóna, Keepalived fyrir HA og Lsyncd fyrir samstillingu artifacts. Lsyncd - púkinn sem fylgist með breytingum á staðbundinni möppu, safnar þeim saman og eftir ákveðinn tíma byrjar rsync að samstilla þær. Upplýsingar og stillingar eru lýst í færslunni "Hröð samstilling á milljarði skráa".

webdav

Það eru nokkrar leiðir til að hlaða upp skrám: SSH, NFS, WebDav. WebDav virðist vera nútímalegur og einfaldur valkostur.

Fyrir WebDav munum við nota Apache httpd. Af hverju Apache httpd árið 2020 en ekki nginx?

Mig langar að nota sjálfvirk verkfæri til að byggja Nginx + einingar (til dæmis Webdav).

Það er verkefni til að byggja Nginx + einingar - Nginx-byggir. Ef þú notar nginx + wevdav til að hlaða upp skrám, þá þarftu einingu nginx-dav-ext-eining. Þegar reynt er að byggja og nota Nginx með nginx-dav-ext-eining með hjálpinni Nginx-byggir við fáum villu Notað af http_dav_module í stað nginx-dav-ext-module. Sama galla var lokað í sumar nginx: [koma] óþekkt tilskipun dav_methods.

Ég lagði fram dráttarbeiðni Bættu við athuga git_url fyrir embed in, refactored --with-{}_module и ef mát == "http_dav_module" bæta við --með. En þeir voru ekki samþykktir.

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

Ég held að þú munt gera restina af Apache httpd stillingunum sjálfur.

Nginx fyrir framan Apache httpd

Ólíkt Apache, notar Nginx atburðabundið beiðnivinnslulíkan, sem þýðir að aðeins eitt HTTP netþjónsferli er krafist fyrir hvaða fjölda viðskiptavina sem er. Þú getur notað nginx og minnkað álag á netþjóni.

nginx-front.conf stillingar. Ég held að þú munt gera restina af nginx stillingunum sjálfur.

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

Að hlaða upp skrám í gegnum WebDav

Það er mjög auðvelt að hlaða niður rpm.

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

Heimild: www.habr.com

Bæta við athugasemd