Simple rpm repository gamit ang Inotify ug webdav

Sa kini nga post, atong tan-awon ang usa ka rpm artifact repository gamit ang usa ka yano nga inotify + createrepo script. Ang mga artifact gi-upload pinaagi sa webdav gamit ang apache httpd. Ngano nga ang apache httpd isulat sa katapusan sa post.

Mao nga, ang solusyon kinahanglan nga makab-ot ang mosunod nga mga kinahanglanon alang sa pag-organisar lamang sa pagtipig sa RPM:

  • Libre

  • Ang pagkaanaa sa pakete sa repositoryo pipila ka segundo pagkahuman sa pag-upload sa artifact repository.

  • Sayon sa pag-instalar ug pagmentinar

  • Abilidad sa paghimo sa taas nga pagkaanaa

    Ngano dili SonaType Nexus o Pulp:

  • Pagtipig sa SonaType Nexus o Pulp daghang mga matang sa mga artifact ang nagdala sa kamatuoran nga SonaType Nexus o Pulp mahimong usa ka punto sa kapakyasan.

  • Taas nga magamit sa SonaType Nexus gibayran.

  • Pulp Morag usa ka over-engineered nga solusyon alang kanako.

  • Mga artifact sa SonaType Nexus gitipigan sa blob. Kung adunay kalit nga pagkawala sa kuryente, dili nimo mabalik ang blob kung wala ka backup. Kami adunay kini nga sayup: 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. Wala na mabawi si Blob.

Source code

β†’ Ang source code nahimutang dinhi

Ang panguna nga script ingon niini:

#!/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 &

Pag-instalar

ang inotify-createrepo nagtrabaho lamang sa CentOS 7 o mas taas pa. Dili kini magamit sa CentOS 6.

yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepo

Pag-configure

Pinaagi sa default ang inotify-createrepo nag-monitor sa usa ka direktoryo /var/www/repos/rpm-repo/.

Mahimo nimong usbon kini nga direktoryo sa file /etc/inotify-createrepo.conf.

Paggamit

Kung magdugang bisan unsang file sa usa ka direktoryo /var/www/repos/rpm-repo/ ang inotifywait maghimo usa ka file /tmp/need_create. Ang run_createrepo function nagdagan sa usa ka walay katapusan nga loop ug nagmonitor sa file /tmp/need_create. Kung naa ang file, dayon pagdagan createrepo --update.

Ang usa ka entry makita sa file:

/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

Abilidad sa paghimo sa taas nga pagkaanaa

Aron makahimo og taas nga magamit gikan sa usa ka kasamtangan nga solusyon, sa akong hunahuna mahimo nimo gamiton ang 2 nga mga server, Keepalived para sa HA ug Lsyncd alang sa artifact synchronization. Lsyncd - usa ka daemon nga nag-monitor sa mga pagbag-o sa lokal nga direktoryo, nag-aggregate niini, ug pagkahuman sa usa ka oras, ang rsync nagsugod sa pag-synchronize niini. Ang mga detalye ug mga setting gihulagway sa post "Dali nga pag-synchronize sa usa ka bilyon nga mga file".

webdav

Adunay daghang mga paagi sa pag-upload sa mga file: SSH, NFS, WebDav. Ang WebDav daw usa ka moderno ug yano nga kapilian.

Para sa WebDav, atong gamiton ang Apache httpd. Ngano nga ang Apache httpd sa 2020 ug dili nginx?

Gusto nakong mogamit og mga automated nga himan alang sa pagtukod sa Nginx + modules (pananglitan, Webdav).

Adunay usa ka proyekto alang sa pagtukod sa Nginx + modules - nginx-builder. Kung mogamit ka nginx + wevdav sa pag-upload sa mga file, nan kinahanglan nimo ang usa ka module nginx-dav-ext-module. Kung gisulayan ang pagtukod ug paggamit sa Nginx sa nginx-dav-ext-module sa panabang nginx-builder makakuha kami usa ka sayup Gigamit sa http_dav_module imbes nginx-dav-ext-module. Ang sama nga bug gisirhan sa ting-init nginx: [emerg] wala mailhi nga direktiba dav_methods.

Nagbuhat ko ug pull request Idugang ang check git_url para sa na-embed, refactored --with-{}_module ΠΈ kung module == "http_dav_module" idugang --uban. Apan wala sila gidawat.

config 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>

Sa akong hunahuna buhaton nimo ang nahabilin sa Apache httpd configuration sa imong kaugalingon.

Nginx sa atubangan sa Apache httpd

Dili sama sa Apache, ang Nginx naggamit sa usa ka modelo sa pagproseso sa hangyo nga nakabase sa panghitabo, nga nagpasabot nga usa lamang ka proseso sa HTTP server ang gikinahanglan alang sa bisan unsang gidaghanon sa mga kliyente. Mahimo nimong gamiton ang nginx ug pagpakunhod sa load sa server.

nginx-front.conf config. Sa akong hunahuna buhaton nimo ang nahabilin nga pag-configure sa nginx sa imong kaugalingon.

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

Pag-download sa mga file pinaagi sa WebDav

Ang pag-download sa rpm dali ra kaayo.

curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://ваш-Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ-хост/rpm/

Source: www.habr.com

Idugang sa usa ka comment