6.1. 写入sources.list文件

6.1.1. 句法

/etc/apt/sources.list 文件中每个有效的代码行包括对源的描述,由三个被空格分开的部分组成。

第一个区域指示源的类型:

  • deb” 表示二进制软件包,

  • deb-src”表示源代码包。

第二个区域表示源的基本 URL (结合文件 Packages.gz 中给出的文件名,必须是有效URL的全称):此区域存在于一个 Debian 镜像或其他任何由第三方所建的软件源文档中。这个 URL 可以用 file:// 起始来表示系统里安装了本地仓库,或以 http:// 表示仓库可通过网络服务器来获取,或用 ftp:// 表示软件源在一个 FTP 服务器上。URL 还可以用 起始表示从 cdrom: 开始安装。因基于网络的安装愈来愈流行,这个方法已不那么常用了。

最后这一区域的句法取决于仓库的结构。从最简单的例子开始,你可以很简单地描述一个软件源的子目录 (必须用到结尾处的斜线)(通常用 “./” 表示子目录不存在 - 这个软件源就位于给定的 URL上)。 不过一般来讲,仓库的结构类似于一个 Debian 的镜像, 包括很多分支,每一分支有很多组成部分。通常命名选定的分支(由 “codename” 来命名 - 参看附栏中的目录社区 Bruce Perens,一位有争议的领导者 或是由对应的 “suites” — stable, testing, unstable ),然后命名下面的组成部分(或分区)(从main, contribnon-free中选择) 来激活一个典型的 Debian 镜像。

关键词 main, contribnon-free 存档

Debian 根据开发者所选定的许可声明,使用这三部分来区分不同的软件包。Main 收集了完全遵守Debian 免费软件指南的所有软件包。

non-free 文档有所不同,它包括没有( 完全)遵循上述原则,未受约束但仍然被发布的软件。这种文档为使用者提供服务,但不是 Debian 的官方组成部分- 不过 Debian 从来都提倡优先使用自由软件。这类文档的存在代表了一个来自 Richard M. Stallman 的重要问题,也阻碍了自由软件基金会向用户推荐 Debian.

Contrib (贡献)是一类没有一些非自由元件就不能正常运作的开源软件。这类元件会是来自非自由 non-free 部分的软件, 或非自由文件如游戏 ROMs, 控制台BIOS等。Contrib 也包括需要专利元件来编译的自由软件。早先的例子是OpenOffice.org 办公软件套装,曾经需要带专利的 Java 环境来运行。

