Nesta publicación analizaremos o almacenamento de artefactos rpm usando un script sinxelo con inotify + createrepo. A carga de artefactos realízase a través de webdav usando apache httpd. Por que apache httpd se escribirá ao final da publicación.
Polo tanto, a solución debe cumprir os seguintes requisitos para organizar só o almacenamento RPM:
De balde
Dispoñibilidade do paquete no repositorio uns segundos despois da carga no repositorio de artefactos.
Almacenamento en SonaType Nexus ou Pulpa moitos tipos de artefactos leva ao feito de que SonaType Nexus ou Pulpa converterse nun único punto de fracaso.
Pulpa Paréceme unha solución demasiado complicada.
Artefactos en SonaType Nexus almacénanse en blob. Se hai un apagón repentino, non poderás restaurar o blob se non tes unha copia de seguridade. Tivemos este erro: 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 nunca foi restaurado.
Por defecto, inotify-createrepo supervisa o directorio /var/www/repos/rpm-repo/.
Podes cambiar este directorio no ficheiro /etc/inotify-createrepo.conf.
Usar
Ao engadir calquera ficheiro a un directorio /var/www/repos/rpm-repo/ inotifywait creará o ficheiro /tmp/need_create. A función run_createrepo execútase nun bucle interminable e supervisa o ficheiro /tmp/need_create. Se o ficheiro existe, execútase createrepo --update.
Para facer unha alta dispoñibilidade dunha solución existente, creo que pode usar 2 servidores, Keepalived para HA e Lsyncd para sincronizar artefactos. Lsyncd - un daemon que supervisa os cambios nun directorio local, os agrega e despois dun certo tempo rsync comeza a sincronizalos. Os detalles e a configuración descríbense na publicación "Sincronización rápida de mil millóns de ficheiros".
WebDav
Podes cargar ficheiros de varias maneiras: SSH, NFS, WebDav. WebDav parece ser unha opción moderna e sinxela.
Para WebDav usaremos Apache httpd. Por que Apache httpd en 2020 e non nginx?
Gustaríame usar ferramentas automatizadas para construír módulos Nginx + (por exemplo, Webdav).
Creo que podes facer o resto da configuración de Apache httpd ti mesmo.
Nginx antes de Apache httpd
A diferenza de Apache, Nginx usa un modelo de procesamento de solicitudes baseado en eventos, que require só un proceso de servidor HTTP para calquera número de clientes. Podes usar nginx e reducir a carga no servidor.
Configuración de nginx-front.conf. Creo que podes facer o resto da configuración de nginx ti mesmo.