ArchLinux ABS(转)
时间:2006-10-20 来源:mylxiaoyi
Arch Build System (ABS)
二进制与源码
pacman 负责的是二进制,而 ABS 则是源码:它帮助你从源码创建你自己的软件包,也允许你通过自定制来重建 Arch 的软件包。过程通常是:
- 与服务器同步你的 ABS 树(用 root 来运行 abs)。
- 建立新目录 /var/abs/local/ 来指定之后创建软件包的存储位置。
- 从 /var/abs/ 拷贝 PKGBUILD.proto 模型到新建立的目录下,删除 proto 后缀,编辑加入新的软件包。
- 在工作目录下用 PKGBUILD 文件运行 makepkg。
- 使用 pacman 安装新创建的软件包。
- 把软件包发给你的朋友吹吹牛(又或是发给 Archer 让她/他可以把它放入主 ABS 树)。
同步你的 ABS 树
通过以 root 运行 abs 脚本,你可以同步在 /var/abs 下所有的 PKGBUILD 文件。同步需要 cvsup 软件包,如果没有安装系统将会提示。使用 CVS 作为中介,你可以在 ABS 内使用不同版本的树 - 仅需在 /etc/abs/supfile.arch 内进行设置。例如,默认的 supfile 是被设定为追踪 current 树的,它是最新的推荐源。你也可以追踪指定的版本,supfiles 的 comments 里可以得到更多的信息。
ABS 支持多个软件库,它可以在 /etc/abs/abs.conf 里启用或是禁用。默认是的软件库是 current 和 extra,而 unstable 是禁用的。
你还将看到一个 /etc/abs/supfile.extra 文件。它可以连接到所有不包含于主 ABS 软件库的非官方构建脚本。如果你不想使用这个软件库,可以删除这个文件,不过一般来说,编辑 abs.conf 要更为合理些。
如何创建软件包
创建过程在 makepkg manpage 中有详细的解说,创建软件包时可以在上面查看相关的指令。如果这对你没有帮助,留意下 wiki 里的教程,又或者在论坛或 IRC 里请求帮助。
软件包准则
为 Arch Linux 创建软件包时,你应当遵循下面的软件包准则,如果你想向 Arch Linux 提交你新的软件包时更是如此。
软件包命名
- 软件包名只应由字母及数字字符组成;所有应当小写。
- 软件包版本应当于作者发佈的版本一致。如果需要,可以包含字母(如,nmap 的版本是 2.54BETA32)。版本标识不能有连字符!只能是字母、数字和句点。
- 软件包的发佈特指 Arch Linux 软件包。它允许用户区分新和旧的软件包创建脚本。当新的软件包首次发佈时,号码从 1 开始。修正和优化后,软件包将会被重新发佈到 AL 社区,号码将会增加。当一个新的版本出来时,发佈号码重置为 1 。软件包发佈的标识约束与版本标识相同。
目录
配置文件 应当存放于 /etc 目录下。如果多过一个配置文件,通常会使用子目录从而使 /etc 区域尽可能的保持简洁。使用 {pkgname}(译者注:即软件包名)作为子目录名:/etc/{pkgname}/。又或者其它更合适的名字,例如,apache 用 /etc/httpd/。
软件包文件应当遵循通用目录准则:
/etc | 必要的系统配置文件 |
/usr/bin | 应用程序执行文件 |
/usr/sbin | 系统程序执行文件 |
/usr/lib | 程序库 |
/usr/include | 头文件 |
/usr/lib/{pkg} | 模块、插件等 |
/usr/man | 帮助页 |
/usr/share/{pkg} | 应用程序数据 |
/etc/{pkg} | 软件包配置文件(译者注:{pkg} 代表包名) |
/opt | 大的软件包(自身包含了程序库、头文件及配置文件等),如 KDE,Mozilla 等。 |
makepkg 的职责
当你使用 makepkg 创建软件包时,它将自己完成:
- 检查软件包的依赖是否满足。
- 从服务器上下载源码文件。
- 解开源码文件
- 打上必要的补丁
- 在伪根目录内创建软件以及安装
- 把 /usr/doc,/usr/info,/usr/share/doc 和 /usr/share/info 从软件包里删除。
- 移除二进制文件内的符号
- 移除程序库里的调试符号
- 在每个软件包内为其生成 meta 文件(译者注:即位元文件)
- 将伪根目录压缩入软件包文件内
- 将软件包文件存储到预设的目标目录(默认是 cwd)
其它
尽量避免在 PKGBUILD 脚本内引入新的变量,因为它们可能与 makepkg 自身使用的变量发生冲突。
无论如何都要避免使用 /usr/libexec/。使用 /usr/lib/{pkg} 来代替它。
软件包内位元文件的 Packager 区域可以通过在 /etc/makepkg.conf 修改适当的选项使用软件包创建器来进行自定义,也可以通过在使用 makepkg 创建软件包前导出 PACKAGER 环境变量来进行自定义:
# export PACKAGER="John Doe <your.email>"
提交软件包
提交软件包前注意以下:
- 请在你的 PKGBUILD 文件的顶端加入一行注解,如下格式:
# Contributor: Your Name <your.email>
- 校验软件包的依赖关系(例如,运行 ldd,脚本所需的动态可执行检查工具,等等)。使用 namcap 也是个好主意,它是由 Jason Chu 编写的,用于分析软件包。namcap 会告诉你关于损坏的许可、缺少的依赖、不需要的依赖以及一些常见的错误。你可以使用 pacman 来安装 namcap。
- 所有的软件包都应当使用 tar 文件压缩格式,目录内应包含新近创建的软件包,PKGBUILD,filelist 以及附加的文件(补丁、安装文件...)。档案名应该最少包含有软件包的名称。
- 好好看看关于软件包的公告,了解它的状况,因为整个过程新的实施往往还正被开发人员讨论着。如果觉得你的软件包重要得不能再等了,你当然可以去寻求一个 Trusted User 的帮助,看他是否愿意将你的软件包加入他的软件库。