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

$ 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 файлы?

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

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

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

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

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

1
задан 13 March 2018 в 08:42

1 ответ

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

Этот проект использование qmake, и Make-файл, сгенерированный 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
1
ответ дан 11 November 2019 в 01:08

Другие вопросы по тегам:

Похожие вопросы: