Skip to content

truetug/django-rpm-helper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

django-rpm-helper

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 после установки на целевой машине, его можно и не копировать, скрипт помощи проверяет его наличие и добавляет его, если его нет.

Про SPEC'у

Спека представляет собой текстовый файлик с несколькими секциями.

  • %description - описание пакета
  • %prep - подготовка к построению
  • %build - сборка
  • %install - куда распихать файлики из пакета на целевой - системе
  • %post - что делать после установки
  • %files - аттрибуты и владелец файлов пакета на целевой системе

Как минимум вам понадобится изменить следующее:

  • Name - наименование программы, с таким именем будет слинкован в /usr/bin бинарник для работы с вашим django-приложением
  • Requires - список, пакетов, необходимых для установки на целевой системе
  • Summary - суть пакета для rpm и yum
  • %description - описалово пакета для rpm и yum
  • %install
    • добавить init.d-скрипты
    • добавить конфиги
  • %post
    • описать действия после установки или обновления
  • %preun - при установке новой версии пакета, когда старая удаляется или перед полным удалением пакета
  • %postun - после удаления пакета
  • %files
    • доописать ваши файлы

Поехали

  1. Склонируйте в удобное для выхова места скрипт помощи: ~ git clone https://github.com/truetug/django-rpm-helper.git test/bin
  2. Запустите скрипт помощи: ~ test/bin/drh.sh -s <путь до директории с кодом или гитом|адрес гит-репозитория>
  3. Следуйте подсказкам скрипта, пока не увидите что-то типа: 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 и вывести имя получившегося файла

Планы

  • Скелет для новых проектов
  • Инглиш лэнгуэдж
  • Что-нибудь ещё

About

Tool and examples for build django projects as RPM

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages