drh.sh - скрипт-помощник для измученных Нарзаном centos программистов, помогающий запаковать django-проект в RPM.
- это красиво;
- обновление и откат «в один клик»;
- общедоступная команда с именем проекта для быстрого доступа к manage-командам, например для проекта superprogramm: ~ superprogramm syncdb;
- init.d скрипты для всех ваших демонов типа gunicorn, celery и т.п.;
- не надо думать как правильно развернуть окружение для сборки rpm на build-машине;
- не надо следить за состоянием virtualenv и наличием необходимых пакетов;
- конфиги и логи как у больших.
Вам понадобится django-проект, в корне которого помимо кода должны располагаться:
- файл requirements.txt // со списком пакетов для pip
- файл build_requirements.txt // со списком rpm-пакетов, необходимых для сборки пакетов из предыдущего пункта
- файл changelog.txt // первой строкой, которого должна быть актуальная версия
- директория share
- файл website.spec // пример, для которого можно взять из share_examples
- файл django.conf // шаблон джанговского конфига для использования с configparser
- файл gunicorn.conf // шаблон конфига для gunicorn'а
- директория bin
- *.inid.sh // для ваших init.d скриптов
- manage.sh // для запуска manage.py из virtualenv после установки на целевой машине, его можно и не копировать, скрипт помощи проверяет его наличие и добавляет его, если его нет.
Спека представляет собой текстовый файлик с несколькими секциями.
- %description - описание пакета
- %prep - подготовка к построению
- %build - сборка
- %install - куда распихать файлики из пакета на целевой - системе
- %post - что делать после установки
- %files - аттрибуты и владелец файлов пакета на целевой системе
Как минимум вам понадобится изменить следующее:
- Name - наименование программы, с таким именем будет слинкован в /usr/bin бинарник для работы с вашим django-приложением
- Requires - список, пакетов, необходимых для установки на целевой системе
- Summary - суть пакета для rpm и yum
- %description - описалово пакета для rpm и yum
- %install
- добавить init.d-скрипты
- добавить конфиги
- %post
- описать действия после установки или обновления
- %preun - при установке новой версии пакета, когда старая удаляется или перед полным удалением пакета
- %postun - после удаления пакета
- %files
- доописать ваши файлы
- Склонируйте в удобное для выхова места скрипт помощи: ~ git clone https://github.com/truetug/django-rpm-helper.git test/bin
- Запустите скрипт помощи: ~ test/bin/drh.sh -s <путь до директории с кодом или гитом|адрес гит-репозитория>
- Следуйте подсказкам скрипта, пока не увидите что-то типа: Building complete
После запуска скрипт проверяет наличие virtualenv.
Далее скрипт копирует или клонирует файлы проекта из источника, заданного после опуии «-s», в свою рабочую директорию с проектами и устанавливает virtualenv с пакетами из «requirements.txt»
Если же директория «src» присутствует, скрипт из неё делает «git checkout .», а затем «git pull». Если в выводе «git pull» обнаруживается файл «requirements.txt», то проверяется наличие пакетов из «build_requirements.txt» и virtualenv обновляется.
Далее скрипт проверяет, есть ли в директории «src/bin» файл «manage.sh», который будет установлен в «/usr/bin» под именем проекта, для быстрого доступа к manage-командам проекта. Если файл не обнаружен, он будет скопирован из поставки помощника.
На следующем шаге происходит проверка наличия RPM-окружения: файла «/.rpmmacros» и директории «/rpmbuild».
Если окружение отсутствует, то скрипт проверяет установлены ли необходимые для сборки пакеты «rpm-build» и «redhat-rpm-config», а затем создаст «/.rpmmacros» и структуру директорий под «/rpmbuild».
Если окружение присутствует:
- скрипт копирует спеку из директории «src» в «rpmbuild/SPECS»
- очищает директорию с rpm'ками, что бы они не скапливались
- берёт в качестве версии первую строку файла «changelog.txt», а в качестве номера релиза текущий timestamp
- формирует команду для построения rpm: rpmbuild -bb --define "version <номер версии>" --define "release <номер релиза>" --define "source0 <путь до директории src>" --define "source1 <путь до директории env>"
- пытается собрать rpm и вывести имя получившегося файла
- Скелет для новых проектов
- Инглиш лэнгуэдж
- Что-нибудь ещё