Dalam siaran ini kita akan melihat storan artifak rpm menggunakan skrip mudah dengan inotify + createrepo. Memuat naik artifak dilakukan melalui webdav menggunakan apache httpd. Mengapa apache httpd akan ditulis pada penghujung siaran.
Jadi, penyelesaian mesti memenuhi keperluan berikut untuk mengatur storan RPM sahaja:
Percuma
Ketersediaan pakej dalam repositori beberapa saat selepas memuat naik ke repositori artifak.
Mudah dipasang dan diselenggara
Keupayaan untuk membuat ketersediaan yang tinggi
Kenapa tidak atau :
Penyimpanan dalam atau banyak jenis artifak membawa kepada hakikat bahawa atau menjadi satu titik kegagalan.
Ketersediaan tinggi dalam telah dibayar.
Nampaknya saya seperti penyelesaian yang terlalu rumit.
Artifak dalam disimpan dalam gumpalan. Jika berlaku gangguan bekalan elektrik secara tiba-tiba, anda tidak akan dapat memulihkan gumpalan jika anda tidak mempunyai sandaran. Kami mempunyai ralat ini:
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 tidak pernah dipulihkan.
Kod sumber
→ Kod sumber terletak
Skrip utama kelihatan seperti ini:
#!/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 &Pemasangan
Inotify-createrepo hanya berfungsi pada CentOS 7 atau lebih tinggi. Tidak dapat membuatnya berfungsi pada CentOS 6.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepoKonfigurasi
Secara lalai, inotify-createrepo memantau direktori /var/www/repos/rpm-repo/.
Anda boleh menukar direktori ini dalam fail /etc/inotify-createrepo.conf.
Gunakan
Apabila menambah sebarang fail pada direktori /var/www/repos/rpm-repo/ inotifywait akan mencipta fail /tmp/need_create. Fungsi run_createrepo berjalan dalam gelung yang tidak berkesudahan dan memantau fail /tmp/need_create. Jika fail wujud, ia berjalan createrepo --update.
Entri akan muncul dalam fail:
/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:00Keupayaan untuk membuat ketersediaan yang tinggi
Untuk membuat ketersediaan tinggi daripada penyelesaian sedia ada, saya rasa anda boleh menggunakan 2 pelayan, Keepalived untuk HA dan Lsyncd untuk menyegerakkan artifak. - daemon yang memantau perubahan dalam direktori tempatan, mengagregatkannya, dan selepas masa tertentu rsync mula menyegerakkannya. Butiran dan persediaan diterangkan dalam siaran "".
WebDAV
Anda boleh memuat naik fail dalam beberapa cara: SSH, NFS, WebDav. WebDav nampaknya merupakan pilihan yang moden dan mudah.
Untuk WebDav kami akan menggunakan Apache httpd. Mengapa Apache httpd pada tahun 2020 dan bukan nginx?
Saya ingin menggunakan alat automatik untuk membina modul Nginx + (contohnya, Webdav).
Terdapat projek untuk membina modul Nginx + - . Jika anda menggunakan nginx + wevdav untuk memuat naik fail, anda memerlukan modul . Apabila cuba membina dan menggunakan Nginx dengan dengan cara kita akan mendapat ralat . Pepijat yang sama telah ditutup pada musim panas .
Saya membuat permintaan Tarik и . Tetapi mereka tidak diterima.
Konfigurasi 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>Saya rasa anda boleh melakukan seluruh persediaan httpd Apache sendiri.
Nginx sebelum Apache httpd
Tidak seperti Apache, Nginx menggunakan model pemprosesan permintaan berasaskan peristiwa, yang memerlukan hanya satu proses pelayan HTTP untuk sebarang bilangan pelanggan. Anda boleh menggunakan nginx dan mengurangkan beban pada pelayan.
Konfigurasi nginx-front.conf. Saya fikir anda boleh melakukan baki persediaan nginx sendiri.
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;
}
}Memuat naik fail melalui WebDav
Memuatkan rpm adalah sangat mudah.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://ваш-виртуальный-хост/rpm/Sumber: www.habr.com
