Repositori rpm sederhana menggunakan Inotify dan webdav

Dalam posting ini, kita akan melihat repositori artefak rpm menggunakan skrip inotify + createrepo sederhana. Artefak diunggah melalui webdav menggunakan apache httpd. Mengapa apache httpd akan ditulis menjelang akhir posting.

Jadi, solusinya harus memenuhi persyaratan berikut untuk mengatur penyimpanan RPM saja:

  • Gratis

  • Ketersediaan paket di repositori beberapa detik setelah diunggah ke repositori artefak.

  • Mudah dipasang dan dirawat

  • Kemampuan untuk membuat ketersediaan tinggi

    Mengapa tidak SonaType Nexus ΠΈΠ»ΠΈ Bubur:

  • Penyimpanan di SonaType Nexus ΠΈΠ»ΠΈ Bubur banyak jenis artefak mengarah pada fakta bahwa SonaType Nexus ΠΈΠ»ΠΈ Bubur menjadi satu titik kegagalan.

  • Ketersediaan tinggi di SonaType Nexus telah dibayar.

  • Bubur Sepertinya solusi yang terlalu direkayasa untuk saya.

  • Artefak di SonaType Nexus disimpan dalam gumpalan. Jika listrik padam secara tiba-tiba, Anda tidak akan dapat memulihkan blob jika tidak memiliki cadangan. Kami mengalami kesalahan 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 ditemukan.

Sumber

β†’ Kode sumber berada di sini

Skrip utama terlihat 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 &

Instalasi

inotify-createrepo hanya bekerja pada CentOS 7 atau lebih tinggi. Tidak dapat membuatnya berfungsi di 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 default inotify-createrepo memantau direktori /var/www/repos/rpm-repo/.

Anda dapat mengubah direktori ini di file /etc/inotify-createrepo.conf.

Menggunakan

Saat menambahkan file apa pun ke direktori /var/www/repos/rpm-repo/ inotifywait akan membuat file /tmp/need_create. Fungsi run_createrepo berjalan dalam loop tak terbatas dan memantau file /tmp/need_create. Jika file tersebut ada, maka jalankan createrepo --update.

Entri akan muncul di file:

/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

Kemampuan untuk membuat ketersediaan tinggi

Untuk membuat ketersediaan tinggi dari solusi yang ada, saya rasa Anda dapat menggunakan 2 server, Keepalived untuk HA dan Lsyncd untuk sinkronisasi artefak. Sinkronisasi - daemon yang memantau perubahan di direktori lokal, menggabungkannya, dan setelah waktu tertentu, rsync mulai menyinkronkannya. Detail dan pengaturan dijelaskan di pos "Sinkronisasi cepat dari satu miliar file".

WebDav

Ada beberapa cara untuk mengunggah file: SSH, NFS, WebDav. WebDav tampaknya menjadi pilihan modern dan sederhana.

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

Saya ingin menggunakan alat otomatis untuk membuat modul Nginx + (misalnya, Webdav).

Ada proyek untuk membangun modul Nginx + - nginx-builder. Jika Anda menggunakan nginx + wevdav untuk mengunggah file, maka Anda memerlukan modul nginx-dav-ext-module. Saat mencoba membangun dan menggunakan Nginx dengan nginx-dav-ext-module melalui nginx-builder kita akan mendapatkan kesalahan Digunakan oleh http_dav_module alih-alih nginx-dav-ext-module. Bug yang sama ditutup pada musim panas nginx: [emerg] direktif dav_methods tidak diketahui.

Saya membuat permintaan tarik Tambahkan cek git_url untuk tertanam, refactored --with-{}_module ΠΈ jika module == "http_dav_module" tambahkan --with. Tapi 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 pikir Anda akan melakukan sendiri konfigurasi Apache httpd lainnya.

Nginx di depan Apache httpd

Tidak seperti Apache, Nginx menggunakan model pemrosesan permintaan berbasis peristiwa, yang berarti hanya satu proses server HTTP yang diperlukan untuk sejumlah klien. Anda dapat menggunakan nginx dan mengurangi beban server.

konfigurasi nginx-front.conf. Saya pikir Anda akan melakukan sendiri konfigurasi nginx lainnya.

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

Mengunduh file melalui WebDav

Mengunduh rpm sangat mudah.

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

Sumber: www.habr.com

Tambah komentar