V tomto príspevku preskúmame úložisko rpm artefaktov pomocou jednoduchého skriptu s inotify + createrepo. Nahrávanie artefaktov prebieha prostredníctvom webdav s využitím apache httpd. Prečo apache httpd bude uvedené bližšie na konci príspevku.
Takže riešenie by malo spĺňať nasledujúce požiadavky pre organizáciu len RPM úložiska:
Bezplatné
Dostupnosť balíka v úložisku do niekoľkých sekúnd po nahraní artefaktov.
Jednoduché na inštaláciu a údržbu
Možnosť zabezpečiť vysokú dostupnosť (high availability)
Prečo nie alebo :
Ukladanie v alebo mnohých typoch artefaktov vedie k tomu, že alebo sa stávajú jediným bodom zlyhania.
Vysoká dostupnosť (high availability) v je spoplatnená.
Zdá sa mi, že je to zložitým riešením.
Artefakty v sú uložené v blob. Pri náhlom vypnutí elektriny sa vám nepodarí obnoviť blob, ak nemáte zálohu. Mali sme takúto chybu:
ERROR [ForkJoinPool.commonPool-worker-2] *SYSTEM [com.orientechnologies.orient.core.storage](http://com.orientechnologies.orient.core.storage/).fs.OFileClassic - $ANSI{green {db=security}} Chyba pri čítaní údajov pre súbor 'privilege_5.pcl' 1. pokus [java.io](http://java.io/).IOException: Zlá adresa. Blob sa nepodarilo obnoviť.
Zdrojový kód
→ Zdrojový kód sa nachádza
Hlavný skript vyzerá takto:
#!/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 &Inštalácia
Inotify-createrepo funguje iba na CentOS 7 alebo vyšších. Na CentOS 6 sa ho nepodarilo rozbehnúť.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepoKonfigurácia
Predvolene inotify-createrepo monitoruje adresár /var/www/repos/rpm-repo/.
Tento adresár je možné zmeniť v súbore /etc/inotify-createrepo.conf.
Použitie
Pri pridaní akéhokoľvek súboru do adresára /var/www/repos/rpm-repo/ inotifywait vytvorí súbor /tmp/need_create. Funkcia run_createrepo sa spúšťa v nekonečnej slučke a monitoruje súbor /tmp/need_create. Ak súbor existuje, spúšťa sa createrepo --update.
V súbore sa objaví zápis:
/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:00Možnosť zabezpečiť vysokú dostupnosť (high availability)
Pre zabezpečenie vysokej dostupnosti (high availability) z existujúceho riešenia si myslím, že je možné použiť 2 servery, Keepalived pre HA a Lsyncd na synchronizáciu artefaktov. — démon, ktorý sleduje zmeny v lokálnom adresári, agreguje ich a po uplynutí určitého času spúšťa rsync na ich synchronizáciu. Podrobnosti a nastavenie sú popísané v príspevku "".
WebDav
Súbory je možné nahrávať viacerými spôsobmi: SSH, NFS, WebDav. WebDav sa javí ako moderná a jednoduchá možnosť.
Na WebDav budeme používať Apache httpd. Prečo Apache httpd v roku 2020, a nie nginx?
Chceme používať automatizované prostriedky na zostavenie Nginx + moduly (napríklad Webdav).
Máme projekt na zostavenie Nginx + moduly — . Ak použijeme nginx + wevdav na nahrávanie súborov, potrebujeme modul . Pri pokuse zostaviť a použiť Nginx s s pomocou dostaneme chybu . Taká istá chyba bola uzavretá v lete .
Robil som Pull request a . Ale neboli prijaté.
Konfigurácia 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 grantedOstatnú konfiguráciu Apache httpd predpokladám, že urobíte sami.
Nginx pred Apache httpd
Na rozdiel od Apache, Nginx používa model spracovania požiadaviek založený na udalostiach, čo znamená, že na akýkoľvek počet klientov stačí iba jeden proces HTTP servera. Môžete používať nginx a znížiť zaťaženie servera.
Konfigurácia nginx-front.conf. Ostatnú konfiguráciu nginx predpokladám, že urobíte sami.
upstream nginx_front {
server localhost:80;
}
server {
listen 443 ssl;
server_name váš-virtuálny-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;
}
}Nahrávanie súborov cez WebDav
Nahrávanie rpm je veľmi jednoduché.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://váš-virtuálny-host/rpm/Zdroj: habr.com
