Որակի rpm պահպանություն օգտագործելով Inotify և webdav

Այս հրապարակում մենք քննարկում ենք RPM արհեստների պահեստը պարզ սկրիպտի միջոցով, որում օգտագործվում են Inotify և createrepo: Արհեստների ներբեռնումը կատարվում է WebDAV-ի միջոցով Apache HTTPD ծրագրով: Ինչու Apache HTTPD-ն գրելու համար՝ կարդացեք հրապարակման վերջում:

Այսպես, լուծումը պետք է համապատասխանի հետևյալ պահանջներին RPM պահոցի կազմակերպման համար:

  • Արժեկամարան

  • Ստորագրված փաթեթը պահոցում հասանելի կլինի հաշված վայրկյանների ընթացքում արհեստների ներբեռնումից հետո:

  • Փաստորեն, հեշտ է տեղադրել և սպասարկել

  • Ցուցաբերել բարձր մատչելիություն (high availability)

    Ինչու չէ SonaType Nexus կամ Pulp:

  • Պահեստում SonaType Nexus կամ Pulp թույլ տալիս տարբեր արհեստների տեսակները դառնող հավաքածուի միակ սխալ կետի: SonaType Nexus կամ Pulp Դա ունի մեկ կետ, որտեղ կարող է տեղի ունենալ սխալ:

  • Բարձր մատչելիությունը (high availability) ներկայացվում է SonaType Nexus հիմնական է:

  • Pulp Հետաքրքիր է՝ կարող է չափազանց բարդ լուծում լինել:

  • Արհեստները պահվում են SonaType Nexus blob-ում։ Հոսանքի անսպասելի անջատումով, դուք չեք կարող վերականգնել blob-ը, եթե չունեք պահվածք: Հիմնավոր դեպք է եղել: ERROR [ForkJoinPool.commonPool-worker-2] *SYSTEM [com.orientechnologies.orient.core.storage](http://com.orientechnologies.orient.core.storage/).fs.OFileClassic - $ANSI{green {db=security}} Նկատի ունեցեք տվյալների ընթերցման սխալը 'privilege_5.pcl' 1-մ ընկերություն [java.io](http://java.io/).IOException: Չար մեկնություն. Blob-ը այդպես էլ չի վերականգնվել:

Հիմնական կոդ

→ Սկզբնակի կոդը գտնվում է այստեղ

Հիմնական սկրիպտը այսպես է:

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

Տեղադրում

Inotify-createrepo-ն աշխատում է միայն CentOS 7-ում կամ ավելի պատկերում: CentOS 6-ում չի հաջողվել զարկ տալ:

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

Կոնֆիգուրացում

Երբեք inotify-createrepo-ն հետևում է դիրեկտորիան /var/www/repos/rpm-repo/.

Այս դիրեկտորիան կարող եք փոխել ֆայլում /etc/inotify-createrepo.conf.

Օգտագործումը

Յուրաքանչյուր անգամ նոր ֆայլի ավելացումով դիրեկտորիա /var/www/repos/rpm-repo/ inotifywait-ն կստեղծի ֆայլ /tmp/need_create. run_createrepo ֆունկցիան անդադավ loops-ի մեջ է և հետևում է ֆայլին /tmp/need_create. Եթե ֆյալը գոյություն ունի, սկսում է createrepo --update.

Ֆայլում կհայտնվի գրություն:

/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

Ցուցաբերել բարձր մատչելիություն (high availability)

Բարձր մատչելիություն (high availability) ապահովելու համար, կարծում եմ, կարելի է օգտագործել 2 սերվեր, Keepalived HA-ի համար և Lsyncd արհեստների նվիրելու համար: Lsyncd — դից, որը հետևում է տեղական դիրեկտորիայում տեղի ունեցող փոփոխություններին, համատեղում է դրանք և ժամանակի ընթացքում սկսում է rsync դրանք կորոշելու համար։ Մանրամասներ և կարգուկանոնություն հաստատված են հրապարակման "Արագ սինխրոնացում միլիարդների ֆայլերի".

WebDAV

Ֆայլերը կարելի է загрузить բազմաթիվ եղանակներով՝ SSH, NFS, WebDAV։ WebDAV-ը թվում է ժամանակակից և մտերիմ տարբերակ:

WebDAV-ի համար մենք օգտագործելու ենք Apache httpd։ Ինչու Apache httpd 2020-ին, ոչ թե nginx:

Ղարող ուտեստներ, որոնք ավտոմատացված են Nginx + մոդուլներով (օրինակ, WebDAV):

Ընթացքում կայքի նախագծում Nginx + մոդուլներ — Nginx-builder. Եթե օգտագործել nginx + wevdav ու загрузить ֆայլերը, անհրաժեշտ է մոդուլ nginx-dav-ext-module. Nginx-ի պարագայում փորձերի ընթացքում nginx-dav-ext-module օգտագործելով Nginx-builder կստանք հանդիպել սխալ Used by http_dav_module instead of nginx-dav-ext-module.. Նույն սխալը փակվել էր ամռանը nginx: [emerg] անհայտ հրամանի dav_methods.

Ես անեմ Pull request Ավելացնել ստուգեք git_url-ի համար ներառված, refactored —with-{}_module և եթե մոդուլը == "http_dav_module" հավելել —with. Բայց նրանց չեն ընդունել.

webdav.conf կոնֆիգուրացիա

DavLockDB /var/www/html/DavLock

    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
    
        DAV On
        Options Indexes FollowSymlinks SymLinksifOwnerMatch IncludesNOEXEC
        IndexOptions NameWidth=* DescriptionWidth=*
        AllowOverride none
        Require all granted

Հաջորդ կոնֆիգուրացիաները Apache httpd-ում կարծում եմ դուք կկատարեք ինքնուրույն:

Nginx Apache httpd-ից առաջ

Տարբեր անդամներն են, որ Nginx-ը պահանջում է միայն մեկ HTTP սերվեր ջանք, որպեսզի կարողանա սպասարկել ցանկացած թվով հաճախորդների: Դուք կարող եք օգտագործել nginx և նվազեցնել սերվերի բեռը:

nginx-front.conf կոնֆիգուրացիա։ Հաջորդ nginx-ի կոնֆիգուրացիաները կարծում եմ դուք կկատարեք ինքնուրույն:

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

Ֆայլերի բեռնման գործընթաց WebDav-ի միջոցով

rpm-ի բեռնման գործընթացը շատ պարզ է:

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

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster