Inotify ๋ฐ webdav๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ rpm ์ €์žฅ์†Œ

์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” ๊ฐ„๋‹จํ•œ inotify + createrepo ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ rpm ์•„ํ‹ฐํŒฉํŠธ ์ €์žฅ์†Œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„ํ‹ฐํŒฉํŠธ๋Š” apache httpd๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ webdav๋ฅผ ํ†ตํ•ด ์—…๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. apache httpd๊ฐ€ ๊ฒŒ์‹œ๋ฌผ์˜ ๋ ๋ถ€๋ถ„์— ์ž‘์„ฑ๋˜๋Š” ์ด์œ .

๋”ฐ๋ผ์„œ ์†”๋ฃจ์…˜์€ RPM ์Šคํ† ๋ฆฌ์ง€๋งŒ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฌด๋ฃŒ

  • ์•„ํ‹ฐํŒฉํŠธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์—…๋กœ๋“œํ•œ ํ›„ ๋ช‡ ์ดˆ ํ›„์— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ค์น˜ ๋ฐ ์œ ์ง€ ๋ณด์ˆ˜ ์šฉ์ด

  • ๊ณ  ๊ฐ€์šฉ์„ฑ์„ ๋งŒ๋“œ๋Š” ๊ธฐ๋Šฅ

    ์™œ ์•ˆ ๋ผ ์†Œ๋‚˜ํƒ€์ž… ๋„ฅ์„œ์Šค ๋˜๋Š” ํŽ„ํ”„:

  • ์ €์žฅ ์žฅ์†Œ ์†Œ๋‚˜ํƒ€์ž… ๋„ฅ์„œ์Šค ๋˜๋Š” ํŽ„ํ”„ ๋งŽ์€ ์œ ํ˜•์˜ ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์†Œ๋‚˜ํƒ€์ž… ๋„ฅ์„œ์Šค ๋˜๋Š” ํŽ„ํ”„ ๋‹จ์ผ ์‹คํŒจ ์ง€์ ์ด ๋ฉ๋‹ˆ๋‹ค.

  • ๊ณ ๊ฐ€์šฉ์„ฑ ์†Œ๋‚˜ํƒ€์ž… ๋„ฅ์„œ์Šค ์ง€๊ธ‰๋ฉ๋‹ˆ๋‹ค.

  • ํŽ„ํ”„ ๋‚˜์—๊ฒŒ ๊ณผ๋„ํ•˜๊ฒŒ ์„ค๊ณ„๋œ ์†”๋ฃจ์…˜์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

  • ์œ ๋ฌผ ์†Œ๋‚˜ํƒ€์ž… ๋„ฅ์„œ์Šค 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์€ ๋ณต๊ตฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ

โ†’ ์†Œ์Šค ์ฝ”๋“œ ์œ„์น˜ ์—ฌ๊ธฐ์—

๊ธฐ๋ณธ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#!/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๊ฐ€ ์ด๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ๋ชฌ์ž…๋‹ˆ๋‹ค. ์„ธ๋ถ€ ์‚ฌํ•ญ ๋ฐ ์„ค์ •์€ "ํฌ์ŠคํŒ…์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.XNUMX์–ต ๊ฐœ ํŒŒ์ผ์˜ ๋น ๋ฅธ ๋™๊ธฐํ™”".

WebDAV๋ฅผ

ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” SSH, NFS, WebDav ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. WebDav๋Š” ํ˜„๋Œ€์ ์ด๊ณ  ๊ฐ„๋‹จํ•œ ์˜ต์…˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

WebDav์˜ ๊ฒฝ์šฐ Apache httpd๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Apache๊ฐ€ 2020๋…„์— httpd๊ฐ€ ๋˜๊ณ  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.

ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค ์ž„๋ฒ ๋””๋“œ, ๋ฆฌํŒฉํ† ๋ง --with-{}_module์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ git_url ์ถ”๊ฐ€ ะธ if 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 ๊ตฌ์„ฑ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Apache httpd ์•ž์˜ Nginx

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/

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€