Ienfâldige rpm-repository mei Inotify en webdav

Yn dizze post sille wy sjen nei de opslach fan rpm artefakt mei in ienfâldich skript mei inotify + createrepo. It opladen fan artefakten wurdt útfierd fia webdav mei apache httpd. Wêrom apache httpd sil wurde skreaun oan 'e ein fan' e post.

Dat, de oplossing moat foldwaan oan de folgjende easken foar it organisearjen fan allinich RPM-opslach:

  • Frij

  • Beskikberens fan it pakket yn 'e repository in pear sekonden nei it uploaden nei it artefaktrepository.

  • Maklik te ynstallearjen en te ûnderhâlden

  • Mooglikheid om hege beskikberens te meitsjen

    Wêrom net SonaType Nexus of Pulp:

  • Opslach yn SonaType Nexus of Pulp in protte soarten artefakten liedt ta it feit dat SonaType Nexus of Pulp wurden in inkeld punt fan mislearring.

  • Hege beskikberens yn SonaType Nexus betelle wurdt.

  • Pulp It liket my in te yngewikkelde oplossing.

  • Artefakten yn SonaType Nexus wurde opslein yn blob. As d'r ynienen in stroomûnderbrekking is, kinne jo de blob net werstelle as jo gjin reservekopy hawwe. Wy hiene dizze flater: 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 waard nea restaurearre.

Boarne

→ Boarnekoade is te finen hjir

It haadskript sjocht der sa ú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 &

ynstelling

Inotify-createrepo wurket allinich op CentOS 7 of heger. Koe it net krije om te wurkjen op CentOS 6.

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

Konfiguraasje

Standert kontroleart inotify-createrepo de map /var/www/repos/rpm-repo/.

Jo kinne dizze map feroarje yn it bestân /etc/inotify-createrepo.conf.

Gebrûk

By it tafoegjen fan in triem oan in map /var/www/repos/rpm-repo/ inotifywait sil it bestân oanmeitsje /tmp/need_create. De funksje run_createrepo rint yn in einleaze lus en kontrolearret it bestân /tmp/need_create. As de triem bestiet, rint it createrepo --update.

In yngong sil ferskine yn it bestân:

/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

Mooglikheid om hege beskikberens te meitsjen

Om hege beskikberens fan in besteande oplossing te meitsjen, tink ik dat jo 2-tsjinners kinne brûke, Keepalived foar HA en Lsyncd foar syngronisaasje fan artefakten. Lsyncd - in daemon dy't wizigingen yn in lokale map kontrolearret, se aggregearret, en nei in bepaalde tiid begjint rsync se te syngronisearjen. Details en opset wurde beskreaun yn 'e post "Snelle syngronisaasje fan in miljard bestannen".

webdav

Jo kinne bestannen op ferskate manieren uploade: SSH, NFS, WebDav. WebDav liket in moderne en ienfâldige opsje te wêzen.

Foar WebDav sille wy Apache httpd brûke. Wêrom Apache httpd yn 2020 en net nginx?

Ik wol automatisearre ark brûke foar it bouwen fan Nginx + modules (bygelyks Webdav).

D'r is in projekt om Nginx + modules te bouwen - Nginx-bouwer. As jo ​​nginx + wevdav brûke om bestannen te uploaden, hawwe jo in module nedich nginx-dav-ext-module. As jo ​​besykje Nginx te bouwen en te brûken mei nginx-dav-ext-module mei help Nginx-bouwer wy krije in flater Brûkt troch http_dav_module ynstee fan nginx-dav-ext-module. Deselde brek waard yn 'e simmer sletten nginx: [emerg] ûnbekende rjochtline dav_methods.

Ik makke in Pull fersyk Kontrolearje git_url taheakje foar ynbêde, refactored —with- {}_module и as module == "http_dav_module" taheakje --mei. Mar se waarden net akseptearre.

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

Ik tink dat jo de rest fan 'e Apache httpd-opset sels dwaan kinne.

Nginx foar Apache httpd

Oars as Apache, brûkt Nginx in evenemint-basearre oanfraachferwurkingsmodel, dat mar ien HTTP-tsjinnerproses fereasket foar elk oantal kliïnten. Jo kinne nginx brûke en de lading op 'e tsjinner ferminderje.

Konfigurearje nginx-front.conf. Ik tink dat jo de rest fan 'e nginx-opset sels dwaan kinne.

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

It opladen fan triemmen fia WebDav

It laden fan rpm is heul ienfâldich.

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

Boarne: www.habr.com