Inotify va webdav yordamida oddiy rpm ombori

Ushbu postda biz oddiy inotify + createrepo skriptidan foydalangan holda rpm artefakt omborini ko'rib chiqamiz. Artifaktlar apache httpd yordamida webdav orqali yuklanadi. Nima uchun apache httpd post oxirida yoziladi.

Shunday qilib, yechim faqat RPM saqlashni tashkil qilish uchun quyidagi talablarga javob berishi kerak:

  • Ozod

  • Artefakt omboriga yuklanganidan bir necha soniya o'tgach, paketning omborda mavjudligi.

  • O'rnatish va texnik xizmat ko'rsatish oson

  • Yuqori mavjudlikni ta'minlash qobiliyati

    Nega yo'q SonaType Nexus yoki Xamiri:

  • Saqlash joyi SonaType Nexus yoki Xamiri ko'plab turdagi artefaktlar bunga olib keladi SonaType Nexus yoki Xamiri yagona muvaffaqiyatsizlik nuqtasiga aylanadi.

  • Yuqori mavjudlik SonaType Nexus to'lanadi.

  • Xamiri Menga haddan tashqari ishlab chiqilgan yechim kabi ko'rinadi.

  • Artefaktlar SonaType Nexus blobda saqlanadi. To'satdan elektr uzilib qolgan taqdirda, sizda zaxirangiz bo'lmasa, blobni qayta tiklay olmaysiz. Bizda shunday xato bor edi: 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. Blob hech qachon tiklanmadi.

Manba kodi

β†’ Manba kodi joylashgan shu yerda

Asosiy skript quyidagicha ko'rinadi:

#!/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 &

sozlama

inotify-createrepo faqat CentOS 7 yoki undan yuqori versiyalarida ishlaydi. Uni CentOS 6 da ishga tushirib boβ€˜lmadi.

yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepo

Konfiguratsiya

Odatiy bo'lib inotify-createrepo katalogni kuzatib boradi /var/www/repos/rpm-repo/.

Ushbu katalogni faylda o'zgartirishingiz mumkin /etc/inotify-createrepo.conf.

foydalanish

Har qanday faylni katalogga qo'shganda /var/www/repos/rpm-repo/ inotifywait fayl yaratadi /tmp/need_create. run_createrepo funksiyasi cheksiz tsiklda ishlaydi va faylni nazorat qiladi /tmp/need_create. Agar fayl mavjud bo'lsa, ishga tushiring createrepo --update.

Faylda yozuv paydo bo'ladi:

/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

Yuqori mavjudlikni ta'minlash qobiliyati

Mavjud yechimdan yuqori darajada foydalanish uchun siz ikkita serverdan foydalanishingiz mumkin, deb o'ylayman, HA uchun Keepalived va artefakt sinxronizatsiyasi uchun Lsyncd. Lsyncd - mahalliy katalogdagi o'zgarishlarni kuzatuvchi, ularni jamlaydigan va ma'lum vaqtdan so'ng rsync ularni sinxronlashni boshlaydigan demon. Tafsilotlar va sozlamalar postda tasvirlangan "Bir milliard faylni tez sinxronlashtirish".

webdav

Fayllarni yuklashning bir necha usullari mavjud: SSH, NFS, WebDav. WebDav zamonaviy va oddiy variant kabi ko'rinadi.

WebDav uchun biz Apache httpd dan foydalanamiz. Nega nginx emas, balki 2020 yilda Apache httpd?

Nginx + modullarini yaratish uchun avtomatlashtirilgan vositalardan foydalanmoqchiman (masalan, Webdav).

Nginx + modullarini qurish loyihasi mavjud - nginx-quruvchi. Agar siz fayllarni yuklash uchun nginx + wevdav dan foydalansangiz, sizga modul kerak bo'ladi nginx-dav-ext-modul. Nginx bilan qurish va foydalanishga harakat qilganda nginx-dav-ext-modul yordamida nginx-quruvchi xatoga duch kelamiz Nginx-dav-ext-module o'rniga http_dav_module tomonidan ishlatiladi. Xuddi shu xato yozda yopildi nginx: [emerg] noma'lum direktiv dav_methods.

Men tortishish so'rovini berdim O'rnatilgan, qayta tahrirlangan --with-{}_module uchun check git_url qo'shing ΠΈ agar modul == "http_dav_module" qo'shilsa --with. Ammo ular qabul qilinmadi.

webdav.conf konfiguratsiyasi

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>

O'ylaymanki, siz Apache httpd konfiguratsiyasining qolgan qismini o'zingiz qilasiz.

Nginx Apache oldida httpd

Apache'dan farqli o'laroq, Nginx voqealarga asoslangan so'rovlarni qayta ishlash modelidan foydalanadi, ya'ni har qanday miqdordagi mijozlar uchun faqat bitta HTTP server jarayoni talab qilinadi. Siz nginx dan foydalanishingiz va server yukini kamaytirishingiz mumkin.

nginx-front.conf konfiguratsiyasi. O'ylaymanki, siz nginx konfiguratsiyasining qolgan qismini o'zingiz qilasiz.

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 orqali fayllarni yuklab olish

RPMni yuklab olish juda oson.

curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://ваш-Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ-хост/rpm/

Manba: www.habr.com

a Izoh qo'shish