Inotify ಮತ್ತು webdav ಬಳಸಿಕೊಂಡು ಸರಳ rpm ರೆಪೊಸಿಟರಿ

ಈ ಪೋಸ್ಟ್‌ನಲ್ಲಿ, ನಾವು ಸರಳವಾದ inotify + createrepo ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು rpm ಆರ್ಟಿಫ್ಯಾಕ್ಟ್ ರೆಪೊಸಿಟರಿಯನ್ನು ನೋಡುತ್ತೇವೆ. ಅಪಾಚೆ httpd ಅನ್ನು ಬಳಸಿಕೊಂಡು ವೆಬ್‌ಡಾವ್ ಮೂಲಕ ಕಲಾಕೃತಿಗಳನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ. ಏಕೆ ಅಪಾಚೆ httpd ಅನ್ನು ಪೋಸ್ಟ್‌ನ ಕೊನೆಯಲ್ಲಿ ಬರೆಯಲಾಗುತ್ತದೆ.

ಆದ್ದರಿಂದ, ಪರಿಹಾರವು RPM ಸಂಗ್ರಹಣೆಯನ್ನು ಮಾತ್ರ ಸಂಘಟಿಸಲು ಕೆಳಗಿನ ಅವಶ್ಯಕತೆಗಳನ್ನು ಪೂರೈಸಬೇಕು:

  • ಉಚಿತ

  • ಆರ್ಟಿಫ್ಯಾಕ್ಟ್ ರೆಪೊಸಿಟರಿಗೆ ಅಪ್‌ಲೋಡ್ ಮಾಡಿದ ಕೆಲವು ಸೆಕೆಂಡುಗಳ ನಂತರ ರೆಪೊಸಿಟರಿಯಲ್ಲಿ ಪ್ಯಾಕೇಜ್‌ನ ಲಭ್ಯತೆ.

  • ಸ್ಥಾಪಿಸಲು ಮತ್ತು ನಿರ್ವಹಿಸಲು ಸುಲಭ

  • ಹೆಚ್ಚಿನ ಲಭ್ಯತೆಯನ್ನು ಮಾಡುವ ಸಾಮರ್ಥ್ಯ

    ಯಾಕಿಲ್ಲ ಸೋನಾಟೈಪ್ ನೆಕ್ಸಸ್ ಅಥವಾ ತಿರುಳು:

  • ನಲ್ಲಿ ಸಂಗ್ರಹಣೆ ಸೋನಾಟೈಪ್ ನೆಕ್ಸಸ್ ಅಥವಾ ತಿರುಳು ಅನೇಕ ರೀತಿಯ ಕಲಾಕೃತಿಗಳು ಇದಕ್ಕೆ ಕಾರಣವಾಗುತ್ತವೆ ಸೋನಾಟೈಪ್ ನೆಕ್ಸಸ್ ಅಥವಾ ತಿರುಳು ವೈಫಲ್ಯದ ಏಕೈಕ ಬಿಂದುವಾಗುತ್ತದೆ.

  • ರಲ್ಲಿ ಹೆಚ್ಚಿನ ಲಭ್ಯತೆ ಸೋನಾಟೈಪ್ ನೆಕ್ಸಸ್ ಪಾವತಿಸಲಾಗುತ್ತದೆ.

  • ತಿರುಳು ನನಗೆ ಹೆಚ್ಚು-ಇಂಜಿನಿಯರಿಂಗ್ ಪರಿಹಾರದಂತೆ ತೋರುತ್ತಿದೆ.

  • ಕಲಾಕೃತಿಗಳು ಸೋನಾಟೈಪ್ ನೆಕ್ಸಸ್ ಬ್ಲಬ್ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿದೆ. ಹಠಾತ್ ವಿದ್ಯುತ್ ನಿಲುಗಡೆಯ ಸಂದರ್ಭದಲ್ಲಿ, ನೀವು ಬ್ಯಾಕ್ಅಪ್ ಹೊಂದಿಲ್ಲದಿದ್ದರೆ ಬ್ಲಬ್ ಅನ್ನು ಪುನಃಸ್ಥಾಪಿಸಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ನಾವು ಈ ದೋಷವನ್ನು ಹೊಂದಿದ್ದೇವೆ: 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. ಬ್ಲಾಬ್ ಎಂದಿಗೂ ಚೇತರಿಸಿಕೊಳ್ಳಲಿಲ್ಲ.

