repository rpm เบ‡เปˆเบฒเบเบ”เบฒเบเป‚เบ”เบเปƒเบŠเป‰ Inotify เปเบฅเบฐ webdav

เปƒเบ™เบšเบปเบ”เบ‚เบฝเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ artifact rpm เป‚เบ”เบเปƒเบŠเป‰เบชเบฐเบ„เบดเบšเบ‡เปˆเบฒเบเป†เบ—เบตเปˆเบกเบต inotify + createrepo. เบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”เบ‚เบญเบ‡เบ›เบญเบกเปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบœเปˆเบฒเบ™ webdav เป‚เบ”เบเปƒเบŠเป‰ apache httpd. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ apache httpd เบˆเบฐเบ–เบทเบเบ‚เบฝเบ™เป„เบ›เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบ•เบญเบš.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เปเบเป‰เป„เบ‚เบ•เป‰เบญเบ‡เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ RPM เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™:

  • เบšเปเปˆเป€เบชเบเบ„เปˆเบฒ

  • เบ„เบงเบฒเบกเบžเป‰เบญเบกเบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบ”เบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบชเบญเบ‡เบชเบฒเบกเบงเบดเบ™เบฒเบ—เบตเบซเบผเบฑเบ‡เบˆเบฒเบเบญเบฑเบšเป‚เบซเบผเบ”เปƒเบชเปˆเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ›เบญเบก.

  • เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบฎเบฑเบเบชเบฒ

  • เบ„เบงเบฒเบกโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบกเบตโ€‹เบชเบนเบ‡โ€‹

    เป€เบ›เบฑเบ™โ€‹เบซเบเบฑเบ‡โ€‹เบšเปเปˆ SonaType Nexus เบซเบผเบท Pulp:

  • เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปƒเบ™ SonaType Nexus เบซเบผเบท Pulp เบซเบผเบฒเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ›เบญเบกเบ™เปเบฒเป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ SonaType Nexus เบซเบผเบท Pulp เบเบฒเบเป€เบ›เบฑเบ™เบˆเบธเบ”เบ”เบฝเบงเบ‚เบญเบ‡เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบฅเบง.

  • เบกเบตเบ„เบงเบฒเบกเบžเป‰เบญเบกเบชเบนเบ‡เปƒเบ™ 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}} Error during data read for file 'privilege_5.pcl' 1-th attempt [java.io](http://java.io/).IOException: Bad address. Blob เบšเปเปˆโ€‹เป€เบ„เบตเบโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบŸเบทเป‰เบ™โ€‹เบŸเบนโ€‹.

เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™

โ†’เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆ เบ—เบตเปˆเบ™เบตเป‰

script เบ•เบปเป‰เบ™เบ•เปเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰:

#!/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 เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™ loop เบ—เบตเปˆเบšเปเปˆเบกเบตเบ—เบตเปˆเบชเบดเป‰เบ™เบชเบธเบ”เปเบฅเบฐเบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒเป„เบŸเบฅเปŒ /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 เบชเปเบฒเบฅเบฑเบš HA เปเบฅเบฐ Lsyncd เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ synchronizing เบ›เบญเบก. Lsyncd - daemon เบ—เบตเปˆเบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เบฅเบงเบšเบฅเบงเบกเบžเบงเบเบกเบฑเบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเป€เบงเบฅเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™ rsync เป€เบฅเบตเปˆเบก synchronize เบžเบงเบเบกเบฑเบ™. เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เปเบกเปˆเบ™โ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ•เบญเบš ".synchronization เป„เบงเบ‚เบญเบ‡เบซเบผเบฒเบเบ•เบทเป‰เป„เบŸเบฅเปŒ".

webdav

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒเปƒเบ™เบซเบผเบฒเบเบงเบดเบ—เบต: SSH, NFS, WebDav. WebDav เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเปเบฅเบฐเบ‡เปˆเบฒเบเบ”เบฒเบ.

เบชเปเบฒเบฅเบฑเบš WebDav เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ Apache httpd. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ Apache httpd เปƒเบ™เบ›เบต 2020 เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™ nginx?

เบ‚เป‰เบญเบเบขเบฒเบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ Nginx + modules (เบ•เบปเบงเบขเปˆเบฒเบ‡, Webdav).

เบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ Nginx + เป‚เบกเบ”เบนเบ™ - Nginx-builder. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰ nginx + wevdav เป€เบžเบทเปˆเบญเบญเบฑเบšเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒ, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบกเบ”เบนเบ™ nginx-dav-ext-module. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบฐเบเบฒเบเบฒเบกเบชเป‰เบฒเบ‡เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰ Nginx เบเบฑเบš nginx-dav-ext-module เป‚เบ”เบเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญ Nginx-builder เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹ เปƒเบŠเป‰เป‚เบ”เบ http_dav_module เปเบ—เบ™ nginx-dav-ext-module. เปเบกเบ‡เป„เบกเป‰เบ”เบฝเบงเบเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบดเบ”เปƒเบ™เบฅเบฐเบ”เบนเบฎเป‰เบญเบ™ nginx: [เป€เบเบตเบ”] เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบฎเบนเป‰เบˆเบฑเบ dav_methods.

เบ‚เป‰เบญเบเป„เบ”เป‰เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡ เป€เบžเบตเปˆเบกเบเบฒเบ™เบเบงเบ”เบชเบญเบš git_url เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบฑเบ‡, refactored โ€”with-{}_module ะธ เบ–เป‰เบฒเป‚เบกเบ”เบนเบ™ == "http_dav_module" เป€เบžเบตเปˆเบกเป€เบ•เบตเบก --with. เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบญเบกเบฎเบฑเบš.

เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ 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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™