【问题标题】:Created .deb pacckage doesn't include files created by make install in autoconf project创建的 .deb 包不包含 make install 在 autoconf 项目中创建的文件
【发布时间】:2013-10-16 17:15:12
【问题描述】:

我开发了一个基于自动工具的 C++ 应用程序,它可以使用通常的 ./configure 完美编译和安装;进行安装。

现在我创建了一个 .deb 包,令我惊讶的是,它不包含我的任何数据或二进制文件。它只包括强制性的 .deb 文件,如 CONTENTS、DEBIAN、INFO、INSTALL 等。

我用 bzr(用于 ubuntu)builddeb、debuild 等尝试了很多不同的方法。所有这些方法都使我的程序没有错误,然后创建几乎空的 .deb。

这些是 debian 文件夹中的相关文件: Debian/控制:

Source: gestiong
Section: office
Priority: optional
Maintainer: santilin <gestiong@programacionsocial.net>
Build-Depends: debhelper (>= 8.0.0)
Standards-Version: 3.9.3
Homepage: www.programacionsocial.net
#Vcs-Git: git://git.debian.org/collab-maint/gestiong.git
#Vcs-Browser: http://git.debian.org/?p=collab-maint/gestiong.git;a=summary

Package: gestiong
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: <Programa libre de gestión de ONG y asociaciones sin ánimo de lucro>
 <GestiONG es un ...>

Package: gestiong-doc
Architecture: all
Description: documentation for gestiong
     <insert long description, indented with spaces>

debian/更改日志:

gestiong (0.5-0ubuntu1) precise; urgency=low

   * Initial release

 -- santilín <gestiong@programacionsocial.net>  Tue, 15 Oct 2013 14:21:22 +0200

以及从源 tarball (gestiong_0.5.orig.tar.gz) 构建 de 包的命令

bzr dh_make gestiong 0.5 gestiong_0.5.orig.tar.gz

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
  [s/i/m/l/k/n] s

cd gestiong; bzr builddeb -- -us -uc

一段时间后,程序被编译并且 .deb 没有错误地创建。

drwxrwxr-x  3 santilin santilin    4096 oct 16 18:58 build-area
drwxrwxr-x 14 santilin santilin    4096 oct 16 18:35 gestiong
-rw-------  1 santilin santilin    2246 oct 16 18:51 gestiong_0.5-0ubuntu1.debian.tar.gz
-rw-------  1 santilin santilin     894 oct 16 18:51 gestiong_0.5-0ubuntu1.dsc
-rw-------  1 santilin santilin    1885 oct 16 18:51 gestiong_0.5-0ubuntu1_i386.changes
-rw-------  1 santilin santilin    2226 oct 16 18:51 gestiong_0.5-0ubuntu1_i386.deb
-rw-rw-r--  1 santilin santilin 3638028 oct 16 18:35 gestiong_0.5.orig.tar.gz
-rw-------  1 santilin santilin    1888 oct 16 18:51 gestiong-doc_0.5-0ubuntu1_all.deb

但是 .deb 文件几乎是空的。我做错了什么?

(压缩包可以从https://sourceforge.net/projects/gestiong/files/gestiong/gestiong-0.5.beta.tar.gz/download下载)

【问题讨论】:

  • 您的包根本不会按原样构建。好像它在顶层缺少一个名为 acinclude.m4 的文件?
  • 我已经尝试了保罗的建议,我有了更深入的了解。问题可能是 dh_auto_install 将所有内容安装在 debian/tmp/ 而不是 debian/gestiong 下,然后 db_builddeb 在 debian/gestiong 下找不到任何东西?

标签: package autoconf deb


【解决方案1】:

除了缺少的 acinclude.m4 之外,您似乎还有一些问题要修复。

首先,您的debian/rules 中有一条很奇怪的行:

DH_OPTIONS=extend-diff-ignore

这没有意义。很可能您打算将 --extend-diff-ignore 参数提供给 dpkg-source,但将其放入 DH_OPTIONS 将无法实现。它只会使 debhelper 工具损坏。所以把它完全去掉。

接下来,您会丢失很多构建依赖项。如果不声明这些,其他人将很难构建您的包。一些快速的#include greps 建议您可能至少需要:

Build-Depends: debhelper (>= 8.0.0), libmysqlclient-dev, libxml2-dev, libdb-dev,
               qt4-qmake, libqt4-dev, libqt4-dev-bin, libjpeg-dev, libpng-dev,
               libx11-dev, libboost-system-dev

最后,这就是您要询问的部分,您还没有告诉 debhelper 每个构建的文件应该放在哪个包中。一切都应该在debian/tmp/ 下构建和安装(因为你的debian/control 中有多个二进制包),但是你没有任何debian/*.install 文件来说明将它们全部放在哪里(或者,你有有一个,但它只有一行写着“#DOCS#”,这无济于事)。

因此,您需要确定要随软件包一起提供的已安装文件,并在名为debian/$packagename.install 的文件中命名它们。例如,您可能希望所有二进制文件都放在主包gestiong 中。所以:

echo '/usr/bin' >> debian/gestiong.install

如果有重要的共享库也需要交付,并且没有其他软件会使用它们,您可能需要

echo '/usr/lib/*.so*' >> debian/gestiong.install

(如果您有其他包使用的共享库,您应该将它们分解为 libgestiong 包或类似的包,并了解打包库,这是一次全新的冒险。)

看起来/usr/include 中安装了一堆头文件。我不知道你是否关心运送它们。同样,如果可能需要针对这些文件构建其他包,您需要拆分一个 libgestiong-dev 包。

貌似/usr/share/gonglib下也有一些东西。

echo '/usr/share/gonglib' >> debian/gestiong.install

您还在debian/control 中定义了一个 gestiong-doc 包,但我不清楚您想在其中放入什么。

希望这会有所帮助。您可能希望查看 dh_installdh_auto_installdebhelperdh 的手册页以了解更多信息。

【讨论】:

  • 关于依赖,我认为 dh_ 会为我做这件事,因为在控制文件中有这些标签: Depends: ${shlibs:Depends}, ${misc:Depends}
  • 来自 dh_install 手册页:如果您只有一两个上游 Makefile 没有为您安装的文件,您可以对它们运行 dh_install 以将它们移动到位。我认为 debhelper 旨在将我的上游 Makefile 安装的所有文件添加到 deb 包中,不是吗?
  • Dependencies:是的,dh_shlibdeps 将填写所有共享库依赖项 (${shlibs:Depends}) 和一些其他 Debhelper 工具将依赖项添加到 ${misc:Depends}。但是,它们不会自动检测您的 build 依赖项,即为 create 您的包必须存在的包。您需要明确说明。
  • dh_install:是的,如果 Debhelper 知道如何这样做,它应该将所有构建的文件放入您的包中。但是,由于您有两个从该源构建的二进制包(gestiong 和 gestiong-doc),因此 Debhelper 无法判断您要将内容放入哪个。在这种情况下,使用debian/$package.install 文件和dh_install 是正常的指示哪些文件放在哪些包中。
  • 你说得对,我已经删除了第二个包,gestiong-doc(我添加它只是因为我在学习一个教程),现在一切正常。干杯!
猜你喜欢
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 2011-02-01
  • 2014-12-17
  • 2016-11-21
  • 2010-12-07
  • 2011-11-17
相关资源
最近更新 更多