Hazina rahisi ya rpm kwa kutumia Inotify na webdav

Katika chapisho hili, tutaangalia hazina ya vizalia vya rpm kwa kutumia hati rahisi ya inotify + createrepo. Vizalia vya programu hupakiwa kupitia webdav kwa kutumia apache httpd. Kwa nini apache httpd itaandikwa hadi mwisho wa chapisho.

Kwa hivyo, suluhisho lazima likidhi mahitaji yafuatayo ya kuandaa uhifadhi wa RPM tu:

  • Bure

  • Upatikanaji wa kifurushi kwenye ghala sekunde chache baada ya kupakiwa kwenye hazina ya vizalia vya programu.

  • Rahisi kufunga na kudumisha

  • Uwezo wa kufanya upatikanaji wa juu

    Kwa nini isiwe hivyo SonaType Nexus au Pulp:

  • Hifadhi ndani SonaType Nexus au Pulp aina nyingi za mabaki husababisha ukweli kwamba SonaType Nexus au Pulp kuwa hatua moja ya kushindwa.

  • Upatikanaji wa juu katika SonaType Nexus inalipwa.

  • Pulp Inaonekana kama suluhisho lililobuniwa zaidi kwangu.

  • Vipengee ndani SonaType Nexus kuhifadhiwa katika blob. Katika tukio la kukatika kwa umeme kwa ghafla, hutaweza kurejesha blob ikiwa huna chelezo. Tulikuwa na hitilafu hii: 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 haikupatikana tena.

Msimbo wa chanzo

β†’ Msimbo wa chanzo iko hapa

Nakala kuu inaonekana kama hii:

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

Ufungaji

inotify-createrepo inafanya kazi tu kwenye CentOS 7 au zaidi. Haikuweza kuifanya ifanye kazi kwenye CentOS 6.

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

Usanidi

Kwa chaguo-msingi inotify-createrepo inafuatilia saraka /var/www/repos/rpm-repo/.

Unaweza kubadilisha saraka hii kwenye faili /etc/inotify-createrepo.conf.

Matumizi ya

Wakati wa kuongeza faili yoyote kwenye saraka /var/www/repos/rpm-repo/ inotifywait itaunda faili /tmp/need_create. Kitendakazi cha run_createrepo kinaendeshwa kwa kitanzi kisicho na kikomo na hufuatilia faili /tmp/need_create. Ikiwa faili iko, basi endesha createrepo --update.

Ingizo litaonekana kwenye faili:

/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

Uwezo wa kufanya upatikanaji wa juu

Ili kupata upatikanaji wa juu kutoka kwa suluhisho lililopo, nadhani unaweza kutumia seva 2, Keepalived kwa HA na Lsyncd kwa maingiliano ya vizalia vya programu. Lsyncd - daemon ambayo inafuatilia mabadiliko katika saraka ya ndani, inakusanya, na baada ya muda fulani, rsync huanza kusawazisha. Maelezo na mipangilio imeelezewa katika chapisho "Usawazishaji wa haraka wa faili bilioni".

webdav

Kuna njia kadhaa za kupakia faili: SSH, NFS, WebDav. WebDav inaonekana kuwa chaguo la kisasa na rahisi.

Kwa WebDav, tutatumia Apache httpd. Kwa nini Apache httpd mnamo 2020 na sio nginx?

Ningependa kutumia zana za kiotomatiki za kujenga moduli za Nginx + (kwa mfano, Webdav).

Kuna mradi wa kujenga moduli za Nginx + - mjenzi wa nginx. Ikiwa unatumia nginx + wevdav kupakia faili, basi unahitaji moduli nginx-dav-ext-moduli. Wakati wa kujaribu kujenga na kutumia Nginx na nginx-dav-ext-moduli kwa msaada wa mjenzi wa nginx tutapata kosa Inatumiwa na http_dav_module badala ya nginx-dav-ext-module. Mdudu sawa ulifungwa katika majira ya joto nginx: [jitokeza] maelekezo yasiyojulikana dav_methods.

Nilifanya ombi la kuvuta Ongeza hundi ya git_url kwa iliyopachikwa, iliyowekwa upya --na-{}_module ΠΈ ikiwa moduli == "http_dav_module" ongeza --with. Lakini hawakukubaliwa.

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

Nadhani utafanya usanidi uliobaki wa Apache httpd mwenyewe.

Nginx mbele ya Apache httpd

Tofauti na Apache, Nginx hutumia mfano wa usindikaji wa ombi la tukio, ambayo inamaanisha kuwa mchakato mmoja tu wa seva ya HTTP unahitajika kwa idadi yoyote ya wateja. Unaweza kutumia nginx na kupunguza mzigo wa seva.

usanidi wa nginx-front.conf. Nadhani utafanya usanidi uliobaki wa nginx mwenyewe.

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

Inapakua faili kupitia WebDav

Kupakua rpm ni rahisi sana.

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

Chanzo: mapenzi.com

Kuongeza maoni