Sa post na ito, titingnan natin ang isang rpm artifact repository gamit ang isang simpleng inotify + createrepo script. Ang mga artifact ay ina-upload sa pamamagitan ng webdav gamit ang apache httpd. Bakit isusulat ang apache httpd sa dulo ng post.
Kaya, dapat matugunan ng solusyon ang mga sumusunod na kinakailangan para sa pag-aayos lamang ng imbakan ng RPM:
libre
Availability ng package sa repository ng ilang segundo pagkatapos mag-upload sa artifact repository.
Madaling i-install at mapanatili
Kakayahang gumawa ng mataas na kakayahang magamit
Bakit hindi o :
Imbakan sa o maraming uri ng artifact ang humahantong sa katotohanan na o maging isang punto ng kabiguan.
Mataas na availability sa ay binabayaran.
Tila isang over-engineered na solusyon sa akin.
Mga artifact sa nakaimbak sa blob. Sa kaganapan ng biglaang pagkawala ng kuryente, hindi mo maibabalik ang blob kung wala kang backup. Nagkaroon kami ng error na ito:
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. Hindi na nakuhang muli ang blob.
Source code
→ Ang source code ay matatagpuan
Ang pangunahing script ay ganito ang hitsura:
#!/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 &Instalasyon
Gumagana lamang ang Inotify-createrepo sa CentOS 7 o mas mataas pa. Naka-on CentOS Hindi ito mapagana ng 6.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepoConfiguration
Bilang default, sinusubaybayan ng inotify-createrepo ang isang direktoryo /var/www/repos/rpm-repo/.
Maaari mong baguhin ang direktoryo na ito sa file /etc/inotify-createrepo.conf.
Gamitin
Kapag nagdaragdag ng anumang file sa isang direktoryo /var/www/repos/rpm-repo/ lilikha ng file ang inotifywait /tmp/need_create. Ang run_createrepo function ay tumatakbo sa isang walang katapusang loop at sinusubaybayan ang file /tmp/need_create. Kung ang file ay umiiral, pagkatapos ay tumakbo createrepo --update.
May lalabas na entry 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:00Kakayahang gumawa ng mataas na kakayahang magamit
Upang magkaroon ng mataas na kakayahang magamit mula sa isang umiiral na solusyon, sa tingin ko maaari kang gumamit ng 2 server, Keepalived para sa HA at Lsyncd para sa pag-synchronize ng artifact. - isang daemon na sinusubaybayan ang mga pagbabago sa lokal na direktoryo, pinagsasama-sama ang mga ito, at pagkatapos ng isang tiyak na oras, ang rsync ay magsisimulang i-synchronize ang mga ito. Ang mga detalye at setting ay inilarawan sa post na "".
WebDav
Mayroong ilang mga paraan upang mag-upload ng mga file: SSH, NFS, WebDav. Ang WebDav ay tila isang moderno at simpleng opsyon.
Para sa WebDav, gagamitin namin ang Apache httpd. Bakit Apache httpd sa 2020 at hindi nginx?
Gusto kong gumamit ng mga automated na tool para sa pagbuo ng Nginx + modules (halimbawa, Webdav).
Mayroong isang proyekto para sa pagbuo ng Nginx + modules - . Kung gumagamit ka ng nginx + wevdav upang mag-upload ng mga file, kailangan mo ng isang module . Kapag sinusubukang bumuo at gumamit ng Nginx sa sa tulong magkakaroon tayo ng error . Ang parehong bug ay sarado noong tag-araw .
Nag-pull request ako и . Ngunit hindi sila tinanggap.
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 tingin ko ikaw mismo ang gagawa ng natitirang configuration ng Apache httpd.
Nginx sa harap ng Apache httpd
Hindi tulad ng Apache, ang Nginx ay gumagamit ng modelo ng pagpoproseso ng kahilingan na batay sa kaganapan, na nangangahulugang isang proseso ng HTTP server lamang ang kinakailangan para sa anumang bilang ng mga kliyente. Maaari mong gamitin ang nginx at bawasan ang pag-load ng server.
nginx-front.conf config. Sa tingin ko ikaw mismo ang gagawa ng natitirang configuration ng nginx.
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;
}
}Nagda-download ng mga file sa pamamagitan ng WebDav
Ang pag-download ng rpm ay napakadali.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://ваш-виртуальный-хост/rpm/Pinagmulan: www.habr.com
