我能找到的所有Debian打包示例都假设用户正在从上游构建重新打包,因此它解压缩源tarball,配置,重建和重新打包。我正在尝试为自己的库构建一个包,它是使用autotools构建的。我尝试了几种不同的方法,我的最新尝试看起来像这样:
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
控件文件。我知道解决方案更简单了吗?
答案 0 :(得分:4)
整个包装过程简化,将构建过程包装到包装过程中。 因此,尝试将包装过程包装到构建过程中可能并非超级简单,但我认为没有必要不按标准方式进行。
这样:
dpkg-buildpackage
./configure && make && make install
这是更好的做法,因为它将2个独立的阶段(建筑和包装)分开。 它还允许更容易地集成到任何基于Debian的发行版中(如果你决定将你的软件包放在"真正的" Debian中是很好的),因为Debian打包指南对于保持这两个进程非常严格分开(上游 - 发送他们自己的debian /皱眉头和上游的debian /通常被删除)
答案 1 :(得分:4)
不幸的是,我无法让这里的任何一个优秀答案在我的环境中实际工作。关于从源代码构建包,dpkg-buildpackage太过于变幻无常。我终于确定了显示here
的dpkg-deb --build方法答案 2 :(得分:3)
以下是我如何创建Debian软件包作为autotools构建的一部分的示例。
在configure.ac
中,我会检查系统上是否安装了dpkg-buildpackage
,但是,如果找不到,我就不会中止。
出于各种原因,我要求用户在构建Debian软件包时运行./configure --enable-deb
,但在大多数情况下,这不是必需的。如果指定--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
目录应该只在源代码控制中,而不是在分发tarball中。