Анбори оддии rpm бо истифода аз Inotify ва webdav

Дар ин паём, мо ба анбори артефакти rpm бо истифода аз скрипти оддии inotify + createrepo назар мекунем. Артефактҳо тавассути webdav бо истифода аз apache httpd бор карда мешаванд. Чаро apache httpd дар охири пост навишта мешавад.

Ҳамин тавр, ҳалли бояд ба талаботи зерин барои ташкили нигоҳдории RPM танҳо ҷавобгӯ бошад:

  • Озод

  • Мавҷудияти баста дар репозиторий чанд сония пас аз боргузорӣ ба анбори артефакт.

  • Насб кардан ва нигоҳдорӣ осон аст

  • Қобилияти фароҳам овардани дастрасии баланд

    Барои чӣ не SonaType Nexus ё Тарбуз:

  • Нигоҳдорӣ дар SonaType Nexus ё Тарбуз бисьёр навъхои осор ба он оварда мерасонад, ки SonaType Nexus ё Тарбуз ба як нуктаи нокомй табдил ёбад.

  • Мавҷудияти баланд дар SonaType Nexus пардохта мешавад.

  • Тарбуз Ба ман як ҳалли аз ҳад зиёди муҳандисӣ ба назар мерасад.

  • Артефактҳо дар SonaType Nexus дар blob нигоҳ дошта мешавад. Дар сурати қатъи ногаҳонии барқ, агар шумо нусхаи эҳтиётӣ надошта бошед, шумо блокро барқарор карда наметавонед. Мо чунин хато доштем: 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

Қобилияти фароҳам овардани дастрасии баланд

Барои дастрасии баланд аз ҳалли мавҷуда, ман фикр мекунам, ки шумо метавонед 2 серверро истифода баред, Keepalived for HA ва Lsyncd барои ҳамоҳангсозии артефакт. Lsyncd - демоне, ки тағиротро дар директорияи маҳаллӣ назорат мекунад, онҳоро ҷамъ мекунад ва пас аз вақти муайян, rsync ба ҳамоҳангсозии онҳо оғоз мекунад. Тафсилот ва танзимот дар мақола тавсиф шудаанд "Синхронизатсияи зуди як миллиард файл".

вебдав

Якчанд роҳҳои боркунии файлҳо мавҷуданд: SSH, NFS, WebDav. Чунин ба назар мерасад, ки WebDav як варианти муосир ва оддӣ аст.

Барои WebDav, мо Apache httpd-ро истифода хоҳем бурд. Чаро Apache httpd дар соли 2020, на nginx?

Ман мехоҳам асбобҳои автоматиро барои сохтани модулҳои 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.

Ман дархост кардам Иловаи чеки git_url барои дарунсохташуда, рефакторизатсияшуда --with-{}_module и агар модул == "http_dav_module" замима кунед --бо. Аммо онҳоро қабул накарданд.

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/

Манбаъ: will.com

Илова Эзоҳ