【问题标题】:dpkg-buildpackage creates empty packagedpkg-buildpackage 创建空包
【发布时间】:2018-08-22 20:27:11
【问题描述】:

我在 debian 打包的基础知识方面遇到了麻烦。我正在尝试使用一些特定的配置标志来打包我正在编译的 qt。这样我的同事就可以使用该软件包,而无需自己重新编译它。这个问题与qt无关,只是我正在建设的项目。

我是如何创建包的:

获取包:

运行这些命令。或者,将 tarball 内容解压缩到此文件夹以利用预生成的文件

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
cd qt-everywhere-src-5.10.0

生成debian构建系统指令:

DEBFULLNAME="My name"
dh_make --email email@company.com                   \
         --file=../qt-everywhere-src-5.10.0.tar.xz  \
         -s                                         \
         --packagename=sim-qt                       \
         --copyright=lgpl

配置debian构建系统说明:

编辑 debian/control 的这些字段:

Section: devel
Homepage: http://download.qt.io/official_releases/qt/5.10/5.10.0/single/
Description: My Qt build

编辑 debian/rules 如下所示:

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

构建包:

sudo dpkg-buildpackage -rfakeroot -nc

我正在使用-nc,因为编译需要一个多小时。如果不需要,我不想重新编译,而且过去几天我一直在使用 dpkg-buildpackage。

问题

包裹是空的!

stew@stewbian:~/src/qt$ dpkg --contents sim-qt_5.10.0-1_amd64.deb
drwxr-xr-x root/root         0 2018-03-14 10:36 ./
drwxr-xr-x root/root         0 2018-03-14 10:36 ./usr/
drwxr-xr-x root/root         0 2018-03-14 10:36 ./usr/share/
drwxr-xr-x root/root         0 2018-03-14 10:36 ./usr/share/doc/
drwxr-xr-x root/root         0 2018-03-14 10:36 ./usr/share/doc/sim-qt/
-rw-r--r-- root/root       188 2018-03-14 10:36 ./usr/share/doc/sim-qt/README.Debian
-rw-r--r-- root/root       188 2018-03-14 10:36 ./usr/share/doc/sim-qt/changelog.Debian.gz
-rw-r--r-- root/root      1440 2018-03-14 10:36 ./usr/share/doc/sim-qt/copyright

另外,应该在包中的内容似乎安装在我的本地机器上。

【问题讨论】:

  • 好的,所以问题可能与 Qt 相关。 make install DESTDIR=some/other/path 似乎忽略了 DESTDIR 参数。这由 dpkg-buildpackage 使用
  • 我在使用 QMake 构建东西时看到了这一点。我会用我的解决方法写一个答案。
  • 你知道你可以得到 Debian 的 Qt 包,然后调整它吗?
  • 是的,但是哇,qt5-default 是一个非常复杂的多部分包。我只需要一个 deb 文件。我现在正在查看您的答案,试图找出我可以从哪里设置 QMAKE_ARGS
  • 是的,它很大。但是您可以只获得debian 目录,然后从那里提取您需要的魔法。我想。

标签: debian packaging dpkg


【解决方案1】:

这是我在使用 QMake 构建时遇到的问题。

QMake 制作的常用install 目标使用一个名为INSTALL_ROOT 的变量,而不是dpkg 所期望的DESTDIR

当我构建 Qt 二进制文件时,我会添加到我的 QMake 参数中:

QMAKE_ARGS += INSTALL_ROOT=$(DESTDIR) DESTDIR=

如果我不取消DESTDIR,它会出于某种原因尝试同时使用INSTALL_ROOTDESTDIR

我还有一个PREFIX 定义;我不知道你是否需要那个:

QMAKE_ARGS +=  PREFIX=/usr

最后,值得告诉 Qt 不要剥离二进制文件(dh_strip 会这样做,如果您希望将符号包与二进制文件一起使用,您会希望这样做):

QMAKE_ARGS += QMAKE_STRIP=:

然后,在我运行 QMake 时使用这些参数:

$(PROJECT)/Makefile: $(PROJECT)/my_project.pro
    @test -d $(@D) || mkdir -p $(@D) || test -d $(@D)
    $(QMAKE) -o $@ $< $(QMAKE_ARGS)

【讨论】:

  • 是的,你很好地描述了这个问题。这帮助我解决了问题!我无法轻易弄清楚如何从./configure 行将这些参数添加到QMAKE_ARGS,因此我只是将--prefix/opt/sim-qt 更改为debian/sim-qt/opt/sim-qt。当 QMake 无法读取 DESTDIR 参数时,它将继续并将其安装到我真正想要的位置。不再“假装”我们正在安装到 root,我们将安装到我们需要打包的位置。有点老套,但我没时间寻找真正的解决方案。
猜你喜欢
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-16
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多