我在做什么:
我正在尝试构建一个已编译的Qt版本的deb软件包。
我的进展:
$ 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`。我尝试了一个简单的helloworld示例,一切似乎都很好。这是完美的情况,正是我所期望的。然而,当我尝试安装这个Qt项目时,我遇到了如下错误:
$ 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)
...
问题识别:
听起来这是一个自至少2007年以来就存在的与checkinstall相关的旧bug(那是我能找到的最早的报告)。
尝试解决方法:
有些人建议使用--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年来一直存在的致命bug,使其完全无用,那么我想它应该已经不存在了。但事实并非如此。所以我不明白人们似乎找到了解决方法。否则,我对接下来该做什么感到困惑。
人们如何打包deb文件?
我找到了这个ubuntu教程。但它假设你正在使用Canonical的bzr作为版本控制系统,并将VCS作为其操作的一部分?我没有计划将此软件包推送到Ubuntu,所以我真的不明白为什么说明中还包括bzr commit...
之类的内容。
./configure
添加任何参数,这是错误的。我尝试在override_dh_auto_configure
部分的debian/rules
中添加命令行参数,但我无法确定它是否起作用,因为似乎在我恢复命令提示符之前大约有10000行失败。这里有关于这个主题的另一个教程,但是这个教程需要你拥有一个gpg密钥,而我期望我的apt仓库在我将deb包重新打包到apt仓库时处理这个问题。当我按照这个解决方案进行操作时,我也遇到了构建失败的问题。由于它打印出成千上万行的输出,我无法确定失败的位置/原因。我只知道
dh_auto_clean: make -j10 clean 返回退出码2
基本上,我想要的是像checkinstall一样的东西,但是没有一个致命的错误导致它无法正常工作。我得到的是有问题的checkinstall,以及三种替代方法,所有这些都需要我花费整个星期来排除故障(我已经花了几天时间)。有没有办法修复checkinstall,或者有没有一个2-3个命令的解决方案,可以从我的"make"解决方案转换为.deb解决方案?通常我使用cpack来制作我的deb包,但是由于这个源代码使用了autoconf,我对如何继续进行有些困惑。