非正式 Debian 软件包制作手册

正式的 Debian 软件包一般是由源代码和 AutoTools 工具配置编译生成,再和 debian 配置文件一起打包发布的。过程还是相当繁杂的。

下面是简化的非正式的流程,适用于简单的利用 Debian 包来部署 Linux 应用。

首先,注意 Debian 包的名字遵循下面的约定:

[package]_[version]-[revision]_[arch].deb

package 是软件包名,version 是版本号,revision 是修订号,arch 是软件包架构(例如 i386 或 armle,也可以是通用的 all 或 any)。
最为例子,我们的工作目录就用 package_version-revision_arch。

接下去要做的有两件事,一是准备要部署的文件和目标路径,二是编写 debian 的配置文件。

准备部署文件很简单,只需要将文件连同其完整目标路径复制到刚才准备的 package_version-revision_arch 目录中。例如要将 foo 文件部署到目标系统的 /usr/bin/foo,只要将 foo 文件复制到 package_version-revision_arch/usr/bin/foo 位置即可。

最简单的 debian 的配置文件只需要一个 control 文件就行了。
首先建立目录 package_version-revision_arch/DEBIAN,debian 配置文件都放在这个目录下。
最重要的是 control 文件,它提供软件包的所用信息。

package_version-revision_arch/DEBIAN/control

Debian 软件包系统就是按照这个文件的配置来判断这一软件包是否适合安装在该目标系统,如果安装的话需要获取哪些依赖软件包,等。
最简单的 control 文件内容如下:

Package: <package name>
Version: <version>
Architecture: <package architecture>
Depends: <package dependencies>
Description: <insert up to 60 chars description>
  <insert long description>

Package 是软件包的名字,Version 是版本号,Architecture 是软件包架构,这些和之前软件包命名约定的项目是同样的。Description 项则是简要描述。最后,Depends 项是 Debian 软件包系统最重要的功能,部署时,系统会自动下载安装这里声明依赖的所有软件包。

在 control 文件外,还可以加入有执行权限的 preinst 和 postinst 文件。它们分别会在部署前和部署后被调用。由于部署时使用的是 root 权限,所以脚本里可以执行任何命令。

当上面两个步骤都完成后,就可以打包了。命令行如下:

fakeroot dpkg-deb --build package_version-revision_arch

打包的命令是 dpkg-deb。fakeroot 是为了将打包后软件包中的文件的所有者设为 root,而非这里执行打包命令的用户。

接下来就可以把 package_version-revision_arch.deb 文件发布给目标系统部署了。

一些常用的 debian 配置项可以参考 The Debian GNU/Linux FAQ 。官方完整的手册在 Debian New Maintainers’ Guide

Advertisements
This entry was posted in Computer and Internet, Operation System and Linux and tagged , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s