Dans ce post, nous examinerons le stockage des artefacts RPM à l'aide d'un simple script avec inotify + createrepo. Le téléchargement des artefacts se fait via WebDAV en utilisant Apache HTTPD. Pourquoi Apache HTTPD sera mentionné plus loin dans le post.
Ainsi, la solution doit répondre aux exigences suivantes pour organiser uniquement un dépÎt RPM :
Gratuit
Disponibilité du paquet dans le dépÎt quelques secondes aprÚs son téléchargement dans le stockage des artefacts.
Facile Ă installer et Ă entretenir
Possibilité de garantir une haute disponibilité
Pourquoi pas ou :
Le stockage de ou de nombreux types d'artefacts conduit à ce que ou deviennent un point de défaillance unique.
La haute disponibilité est payante.
me semble ĂȘtre une solution trop complexe.
Les artefacts dans sont stockés dans un blob. En cas de coupure électrique soudaine, vous ne pourrez pas récupérer le blob si vous n'avez pas de sauvegarde. Nous avons rencontré une telle erreur :
ERROR [ForkJoinPool.commonPool-worker-2] *SYSTEM [com.orientechnologies.orient.core.storage](http://com.orientechnologies.orient.core.storage/).fs.OFileClassic - $ANSI{green {db=security}} Erreur lors de la lecture des donnĂ©es pour le fichier 'privilege_5.pcl' 1Ăšre tentative [java.io](http://java.io/).IOException : Mauvaise adresse. Le blob n'a pas pu ĂȘtre rĂ©cupĂ©rĂ©.
Code source
â Le code source se trouve
Le script principal est ainsi conçu :
#!/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 &Installation
Inotify-createrepo fonctionne uniquement sur CentOS 7 ou version supĂ©rieure. Il n'a pas pu ĂȘtre fait fonctionner sur CentOS 6.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepoConfiguration
Par défaut, inotify-createrepo surveille le répertoire /var/www/repos/rpm-repo/.
Ce rĂ©pertoire peut ĂȘtre modifiĂ© dans le fichier /etc/inotify-createrepo.conf.
Utilisation
Lorsqu'un fichier est ajouté dans le répertoire /var/www/repos/rpm-repo/ inotifywait créera un fichier /tmp/need_create. La fonction run_createrepo s'exécute dans une boucle infinie et surveille le fichier /tmp/need_create. Si le fichier existe, alors createrepo --update.
Une entrée apparaßtra dans le fichier :
/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:00Possibilité de garantir une haute disponibilité
Pour assurer une haute disponibilitĂ© Ă partir de la solution existante, je pense que l'on peut utiliser 2 serveurs, Keepalived pour HA et Lsyncd pour la synchronisation des artefacts. â est un dĂ©mon qui surveille les changements dans un rĂ©pertoire local, les agrĂšge, et aprĂšs un certain temps, dĂ©clenche rsync pour leur synchronisation. Les dĂ©tails et la configuration sont dĂ©crits dans le post "".
WebDav
Les fichiers peuvent ĂȘtre tĂ©lĂ©chargĂ©s de plusieurs maniĂšres : SSH, NFS, WebDav. WebDav semble ĂȘtre une option moderne et simple.
Pour WebDav, nous allons utiliser Apache HTTPD. Pourquoi Apache HTTPD en 2020 et pas Nginx ?
Il est souhaitable d'utiliser des outils automatisés pour assembler Nginx + modules (par exemple, Webdav).
Il y a un projet pour assembler Nginx + modules â . Si vous utilisez nginx + webdav pour tĂ©lĂ©charger des fichiers, vous aurez besoin du module . Lors de la tentative d'assembler et d'utiliser Nginx avec avec l'aide de nous obtiendrons une erreur . Une erreur similaire a Ă©tĂ© corrigĂ©e cet Ă©tĂ© .
J'ai fait une demande de tirage et . Mais ils ne l'ont pas accepté.
Configuration de 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 grantedJe pense que vous ferez vous-mĂȘme le reste de la configuration d'Apache httpd.
Nginx avant Apache httpd
Contrairement Ă Apache, Nginx utilise un modĂšle basĂ© sur les Ă©vĂ©nements pour traiter les requĂȘtes, ce qui nĂ©cessite un seul processus de serveur HTTP pour n'importe quel nombre de clients. Vous pouvez utiliser nginx et rĂ©duire la charge sur le serveur.
Configuration de nginx-front.conf. Je pense que vous ferez vous-mĂȘme le reste de la configuration de nginx.
upstream nginx_front {
server localhost:80;
}
server {
listen 443 ssl;
server_name votre-hĂŽte-virtuel;
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échargement de 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://votre-hĂŽte-virtuel/rpm/Source : habr.com
