Inotify жана webdav аркылуу жөнөкөй rpm репозиторий

Бул постто биз жөнөкөй inotify + createrepo скриптин колдонуу менен rpm артефакт репозиторийсин карайбыз. Артефакттар apache httpd аркылуу webdav аркылуу жүктөлөт. Эмне үчүн apache httpd посттун аягында жазылат.

Ошентип, чечим RPM сактоону уюштуруу үчүн төмөнкү талаптарга жооп бериши керек:

  • бекер

  • Артефакт репозиторийине жүктөөдөн кийин бир нече секунддан кийин пакеттин репозиторийде болушу.

  • орнотуу жана тейлөө үчүн жеңил

  • Жогорку жеткиликтүүлүктү камсыз кылуу мүмкүнчүлүгү

    Эмне үчүн жок SonaType Nexus же Pulp:

  • Сактоо ичинде SonaType Nexus же Pulp артефакттардын көптөгөн түрлөрүн алып келет SonaType Nexus же Pulp ийгиликсиздиктин бир чекити болуп калат.

  • Жогорку жеткиликтүүлүк SonaType Nexus төлөнөт.

  • Pulp Мага ашыкча иштелип чыккан чечим окшойт.

  • Артефакттар 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 үчүн check git_url кошуңуз и эгерде модулу == "http_dav_module" тиркелет --with. Бирок алар кабыл алынган жок.

config 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/

Source: www.habr.com

Комментарий кошуу