如何创建Debian包作为autotools构建的一部分?
我能找到的所有Debian打包示例都假设用户是从上游构建重新打包的,因此它会解压缩源tarball、配置、重建和重新打包。我正在尝试为我自己的库构建一个包,它是使用autotools构建的。我尝试了几种不同的方法,我最近的尝试如下:如何创建Debian包作为autotools构建的一部分?,debian,packaging,autotools,automake,Debian,Packaging,Autotools,Automake,我能找到的所有Debian打包示例都假设用户是从上游构建重新打包的,因此它会解压缩源tarball、配置、重建和重新打包。我正在尝试为我自己的库构建一个包,它是使用autotools构建的。我尝试了几种不同的方法,我最近的尝试如下: DH_PACKAGE_NAME=`echo $(PACKAGE_NAME) | sed s/_/-/g` dist-hook: cd $(distdir) ; \ export DEBFULLNAME="Some One" ; \ expor
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_制作的控制文件。我觉得解决方案要简单得多?下面是一个例子,说明我是如何创建Debian包作为autotools构建的一部分的
在configure.ac
中,我检查系统上是否安装了dpkg buildpackage
,但是,如果找不到,我不会中止
由于各种原因,我要求用户在构建Debian包时运行/configure--enable deb
,但在大多数情况下这不是必需的。如果指定了--enable deb
,但未找到dpkg buildpackage
,则我中止
然后在顶级Makefile.am
中,代码如下所示
请注意,我首先调用makedist
,然后解压缩dist tarball并将debian
目录复制到其中。根据Debian包装指南,这是最佳实践;他们说,debian
目录应该只在源代码管理中,而不是在发行版tarball中。整个打包过程都经过了优化,可以将构建过程打包到打包过程中。
因此,尝试将打包过程封装到构建过程中可能不是非常容易,但我认为没有必要不采用标准方式
因此:
- 让您的基于autotools的构建系统看起来好像您根本不关心debian软件包
- 创建一个简单的debian/rules文件,该文件将调用您的构建系统并生成一个deb包
- 如果您(或包的其他用户)希望生成deb,请运行
dpkg buildpackage
- 如果您(或软件包的其他用户)不想构建deb,只需运行
/configure&&make&&makeinstall
这是一种更好的做法,因为它将两个独立的阶段(构建和打包)分开。
它还允许更容易地集成到任何基于Debian的发行版中(例如,如果您决定让您的软件包使用“真正的”Debian会很好),因为Debian的打包指南对于将这两个过程分开非常严格(上游来源发送自己的debian/不受欢迎,上游的debian/通常被删除)不幸的是,我无法在我的环境中做出任何一个非常好的答案。dpkg buildpackage在从源代码构建包方面过于易变。我最终决定采用dpkg deb--构建方法,如图所示我注意到您没有使用DHU make获取debain目录和控制文件。可能是DHU make只对deb_helper有意义?您可以发布控制文件的副本吗?谢谢。控制文件和debian目录在同一个存储库中,只需浏览它们…;-)请注意,我不再建议在configure.ac和Makefile.am中执行此操作,因为它通常需要重新配置构建目录。相反,我建议使用一个单独的脚本来执行所有打包操作。我建议不要在dist hook中构建包,而是创建单独的目标:make rpm
,make pkg
,make deb
,等等。不要设置DEBFULLNAME/DEBEMAIL,但需要用户设置它们(可能在shell.rcs中). 在配置期间构建整个debian/control目录。一些关于如何使用dpkg buildpackage
及其规则的示例将非常有帮助……无论如何,我可以看出,在运行多个阶段时,需要编写一些模板,最终看起来非常复杂。建议使用dpkg-deb
的方法更简单:只需创建一个deb/debian/
dir,放一个描述包的control
文件,然后运行DESTDIR=$(pwd)/deb-make-install
(或者ninja-install
,不管怎样,它也支持DESTDIR
),最后执行dpkgdeb--builddeb/
。