Inotify ۽ webdav استعمال ڪندي سادي rpm مخزن

هن پوسٽ ۾، اسان هڪ سادي inotify + createrepo اسڪرپٽ استعمال ڪندي هڪ rpm آرٽيڪل مخزن تي نظر ڪنداسين. نمونا اپلوڊ ڪيا ويا آهن ويب ڊيو ذريعي apache httpd استعمال ڪندي. ڇو apache httpd پوسٽ جي آخر ۾ لکيو ويندو.

تنهن ڪري، حل صرف RPM اسٽوريج کي منظم ڪرڻ لاء هيٺين گهرجن کي پورو ڪرڻ گهرجي:

  • واندو

  • مخزن ۾ پيڪيج جي دستيابي چند سيڪنڊن کان پوءِ آرٽيڪل مخزن تي اپ لوڊ ڪرڻ کان پوءِ.

  • انسٽال ڪرڻ ۽ برقرار رکڻ لاء آسان

  • اعلي دستيابي ڪرڻ جي صلاحيت

    ڇو نه سون ٽائيپ Nexus يا پل:

  • اسٽوريج ۾ سون ٽائيپ Nexus يا پل ڪيترن ئي قسمن جا نمونا حقيقت ڏانهن وٺي ويندا آهن سون ٽائيپ Nexus يا پل ناڪامي جو هڪ نقطو بڻجي.

  • ۾ اعلي دستيابي سون ٽائيپ Nexus ادا ڪيو ويندو آهي.

  • پل مون لاءِ هڪ وڌيڪ انجنيئر حل وانگر لڳي ٿو.

  • ۾ آثار سون ٽائيپ 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. بلب ڪڏهن به بحال نه ٿيو.

ذريعو

→ ماخذ ڪوڊ واقع آهي هتي

مکيه رسم الخط هن طرح نظر اچي ٿو:

#!/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 ۽ artifact synchronization لاءِ Lsyncd. Lsyncd - هڪ ڊيمون جيڪو مقامي ڊاريڪٽري ۾ تبديلين جي نگراني ڪري ٿو، انهن کي گڏ ڪري ٿو، ۽ هڪ خاص وقت کان پوء، rsync انهن کي هم وقت سازي ڪرڻ شروع ڪري ٿو. تفصيل ۽ سيٽنگون پوسٽ ۾ بيان ڪيون ويون آهن "هڪ ارب فائلن جي فاسٽ هم وقت سازي".

ويب ڊيو

فائلون اپلوڊ ڪرڻ جا ڪيترائي طريقا آھن: SSH، NFS، WebDav. WebDav هڪ جديد ۽ سادو اختيار لڳي ٿو.

WebDav لاءِ، اسان استعمال ڪنداسين Apache httpd. 2020 ۾ Apache httpd ڇو ۽ نينگڪس نه؟

مان Nginx + ماڊل تعمير ڪرڻ لاء خودڪار اوزار استعمال ڪرڻ چاهيان ٿو (مثال طور، Webdav).

Nginx + ماڊلز جي تعمير لاء ھڪڙو منصوبو آھي - nginx-بلڊر. جيڪڏھن توھان استعمال ڪريو nginx + wevdav فائلون اپلوڊ ڪرڻ لاءِ، پوءِ توھان کي ضرورت آھي ھڪڙو ماڊل nginx-dav-ext-module. جڏهن تعمير ڪرڻ ۽ Nginx استعمال ڪرڻ جي ڪوشش ڪندي nginx-dav-ext-module مدد سان nginx-بلڊر اسان کي هڪ غلطي ملندي nginx-dav-ext-module جي بدران http_dav_module استعمال ڪيو. اونهاري ۾ اهو ساڳيو بگ بند ڪيو ويو nginx: [emerg] اڻڄاتل هدايتون dav_methods.

مون ڇڪڻ جي درخواست ڪئي شامل ڪريو چيڪ git_url لاءِ ايمبيڊڊ، ريفڪٽر ٿيل --with-{}_module и جيڪڏهن ماڊل == "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 ترتيب پاڻ ٺاهيندا.

Nginx Apache httpd جي سامهون

Apache جي برعڪس، نينڪس هڪ واقعا تي ٻڌل درخواست پروسيسنگ ماڊل استعمال ڪري ٿو، جنهن جو مطلب آهي ته صرف هڪ 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

تبصرو شامل ڪريو