O que estou fazendo:

O que estou fazendo:

O que estou fazendo:

Estou tentando construir um pacote deb de uma versão compilada do qt.

Onde estou:

$ 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

Se eu executar sudo make install, tudo será instalado corretamente, mas preciso de um pacote .deb para que outras pessoas na minha organização também possam instalar os mesmos binários sem a necessidade de recompilar.

A etapa problemática:

Eu li que a ferramenta que devo usar é o checkinstall. Tentei checkinstallcom um exemplo simples de helloworld e tudo parecia estar bem. Esta é a situação perfeita e é exatamente o que eu esperava. No entanto, quando tento instalar este projeto Qt, recebo erros 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 o problema:

Parece que isso é umbug antigocom checkinstall que existe desde pelo menos 2007 (esse foi o relatório mais antigo que consegui encontrar).

Tentando uma solução alternativa:

Algumas pessoas recomendaram usar --fstrans=no, e quando faço isso vejo que agora posso pelo menos instalar pastas, mas todos os arquivos falham na implantação:

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

Qual é o próximo:

É aqui que todos parecem parar. Se checkinstallhouvesse um bug incapacitante por 11 anos que o tornasse totalmente inútil, então eu imaginaria que ele não existiria mais. Mas acontece. Portanto, estou sentindo falta da solução alternativa que as pessoas parecem estar encontrando. Caso contrário, estou confuso sobre o que fazer a seguir.

Como as pessoas empacotam arquivos deb?

Eu achei istotutorial para Ubuntu. Mas pressupõe que você esteja usando o bzr da Canonical para um sistema de controle de versão e use o VCS como parte de sua operação? Não estou planejando enviar este pacote para o Ubuntu e, portanto, não entendo por que as instruções também incluem bzr commit...essas coisas.

Eu também encontrei issotutorial para debater. Eu gosto porque não depende de algum sistema estranho de controle de versão que gere coisas automaticamente. Mas também parece assumir que eu pré-debianizei os arquivos fonte tar.gz e pretendo enviar os pacotes para o debian. Também pressupõe que não desejo adicionar nenhum parâmetro que ./configureseja falso. Tentei adicionar parâmetros de linha comum debian/rulesna override_dh_auto_configureseção, mas não sei dizer se está funcionando, pois tudo parece estar falhando em cerca de 10.000 linhas antes de receber meu prompt de comando de volta.

Aqui estámais um tutorial sobre o assuntomas este requer que você tenha uma chave gpg, algo que espero que meu repositório apt lide quando eu reprepro o pacote deb para o repositório apt. Ao executar esta solução, também tive problemas com falha na compilação. Como ele imprime dezenas de milhares de linhas, não sei dizer onde/por que está falhando. Só issodh_auto_clean: make -j10 clean returned exit code 2

Basicamente, eu queria algo exatamente como checkinstall, mas sem um bug incapacitante que o impedisse de realmente funcionar. O que estou recebendo é o checkinstall quebrado e três métodos alternativos, os quais exigirão que eu invista minha semana inteira na solução de problemas (já passei vários dias). Existe uma maneira de corrigir o checkinstall ou de ter uma solução de comando 2-3 para passar da minha solução "make" para uma solução .deb?

Normalmente eu uso cpack para fazer meus pacotes deb, mas como essa fonte usa autoconf, estou um pouco sem saber como proceder.

Responder1

Acontece que isso checkinstallestava realmente funcionando. O problema era o projeto que eu estava tentando instalar. checkinstall (como dh_make) é definido DESTDIR=some/temp/locationdurante a make installetapa.

Este projeto usa qmake, e o Makefile gerado por qmakenão entende a DESTDIRdiretiva. Em vez disso, INSTALL_ROOTfoi necessário.

Acabei usando dh_makee codifiquei override_dh_auto_installpara definir INSTALL_ROOTmanualmente em vez de DESTDIR.

O dh_makecomando gera arquivos de regras necessários para configurar, construir, instalar e empacotar o projeto.

Depois de executar dh_make, edite o arquivo recém-gerado debian/rulespara ficar assim:

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

Em seguida, configure, construa e empacote com um comando:

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

informação relacionada