TIP /etc/apt/sources.list.d/*.list 文件

如果很多个软件包的源库在被引用,将它们分成多个文件会很实用。每一部分存在/etc/apt/sources.list.d/*文件名*.list (参见边栏基本 结尾是 .d 的文件夹名称)。

cdrom 条目描述了你所有的CD/DVD光盘。 与其他条目不同,因为一个CD光盘需要插入光驱中,并且每次只能读一张,所以并不总是可用。因此这种仓库管理起来稍有不同,需要加在apt-cdrom 程序中,经常与add 参数一起执行。后者会要求驱动中插入光盘,并会浏览内容,寻找Packages 文件。这些文件会用于更新可用软件包的数据库(此过程由apt update 命令执行)。 自此, 如果某软件包需要光盘,APT 可发出要求插入光驱。

6.1.2. 给Stable 使用者的仓库

下面是一个标准的sources.list文件,它被用于 Stable 版本的 Debian 系统:

例 6.1. /etc/apt/sources.list 给 Debian Stable 使用者的文件

  1. # Security updates
  2. deb http://security.debian.org/ jessie/updates main contrib non-free
  3. deb-src http://security.debian.org/ jessie/updates main contrib non-free
  4.  
  5. ## Debian mirror
  6.  
  7. # Base repository
  8. deb http://ftp.debian.org/debian jessie main contrib non-free
  9. deb-src http://ftp.debian.org/debian jessie main contrib non-free
  10.  
  11. # Stable updates
  12. deb http://ftp.debian.org/debian jessie-updates main contrib non-free
  13. deb-src http://ftp.debian.org/debian jessie-updates main contrib non-free
  14.  
  15. # Stable backports
  16. deb http://ftp.debian.org/debian jessie-backports main contrib non-free
  17. deb-src http://ftp.debian.org/debian jessie-backports main contrib non-free

此文件列出了 与Debian Jessie 版本相关软件包的所有来源(此手册写作当前稳定版本)。我们不希望当下一个稳定版本发布时,所有基于它的分支在我们控制范围外被改变,因此决定用“Jessie” 而不是用相对应的 “stable““ 稳定” 的别名(stable, stable-updates, stable-backports)来命名。

大多数软件包来源于“基础仓库”,它拥有所有的软件包,但极少更新(大概每两个月根据“点发布”更新)。其他仓库不完全(不包括所有软件包),不过可以支持更新(软件包是较新版本)。接下来的几章将会介绍这些仓库管理的目的和规则。

请注意,当你所需要的软件包版本存在于几个仓库中时,在文件sources.list中所列出的第一个会被使用。因此,非官方来源的包一般在此文件末尾处。

本节提到的稳定Stable 对于Oldstable 一样适用。后者只是同时维护的较旧Stable 版本。

6.1.2.1. 安全更新

安全更新一般不在 Debian 镜像通常所在的网络上,而是在security.debian.org(位于 Debian 系统管理员Debian System Administrators维护的小范围网络)。其上的文档包括为那些稳定版本准备的安全更新(由 Debian 安全团队和/或软件包维护者预备)。

服务器上也有针对测试版的安全更新。这类更新经常通过从非稳定版流入测试版,因此单独存在于服务器上的更新不常见。

6.1.2.2. 稳定更新

稳定更新对安全性不敏感,在下一个稳定版本点发布前,它还是很重要,需要推送给使用者。

这个仓库的典型例子包括修复在发布前无法修复的严重漏洞和后续更新引入的漏洞。根据紧急性,它还包含长期的软件包更新,比如spamassassin 的广告监测规则,clamav病毒库,或是各个时区的夏令时规则(tzdata)。

实际上,这个仓库是 计划-更新proposed-updates 的子库,是由稳定更新管理员小心选定的。

6.1.2.3. 计划更新

一旦发布,稳定分布只每两个月更新一次。接下来的更新在计划更新仓库里准备(由稳定发布管理员监督)。

这个仓库中通常有安全更新和稳定更新的文档,还有更多:软件包维护者可能在这里修复一些不需要马上发布的重要的漏洞。

任何人都可以使用这个仓库在正式发布前来检测更新。下面的摘录使用jessie-proposed-updates别名。因为wheezy-proposed-updates 也存在,别名的使用更清楚更一致(对于Oldstable更新来讲):

  1. deb http://ftp.debian.org/debian jessie-proposed-updates main contrib non-free

6.1.2.4. 向后移植到稳定版(Stable Backports)

stable-backports仓库存放“软件包的向后移植版本”。该术语指的是一些近期发布的软件针对旧的发行版重新编译的包,这里所指的旧发行版通常是指稳定(Stable)的发行版本。

当发行版本经过一段时间后,大量的软件项目都发布了新的软件版本,但它们都没有整合进入当前的稳定版(它仅接受能够解决最重要问题的那些修改,例如安全问题相关)。因为测试版和不稳定版均具有一定风险,软件包维护者有时会针对稳定版提供近期发布的软件的重新编译版本,这样做可以将可能存在的不稳定因素限制在一小部分经过选择的软件包之间,因而具有一定的优势。

http://backports.debian.org

stable-backports仓库与通常的Debian镜像共同存在,但是Squeeze对应的仓库仍然在一个单独的服务器(backports.debian.org)上存放,且需要增加以下特殊的sources.list条目才能使用:

  1. deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free

stable-backports里的软件包(Backports)通常是从Testing版本创建的。这确保一旦下一个稳定的Debian版本可用,所有安装的backports都可以升级到相应的稳定版本。

尽管该仓库提供软件包较新的版本,APT 只会在您给出明确指示的情况下再安装它们(或者除非您已经在系统上安装了对应 backport(向后移植软件)的稍旧的版本):

  1. $

6.1.3. 给测试/非稳定 版本用户的仓库

下面是一个标准 sources.list文件,用于系统运行 Debian 测试或非稳定 版本:

例 6.2. Debian Testing/Unstable 用户的 /etc/apt/sources.list文件

  1. # Unstable↵
  2. deb http://ftp.debian.org/debian unstable main contrib non-free↵
  3. deb-src http://ftp.debian.org/debian unstable main contrib non-free↵
  4. # Testing↵
  5. deb http://ftp.debian.org/debian testing main contrib non-free↵
  6. deb-src http://ftp.debian.org/debian testing main contrib non-free↵
  7. # Stable↵
  8. deb http://ftp.debian.org/debian stable main contrib non-free↵
  9. deb-src http://ftp.debian.org/debian stable main contrib non-free↵
  10. # Security updates↵
  11. deb http://security.debian.org/ stable/updates main contrib non-free↵
  12. deb http://security.debian.org/ testing/updates main contrib non-free↵
  13. deb-src http://security.debian.org/ stable/updates main contrib non-free↵
  14. deb-src http://security.debian.org/ testing/updates main contrib non-free↵

APT 通过sources.list 文件来从非稳定安装软件包。如果这不是你所需要的,用APT::Default-Release 设置(参见 第 6.2.3 节 “系统升级”)来指示 APT 从另一分布获取软件包(一般用 测试)。

应该纳入这些典藏库,即使一个也该这么做。测试版 用户将感谢管理者从 不稳定版 中挑选修改过的软件包,当 测试版 受到错误的干扰时。反过来说,被无预期错误干扰的 不稳定版 用户,可能降级至他们 (若以此工作) 使用的 测试版 软件包。

稳定版 的内容较有争议,但可接触被发展版移除的软件包。同时也确保取得尚未被修改的最新软件包。

6.1.3.1. 实验 仓库

实验性 典藏所的软件包是所有 Debian 镜射站的内容,包括因为品质关系尚未被纳入 不稳定版 的软件包 — 通常是发展中的软件版本或前置版 (alpha、beta、待发布…)。修改过的软件包多少有点问题,可送至此处。在高端用户的协助下,维护者努力找出该等问题。经过第一阶段后,把软件包移至 不稳定版,更多的用户以更详细的方式测试它。

不在乎系统崩盘并有能力自行修复的用户,就会取用 实验性 的软件包。用户导入此等软件包并测试其功能、检查是否满足其需求。这就是 Debian 的诉求,加入 APT 的 sources.list 内,并不表示该软件包可顺利使用,应加入这一个行:

  1. deb http://ftp.debian.org/debian experimental main contrib non-free↵

6.1.4. 非官方来源: mentors.debian.net

高级用户们为一些重新编译过的软件建立了众多的非官方的 Debian 软件源(Ubuntu 使用他们的个人包存档服务),程序员提供他们编写的软件提供给所有人,甚至有 Debian 开发人员在线提供他们的软件包的预版本。

mentors.debian.net站点比较有意思(虽然它只提供源码包)。它搜集Debian开发者候选人员制作的软件包,以及那些希望创建Debian软件包又不想经历成为Debian开发者整套流程的那些志愿者的软件包。这些软件包提供时没有任何质量保证;请确保您在将它们用于生产环境之前检查它们的来源和完整性并进行测试。

社区 debian.net 站点

debian.net 域名不是一个 Debian 项目的官方源。每个 Debian 开发者都可基于自己用途而使用此域名。这些网址包含一些非官方服务(有时为个人站点),其主机不属于项目本身而由 Debian 开发者设置,甚至还有将要迁移到debian.org的项目原型。有两个理由来解释为什么这些项目原型会留在debian.net:或者是没有人做出足够的努力将其迁移到官方服务( 位于debian.org 域名上,具备一定维护保证),或者是服务争议太大以至于无法官方化。

安装一个包意味着需要给包的创建者以 root 权限,因为其决定了以该身份运行的初始化脚本的内容。官方的 Debian 包由志愿者创建,志愿者经过指派和评估,且能封装软件包,因而软件包的来源与完整性可以确认。

一般地,需当心来源未知以及并非位于官方 Debian 服务器之一上的软件包:评估包创建者的可信度,并检查包的完整性。

http://mentors.debian.net/

进阶旧包版本: snapshot.debian.org

snapshot.debian.org服务,于 2010 年 4 月引入,可用于“时间回溯”及查找软件包的旧版本。例如,它可用于识别某个回溯的软件包版本,更具体地,在等待回溯修复时可以回到先前的版本。

6.1.5. Debian 软件包 缓存 代理

当一整个网络的机器被配置为使用同样的远程服务器并下载同样的更新包时,管理员会知晓有一个当作网络-本地间缓存器的中介代理是有好处的(参见侧边栏术语 缓存)。

您可以配置 APT 使用一个“标准”的代理(参见第 6.2.4 节 “配置选项” 获取 APT 相关内容,参见第 11.6 节 “HTTP/FTP Proxy”获取代理相关内容),Debian 体系提供了一个解决问题的更佳手段。本段中所述的专用软件比普通的代理缓存更加智能,因为它们可依赖于 APT 软件源的特定结构(例如,它们了解单独的文件在什么时间废弃与否,并由此来调整在保持阶段的时间)。

apt-cacher与apt-cacher-ng的工作方式类似代理缓存服务器。对于外部请求,APT 的sources.list 保持不变,但是 APT 被配置为把它们作为代理使用。

另一方面,approx,工作方式则类似一个 HTTP 服务器,其在它的顶级 URL 地址上“镜像”任意数量的远程软件源。这些顶级目录与远程 URL 之间的映射存储于/etc/approx/approx.conf中:

  1. # <name> <repository-base-url>↵
  2. debian http://ftp.debian.org/debian↵
  3. security http://security.debian.org↵

approx 通过inetd (参见第 9.6 节 “The inetd 超级服务器”)默认在9999端口运行,并需要用户调整sources.list 文件来指向 approx 服务器:

  1. # 指向本地 approx 服务器的sources.list 范例
  2. deb http://apt.falcot.com:9999/security jessie/updates main contrib non-free
  3. deb http://apt.falcot.com:9999/debian jessie main contrib non-free