Inotify және webdav көмегімен қарапайым rpm репозиторийі

Бұл постта біз қарапайым inotify + createrepo сценарийін қолданатын rpm артефакті репозиторийін қарастырамыз. Артефактілер apache httpd арқылы webdav арқылы жүктеледі. Неліктен apache httpd жазбаның соңына қарай жазылады.

Осылайша, шешім тек RPM сақтауды ұйымдастыру үшін келесі талаптарға сай болуы керек:

  • тегін

  • Артефакт репозиторийіне жүктегеннен кейін бірнеше секундтан кейін пакеттің репозиторийде болуы.

  • Орнату және күту оңай

  • Жоғары қолжетімділікті қамтамасыз ету мүмкіндігі

    Неге жоқ SonaType Nexus немесе целлюлоза:

  • Сақтау орны SonaType Nexus немесе целлюлоза артефактілердің көптеген түрлері осыған әкеледі SonaType Nexus немесе целлюлоза бір сәтсіздік нүктесіне айналады.

  • Қол жетімділігі жоғары SonaType Nexus төленеді.

  • целлюлоза Маған шамадан тыс жобаланған шешім сияқты көрінеді.

  • Артефактілер SonaType Nexus блобта сақталады. Кенеттен электр қуаты өшіп қалған жағдайда, сақтық көшірме болмаса, бөртпелерді қалпына келтіре алмайсыз. Бізде бұл қате болды: 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 ешқашан қалпына келмеді.

Бастапқы код

→ Бастапқы код орналасқан осында

Негізгі сценарий келесідей көрінеді:

#!/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 функциясы шексіз циклде жұмыс істейді және файлды бақылайды /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

Жоғары қолжетімділікті қамтамасыз ету мүмкіндігі

Қолданыстағы шешімнің жоғары қолжетімділігін қамтамасыз ету үшін HA үшін Keepalived және артефакті синхрондау үшін Lsyncd 2 серверді пайдалануға болады деп ойлаймын. Lsyncd - жергілікті каталогтағы өзгерістерді бақылайтын, оларды біріктіретін демон және белгілі бір уақыттан кейін rsync оларды синхрондауды бастайды. Мәліметтер мен параметрлер постта сипатталған "Миллиард файлды жылдам синхрондау".

webdav

Файлдарды жүктеп салудың бірнеше жолы бар: SSH, NFS, WebDav. WebDav заманауи және қарапайым нұсқа сияқты.

WebDav үшін біз Apache httpd пайдаланамыз. Неліктен nginx емес, 2020 жылы Apache httpd?

Мен Nginx + модульдерін құру үшін автоматтандырылған құралдарды пайдаланғым келеді (мысалы, Webdav).

Nginx + модульдерін құру жобасы бар - nginx құрастырушы. Файлдарды жүктеп салу үшін nginx + wevdav пайдалансаңыз, сізге модуль қажет nginx-dav-ext-модуль. Nginx құруға және пайдалануға тырысқанда nginx-dav-ext-модуль көмегімен nginx құрастырушы қатені аламыз Nginx-dav-ext-module орнына http_dav_module арқылы пайдаланылады. Сол қателік жазда жабылған nginx: [emerg] белгісіз директива dav_methods.

Мен тарту туралы өтініш жасадым Енгізілген, рефакторланған --with-{}_module үшін git_url тексеруін қосыңыз и егер модуль == "http_dav_module" --мен қосыңыз. Бірақ олар қабылданбады.

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>

Менің ойымша, сіз Apache httpd конфигурациясының қалған бөлігін өзіңіз жасайсыз.

Nginx Apache алдында httpd

Apache-ден айырмашылығы, 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/

Ақпарат көзі: www.habr.com

пікір қалдыру