Selles postituses vaatame RPM artefaktide salvestust lihtsa skripti abil, mis kasutab inotify + createrepo. Artefaktide laadimine toimub WebDAV kaudu, kasutades Apache httpd-d. Miks Apache httpd-st räägime artikli lõpus.
Nii et lahendus peab vastama järgmistele nõudmistele ainult RPM ladustamiseks:
Tasuta
Paki saadavus hoidlas kohe pärast artefaktide üleslaadimist.
Lihtne paigaldada ja hallata
Võimekus tagada kõrge saadavus (high availability)
Miks mitte või :
Salvestamine või paljude erinevate artefaktitüüpide jaoks toob endaga kaasa või ühe tõrkepunkti.
Kõrge saadavus (high availability) on tasuline.
Mulle tundub, et see on liiga keeruline lahendus.
Artefakte salvestatakse blob. Kui elektrit ootamatult välja lülitatakse, ei saa te blob'i taastada, kui teil ei ole varukoopiat. Meil oli selline viga:
ERROR [ForkJoinPool.commonPool-worker-2] *SYSTEM [com.orientechnologies.orient.core.storage](http://com.orientechnologies.orient.core.storage/).fs.OFileClassic - $ANSI{green {db=security}} Viga andmete lugemisel faili 'privilege_5.pcl' 1. katse [java.io](http://java.io/).IOException: Vale aadress. Blob'i ei taastatud.
Allikasood
→ Algne kood asub
Põhiskript näeb välja selline:
#!/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 &Installimine
Inotify-createrepo töötab ainult CentOS 7 või uuematel versioonidel. CentOS 6-l ei õnnestunud seda tööle panna.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepoKonfigureerimine
Vaikimisi jälgib inotify-createrepo katalooge /var/www/repos/rpm-repo/.
Seda katalooge saab muuta failis /etc/inotify-createrepo.conf.
Kasutamine
Faili lisamisel katalooge /var/www/repos/rpm-repo/ inotifywait loob faili /tmp/need_create. Funktsioon run_createrepo käivitatakse lõpmatus tsüklis ja jälgib faili /tmp/need_create. Kui fail eksisteerib, käivitatakse createrepo --update.
Failis kuvatakse järgmine rida:
/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:00Võimekus tagada kõrge saadavus (high availability)
Kuna olemasolevast lahendusest kõrge saadavuse (high availability) saavutamiseks arvan, et võiks kasutada kahte serverit, Keepalived HA jaoks ja Lsyncd artefaktide sünkroniseerimiseks. — demon, mis jälgib muudatusi kohalikus kataloogis, kogub neid ja pärast teatud ajavahemikku käivitab rsync nende sünkroniseerimiseks. Üksikasjad ja seadistus on toodud postituses "".
WebDav
Failide üleslaadimiseks on mitu võimalust: SSH, NFS, WebDav. WebDav tundub olevat kaasaegne ja lihtne variant.
WebDav-i jaoks kasutame Apache httpd-d. Miks Apache httpd 2020. aastal, mitte nginx?
Sooviksin kasutada automatiseeritud vahendeid Nginx + moodulite (nt Webdav) kogumiseks.
On projekt Nginx + moodulite kogumiks — . Kui kasutada nginx + wevdav failide üleslaadimiseks, vajame moodulit . Kui proovida Nginx-i üles ehitada ja kasutada kasutades saame vea Sama viga suleti suvel .
Tehtud Pull-Request ja . Kuid neid ei võetud vastu.
Webdav.conf konfiguratsioon
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 grantedÜlejäänud Apache httpd seadistuse teen kindlasti ise.
Nginx Apache httpd ees
Erinevalt Apache'ist kasutab Nginx päringute töötlemiseks sündmuste mudelit, mis tähendab, et üks HTTP-serveri protsess on vajalik mistahes arvu klientide jaoks. Saate kasutada nginx'i ja vähendada serveri koormust.
Nginx-front.conf konfiguratsioon. Ülejäänud nginx'i seadistuse arvan, et teete ise.
upstream nginx_front {
server localhost:80;
}
server {
listen 443 ssl;
server_name teie-virtuaalne-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;
}
}Failide üleslaadimine WebDav kaudu
RPM-i laadimine on väga lihtne.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://teie-virtuaalne-host/rpm/Allikas: habr.com
