Я пытаюсь создать 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, я немного застреваю с тем, как продолжить двигаться.
Оказывается этим 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