Сборка пакетов 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
Теперь бинарник будет использовать именно эти библиотеки, даже если в системе установлена другая их версия. Вообще, это тоже не есть хороший способ. Теоретически нужно пользоваться библиотеками, которые установлены у пользователя и не возить с собой весь этот хлам. Однако я рассчитывал на то, что у пользователя может стоять довольно старая версия 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-е число версии.
Исходные данные
Я сделал программу для экзаменирования пользователей в форме тестов и дал её название 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-е число версии.
Собранные пакеты вполне успешно ставятся в различных дистрибутивах.
Комментарии
Отправить комментарий