¿Qué estoy haciendo?

¿Qué estoy haciendo?

¿Qué estoy haciendo?

Estoy intentando crear un paquete deb de una versión compilada de qt.

Donde estoy:

$ 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

Si ejecuto sudo make install, todo se instala bien, pero necesito un paquete .deb para que otras personas de mi organización también puedan instalar los mismos binarios sin necesidad de volver a compilar.

El paso problemático:

He leído que la herramienta que debo utilizar es checkinstall. Lo intenté checkinstallcon un ejemplo simple de HelloWorld y todo pareció ir bien. Esta es la situación perfecta y es exactamente lo que esperaba. Sin embargo, cuando intento instalar este proyecto Qt, aparece errores como este:

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

Identificando el problema:

Parece que esto es unviejo errorcon checkinstall que existe desde al menos 2007 (ese fue el informe más antiguo que pude encontrar).

Probando una solución alternativa:

Algunas personas recomendaron usar --fstrans=no, y cuando lo hago veo que ahora al menos puedo instalar carpetas, pero todos los archivos no se implementan:

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

Que sigue:

Aquí es donde todo el mundo parece detenerse. Si checkinstalltuviera un error paralizante durante 11 años que lo hiciera totalmente inútil, entonces me imagino que ya no existiría. Pero lo hace. Así que me estoy perdiendo la solución que la gente parece estar encontrando. De lo contrario, no sé qué hacer a continuación.

¿Cómo empaquetan las personas los archivos deb?

encontré estotutorial para ubuntu. ¿Pero se supone que está utilizando el bzr de Canonical para un sistema de control de versiones y utiliza el VCS como parte de su operación? No planeo enviar este paquete a Ubuntu, por lo que realmente no entiendo por qué las instrucciones también incluyen bzr commit...esas cosas.

También encontré estotutorial para debain. Me gusta porque no depende de ningún extraño sistema de control de versiones que genere cosas automáticamente. Pero también parece suponer que tengo archivos fuente tar.gz predebianizados y tengo la intención de enviar los paquetes a Debian. También supone que no quiero agregar ningún parámetro que ./configuresea falso. Intenté agregar parámetros de línea común debian/rulesen la override_dh_auto_configuresección, pero no puedo decir si está funcionando ya que todo parece estar fallando alrededor de 10000 líneas antes de recuperar mi símbolo del sistema.

Aquí estáotro tutorial sobre el temapero este requiere que tengas una clave gpg, algo que espero que mi repositorio de apt maneje cuando reproduzca el paquete deb en el repositorio de apt. Al ejecutar esta solución, también tuve problemas con la compilación fallida. Debido a que imprime decenas de miles de líneas, no puedo decir dónde ni por qué está fallando. Sólo esodh_auto_clean: make -j10 clean returned exit code 2

Básicamente, quería algo exactamente como checkinstall, sólo que sin un error paralizante que impidiera que funcionara. Lo que obtengo es la instalación de verificación fallida y tres métodos alternativos, todos los cuales requerirán que invierta toda mi semana en solucionar problemas (ya he pasado varios días). ¿Hay alguna manera de arreglar checkinstall o de tener una solución de 2 o 3 comandos para pasar de mi solución "make" a una solución .deb?

Normalmente uso cpack para crear mis paquetes deb, pero como esta fuente usa autoconf, no sé cómo proceder.

Respuesta1

Resulta que eso checkinstallrealmente estaba funcionando. El problema era el proyecto que estaba intentando instalar. checkinstall (como dh_make) se establece DESTDIR=some/temp/locationdurante el make installpaso.

Este proyecto utiliza qmakey el Makefile generado por qmakeno comprende la DESTDIRdirectiva. En cambio, INSTALL_ROOTera necesario.

Terminé usando dh_makeun código fijo override_dh_auto_installpara configurarlo INSTALL_ROOTmanualmente en lugar de DESTDIR.

El dh_makecomando genera archivos de reglas necesarios para configurar, compilar, instalar y empaquetar el proyecto.

Después de ejecutar dh_make, edite el archivo recién generado debian/rulespara que tenga este aspecto:

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

Luego configure, construya y empaquete con un solo comando:

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

información relacionada