Простий rpm репозиторій використовуючи Inotify та webdav
У цьому пості розглянемо сховище rpm артефактів за допомогою простого скрипту з inotify + createrepo. Заливка артефактів здійснюється через webdav, використовуючи apache httpd. Чому apache httpd буде написано ближче до кінця посту.
Отже, рішення має відповідати наступним вимогам для організації тільки RPM сховища:
Безкоштовне
Доступність пакета в репозиторії за кілька секунд після завантаження в сховище артефактів.
Просте в установці та обслуговуванні
Можливість зробити високу доступність (high availability)
Артефакти у 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 так і не відновили.
За замовчуванням 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.
Можливість зробити високу доступність (high availability)
Щоб зробити високу доступність (high availability) з існуючого рішення, думаю можна використовувати 2 сервери, Keepalived для HA і Lsyncd для синхронізації артефактів. Lsyncd — демон, який стежить за змінами в локальній директорії, агрегує їх, і після певного часу стартує rsync для їхньої синхронізації. Подробиці та налаштування описані в пості "Швидкісна синхронізація мільярда файлів".
WebDav
Завантажувати файли можна кількома способами: SSH, NFS, WebDav. WebDav здається сучасним та простим варіантом.
Для WebDav будемо використовувати Apache httpd. Чому Apache httpd у 2020 році, а не nginx?
Хочеться використовувати автоматизовані засоби для збирання Nginx + модулі (наприклад, Webdav).
Решта налаштування Apache httpd я думаю ви зробите самі.
Nginx перед Apache httpd
На відміну від Apache, Nginx використовує подію модель обробки запитів, завдяки чому на будь-яку кількість клієнтів потрібно лише один процес HTTP-сервера. Ви можете використовувати nginx та знизити навантаження на сервер.
Конфіг nginx-front.conf. Решта налаштування nginx я думаю ви зробите самі.