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.

నేను పుల్ రిక్వెస్ట్ చేసాను ఎంబెడెడ్, రీఫ్యాక్టర్డ్ --with-{}_module కోసం git_urlని తనిఖీ చేయండి и మాడ్యూల్ == "http_dav_module" అనుబంధం ఉంటే --తో. కానీ వాటిని అంగీకరించలేదు.

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>

మీరు మిగిలిన Apache httpd కాన్ఫిగరేషన్‌ను మీరే చేస్తారని నేను భావిస్తున్నాను.

అపాచీ httpd ముందు Nginx

Apache కాకుండా, Nginx ఈవెంట్-ఆధారిత అభ్యర్థన ప్రాసెసింగ్ మోడల్‌ను ఉపయోగిస్తుంది, అంటే ఎన్ని క్లయింట్‌లకైనా ఒక HTTP సర్వర్ ప్రాసెస్ మాత్రమే అవసరం. మీరు nginxని ఉపయోగించవచ్చు మరియు సర్వర్ లోడ్‌ను తగ్గించవచ్చు.

nginx-front.conf config. మీరు మిగిలిన 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

ఒక వ్యాఖ్యను జోడించండి