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

Сборка пакетов DEB и RPM

Сегодня я вам поведаю о весьма не сложном способе сборки пакетов для операционных систем, основанных на Debian или поддерживающих deb-пакеты. Я два года назад собирал пакет своей программы для редактирования блок-схем, но потом забыл как это делается, и я прошёл весь путь заново. Сразу могу сказать, что здесь будет рассматриваться сборка не из исходных кодов с процессом компиляции, а уже из готовых бинарников. Итак, приступим.



Исходные данные
Я сделал программу для экзаменирования пользователей в форме тестов и дал её название remotetester. Программа предполагает свое существование в папке /opt/remotetester. Вот полный список файлов после установки:

/opt/remotetester/bin/remotetester
/opt/remotetester/etc/config.ini
/opt/remotetester/lib/libQtCore.so.4
/opt/remotetester/lib/libQtCore.so.4.7
/opt/remotetester/lib/libQtCore.so.4.7.4
/opt/remotetester/lib/libQtGui.so
/opt/remotetester/lib/libQtGui.so.4
/opt/remotetester/lib/libQtGui.so.4.7
/opt/remotetester/lib/libQtGui.so.4.7.4
/opt/remotetester/lib/libQtNetwork.so
/opt/remotetester/lib/libQtNetwork.so.4
/opt/remotetester/lib/libQtNetwork.so.4.7
/opt/remotetester/lib/libQtNetwork.so.4.7.4
/opt/remotetester/share/docs/README
/usr/share/applications/remotetester.desktop
/usr/share/icons/hicolor/128x128/apps/remotetester.png
/usr/share/icons/hicolor/16x16/apps/remotetester.png
/usr/share/icons/hicolor/24x24/apps/remotetester.png
/usr/share/icons/hicolor/32x32/apps/remotetester.png
/usr/share/icons/hicolor/48x48/apps/remotetester.png
/usr/share/icons/hicolor/64x64/apps/remotetester.png

Файлы, помеченные курсивом - это символические ссылки на библиотеку. По-хорошему нужно было сделать статическую линковку и не таскать с собой эти довольно тяжелые библиотеки, но мне нужен был и такой опыт . Чтобы программа знала, где искать библиотеки я в Qt-проекте remotetester.pro добавил следующие строки:

unix:{
  QMAKE_LFLAGS += -Wl,--rpath=/opt/remotetester/lib/
  QMAKE_LFLAGS_RPATH=
}


Теперь бинарник будет использовать именно эти библиотеки, даже если в системе установлена другая их версия. Вообще, это тоже не есть хороший способ. Теоретически нужно пользоваться библиотеками, которые установлены у пользователя и не возить с собой весь этот хлам. Однако я рассчитывал на то, что у пользователя может стоять довольно старая версия Linux и установленная версия Qt может оказаться несовместимой с моей программой.


Сборка DEB-пакета
Для того, чтобы собрать пакет нужно воссоздать всю структуру файлов и папок в какой-нибудь временной папке. Допустим, что папка будет называться /home/viktor-zin/remotetester.
В корне нужно создать папку DEBIAN (именно большими буквами). Внутри этой папки создать файл control (без расширения):


Source:  remotetester
Version:  1.0.0
Section:  main
Priority:  extra
Maintainer:  Victor Zinkevich <vicking@yandex.ru>
Homepage:  http://viktor-zin.blogspot.com
Package:  remotetester
Installed-Size: 15683570
Architecture:  i386
Depends:  libstdc++6, libgcc1, libc6
Description: Program for remote examing of users.
 This program allows to exam user remotly.
 .
 Homepage: http://viktor-zin.blogspot.com

Теоретически всё. Осталось выполнить пару команд:

$ cd /home/viktor-zin
$ dpkg -b ./remotetester remotetester-1.0.0_i386.deb

В рабочей папке будет лежать на DEB-пакет, готовый к установке.

Сборка RPM-пакета
Собрать пакет RPM по классической схеме весьма не просто. Однако, есть такая программа alien, которая позволяет преобразовать пакет одного формат в пакет другого формата. В нашем случае нужно выполнить следующую команду:

$ sudo alien -r remotetester-1.0.0_i386.deb


Вот и RPM-пакет получился. Стоить заметить, что эта программа в названии пакета увеличивает 4-е число версии.

Собранные пакеты вполне успешно ставятся в различных дистрибутивах.


Комментариев нет:

Отправить комментарий