1

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

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

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

这些是debian文件夹中的相关文件:debian/control:

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下载)

4

1 回答 1

3

除了缺少的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

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

希望这可以帮助。您可能希望查看 、 、 和 的联机帮助页以dh_install了解dh_auto_install更多debhelper信息dh

于 2013-10-17T00:43:35.653 回答