Inotify மற்றும் webdav ஐப் பயன்படுத்தும் எளிய rpm களஞ்சியம்

இந்த இடுகையில், inotify + createrepo உடன் எளிய ஸ்கிரிப்டைப் பயன்படுத்தி rpm கலைப்பொருள் சேமிப்பகத்தைப் பார்ப்போம். கலைப்பொருட்கள் பதிவேற்றம் apache httpd ஐப் பயன்படுத்தி webdav வழியாக மேற்கொள்ளப்படுகிறது. ஏன் apache 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: [emerg] அறியப்படாத கட்டளை dav_methods.

இழுக்க கோரிக்கை வைத்தேன் உட்பொதிக்கப்பட்ட, மறுவடிவமைக்கப்பட்ட —{}_module உடன் git_urlஐச் சரிபார்க்கவும் и தொகுதி என்றால் == "http_dav_module" append --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>

மீதமுள்ள அப்பாச்சி httpd அமைப்பை நீங்களே செய்யலாம் என்று நினைக்கிறேன்.

அப்பாச்சிக்கு முன் Nginx 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

கருத்தைச் சேர்