Repositorio rpm simple usando Inotify y webdav

En esta publicación, veremos el almacenamiento de artefactos rpm utilizando un script simple con inotify + createrepo. Los artefactos se cargan a través de webdav usando apache httpd. ¿Por qué apache httpd se escribirá cerca del final de la publicación?


Por lo tanto, la solución debe cumplir los siguientes requisitos para organizar solo el almacenamiento RPM:


  • Gratis


  • Disponibilidad del paquete en el repositorio unos segundos después de cargarlo en el almacenamiento de artefactos.


  • Fácil de instalar y mantener


  • Capacidad para hacer alta disponibilidad


    ¿Por qué no SonaType Nexus o Pulp ?


  • El almacenamiento de muchos tipos de artefactos en SonaType Nexus o Pulp hace que SonaType Nexus o Pulp se convierta en un único punto de falla.


  • Se paga alta disponibilidad en SonaType Nexus .


  • La pulpa me parece una solución sobredesarrollada.


  • 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


A diferencia de Apache, Nginx utiliza un modelo de procesamiento de solicitudes basado en eventos, por lo que cualquier número de clientes requiere solo un proceso de servidor HTTP. Puede usar nginx y reducir la carga del servidor.


Config nginx-front.conf. El resto de la configuración de nginx, creo que lo harás tú mismo.


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;
    }
}

Subir archivos a través de WebDav


Descargar rpm es muy simple.


curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://--/rpm/

All Articles