пятница, 4 октября 2013 г.

Как запаковать программу на python а rpm-пакет

Итак, представим ситуацию: к вам в руки попала программа на python. Вы ей попользовались, она вам понравилась, и надо бы ее установить в систему, чтобы она каждый раз была под рукой. Одна закавыка: нигде не описан способ как упаковать ее в rpm. Если про deb-формат расписано на каждом углу, то про rpm нигде ни слухом ни духом. Наиболее логичным представляется выбрать одно из направлений:

1. Ничего никуда не упаковывать, просто распаковать скрипт в домашний каталог и пользовать его оттуда. Неудобно, так как нужно делать ненужные телодвижения.
2. Закинуть скрипт в $PATH и забить на последствия. А известно, что где упал один фантик, скоро будет целая свалка, так что не стоит этого делать. Воплями о том, что не стоит делать из системы помойку завален весь рунет.
3. Создать дерево каталогов и собирать rpm согласно всей науке. Тернистый путь чреватый различными граблями.

В действительности все гораздо проще. Как известно все уже украдено придумано до нас. Главное знать как это использовать  в своих целях. Если программа написана по ГОСТу, то в распакованном каталоге должен находится файл setup.py, он то нам и нужен. Итак, пишем в консоли:

$ python setup.py bdist --format=rpm

Итак, последует выхлоп в консоли в данной директории будет создано дерево каталогов, произойдет автоматическая сборка rpm-пакета, *.src.rpm и будет создан spec-файл. Вот, все проще некуда! Однако это еще не все; доступны следующие форматы пакетов:
gztar    загзиппованный так-файл .tar.gz
ztar       сжатый тар-файл .tar.z
tar         тар-файл .tar
zip        соответственно zip-архив :)
rpm      Наш любимый формат rpm
pkgtool Это не для слаквари, а для Solaris
sdux    хз, что такое, однако в документации сказано, что для HP-UX
wininst самораспаковывающийся архив для windows
msi      инсталлятор windows

Если по каким-либо причинам вам в лом набирать такую длинную команду --format=чего-то там, то спешу обрадовать, есть более короткий путь, ведь автоматизация не стоит на месте. Можно написать проще:

bdist_rpm

и обе rpm-ки будут лежать в данном каталоге.
Если в Вас есть жажда славы, то можно увековечить свое имя мэнтейнера в данном пакете. Хоть один фиг никто его читать не будет, но все-равно приятно

python setup.py bdist_rpm --packager="Johnny Go <go@fucker.org>"

Вот такие дела :)