2023-02-08undefined0

目录

检查是否已打包
版本号
dh_make

以下这些软件包已经随标准的 Debian 安装过程进入了系统,所以你可能不需要再动手安装它们(以及任何附加的依赖软件包)。然而,你还是应该用 aptitude show package 或者 dpkg -s package来检查一下。(译注:apt show PACKAGE 亦可)

autoconf、automake 和 autotools-dev - 很多新程序使用 configure 脚本和 Makefile 文件来帮助预处理程序。(参看 info autoconf、info automake)。 autotools-dev 则用于保持指定的自动配置文件为最新,并带有关于使用那些文件的最佳方法的文档。

debhelper 和 dh-make - dh-make 是用于创建我们示例软件包骨架所必须的,它会使用 debhelper 中的一些工具来创建软件包。他们不是创建软件包所必须的,但对新维护人员而言,我们 强烈推荐。它可以使整个过程极为简化,并易于在将来维护。(参看 dh_make(8)、debhelper(1)、/usr/share/doc/debhelper/README) [3]

新的 debmake 可以作为标准 dh-make 的代替品。debmake 能做的事情更多,并且拥有包含非常多打包实例的 HTML 文档。文档可以通过 debmake-doc 软件包获取。

devscripts - 此软件包提供了一些非常好且有用的脚本来帮助维护者,不过这写脚本并非制作软件包所必须。此软件包所推荐或建议的软件包都值得一看。(参看 /usr/share/doc/devscripts/README.gz)

fakeroot - 这个工具使你可以在编译过程中必要的时候以普通用户来模拟 root 用户环境。 (参看 fakeroot(1))

file - 这个小程序可以检测文件的类型。(参看 file(1))

gfortran - GNU Fortran 95 编译器,如果你的程序是用 Fortran 编写的则必须用此工具完成编译。(参看 gfortran(1))

git - 此软件包提供了用于快捷处理大型项目的著名版本控制系统 - git。它被广泛用于各种开源项目,其中最著名的是 Linux 内核项目。(参见 git(1), git Manual (/usr/share/doc/git-doc/index.html).)

gnupg - 让你可以使用 数字签名 签署你的软件包。当你想把它分发给其他人时这一点特别重要。如果你要把你的成果加入到 Debian 发行版中,那这是必须的步骤。(参看 gpg(1).)

gpc - GNU Pascal 编译器。如果你的程序是用 Pascal 写的则需要此工具。值得一提的是 fp-compiler,Free Pascal 编译器(FPC),也能够很好地胜任编译任务。(参见 gpc(1), ppc386(1).)

