Repositori rpm mudah menggunakan Inotify dan webdav

Dalam siaran ini kita akan melihat storan artifak rpm menggunakan skrip mudah dengan inotify + createrepo. Memuat naik artifak dilakukan melalui webdav menggunakan apache httpd. Mengapa apache httpd akan ditulis pada penghujung siaran.

Jadi, penyelesaian mesti memenuhi keperluan berikut untuk mengatur storan RPM sahaja:

  • Percuma

  • Ketersediaan pakej dalam repositori beberapa saat selepas memuat naik ke repositori artifak.

  • Mudah dipasang dan diselenggara

  • Keupayaan untuk membuat ketersediaan yang tinggi

    Kenapa tidak SonaType Nexus atau Pulpa:

  • Penyimpanan dalam SonaType Nexus atau Pulpa banyak jenis artifak membawa kepada hakikat bahawa SonaType Nexus atau Pulpa menjadi satu titik kegagalan.

  • Ketersediaan tinggi dalam SonaType Nexus telah dibayar.

  • Pulpa Nampaknya saya seperti penyelesaian yang terlalu rumit.

  • Artifak dalam SonaType Nexus disimpan dalam gumpalan. Jika berlaku gangguan bekalan elektrik secara tiba-tiba, anda tidak akan dapat memulihkan gumpalan jika anda tidak mempunyai sandaran. Kami mempunyai ralat ini: 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 tidak pernah dipulihkan.

Kod sumber

β†’ Kod sumber terletak di sini

Skrip utama kelihatan seperti ini:

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

Pemasangan

Inotify-createrepo hanya berfungsi pada CentOS 7 atau lebih tinggi. Tidak dapat membuatnya berfungsi pada CentOS 6.

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

Konfigurasi

Secara lalai, inotify-createrepo memantau direktori /var/www/repos/rpm-repo/.

Anda boleh menukar direktori ini dalam fail /etc/inotify-createrepo.conf.

Gunakan

Apabila menambah sebarang fail pada direktori /var/www/repos/rpm-repo/ inotifywait akan mencipta fail /tmp/need_create. Fungsi run_createrepo berjalan dalam gelung yang tidak berkesudahan dan memantau fail /tmp/need_create. Jika fail wujud, ia berjalan createrepo --update.

Entri akan muncul dalam fail:

/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

Keupayaan untuk membuat ketersediaan yang tinggi

Untuk membuat ketersediaan tinggi daripada penyelesaian sedia ada, saya rasa anda boleh menggunakan 2 pelayan, Keepalived untuk HA dan Lsyncd untuk menyegerakkan artifak. Lsyncd - daemon yang memantau perubahan dalam direktori tempatan, mengagregatkannya, dan selepas masa tertentu rsync mula menyegerakkannya. Butiran dan persediaan diterangkan dalam siaran "Penyegerakan pantas satu bilion fail".

WebDAV

Anda boleh memuat naik fail dalam beberapa cara: SSH, NFS, WebDav. WebDav nampaknya merupakan pilihan yang moden dan mudah.

Untuk WebDav kami akan menggunakan Apache httpd. Mengapa Apache httpd pada tahun 2020 dan bukan nginx?

Saya ingin menggunakan alat automatik untuk membina modul Nginx + (contohnya, Webdav).

Terdapat projek untuk membina modul Nginx + - Pembina Nginx. Jika anda menggunakan nginx + wevdav untuk memuat naik fail, anda memerlukan modul nginx-dav-ext-module. Apabila cuba membina dan menggunakan Nginx dengan nginx-dav-ext-module dengan cara Pembina Nginx kita akan mendapat ralat Digunakan oleh http_dav_module dan bukannya nginx-dav-ext-module. Pepijat yang sama telah ditutup pada musim panas nginx: [emerg] arahan dav_methods yang tidak diketahui.

Saya membuat permintaan Tarik Tambahkan semak git_url untuk dibenamkan, difaktorkan semula β€”dengan-{}_module ΠΈ jika modul == "http_dav_module" tambahkan --dengan. Tetapi mereka tidak diterima.

Konfigurasi 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>

Saya rasa anda boleh melakukan seluruh persediaan httpd Apache sendiri.

Nginx sebelum Apache httpd

Tidak seperti Apache, Nginx menggunakan model pemprosesan permintaan berasaskan peristiwa, yang memerlukan hanya satu proses pelayan HTTP untuk sebarang bilangan pelanggan. Anda boleh menggunakan nginx dan mengurangkan beban pada pelayan.

Konfigurasi nginx-front.conf. Saya fikir anda boleh melakukan baki persediaan nginx sendiri.

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;
    }
}

Memuat naik fail melalui WebDav

Memuatkan rpm adalah sangat mudah.

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

Sumber: www.habr.com

Tambah komen