O que estou fazendo:
Estou tentando criar um pacote deb de uma versão compilada do qt.
Onde eu 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 eu 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 eu deveria usar é checkinstall
. Eu tentei checkinstall
com um exemplo simples de helloworld e as coisas pareciam estar bem. Essa é a situação perfeita e é exatamente o que eu esperava. No entanto, quando tento instalar este projeto Qt, recebo erros assim:
$ 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 este é um bug antigo com o checkinstall que existe desde então pelo menos 2007 (esse foi o relatório mais antigo que encontrei).
Tentando contornar:
Algumas pessoas recomendaram o uso de --fstrans=no
e, quando faço isso, vejo que agora posso pelo menos instalar pastas, mas os arquivos não são implantados:
$ 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)
...
O que vem a seguir:
É aqui que todo mundo parece parar. Se checkinstall
teve um bug de cripling por 11 anos, o que o torna totalmente inútil, então imagino que ele não existiria mais. Mas isso acontece. Então, eu estou sentindo falta do trabalho que as pessoas parecem estar encontrando. Caso contrário, estou confuso sobre o que fazer a seguir.
Como as pessoas empacotam arquivos deb?
Eu encontrei este tutorial para o Ubuntu . Mas assume que você está usando o bzr da Canonical para um sistema de controle de versão e usa o VCS como parte de sua operação? Eu não estou planejando empurrar este pacote para o Ubuntu e então eu realmente não entendo porque as instruções também incluem bzr commit...
e outras coisas.
Também encontrei este tutorial para debain . Eu gosto porque não depende de algum sistema de controle de versão estranho que gera automaticamente coisas. Mas também parece supor que eu tenha pré-debianizado os arquivos fonte tar.gz e pretendo enviar os pacotes para o debian. Ele também pressupõe que eu não queira adicionar nenhum parâmetro ao ./configure
, que é falso. Eu tentei adicionar parâmetros de linha comum a debian/rules
na seção override_dh_auto_configure
, mas não posso dizer se está funcionando, já que tudo parece estar falhando em cerca de 10.000 linhas antes de eu receber meu prompt de comando de volta.
Aqui está outro tutorial sobre o assunto , mas este requer ter uma chave gpg, algo que estou esperando que meu repositório apt manipule quando eu reprepro o pacote deb para o repositório apt. Ao executar essa solução, também tive problemas com a falha da construção. Porque imprime dezenas de milhares de linhas, não sei dizer onde / porque está falhando. Apenas esse dh_auto_clean: make -j10 clean returned exit code 2
Basicamente, eu queria algo exatamente como o checkinstall, apenas 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 toda a minha semana na solução de problemas (já passei vários dias). Existe uma maneira de corrigir o checkinstall ou ter uma solução de comando de 2-3 para ir da minha solução "make" para uma solução .deb?
Normalmente eu uso o cpack para fazer meus pacotes deb, mas como essa fonte usa autoconf, estou um pouco preso em como proceder.