15

我能找到的所有 Debian 打包示例都假设用户正在从上游构建重新打包,因此它会解压缩源 tarball、配置、重建和重新打包。我正在尝试为我自己的库构建一个包,该库是使用自动工具构建的。我尝试了几种不同的方法,我最近的尝试是这样的:

DH_PACKAGE_NAME=`echo $(PACKAGE_NAME) | sed s/_/-/g`
dist-hook:
    cd $(distdir) ; \
    export DEBFULLNAME="Some One" ; \
    export DEBEMAIL="someone@foo.com" ; \
    echo -e "\n" | dh_make --copyright blank --library --native \
        --packagename $(DH_PACKAGE_NAME)
    mv $(distdir)/debian $(distdir)/DEBIAN
    dpkg-deb --build $(distdir)

dpkg-deb抱怨dh_makes控制文件。我有一个想法,解决方案要简单得多?

4

3 回答 3

6

整个打包过程被简化为将构建过程包装到打包过程中。因此,尝试将打包过程包装到构建过程中可能并不容易,但我认为没有必要不以标准方式进行。

所以:

  • 使您的基于 autotools 的构建系统就好像您根本不关心 debian 软件包一样。
  • 创建一个简单的 debian/rules 文件,它将调用您的构建系统并制作一个 deb 包
  • 如果您(或您的软件包的其他用户)想要构建 deb,请运行dpkg-buildpackage
  • 如果您(或您的软件包的其他用户)不想构建 deb,只需运行./configure && make && make install

这是更好的做法,因为它将 2 个独立的阶段(构建和包装)分开。它还允许更轻松地集成到任何基于 Debian 的发行版中(例如,如果您决定将您的软件包放在“真正的”Debian 中会很棒),因为 Debian 打包指南对于将这两个进程分开非常严格(上游源发布自己的 debian/ 的人不赞成,上游的 debian/ 通常被删除)

于 2012-10-22T09:02:11.017 回答
6

不幸的是,我无法让这里的任何一个优秀答案在我的环境中真正起作用。dpkg-buildpackage 对于从源代码构建包实在是太善变了。我终于确定了此处显示的 dpkg-deb --build 方法

于 2013-10-08T18:07:19.743 回答
4

这是我如何创建 Debian 软件包作为 autotools 构建的一部分的示例。

configure.ac中,我检查dpkg-buildpackage了系统上是否安装了它,但是,如果没有找到它,我不会中止。

出于各种原因,我要求用户./configure --enable-deb在构建 Debian 软件包时运行,但在大多数情况下,这不是必需的。如果--enable-deb指定但未dpkg-buildpackage找到,则中止。

https://github.com/ptomato/gnome-inform7/blob/master/configure.ac

然后在顶层Makefile.am,代码如下所示。

https://github.com/ptomato/gnome-inform7/blob/master/Makefile.am

请注意,我make dist先调用,然后解压缩 dist tarball 并将debian目录复制到其中。根据 Debian 打包指南,这是最佳实践;他们说该debian目录应该只在源代码控制中,而不是在分发包中。

于 2012-10-10T08:01:25.033 回答