Dans cet article, nous examinerons le stockage d'artefacts rpm à l'aide d'un script simple avec inotify + createrepo. Les artefacts sont téléchargés via webdav en utilisant apache httpd. Pourquoi apache httpd sera écrit vers la fin du message.
Ainsi, la solution doit répondre aux exigences suivantes pour organiser uniquement le stockage RPM:
Gratuit
Disponibilité du package dans le référentiel quelques secondes après le chargement dans le stockage des artefacts.
Facile à installer et à entretenir
Capacité à rendre la haute disponibilité
Le stockage de nombreux types d'artefacts dans SonaType Nexus ou Pulp fait de SonaType Nexus ou Pulp un point de défaillance unique.
La haute disponibilité de SonaType Nexus est payante.
La pulpe me semble être une solution surdéveloppée.
SonaType Nexus blob. blob, . : 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 .
→
:
#!/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 &
Inotify-createrepo CentOS 7 . CentOS 6 .
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepo
inotify-createrepo /var/www/repos/rpm-repo/
.
/etc/inotify-createrepo.conf.
/var/www/repos/rpm-repo/
inotifywait /tmp/need_create
. run_createrepo /tmp/need_create
. , createrepo --update
.
:
/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:00
(high availability)
(high availability) , 2 , Keepalived HA Lsyncd . Lsyncd — , , , rsync . "C ".
WebDav
: SSH, NFS, WebDav. WebDav .
WebDav Apache httpd. Apache httpd 2020 , nginx?
Nginx + (, Webdav).
Nginx + — Nginx-builder. nginx + wevdav , nginx-dav-ext-module. Nginx nginx-dav-ext-module Nginx-builder Used by http_dav_module instead of nginx-dav-ext-module. nginx: [emerg] unknown directive dav_methods.
Pull request Add check git_url for embedded, refactored --with-{}_module if module == "http_dav_module" append --with. .
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>
Apache httpd .
Nginx Apache httpd
Contrairement à Apache, Nginx utilise un modèle de traitement des demandes basé sur les événements, donc tout nombre de clients ne nécessite qu'un seul processus de serveur HTTP. Vous pouvez utiliser nginx et réduire la charge du serveur.
Configez nginx-front.conf. Le reste de la configuration nginx, je pense que vous le ferez vous-même.
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;
}
}
Téléchargez des fichiers via WebDav
Le téléchargement de rpm est très simple.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://--/rpm/