我目前正在制作一个deb
包含普通程序(例如 shell 脚本、python 代码等)和二进制文件(用 编译的 C 代码gcc
)集合的包。为了满足包创建的准则,我需要一个包含二进制文件源代码的源包。因为我的包里只有一个二进制文件,其余的都是纯文本程序,那么我应该用什么方式来制作我的源码包呢?
详细说明:我的源码包应该
- 有
DEBIAN
目录,然后只有二进制文件的路径(用二进制文件的源代码替换? - 将二进制文件的源代码放在一个目录中而没有目录
DEBIAN
,然后再放在gunzip
那个目录中? - 与真实包具有完全相同的目录布局,只需用自己的源代码替换二进制文件(例如
bin/somebinary
变为bin/somebinary.c
)?
任何帮助将不胜感激!
答案1
使用dh_make
为包制作一个模板。它会问您几个问题并创建所需的debian
目录。
对于同时包含二进制可执行文件和独立于体系结构的程序的包,您有两种选择:制作单个依赖于体系结构的二进制包,或者制作包含二进制可执行文件的依赖于体系结构的二进制包和包含脚本的独立于体系结构的二进制包以及其他与体系结构无关的文件。独立于体系结构的包的主要优点是节省存储多个体系结构的包的分发镜像的空间。如果您有多架构安装并且想要安装多个架构的二进制文件,则还需要将与架构无关的文件放入与架构无关的包中。除非你关心这个,否则制作一个包,这样更简单。如果您决定制作两个包,那么通常会有一个foo
依赖于体系结构的包依赖于foo-common
或foo-data
独立于体系结构。
您的源代码包将包含准备二进制包所需的所有内容,包括子目录中的 deb 打包脚本debian
、已编译程序的源代码以及各种脚本。保留上游存档作为源存档,不要重新组织或删除文件来制作 deb 源码包。
Debhelper ( dh
) 构建自动化工具将负责组装二进制包的目录结构。源树中的目录结构与已安装包的目录结构之间没有关系。默认debian/rules
为
%:
dh $@
如果命令不是./configure && make && make install
,则在 中添加相应的目标debian/rules
。例如,将选项传递给./configure
:
configure:
./configure --with-foo
对于安装文件,列出您需要复制的文件debian/PACKAGENAME.install
,它们将被复制dh_install
。列出要在其中创建的目录debian/PACKAGENAME.dirs
(例如dh_installdirs
)。
请参阅debhelper 手册对于所有可以配置的步骤。可以自动安装构建输出、手册页、字体、共享库、perl 模块等。
有关更多信息,请参阅:
- 这Debian 维基
- 这Debian 打包教程
- 这Debian 维护者指南
- 这Debian 政策如果您需要关于那里需要什么的精确参考。
- 这Python 打包 wiki 页面和Debian Python 政策。
答案2
首先,这是一个非常广泛的主题。您可以使用dpkg-buildpackge
从源代码构建源包。因为您明确提到了您的 debian 打包应该如何,所以我将写一下它。
debian
您的源文件夹中应该有一个目录。rules
debian 目录中的文件,您应该覆盖一些 deb 帮助程序规则,例如auto configure
orstrip
using deb 帮助程序关键字(例如 using、override_dh_auto_configure:
oroverride_dh_strip
等等...)- 您应该有一个
package.install
文件指定什么应该放在哪里,例如,如果您生成了一个二进制文件,那么您应该提及该二进制文件的路径应该安装在哪里,或者您是否有任何共享对象(.so)文件。如果您正在使用automake
那么这将非常容易。您只需在Makefile.am
说明二进制文件或库应安装在哪里时提及即可。 - 您应该有一个
control
文件用于提及构建依赖项和包依赖项。(在安装 debian pakcage 期间需要的东西。) - 安装后脚本,用于在安装 debian pakcage 后执行任何操作/更改。(例如,如果您想在安装后更改文件的权限或其他内容)。
changelog
包含包更改描述和版本号的文件。如果一切顺利,那么
dpkg-buildpackage
应该给你一个package_arch_version.deb
文件。
正如我所说,这是一个非常庞大的话题。它只会让您了解 Debian 软件包的外观以及其中包含的内容?您应该根据您的要求定制这些文件。