Yn dizze post sille wy sjen nei de opslach fan rpm artefakt mei in ienfâldich skript mei inotify + createrepo. It opladen fan artefakten wurdt útfierd fia webdav mei apache httpd. Wêrom apache httpd sil wurde skreaun oan 'e ein fan' e post.
Dat, de oplossing moat foldwaan oan de folgjende easken foar it organisearjen fan allinich RPM-opslach:
Frij
Beskikberens fan it pakket yn 'e repository in pear sekonden nei it uploaden nei it artefaktrepository.
Maklik te ynstallearjen en te ûnderhâlden
Mooglikheid om hege beskikberens te meitsjen
Wêrom net of :
Opslach yn of in protte soarten artefakten liedt ta it feit dat of wurden in inkeld punt fan mislearring.
Hege beskikberens yn betelle wurdt.
It liket my in te yngewikkelde oplossing.
Artefakten yn wurde opslein yn blob. As d'r ynienen in stroomûnderbrekking is, kinne jo de blob net werstelle as jo gjin reservekopy hawwe. Wy hiene dizze flater:
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 waard nea restaurearre.
Boarne
→ Boarnekoade is te finen
It haadskript sjocht der sa út:
#!/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 &ynstelling
Inotify-createrepo wurket allinich op CentOS 7 of heger. Koe it net krije om te wurkjen op CentOS 6.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepoKonfiguraasje
Standert kontroleart inotify-createrepo de map /var/www/repos/rpm-repo/.
Jo kinne dizze map feroarje yn it bestân /etc/inotify-createrepo.conf.
Gebrûk
By it tafoegjen fan in triem oan in map /var/www/repos/rpm-repo/ inotifywait sil it bestân oanmeitsje /tmp/need_create. De funksje run_createrepo rint yn in einleaze lus en kontrolearret it bestân /tmp/need_create. As de triem bestiet, rint it createrepo --update.
In yngong sil ferskine yn it bestân:
/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:00Mooglikheid om hege beskikberens te meitsjen
Om hege beskikberens fan in besteande oplossing te meitsjen, tink ik dat jo 2-tsjinners kinne brûke, Keepalived foar HA en Lsyncd foar syngronisaasje fan artefakten. - in daemon dy't wizigingen yn in lokale map kontrolearret, se aggregearret, en nei in bepaalde tiid begjint rsync se te syngronisearjen. Details en opset wurde beskreaun yn 'e post "".
webdav
Jo kinne bestannen op ferskate manieren uploade: SSH, NFS, WebDav. WebDav liket in moderne en ienfâldige opsje te wêzen.
Foar WebDav sille wy Apache httpd brûke. Wêrom Apache httpd yn 2020 en net nginx?
Ik wol automatisearre ark brûke foar it bouwen fan Nginx + modules (bygelyks Webdav).
D'r is in projekt om Nginx + modules te bouwen - . As jo nginx + wevdav brûke om bestannen te uploaden, hawwe jo in module nedich . As jo besykje Nginx te bouwen en te brûken mei mei help wy krije in flater . Deselde brek waard yn 'e simmer sletten .
Ik makke in Pull fersyk и . Mar se waarden net akseptearre.
Konfigurearje 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>Ik tink dat jo de rest fan 'e Apache httpd-opset sels dwaan kinne.
Nginx foar Apache httpd
Oars as Apache, brûkt Nginx in evenemint-basearre oanfraachferwurkingsmodel, dat mar ien HTTP-tsjinnerproses fereasket foar elk oantal kliïnten. Jo kinne nginx brûke en de lading op 'e tsjinner ferminderje.
Konfigurearje nginx-front.conf. Ik tink dat jo de rest fan 'e nginx-opset sels dwaan kinne.
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;
}
}It opladen fan triemmen fia WebDav
It laden fan rpm is heul ienfâldich.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://ваш-виртуальный-хост/rpm/Boarne: www.habr.com
