U ovom postu ćemo razmotriti pohranu rpm artefakata pomoću jednostavnog skriptnog rješenja s inotify + createrepo. Učitavanje artefakata vrši se putem webdava koristeći apache httpd. Zašto će apache httpd biti objašnjen bliže kraju posta.
Dakle, rješenje treba zadovoljiti sljedeće zahtjeve za organizaciju isključivo RPM skladišta:
Besplatno
Dostupnost paketa u repozitoriju nekoliko sekundi nakon učitavanja u skladište artefakata.
Jednostavno za instalaciju i održavanje
Mogućnost ostvarivanja visoke dostupnosti (high availability)
Zašto ne ili :
Pohrana u ili mnogim vrstama artefakata dovodi do toga da ili postaju jedinstvena točka kvara.
Visoka dostupnost (high availability) u je plaćena.
Čini mi se prekompliciranim rješenjem.
Artefakti u se čuvaju u blobu. U slučaju iznenadnog gubitka struje nećete moći obnoviti blob, osim ako nemate backup. Imali smo takvu grešku:
ERROR [ForkJoinPool.commonPool-worker-2] *SYSTEM [com.orientechnologies.orient.core.storage](http://com.orientechnologies.orient.core.storage).fs.OFileClassic - $ANSI{green {db=security}} Greška tijekom čitanja podataka za datoteku 'privilege_5.pcl' 1. pokušaj [java.io](http://java.io/).IOException: Loša adresa. Blob nikada nije obnovljen.
Izvorni kod
→ Izvorni kod nalazi se
Glavna skripta izgleda ovako:
#!/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 &Instalacija
Inotify-createrepo radi samo na CentOS 7 ili novijem. Na CentOS 6 nije uspjelo da ga natjeram da radi.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepoKonfiguriranje
Prema zadanim postavkama inotify-createrepo nadgleda direktorij /var/www/repos/rpm-repo/.
Ovu direktorij možete promijeniti u datoteci /etc/inotify-createrepo.conf.
Korištenje
Pri dodavanju bilo koje datoteke u direktorij /var/www/repos/rpm-repo/ inotifywait će kreirati datoteku /tmp/need_create. Funkcija run_createrepo pokreće se u beskonačnoj petlji i prati datoteku /tmp/need_create. Ako datoteka postoji, pokreće se createrepo --update.
U datoteci će se pojaviti zapis:
/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:00Mogućnost ostvarivanja visoke dostupnosti (high availability)
Da biste ostvarili visoku dostupnost (high availability) iz postojećeg rješenja, mislim da bi mogla koristiti 2 servera, Keepalived za HA i Lsyncd za sinkronizaciju artefakata. — demon koji prati promjene u lokalnom direktoriju, agregira ih, i nakon određenog vremena pokreće rsync za njihovu sinkronizaciju. Detalji i postavke opisani su u postu "".
WebDav
Datoteke se mogu učitavati na nekoliko načina: SSH, NFS, WebDav. WebDav se čini modernom i jednostavnom opcijom.
Za WebDav ćemo koristiti Apache httpd. Zašto Apache httpd 2020. godine, a ne nginx?
Želim koristiti automatizirane alate za sastavljanje Nginx + module (na primjer, Webdav).
Imate projekt za izradu Nginx + moduli — . Ako koristite nginx + wevdav za prijenos datoteka, potreban je modul . Pri pokušaju izrade i korištenja Nginxa s uz pomoć dobit ćemo pogrešku . Slična pogreška otklonjena je ljeti .
Napravio sam Pull request i . Ali nisu ga prihvatili.
Konfiguracija 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 grantedOstalu konfiguraciju Apache httpd mislim da ćete napraviti sami.
Nginx ispred Apache httpd
Za razliku od Apachea, Nginx koristi model obrade zahtjeva temeljen na događajima, zbog čega je potreban samo jedan proces HTTP poslužitelja za bilo koji broj klijenata. Možete koristiti nginx i smanjiti opterećenje na poslužitelju.
Konfiguracija nginx-front.conf. Ostalu konfiguraciju nginx mislim da ćete napraviti sami.
upstream nginx_front {
server localhost:80;
}
server {
listen 443 ssl;
server_name vaš-virtualni-host;
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;
}
}Prijenos datoteka putem WebDav-a
Prijenos rpm-a je vrlo jednostavan.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://vaš-virtualni-host/rpm/Izvor: habr.com