lintian - Debian 软件包检查工具,使你可以在编译软件包后知道它是否犯了常见的错误,并对其找到的错误进行解释。 (参见 lintian(1), Lintian User's Manual.)

patch - 这是一个非常有用的工具,它可以把 diff 程序生成的差异清单文件应用到原先的文件上,从而生成一个打了补丁的版本。(参看 patch(1))

patchutils - 此软件包提供了一些帮助处理补丁的工具,如 lsdiff、interdiff 和 filterdiff 命令。

pbuilder - 此软件包提供了创建和维护 chroot 环境的工具。在它的 chroot 环境中编译 Debian 软件包可以检查编译依赖是否合适,并避免 FTBFS (Fails To Build From Source,源代码编译失败)的 Bug。(参看 pbuilder(8) 和 pdebuild(1))

perl - Perl 是现今类Unix系统中使用最普遍的解释型脚本语言,它常被称作Unix的瑞士军刀。(参看 perl(1))

python - Python 是 Debian 系统中另一个最常用的解释型脚本语言,它拥有着可圈可点的强大功能和十分清晰的语法。(参看 python(1))

quilt - 此软件包帮助你管理一系列的补丁。它们被以逻辑栈的方式组织在一起。你可以 apply (=push)、un-apply (=pop) 或简单地刷新它们然后再放入栈内。(参看 quilt(1), and /usr/share/doc/quilt/quilt.pdf.gz.)

xutils-dev - 一些通常用于 X11 的程序,使用其宏功能可以生成 Makefile 文件。(参看 imake(1)、xmkmf(1))

https://www.debian.org/doc/manuals/maint-guide/start.zh-cn.html

检查是否已打包

  • 对于仓库中 main 区的软件, Debian Policy 要求其 完全兼容 Debian Free Software Guidelines (Debian 自由软件准则) (DFSG) 并且它 不能要求使用 main 区以外的软件来编译或执行。这即是最理想的状况。

  • 对于仓库中 contrib 区的软件,其许可证必须满足 DFSG 的全部条件,不同于 main 区软件的一点是,它们可以依赖于 main 之外的软件包来完成编译或运行。

  • 对于仓库中 non-free 区的软件,其许可证可以不满足 DFSG 中的一部分条件。其中坚决不能违背的一点是,该软件 必须是可分发的

    https://www.debian.org/doc/manuals/maint-guide/first.zh-cn.html

做个简单的终端 tar.gz

bash
$ mkdir -p hello-sh/hello-sh-1.0; cd hello-sh/hello-sh-1.0
$ cat > hello <<EOF
#!/bin/sh
# (C) 2011 Foo Bar, GPL2+
echo "Hello!"
EOF
$ chmod 755 hello
$ cd ..
$ tar -cvzf hello-sh-1.0.tar.gz hello-sh-1.0

解压一个tar包

bash
$ mkdir ~/gentoo ; cd ~/gentoo
$ wget http://www.example.org/gentoo-0.9.12.tar.gz
$ tar xvzf gentoo-0.9.12.tar.gz
$ ls -F
gentoo-0.9.12/
gentoo-0.9.12.tar.gz

makefile

有些比较简单的程序源码自己带有 Makefile, 这时你可以很容易地使用 make 命令来编译它。[11] 有一些软件的 Makefile 还支持 make check,这个命令可以完成一系列程序检验和测试。当程序编译好后即可用 make install 命令,将程序安装到目标目录。

现在尝试编译和运行你的程序,你需要确保它能正常工作,以及它在安装和运行时不会破坏别的东西。

你还可以运行 make clean (或更好的 make distclean) 来清理编译目录。Makefile 中有时还会支持 make uninstall ,它被用来卸载已经安装了的程序文件。

版本号

如果上游不使用像 2.30.32 这样的常规版本格式,而是用类似 11Apr29 这样的日期作为版本,类似于随机的代号字符串,或者以VCS的哈希值作为版本号的一部分,那么请确认将其从 upstream version 中移除。 为此作出的改动信息可以记录在 debian/changelog 文件中。 如果你需要发明一个版本字符串,请使用 YYYYMMDD 这个格式作为上游版本,比如 20110429 。这会确保 dpkg 在升级软件包时能够正确解读新版本。 如果需要确保未来能够平滑过渡到类似 0.1 这样的版本号的话,那就请使用 0~YYMMDD 格式作为上游版本,例如 0~110429

版本字符串 [18] 可以用 dpkg(1) 来进行比较:

$ dpkg --compare-versions ver1 op ver2

版本比较规则可总结为以下几点:

  • 字符串要从头到尾进行比较。

  • 字母比数字大。

  • 数字作为整数进行比较。

  • 字母按照 ASCII 编码顺序进行比较。

  • 对于点号 (.),加号 (+),以及波浪号 (~) 则有对应的特殊规则,具体如下:

    0.0 < 0.5 < 0.10 < 0.99 < 1 < 1.0~rc1 < 1.0 < 1.0+b1 < 1.0+nmu1 < 1.1 < 2.0

有一种比较棘手的情况,当上游释出 gentoo-0.9.12-ReleaseCandidate-99.tar.gz 作为 gentoo-0.9.12.tar.gz 的预发布版本时,就需要确保升级工作妥当进行:重命名该上游源代码为 gentoo-0.9.12~rc99.tar.gz.

dh_make

首先设置两个 环境变量,$DEBEMAIL$DEBFULLNAME,这样大多数 Debian 维护工具就能够正确识别你用于维护软件包的姓名和电子邮件地址。[19]

bash
$ cat >>~/.bashrc <<EOF
DEBEMAIL="your.email.address@example.org"
DEBFULLNAME="Firstname Lastname"
export DEBEMAIL DEBFULLNAME
EOF
$ . ~/.bashrc

一般来说,由上游程序产生的 Debian 软件包都是 外来 的。 若你想要用上游源代码 gentoo-0.9.12.tar.gz 创建一个外来 Debian 软件包,你可以在它的基础上进行外来软件包初始化,这只需要调用 dh_make 命令:

bash
$ cd ~/gentoo
$ wget http://example.org/gentoo-0.9.12.tar.gz
$ tar -xvzf gentoo-0.9.12.tar.gz
$ cd gentoo-0.9.12
$ dh_make -f ../gentoo-0.9.12.tar.gz

当然,这里请用你原版源码归档的名字来替换 filename (文件名)。 [20] 详情请参见 dh_make(8) 。

你会看到一些输出,询问你想要创建什么类型的软件包。这里的 Gentoo 被规划为一个单一二进制包——它仅仅产生一个二进制包, 亦即单个 .deb 文件——于是我们就选择第一项 (按 s 键), 认真阅读屏幕上的输出信息, 然后按 *ENTER* 键来确认。 [21]

执行 dh_make 后,上级目录中自动创建了一份上游 tarball 的副本,名为 gentoo_0.9.12.orig.tar.gz,这个文件和稍后要介绍的 debian.tar.gz 合在一起便满足了一部分 Debian 非本土源码包的要求。

bash
$ cd ~/gentoo ; ls -F
gentoo-0.9.12/
gentoo-0.9.12.tar.gz
gentoo_0.9.12.orig.tar.gz

本文作者:墨洺的文档

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!