Inotify اور webdav کا استعمال کرتے ہوئے سادہ rpm ذخیرہ

اس پوسٹ میں، ہم ایک سادہ inotify + createrepo اسکرپٹ کا استعمال کرتے ہوئے ایک rpm آرٹفیکٹ ریپوزٹری کو دیکھیں گے۔ نمونے اپاچی httpd کا استعمال کرتے ہوئے webdav کے ذریعے اپ لوڈ کیے جاتے ہیں۔ اپاچی 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 اور artifact synchronization کے لیے Lsyncd۔ Lsyncd - ایک ڈیمون جو مقامی ڈائرکٹری میں ہونے والی تبدیلیوں پر نظر رکھتا ہے، ان کو جمع کرتا ہے، اور ایک خاص وقت کے بعد، rsync ان کو ہم آہنگ کرنا شروع کر دیتا ہے۔ تفصیلات اور ترتیبات پوسٹ میں بیان کی گئی ہیں "ایک ارب فائلوں کی تیز رفتار مطابقت پذیری۔".

ویب ڈیو

فائلیں اپ لوڈ کرنے کے کئی طریقے ہیں: SSH، NFS، WebDav۔ WebDav ایک جدید اور آسان آپشن لگتا ہے۔

WebDav کے لیے، ہم اپاچی 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: [emerg] نامعلوم ہدایت 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

اپاچی کے برعکس، 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

نیا تبصرہ شامل کریں