In diesem Beitrag betrachten wir die Speicherung von RPM-Artefakten mit einem einfachen Skript, das inotify + createrepo verwendet. Der Upload der Artefakte erfolgt über WebDAV unter Verwendung von Apache HTTPD. Warum Apache HTTPD näher am Ende des Beitrags erläutert wird.
Das Lösungskonzept sollte die folgenden Anforderungen zur Erstellung eines reinen RPM-Repositories erfüllen:
Kostenlos
Verfügbarkeit des Pakets im Repository innerhalb von Sekunden nach dem Upload in das Artefakt-Repository.
Einfach zu installieren und zu warten
Die Möglichkeit, hohe Verfügbarkeit zu gewährleisten (High Availability)
Warum nicht oder :
Die Speicherung von oder vielen Arten von Artefakten führt dazu, dass oder eine einzige Fehlerstelle entsteht.
Hohe Verfügbarkeit (High Availability) in ist kostenpflichtig.
Ich halte es für eine überkomplizierte Lösung.
Artefakte in werden als Blob gespeichert. Bei einem plötzlichen Stromausfall können Sie den Blob nicht wiederherstellen, wenn Sie kein Backup haben. Wir hatten diesen Fehler:
ERROR [ForkJoinPool.commonPool-worker-2] *SYSTEM [com.orientechnologies.orient.core.storage](http://com.orientechnologies.orient.core.storage).fs.OFileClassic - $ANSI{green {db=security}} Fehler beim Datenlesen für Datei 'privilege_5.pcl' 1. Versuch [java.io](http://java.io/).IOException: Schlechte Adresse. Den Blob konnten wir nicht wiederherstellen.
Quellcode
→ Der Quellcode befindet sich
Das Hauptskript sieht so aus:
#!/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 von
Inotify-createrepo funktioniert nur auf CentOS 7 oder höher. Auf CentOS 6 konnte ich es nicht zum Laufen bringen.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepoKonfiguration
Standardmäßig überwacht inotify-createrepo das Verzeichnis /var/www/repos/rpm-repo/.
Dieses Verzeichnis kann in der Datei geändert werden /etc/inotify-createrepo.conf.
Nutzung
Beim Hinzufügen einer Datei in das Verzeichnis /var/www/repos/rpm-repo/ inotifywait erstellt eine Datei /tmp/need_create. Die Funktion run_createrepo wird in einer Endlosschleife ausgeführt und überwacht die Datei /tmp/need_create. Wenn die Datei existiert, wird gestartet createrepo --update.
In der Datei wird ein Eintrag erscheinen:
/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:00Die Möglichkeit, hohe Verfügbarkeit zu gewährleisten (High Availability)
Um eine hohe Verfügbarkeit (high availability) aus der bestehenden Lösung zu schaffen, denke ich, dass man 2 Server verwenden kann, Keepalived für HA und Lsyncd zur Synchronisation der Artefakte. — ein Daemon, der Änderungen im lokalen Verzeichnis überwacht, sie aggregiert und nach einer bestimmten Zeit rsync für ihre Synchronisation startet. Details und Einstellungen sind im Post "".
WebDav
Dateien können auf verschiedene Weise hochgeladen werden: SSH, NFS, WebDav. WebDav scheint eine moderne und einfache Option zu sein.
Für WebDav werden wir Apache httpd verwenden. Warum Apache httpd im Jahr 2020 und nicht nginx?
Es ist wünschenswert, automatisierte Werkzeuge zum Zusammenstellen von Nginx + Modulen (z. B. Webdav) zu nutzen.
Es gibt ein Projekt zur Zusammenstellung von Nginx + Modulen — . Wenn Nginx + Webdav zum Hochladen von Dateien verwendet werden, wird das Modul benötigt . Bei dem Versuch, Nginx mit mit Hilfe von bekommen wir einen Fehler . Ein ähnlicher Fehler wurde im Sommer geschlossen. .
Ich habe einen Pull-Request gemacht und . Aber sie wurden nicht akzeptiert.
Konfigurationsdatei 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 grantedDie restliche Konfiguration von Apache httpd denke ich, werden Sie selbst erledigen.
Nginx vor Apache httpd
Im Gegensatz zu Apache verwendet Nginx ein ereignisgesteuertes Modell zur Verarbeitung von Anfragen, was bedeutet, dass für jede Anzahl von Client-Anfragen nur ein HTTP-Server-Prozess erforderlich ist. Sie können Nginx verwenden und die Serverlast reduzieren.
Nginx-Konfiguration nginx-front.conf. Die restliche Nginx-Konfiguration werden Sie wahrscheinlich selbst vornehmen.
upstream nginx_front {
server localhost:80;
}
server {
listen 443 ssl;
server_name Ihr-virtueller-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;
}
}Dateien über WebDav hochladen
Das Hochladen von RPM ist sehr einfach.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://Ihr-virtueller-host/rpm/Quelle: habr.com
