Рабочая версия checkinstall

Что я делаю

Я пытаюсь собрать пакет deb из скомпилированной версии qt.

Где я нахожусь:

$ wget http://download.qt.io/official_releases/qt/5.10/5.10.0/single/qt-everywhere-src-5.10.0.tar.xz
$ tar -xf qt-everywhere-src-5.10.0.tar.xz ~/src/qt
$ cd ~/src/qt/qt-everywhere-src-5.10.0
$ ./configure --prefix=/opt/sim-qt --opensource --confirm-license --skip qtcharts --skip qtvirtualkeyboard --skip qtdatavis3d --silent --nomake examples --nomake tests
$ make

Если я бегу sudo make installвсе устанавливается нормально, но мне нужен пакет.deb, чтобы другие люди в моей организации также могли устанавливать те же двоичные файлы без необходимости повторной компиляции.

Проблемный шаг:

Я прочитал, что инструмент, который я должен использовать, checkinstall, Я старался checkinstall с простым примером helloworld, и все, казалось, было хорошо. Это идеальная ситуация и именно то, что я ожидал. Однако, когда я пытаюсь установить этот проект Qt, я получаю такие ошибки:

$ checkinstall -D --install=no --pkgname=sim-qt --pkgversion=5.10.0 --pkgrelease=0 --pkglicense=LGPL --nodoc
...
/home/stew/src/qt/qt-everywhere-src-5.10.0/qtbase/bin/qmake -install qinstall /home/stew/src/qt/qt-everywhere-src-5.10.0/qtbase/include/QtGui/QDragLeaveEvent /opt/sim-qt/include/QtGui/QDragLeaveEvent
Error copying /home/stew/src/qt/qt-everywhere-src-5.10.0/qtbase/include/QtGui/QDragLeaveEvent to /opt/sim-qt/include/QtGui/QDragLeaveEvent: Cannot create /opt/sim-qt/include/QtGui/QDragLeaveEvent for output
Makefile:69204: recipe for target 'install_class_headers' failed
make[3]: [install_class_headers] Error 3 (ignored)
...

Выявление проблемы:

Похоже, это старая ошибка с checkinstall, существующая как минимум с 2007 года (это был самый старый отчет, который я смог найти).

Попытка обойти:

Некоторые люди рекомендуют использовать --fstrans=noи когда я это делаю, я вижу, что теперь я могу по крайней мере установить папки, но все файлы не могут быть развернуты:

$ checkinstall -D --install=no --pkgname=sim-qt --pkgversion=5.10.0 --pkgrelease=0 --pkglicense=LGPL --nodoc --fstrans=no
...
/home/stew/src/qt/qt-everywhere-src-5.10.0/qtbase/bin/qmake -install qinstall /home/stew/src/qt/qt-everywhere-src-5.10.0/qttranslations/translations/qtscript_en.qm /opt/sim-qt/translations/qtscript_en.qm
Error copying /home/stew/src/qt/qt-everywhere-src-5.10.0/qttranslations/translations/qtscript_en.qm to /opt/sim-qt/translations/qtscript_en.qm: Cannot create /opt/sim-qt/translations/qtscript_en.qm for output
Makefile:2841: recipe for target 'install_translations' failed
make[2]: [install_translations] Error 3 (ignored)
...

Что дальше:

Здесь все, кажется, останавливаются. Если checkinstall в течение 11 лет у меня была чокнутая ошибка, которая делала его совершенно бесполезным, тогда я предположил бы, что его больше не будет. Но это так. Так что я упускаю обходной путь, который люди, кажется, находят. В противном случае я запутался в том, что делать дальше.

Как люди упаковывают файлы deb?

Я нашел этот учебник для Ubuntu. Но это предполагает, что вы используете bzr Canonical для системы контроля версий и используете VCS как часть ее работы? Я не планирую отправлять этот пакет в Ubuntu, и поэтому я не очень понимаю, почему в инструкции также включены bzr commit... и прочее.

Я также нашел этот учебник для Debain. Мне нравится это, потому что это не полагается на какую-то странную систему контроля версий, автоматически генерирующую вещи. Но, похоже, также предполагается, что у меня есть предварительный debianized исходный архив tar.gz, и я собираюсь отправить пакеты в debian. Это также предполагает, что я не хочу добавлять какие-либо параметры в ./configure что неверно Я попытался добавить параметры общей линии в debian/rules в override_dh_auto_configure раздел, но я не могу сказать, работает ли он, так как все, кажется, сбоит около 10000 строк, прежде чем я получу обратно командную строку.

Вот еще одно руководство по этой теме, но для этого требуется, чтобы у вас был ключ gpg, и я ожидаю, что мой репозиторий apt справится, когда я представлю пакет deb в репозиторий apt. При запуске через это решение у меня также были проблемы со сборкой сбой. Поскольку он печатает десятки тысяч строк, я не могу сказать, где и почему он не работает. Только это dh_auto_clean: make -j10 clean returned exit code 2

По сути, я хотел что-то вроде checkinstall, просто без серьезной ошибки, которая мешает ему работать. То, что я получаю, это неработающий checkinstall и три альтернативных метода, каждый из которых потребует от меня полной недели на устранение неисправностей (я уже потратил несколько дней). Есть ли способ исправить checkinstall или использовать решение из 2-3 команд, чтобы перейти от моего решения "make" к решению.deb?

Обычно я использую cpack для создания своих пакетов deb, но так как этот источник использует autoconf, я немного застрял в том, как действовать дальше.

1 ответ

Решение

Получается что checkinstall на самом деле работал. Проблема была в проекте, который я пытался установить. checkinstall (как dh_make) устанавливает DESTDIR=some/temp/location в течение make install шаг.

Этот проект использует qmakeи Makefile, сгенерированный qmake не понимает DESTDIR директивы. Вместо INSTALL_ROOT требовалось

Я в конечном итоге с помощью dh_make и жестко закодированы override_dh_auto_install установить INSTALL_ROOT вручную вместо DESTDIR,

dh_make Команда генерирует файлы правил, необходимые для настройки, сборки, установки и упаковки проекта.

После запуска dh_makeотредактируйте вновь сгенерированный debian/rules файл выглядит так:

#!/usr/bin/make -f
%:
    dh $@  --with autotools-dev --parallel
override_dh_auto_configure:
    ./configure --prefix=/opt/sim-qt --opensource --confirm-license --skip=qtcharts --skip=qtvirtualkeyboard --skip=qtdatavis3d --skip=qtwebengine --silent --nomake=examples --nomake=tests QMAKE_ARGS+=INSTALL_ROOL=/opt/sim-qt QMAKE_ARGS+=DESTDIR=

override_dh_auto_install:
    dh_auto_install -Smakefile -- INSTALL_ROOT=$(CURDIR)/debian/sim-qt/

Затем настройте, соберите и упакуйте одну команду:

fakeroot dpkg-buildpackage -nc -j10 -us -uc
Другие вопросы по тегам