Vienkārša rpm repozitorijs, izmantojot Inotify un webdav

Šajā ziņojumā mēs apskatīsim rpm artefaktu krātuvi, izmantojot vienkāršu inotify + Createrepo skriptu. Artefakti tiek augšupielādēti, izmantojot Webdav, izmantojot apache httpd. Kāpēc apache httpd, tiks rakstīts ziņas beigās.

Tātad risinājumam jāatbilst šādām prasībām, lai organizētu tikai RPM krātuvi:

  • Bezmaksas

  • Pakotnes pieejamība repozitorijā dažas sekundes pēc augšupielādes artefaktu krātuvē.

  • Viegli uzstādīt un uzturēt

  • Spēja nodrošināt augstu pieejamību

    Kāpēc ne SonaType Nexus vai Mīkstums:

  • Uzglabāšana iekšā SonaType Nexus vai Mīkstums daudzi artefaktu veidi noved pie tā, ka SonaType Nexus vai Mīkstums kļūt par vienu neveiksmes punktu.

  • Augsta pieejamība iekšā SonaType Nexus tiek apmaksāts.

  • Mīkstums Man šķiet pārdomāts risinājums.

  • Artefakti iekšā SonaType Nexus glabājas lāse. Pēkšņa strāvas padeves pārtraukuma gadījumā jūs nevarēsit atjaunot lāsumu, ja jums nav dublējuma. Mums bija šāda kļūda: 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. Blobs nekad netika atgūts.

Pirmkods

→ Atrodas avota kods šeit

Galvenais skripts izskatās šādi:

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

Uzstādīšana

inotify-createrepo darbojas tikai operētājsistēmā CentOS 7 vai jaunākā versijā. Nevarēja panākt, lai tā darbotos operētājsistēmā CentOS 6.

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

Konfigurācija

Pēc noklusējuma inotify-createrepo uzrauga direktoriju /var/www/repos/rpm-repo/.

Jūs varat mainīt šo direktoriju failā /etc/inotify-createrepo.conf.

Izmantot

Pievienojot direktorijam jebkuru failu /var/www/repos/rpm-repo/ inotifywait izveidos failu /tmp/need_create. Funkcija run_createrepo darbojas bezgalīgā ciklā un uzrauga failu /tmp/need_create. Ja fails pastāv, palaidiet createrepo --update.

Failā parādīsies ieraksts:

/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

Spēja nodrošināt augstu pieejamību

Lai nodrošinātu augstu pieejamību no esoša risinājuma, es domāju, ka varat izmantot 2 serverus, Keepalived for HA un Lsyncd artefaktu sinhronizēšanai. Lsyncd - dēmons, kas uzrauga izmaiņas lokālajā direktorijā, apkopo tās un pēc noteikta laika rsync sāk tās sinhronizēt. Sīkāka informācija un iestatījumi ir aprakstīti ziņojumā "Ātra miljarda failu sinhronizācija".

WebDav

Ir vairāki veidi, kā augšupielādēt failus: SSH, NFS, WebDav. WebDav šķiet moderna un vienkārša iespēja.

WebDav izmantosim Apache httpd. Kāpēc Apache httpd 2020. gadā, nevis nginx?

Es vēlētos izmantot automatizētus rīkus Nginx + moduļu veidošanai (piemēram, Webdav).

Ir Nginx + moduļu būvniecības projekts - nginx veidotājs. Ja failu augšupielādei izmantojat nginx + wevdav, jums ir nepieciešams modulis nginx-dav-ext-module. Mēģinot izveidot un izmantot Nginx ar nginx-dav-ext-module ar nginx veidotājs mēs saņemsim kļūdu Izmanto http_dav_module, nevis nginx-dav-ext-module. Tā pati kļūda tika slēgta vasarā nginx: [emerg] nezināma direktīva dav_methods.

Es iesniedzu izvilkšanas pieprasījumu Pievienojiet pārbaudiet git_url, lai atrastu iegultu, pārveidotu --with-{}_module и if module == "http_dav_module" pievienot --with. Bet viņi netika pieņemti.

konfigurācija 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>

Es domāju, ka jūs pats veiksit pārējo Apache httpd konfigurāciju.

Nginx pirms Apache httpd

Atšķirībā no Apache, Nginx izmanto uz notikumiem balstītu pieprasījumu apstrādes modeli, kas nozīmē, ka jebkuram klientu skaitam ir nepieciešams tikai viens HTTP servera process. Varat izmantot nginx un samazināt servera slodzi.

nginx-front.conf konfigurācija. Es domāju, ka jūs pats veiksit pārējo nginx konfigurāciju.

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

Failu lejupielāde, izmantojot WebDav

Apgr./min lejupielāde ir ļoti vienkārša.

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

Avots: www.habr.com

Pievieno komentāru