ಮೂಲ ಕೋಡ್

→ ಮೂಲ ಕೋಡ್ ಇದೆ ಇಲ್ಲಿ

ಮುಖ್ಯ ಸ್ಕ್ರಿಪ್ಟ್ ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

#!/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 ಸರ್ವರ್‌ಗಳನ್ನು ಬಳಸಬಹುದು, HA ಗಾಗಿ Keepalived ಮತ್ತು ಆರ್ಟಿಫ್ಯಾಕ್ಟ್ ಸಿಂಕ್ರೊನೈಸೇಶನ್‌ಗಾಗಿ Lsyncd. Lsyncd - ಸ್ಥಳೀಯ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿನ ಬದಲಾವಣೆಗಳನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಡೀಮನ್, ಅವುಗಳನ್ನು ಒಟ್ಟುಗೂಡಿಸುತ್ತದೆ ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಸಮಯದ ನಂತರ, rsync ಅವುಗಳನ್ನು ಸಿಂಕ್ರೊನೈಸ್ ಮಾಡಲು ಪ್ರಾರಂಭಿಸುತ್ತದೆ. ವಿವರಗಳು ಮತ್ತು ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪೋಸ್ಟ್‌ನಲ್ಲಿ ವಿವರಿಸಲಾಗಿದೆ "ಒಂದು ಬಿಲಿಯನ್ ಫೈಲ್‌ಗಳ ವೇಗದ ಸಿಂಕ್ರೊನೈಸೇಶನ್".

ವೆಬ್‌ಡವ್

ಫೈಲ್‌ಗಳನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಹಲವಾರು ಮಾರ್ಗಗಳಿವೆ: SSH, NFS, WebDav. WebDav ಆಧುನಿಕ ಮತ್ತು ಸರಳ ಆಯ್ಕೆಯಾಗಿದೆ.

WebDav ಗಾಗಿ, ನಾವು Apache httpd ಅನ್ನು ಬಳಸುತ್ತೇವೆ. ಏಕೆ 2020 ರಲ್ಲಿ ಅಪಾಚೆ httpd ಮತ್ತು nginx ಅಲ್ಲ?

ನಾನು Nginx + ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಸ್ವಯಂಚಾಲಿತ ಸಾಧನಗಳನ್ನು ಬಳಸಲು ಬಯಸುತ್ತೇನೆ (ಉದಾಹರಣೆಗೆ, Webdav).

Nginx + ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಒಂದು ಯೋಜನೆ ಇದೆ - nginx-ಬಿಲ್ಡರ್. ಫೈಲ್‌ಗಳನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ನೀವು nginx + wevdav ಅನ್ನು ಬಳಸಿದರೆ, ನಿಮಗೆ ಮಾಡ್ಯೂಲ್ ಅಗತ್ಯವಿದೆ nginx-dav-ext-module. Nginx ಅನ್ನು ನಿರ್ಮಿಸಲು ಮತ್ತು ಬಳಸಲು ಪ್ರಯತ್ನಿಸುವಾಗ nginx-dav-ext-module ಸಹಾಯದಿಂದ nginx-ಬಿಲ್ಡರ್ ನಾವು ದೋಷವನ್ನು ಪಡೆಯುತ್ತೇವೆ nginx-dav-ext-module ಬದಲಿಗೆ http_dav_module ನಿಂದ ಬಳಸಲಾಗಿದೆ. ಅದೇ ದೋಷವನ್ನು ಬೇಸಿಗೆಯಲ್ಲಿ ಮುಚ್ಚಲಾಯಿತು nginx: [ಹೊರಬರುವಿಕೆ] ಅಜ್ಞಾತ ನಿರ್ದೇಶನ dav_methods.

ನಾನು ಪುಲ್ ರಿಕ್ವೆಸ್ಟ್ ಮಾಡಿದೆ ಎಂಬೆಡೆಡ್, ರಿಫ್ಯಾಕ್ಟ್ ಮಾಡಲಾದ --with-{}_module ಗಾಗಿ 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>

ಉಳಿದ ಅಪಾಚೆ httpd ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ನೀವೇ ಮಾಡುತ್ತೀರಿ ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ.

ಅಪಾಚೆ 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/

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