Product SiteDocumentation Site

15.3. 创建用于 APT 的软件包仓库

Falcot Corp gradually started maintaining a number of Debian packages, either locally modified from existing packages or created from scratch to distribute internal data and programs.
为了更容易部署,他们想要将这些软件包集成在能够由 APT 直接使用的软件包档案中。明显为了维护的原因,他们希望将内部软件包从本地重建的软件包中分出来。目标是使 /etc/apt/sources.list.d/falcot.list 文件中的匹配入口如后面这样:
deb http://packages.falcot.com/ updates/
deb http://packages.falcot.com/ internal/
这样管理员在他们的内部 HTTP 服务器上配置虚拟主机,以 /srv/vhosts/packages/ 作为相关 web 空间的根。档案本身的管理委托给 mini-dinstall 命令(在相似命名的软件包中)。这个工具照看 incoming/ 目录(在我们的情况下是 /srv/vhosts/packages/mini-dinstall/incoming/),并在那里等待新的软件包;软件包当上传时,就安装在 /srv/vhosts/packages/ 的 Debian 档案中。mini-dinstall 命令读取 Debian 软件包生成时创建的 *.changes 文件。这些文件包含与软件包的版本相关的所有其它文件的列表(*.deb*.dsc*.diff.gz/*.debian.tar.gz*.orig.tar.gz,或使用其它压缩工具生成的它们的相应文件),并且这些允许 mini-dinstall 知道安装哪些文件。*.changes 文件还包含目标发布版本(通常是 unstable)的名称,这些目标发布版本在最新的 debian/changelog 入口被提到,并且 mini-dinstall 使用这个信息来确定软件包应该安装在哪里。这就是为什么管理员在构建软件包前必须总是更改这个字段,并依赖于目标位置,将它设置为 internalupdates。然后 mini-dinstall 生成 APT 所需的文件,如 Packages.gz
配置 mini-dinstall 需要设置 ~/.mini-dinstall.conf 文件;在 Falcot Corp 公司的情况下,内容如下:
[DEFAULT]
archive_style = flat
archivedir = /srv/vhosts/packages

verify_sigs = 0
mail_to = admin@falcot.com

generate_release = 1
release_origin = Falcot Corp
release_codename = stable

[updates]
release_label = Recompiled Debian Packages

[internal]
release_label = Internal Packages
值得注意的一个决定是为每个档案生成 Release 文件。这可以使用 /etc/apt/preferences 配置文件来帮助管理软件包安装的优先性(细节请参见 第 6.2.5 节 “软件包优先级管理” )。
调用 mini-dinstall 实际上在后端启动了守护程序。只要这个守护程序运行,它就将每半个小时检查一次 incoming/ 目录中的新软件包;新软件包当到达时,将被移动到档案中,并生成适当的 Packages.gzSources.gz 文件。如果运行守护程序是个问题,那么软件包每次上传到 incoming/ 目录中时, mini-dinstall 也能够以批处理模式手动调用(通过 -b 选项)。由 mini-dinstall 提供的其它可能性归档在其 mini-dinstall(1) 手册页面中。