Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ rpm Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² c ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ° Ρ inotify + createrepo. ΠΠ°Π»ΠΈΠ²ΠΊΠ° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· webdav ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ apache httpd. ΠΠΎΡΠ΅ΠΌΡ apache httpd Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠ½ΡΡ ΠΏΠΎΡΡΠ°.
ΠΡΠ°ΠΊ, ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΠ²Π΅ΡΠ°ΡΡ cΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ RPM Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°:
-
ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠ΅
-
ΠΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ².
-
ΠΡΠΎΡΡΠΎΠ΅ Π² ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ
-
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΡΠΎΠΊΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ (high availability)
ΠΠΎΡΠ΅ΠΌΡ Π½Π΅
SonaType Nexus ΠΈΠ»ΠΈPulp : -
Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π²
SonaType Nexus ΠΈΠ»ΠΈPulp ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ ΡΡΠΎSonaType Nexus ΠΈΠ»ΠΈPulp ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ ΠΎΡΠΊΠ°Π·Π°. -
ΠΡΡΠΎΠΊΠ°Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ (high availability) Π²
SonaType Nexus ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ»Π°ΡΠ½ΠΎΠΉ. -
Pulp ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. -
ΠΡΡΠ΅ΡΠ°ΠΊΡΡ Π²
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 Π΄Π»Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ².
WebDav
ΠΠ°Π³ΡΡΠΆΠ°ΡΡ ΡΠ°ΠΉΠ»Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΡΡΠΌΠΈ: SSH, NFS, WebDav. WebDav ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈ ΠΏΡΠΎΡΡΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ.
ΠΠ»Ρ WebDav Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Apache httpd. ΠΠΎΡΠ΅ΠΌΡ Apache httpd Π² 2020 Π³ΠΎΠ΄Ρ, Π° Π½Π΅ nginx?
Π₯ΠΎΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Nginx + ΠΌΠΎΠ΄ΡΠ»ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Webdav).
ΠΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎ ΡΠ±ΠΎΡΠΊΠ΅ Nginx + ΠΌΠΎΠ΄ΡΠ»ΠΈ β
Π― Π΄Π΅Π»Π°Π» Pull request
ΠΠΎΠ½ΡΠΈΠ³ 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
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Apache, Nginx ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠΉΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ², Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅ΠΌΡ Π½Π° Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ HTTP-ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ nginx ΠΈ ΡΠ½ΠΈΠ·ΠΈΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ.
ΠΠΎΠ½ΡΠΈΠ³ nginx-front.conf. ΠΡΡΠ°Π»ΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ 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;
}
}
ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ΅ΡΠ΅Π· WebDav
ΠΠ°Π³ΡΡΠ·ΠΊΠ° rpm ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°Ρ.
curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://Π²Π°Ρ-Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ-Ρ
ΠΎΡΡ/rpm/
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com