Was ich mache:

Was ich mache:

Was ich mache:

Ich versuche, ein Deb-Paket einer kompilierten Version von Qt zu erstellen.

Wo ich bin:

$ 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

Wenn ich ausführe sudo make install, läuft die Installation reibungslos, ich benötige jedoch ein .deb-Paket, damit auch andere Personen in meiner Organisation dieselben Binärdateien installieren können, ohne sie erneut kompilieren zu müssen.

Der problematische Schritt:

Ich habe gelesen, dass ich das Tool verwenden sollte checkinstall. Ich habe es checkinstallmit einem einfachen HelloWorld-Beispiel versucht und alles schien in Ordnung zu sein. Das ist die perfekte Situation und genau das, was ich erwartet habe. Wenn ich jedoch versuche, dieses Qt-Projekt zu installieren, erhalte ich Fehler wie diese:

$ 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)
...

Identifiziere das Problem:

Es klingt, als wäre dies einalter Fehlermit checkinstall, das seit mindestens 2007 existiert (das war der älteste Bericht, den ich finden konnte).

Versuch einer Problemumgehung:

Einige Leute haben empfohlen, zu verwenden --fstrans=no. Wenn ich das mache, sehe ich, dass ich jetzt zwar zumindest Ordner installieren kann, die Bereitstellung aller Dateien jedoch fehlschlägt:

$ 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)
...

Was kommt als nächstes:

Hier scheinen alle aufzuhören. Wenn checkinstalles seit 11 Jahren einen lähmenden Bug gäbe, der es völlig nutzlos macht, würde ich annehmen, dass es nicht mehr existiert. Aber das tut es. Also fehlt mir die Problemumgehung, die die Leute anscheinend finden. Ansonsten bin ich verwirrt, was ich als nächstes tun soll.

Wie verpacken die Leute Deb-Dateien?

ich habe das gefundenTutorial für Ubuntu. Aber es wird davon ausgegangen, dass Sie Canonicals bzr als Versionskontrollsystem verwenden und das VCS als Teil seines Betriebs nutzen? Ich habe nicht vor, dieses Paket auf Ubuntu zu übertragen, und verstehe daher nicht wirklich, warum die Anweisungen auch solche bzr commit...Dinge enthalten.

Ich fand auch diesTutorial für Debain. Mir gefällt es, weil es nicht auf einem seltsamen Versionskontrollsystem basiert, das automatisch Dinge generiert. Aber es scheint auch anzunehmen, dass ich vordebianisierte Tar.gz-Quellarchive habe und beabsichtige, die Pakete an Debian zu übermitteln. Es geht auch davon aus, dass ich keine Parameter hinzufügen möchte, was ./configurefalsch ist. Ich habe versucht, allgemeine Zeilenparameter debian/rulesin den override_dh_auto_configureAbschnitt einzufügen, aber ich kann nicht sagen, ob es funktioniert, da alles nach etwa 10.000 Zeilen fehlschlägt, bevor ich meine Eingabeaufforderung zurückbekomme.

Hier istein weiteres Tutorial zum Themaaber dafür benötigen Sie einen GPG-Schlüssel, und ich erwarte, dass mein Apt-Repository damit umgehen kann, wenn ich das Deb-Paket erneut in das Apt-Repository übertrage. Beim Durchlaufen dieser Lösung hatte ich auch Probleme mit dem fehlgeschlagenen Build. Da es Zehntausende von Zeilen ausgibt, kann ich nicht sagen, wo/warum es fehlschlägt. Nur dasdh_auto_clean: make -j10 clean returned exit code 2

Im Grunde wollte ich etwas genau wie checkinstall, nur ohne einen lähmenden Fehler, der verhindert, dass es tatsächlich funktioniert. Was ich bekomme, ist das defekte checkinstall und drei alternative Methoden, die alle erfordern, dass ich meine ganze Woche in die Fehlerbehebung investiere (ich habe bereits mehrere Tage damit verbracht). Gibt es eine Möglichkeit, checkinstall zu reparieren oder eine Lösung mit 2-3 Befehlen, um von meiner „Make“-Lösung zu einer .deb-Lösung zu gelangen?

Normalerweise verwende ich cpack zum Erstellen meiner Deb-Pakete, aber da diese Quelle Autoconf verwendet, weiß ich nicht so recht, wie ich weiter vorgehen soll.

Antwort1

Es stellte sich heraus, dass es checkinstalltatsächlich funktionierte. Das Problem war das Projekt, das ich installieren wollte. checkinstall (wie dh_make) wird DESTDIR=some/temp/locationwährend des make installSchritts gesetzt.

Dieses Projekt verwendet qmake, und das von generierte Makefile qmakeversteht die Direktive nicht DESTDIR. Stattdessen INSTALL_ROOTwar es erforderlich.

Ich habe schließlich dh_makeund fest codiert verwendet override_dh_auto_install, um die manuelle Einstellung vorzunehmen, INSTALL_ROOTanstatt DESTDIR.

Der dh_makeBefehl generiert Regeldateien, die zum Konfigurieren, Erstellen, Installieren und Verpacken des Projekts erforderlich sind.

Bearbeiten Sie nach dem Ausführen dh_makedie neu generierte debian/rulesDatei so, dass sie wie folgt aussieht:

#!/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/

Anschließend konfigurieren, erstellen und verpacken Sie mit einem Befehl:

fakeroot dpkg-buildpackage -nc -j10 -us -uc

verwandte Informationen