Proste repozytorium rpm przy użyciu Inotify i webdav
W tym poście przyjrzymy się repozytorium artefaktów rpm za pomocą prostego skryptu inotify + createrepo. Artefakty są przesyłane przez webdav przy użyciu Apache httpd. Dlaczego apache httpd zostanie napisane pod koniec posta.
Dlatego rozwiązanie musi spełniać następujące wymagania dotyczące organizacji pamięci masowej RPM:
wolny
Dostępność pakietu w repozytorium kilka sekund po przesłaniu do repozytorium artefaktów.
Miazga Wydaje mi się, że to przekombinowane rozwiązanie.
Artefakty w Nexus typu Sony przechowywane w blobie. W przypadku nagłej przerwy w dostawie prądu nie będziesz mógł przywrócić obiektu BLOB, jeśli nie masz kopii zapasowej. Mieliśmy ten błąd: 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 nigdy nie został odzyskany.
Możesz zmienić ten katalog w pliku /etc/inotify-createrepo.conf.
Używać
Podczas dodawania dowolnego pliku do katalogu /var/www/repos/rpm-repo/ inotifywait utworzy plik /tmp/need_create. Funkcja run_createrepo działa w nieskończonej pętli i monitoruje plik /tmp/need_create. Jeśli plik istnieje, uruchom createrepo --update.
Aby zapewnić wysoką dostępność istniejącego rozwiązania, myślę, że możesz użyć 2 serwerów, Keepalived dla HA i Lsyncd do synchronizacji artefaktów. Lsyncd - demon, który monitoruje zmiany w lokalnym katalogu, agreguje je i po pewnym czasie rsync zaczyna je synchronizować. Szczegóły i ustawienia zostały opisane w poście "Szybka synchronizacja miliarda plików".
WebDav
Istnieje kilka sposobów przesyłania plików: SSH, NFS, WebDav. WebDav wydaje się być nowoczesną i prostą opcją.
W przypadku WebDav użyjemy Apache httpd. Dlaczego Apache httpd w 2020 roku, a nie nginx?
Chciałbym używać zautomatyzowanych narzędzi do budowania modułów Nginx + (na przykład Webdav).
Myślę, że resztę konfiguracji Apache httpd wykonasz sam.
Nginx przed Apache httpd
W przeciwieństwie do Apache, Nginx wykorzystuje model przetwarzania żądań oparty na zdarzeniach, co oznacza, że dla dowolnej liczby klientów wymagany jest tylko jeden proces serwera HTTP. Możesz użyć nginx i zmniejszyć obciążenie serwera.
Konfiguracja nginx-front.conf. Myślę, że resztę konfiguracji nginx wykonasz sam.