Ystorfa rpm syml gan ddefnyddio Inotify a webdav

Yn y swydd hon, byddwn yn edrych ar ystorfa arteffact rpm gan ddefnyddio sgript inotify + createrepo syml. Mae arteffactau'n cael eu huwchlwytho trwy webdav gan ddefnyddio apache httpd. Pam bydd apache httpd yn cael ei ysgrifennu tua diwedd y post.

Felly, rhaid i'r datrysiad fodloni'r gofynion canlynol ar gyfer trefnu storfa RPM yn unig:

  • Am ddim

  • Argaeledd y pecyn yn yr ystorfa ychydig eiliadau ar Γ΄l ei uwchlwytho i'r ystorfa arteffactau.

  • Hawdd i'w osod a'i gynnal

  • Y gallu i wneud argaeledd uchel

    Pam ddim SonaType Nexus neu Pulp:

  • Storio i mewn SonaType Nexus neu Pulp mae llawer o fathau o arteffactau yn arwain at y ffaith bod SonaType Nexus neu Pulp dod yn un pwynt o fethiant.

  • Argaeledd uchel yn SonaType Nexus yn cael ei dalu.

  • Pulp Mae'n ymddangos fel ateb wedi'i or-beiriannu i mi.

  • Arteffactau mewn SonaType Nexus storio mewn blob. Os bydd toriad pΕ΅er yn sydyn, ni fyddwch yn gallu adfer y blob os nad oes gennych gopi wrth gefn. Cawsom y camgymeriad hwn: 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. Ni chafodd Blob ei adennill erioed.

Cod ffynhonnell

β†’ Mae'r cod ffynhonnell wedi'i leoli yma

Mae'r prif sgript yn edrych fel hyn:

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

Gosod

dim ond ar CentOS 7 neu uwch y mae inotify-createrepo yn gweithio. Methu ei gael i weithio ar CentOS 6.

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

Cyfluniad

Yn ddiofyn mae inotify-createrepo yn monitro cyfeiriadur /var/www/repos/rpm-repo/.

Gallwch newid y cyfeiriadur hwn yn y ffeil /etc/inotify-createrepo.conf.

Defnyddio

Wrth ychwanegu unrhyw ffeil i gyfeiriadur /var/www/repos/rpm-repo/ Bydd inotifywait yn creu ffeil /tmp/need_create. Mae'r swyddogaeth run_createrepo yn rhedeg mewn dolen ddiddiwedd ac yn monitro'r ffeil /tmp/need_create. Os yw'r ffeil yn bodoli, yna rhedeg createrepo --update.

Bydd cofnod yn ymddangos yn y ffeil:

/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 gallu i wneud argaeledd uchel

Er mwyn gwneud argaeledd uchel allan o ddatrysiad sy'n bodoli eisoes, rwy'n credu y gallwch chi ddefnyddio 2 weinydd, Keepvived ar gyfer HA a Lsyncd ar gyfer cydamseru arteffactau. Lsyncd - daemon sy'n monitro newidiadau yn y cyfeiriadur lleol, yn eu hagregu, ac ar Γ΄l amser penodol, mae rsync yn dechrau eu cydamseru. Disgrifir manylion a gosodiadau yn y post "Cydamseru cyflym o biliwn o ffeiliau".

GweDav

Mae sawl ffordd o uwchlwytho ffeiliau: SSH, NFS, WebDav. Ymddengys bod WebDav yn opsiwn modern a syml.

Ar gyfer WebDav, byddwn yn defnyddio Apache httpd. Pam Apache httpd yn 2020 ac nid nginx?

Hoffwn ddefnyddio offer awtomataidd ar gyfer adeiladu modiwlau Nginx + (er enghraifft, Webdav).

Mae yna brosiect ar gyfer adeiladu modiwlau Nginx + - nginx-adeiladydd. Os ydych chi'n defnyddio nginx + wevdav i uwchlwytho ffeiliau, yna mae angen modiwl arnoch chi nginx-dav-ext-modiwl. Wrth geisio adeiladu a defnyddio Nginx gyda nginx-dav-ext-modiwl gyda help nginx-adeiladydd byddwn yn cael gwall Defnyddir gan http_dav_module yn lle nginx-dav-ext-module. Caewyd yr un byg yn yr haf nginx: [emerg] cyfarwyddeb anhysbys dav_methods.

Fe wnes i gais tynnu Ychwanegu siec git_url ar gyfer wedi'i fewnosod, wedi'i ail-ffactoreiddio --with-{}_module ΠΈ os modiwl == "http_dav_module" atodiad --with. Ond ni chawsant eu derbyn.

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>

Rwy'n credu y byddwch chi'n gwneud gweddill cyfluniad Apache httpd eich hun.

Nginx o flaen Apache httpd

Yn wahanol i Apache, mae Nginx yn defnyddio model prosesu ceisiadau yn seiliedig ar ddigwyddiad, sy'n golygu mai dim ond un broses gweinydd HTTP sydd ei angen ar gyfer unrhyw nifer o gleientiaid. Gallwch ddefnyddio nginx a lleihau llwyth gweinydd.

nginx-front.conf config. Rwy'n credu y byddwch chi'n gwneud gweddill y cyfluniad nginx eich hun.

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

Lawrlwytho ffeiliau trwy WebDav

Mae lawrlwytho rpm yn hawdd iawn.

curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://ваш-Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ-хост/rpm/

Ffynhonnell: hab.com

Ychwanegu sylw