I detta inlÀgg kommer vi att gÄ igenom lagring av rpm-artiklar med hjÀlp av ett enkelt skript med inotify + createrepo. uppladdning av artiklar sker via webdav med apache httpd. varför apache httpd kommer att diskuteras lÀngre fram i inlÀgget.
SÄ, lösningen mÄste uppfylla följande krav för att organisa ett Rent RPM-lager:
Gratis
TillgÀnglighet av paketet i repot inom nÄgra sekunder efter uppladdning till lagret av artiklar.
Enkel att installera och underhÄlla
Möjlighet till hög tillgÀnglighet (high availability)
Varför inte eller :
Lagring av eller mÄnga typer av artiklar leder till att eller blir en enda punkt av fel.
Hög tillgÀnglighet (high availability) i Àr betald.
seems like an overcomplicated solution.
Artiklar i lagras i blob. Vid plötsligt strömavbrott kan du inte ÄterstÀlla blob om du inte har en backup. Vi hade ett sÄdant fel:
ERROR [ForkJoinPool.commonPool-worker-2] *SYSTEM [com.orientechnologies.orient.core.storage](http://com.orientechnologies.orient.core.storage/).fs.OFileClassic - $ANSI{green {db=security}} Fel vid datalÀsning för fil 'privilege_5.pcl' 1:a försök [java.io](http://java.io/).IOException: DÄlig adress. Blob blev inte ÄterstÀllt.
KĂ€llkod
â KĂ€llkoden finns hĂ€r
Huvudscripten ser ut sÄ hÀr:
#!/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
Inotify-createrepo fungerar endast pÄ CentOS 7 eller högre. Det gick inte att fÄ det att fungera pÄ CentOS 6.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepoKonfiguration
Som standard övervakar inotify-createrepo katalogen /var/www/repos/rpm-repo/.
Denna katalog kan Àndras i filen /etc/inotify-createrepo.conf.
AnvÀndning
Vid tillÀgg av en fil i katalogen /var/www/repos/rpm-repo/ inotifywait kommer att skapa en fil /tmp/need_create. Funktionen run_createrepo körs i en oÀndlig loop och övervakar filen /tmp/need_create. Om filen finns startas createrepo --update.
I filen kommer en post att tillkomma:
/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:00Möjlighet till hög tillgÀnglighet (high availability)
För att göra hög tillgĂ€nglighet (high availability) av den befintliga lösningen, tror jag att man kan anvĂ€nda 2 servrar, Keepalived för HA och Lsyncd för synkronisering av artiklar. â en demon som övervakar Ă€ndringar i den lokala katalogen, aggregerar dem och efter en viss tid startar rsync för att synkronisera dem. Detaljer och instĂ€llning beskrivs i inlĂ€gget "".
WebDav
Filer kan laddas upp pÄ flera sÀtt: SSH, NFS, WebDav. WebDav verkar vara ett modernt och enkelt alternativ.
För WebDav kommer vi att anvÀnda Apache httpd. Varför Apache httpd 2020 och inte nginx?
Man vill anvÀnda automatiserade verktyg för att bygga Nginx + moduler (t.ex. Webdav).
Det finns ett projekt för att bygga Nginx + moduler â . Om man anvĂ€nder nginx + wevdav för att ladda upp filer, sĂ„ behövs modulen . Vid försök att bygga och anvĂ€nda Nginx med med hjĂ€lp av fĂ„r vi ett felmeddelande . Samma fel stĂ€ngdes i somras .
Jag gjorde en Pull request och . Men de godkÀnde dem inte.
Konfigurering av 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 grantedJag tror att du fixar resten av Apache httpd-konfigurationen sjÀlv.
Nginx före Apache httpd
Till skillnad frÄn Apache anvÀnder Nginx en hÀndelsebaserad modell för att behandla förfrÄgningar, vilket gör att det endast krÀvs en HTTP-serverprocess för ett oÀndligt antal kunder. Du kan anvÀnda nginx och minska belastningen pÄ servern.
Konfigurering av nginx-front.conf. Jag tror att du fixar resten av nginx-konfigurationen sjÀlv.
upstream nginx_front {
server localhost:80;
}
server {
listen 443 ssl;
server_name ditt-virtuella-vÀrd;
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;
}
}Ladda upp filer via WebDav
Att ladda upp rpm Àr vÀldigt enkelt.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://ditt-virtuella-vÀrd/rpm/KÀlla: habr.com
