În acest articol, vom analiza stocarea artefactelor RPM folosind un script simplu cu inotify + createrepo. Încărcarea artefactelor se realizează prin webdav utilizând apache httpd. Motivele pentru care apache httpd vor fi menționate mai aproape de sfârșitul articolului.
Așadar, soluția trebuie să răspundă următoarelor cerințe pentru organizarea unui depozit doar de RPM:
Gratuit
Disponibilitatea pachetului în depozit la câteva secunde după încărcarea în stocul artefactelor.
Ușor de instalat și întreținut
Capacitatea de a asigura disponibilitate ridicată (high availability)
De ce nu sau :
Stocarea în sau multe tipuri de artefacte duce la faptul că sau devin un singur punct de eșec.
Disponibilitatea ridicată (high availability) în este plătită.
mi se pare o soluție prea complicată.
Artefactele în sunt stocate în blob. În caz de întrerupere bruscă a electricității, nu veți putea recupera blob-ul dacă nu aveți un backup. Am avut o eroare de acest fel:
ERROR [ForkJoinPool.commonPool-worker-2] *SYSTEM [com.orientechnologies.orient.core.storage](http://com.orientechnologies.orient.core.storage/).fs.OFileClassic - $ANSI{green {db=security}} Eroare în timpul citirii datelor pentru fișierul 'privilege_5.pcl' 1-a încercare [java.io](http://java.io/).IOException: adresă greșită. Blob-ul nu a fost recuperat.
Codul sursă
→ Codul sursă se află
Scriptul principal arată astfel:
#!/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 &Instalare
Inotify-createrepo funcționează doar pe CentOS 7 sau mai recent. Pe CentOS 6 nu am reușit să-l fac să funcționeze.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepoConfigurare
În mod implicit, inotify-createrepo monitorizează directorul /var/www/repos/rpm-repo/.
Această directorie poate fi modificată în fișierul /etc/inotify-createrepo.conf.
Utilizare
Atunci când se adaugă orice fișier în director /var/www/repos/rpm-repo/ inotifywait va crea un fișier /tmp/need_create. Funcția run_createrepo se execută într-un ciclu infinit și monitorizează fișierul /tmp/need_create. Dacă fișierul există, se va porni createrepo --update.
În fișier va apărea o înregistrare:
/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:00Capacitatea de a asigura disponibilitate ridicată (high availability)
Pentru a asigura disponibilitate ridicată (high availability) din soluția existentă, cred că se pot folosi 2 servere, Keepalived pentru HA și Lsyncd pentru sincronizarea artefactelor. — un daemon care monitorizează modificările din directorul local, le agregă, și după un anumit timp, pornește rsync pentru a le sincroniza. Detalii și configurarea sunt descrise în articolul "".
WebDav
Fișierele pot fi încărcate în mai multe moduri: SSH, NFS, WebDav. WebDav pare o opțiune modernă și simplă.
Pentru WebDav vom folosi Apache httpd. De ce Apache httpd în 2020 și nu nginx?
Dorești să folosești instrumente automatizate pentru a construi Nginx + module (de exemplu, Webdav).
Există un proiect pentru construirea Nginx + module — . Dacă folosești nginx + webdav pentru a încărca fișiere, ai nevoie de modulul . La încercarea de a construi și utiliza Nginx cu cu ajutorul vom primi o eroare . Aceeași eroare a fost raportată vara trecută .
Am făcut o cerere de Pull și . Dar nu au fost acceptate.
Configurația webdav.conf
DavLockDB /var/www/html/DavLock
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
DAV On
Options Indexes FollowSymlinks SymLinksifOwnerMatch IncludesNOEXEC
IndexOptions NameWidth=* DescriptionWidth=*
AllowOverride none
Require all grantedCred că restul configurării Apache httpd îl vei face singur.
Nginx înainte de Apache httpd
Spre deosebire de Apache, Nginx folosește un model de evenimente pentru gestionarea cererilor, ceea ce înseamnă că pentru un număr nelimitat de clienți este necesar un singur proces al serverului HTTP. Poți folosi nginx și să reduci încărcarea serverului.
Configurația nginx-front.conf. Cred că restul configurării nginx îl vei face singur.
upstream nginx_front {
server localhost:80;
}
server {
listen 443 ssl;
server_name numele-tău-virtual;
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;
}
}Încărcarea fișierelor prin WebDav
Încărcarea rpm este foarte simplă.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://numele-tău-virtual/rpm/Sursa: habr.com
