在 GNU/Linux 上所需软件可以:

  1. 通过集成的软件包管理系统直接从发行版的软件仓库自动下载安装,只需提供包名;
  2. 若软件仓库尚未收录,则可在安装开发依赖后,下载软件的源代码并编译、安装到系统中(建议安装到/usr/local以避免干扰软件包管理系统控制的/usr);
  3. 手动下载来源不明的二进制软件包后,调用低层软件包管理器安装(一般是使用私有操作系统的时期养成的坏习惯,极不推荐)。

apt 是 debian GNU/Linux 的高层软件包管理器,debian 的软件包获取、自动依赖解析、安装、卸载主要由它来完成(具体的安装、卸载工作由 dpkg 负责)。apt 的主要使用方法,可在终端内输入运行 $ apt –-help 查看。

提示:新立得软件管理器(软件包名synaptic)是 apt 的一个图形界面前端,用户如果还不熟悉终端模拟器下 apt 的操作命令,可暂且使用新立得软件管理器(软件包名synaptic)更新软件源,升级安装下载软件包。但软件源的基础配置工作仍然应当使用终端模拟器下的命令完成。

修改 apt 的软件源

Debian 以及其他 GNU/Linux 发行版本的软件安装都需要从限定的软件源中获得软件包,不同的软件源之间自由度可能不同,例如 Debian 将依赖私有库运行的自由软件收录进了 contrib 源中,将私有软件收录进了 non-free 源中,而其主源 main 则收录完全自由的软件。一般情况下,contrib 源和 non-free 源默认不开启,为了软件自由和信息安全,用户应尽可能不使用来自 contrib 源和 non-free 源的软件包。

不同的软件源之间的第二个不同是镜像站的不同。全世界范围内有很多自由软件的镜像站,例如在国内有多所高校和其他机构存在这种镜像站,如清华大学的镜像站 https://mirrors.tuna.tsinghua.edu.cn/debian ,中国科学技术大学的镜像站 https://mirrors.ustc.edu.cn/debian/ 和兰州大学的镜像站 https://mirror.lzu.edu.cn/debian/ ,此外尽管阿里巴巴、网易等互联网巨头也提供镜像站服务,但不推荐使用它们的镜像站。国内的镜像站中仅各个大学提供的是可靠的。

除了软件包自由度、软件包直接来自的镜像站的不同外,软件包本身版本差异也构成了软件源差异。Debian 软件源在软件版本上可分为稳定版(往往用某一稳定版自身的代号作为标记,如 debian 10 的代号(buster),测试版(testing),不稳定版(unstable)。

以上所述知识点在 apt 的软件源配置文件sources.list中有着明确的表现。

例如,在sources.list中一条软件源配置信息往往写成如下的格式:

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main

其中,https://mirrors.tuna.tsinghua.edu.cn/debian/ 代表着该软件源是清华大学镜像站的软件源,testing 意味着该软件源是测试版软件源,main 则代表着它是 Debian 的主源而不是 contrib 源或 non-free 源。

Debian 稳定版的软件源往往不会有大的变化,Debian 10 的软件源不会自然而然地升级到 Debian 11,这就意味着 Debian 稳定版更新频率非常低且软件源更新所能带来的软件升级较小,仅当某一稳定版上的部分软件存在恶性 bug 或软件依赖关系存在问题时才会及时得到修复。但 Debian 提供提供测试版的安装映像文件,使用测试版的安装映像文件安装好的系统默认是测试版的源,而为了保证相关软件包较新,这些映像文件也会每周更新。可访问https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/下载不完整但体积比较小的 cd 映像文件,此时必须保持网络全程通畅才能完成安装操作;或者从https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-dvd/下载完整但体积较大的映像文件,此时选择全程离线安装或保持网络在线安装均可。请根据自身的网络条件自行选择。

为了更好地使用测试版的 Debian 软件源,降低因软件升级导致系统故障的可能性,我们需要严格设置软件源列表,软件源列表sources.list位于 /etc/apt (即 apt 的配置文件目录)。

1.调用命令# nano /etc/apt/sources.list编辑sources.list

例如,某份sources.list的内容:

#deb cdrom:[Debian GNU/Linux testing Bullseye - Official Snapshot amd64 DVD Binary-1 20201005-03:30]/ bullseye contrib main
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main 
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main
#deb https://security.debian.org/debian-security bullseye-security main contrib
#deb-src https://security.debian.org/debian-security bullseye-security main contrib
#deb http://deb.debian.org/debian/ bookworm-updates contrib
#deb http://deb.debian.org/debian/ bookworm-proposed-updates contrib

其中,# 开头的行并不作为配置信息参与程序运行,仅供编辑者查看,实际上是注释。那些开头没有 # 的行才是真正的配置内容。使用完整的 DVD 映像安装好 Debian GNU/Linux 后, deb cdrom:[Debian GNU/Linux testing _Bullseye_ - Official Snapshot amd64 DVD Binary-1 20201005-03:30]/ bullseye contrib main等 cdrom 本地软件源是启用的,我们需要首先将它们注释掉(在相关行的开头加 # )。

如果

deb https://security.debian.org/debian-security bullseye-security main contrib 
deb-src https://security.debian.org/debian-security bullseye-security main contrib

这类安全更新软件源未被注释,也应该注释掉,它们的存在有可能会影响到软件源的正常更新。

于是实际发挥作用的,就只剩下了

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main 
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main 

等测试版的软件源。

观察 Debian 软件包迭代的顺序(不稳定版的软件包经过测试成为测试版软件包,测试版软件包再继续测试,最终成为稳定版软件包),我们不难发现不稳定版软件源是测试版软件源的上游。如果某不稳定版源的软件包未能及时进入测试版软件源,用户又恰巧在此时升级了软件,Debian 系统将很有可能受软件依赖关系冲突的影响而故障;同时,用户升级测试版软件时也可能出现某些软件的升级速度快于和它具有依赖关系的软件,如果在这种情况下升级,很有可能会造成依赖关系破损。因此,使用测试版软件源的同时也应该将不稳定版软件源和稳定版软件源也加到系统软件源中。

sources.list文件中添加不稳定版和稳定版的软件源:

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ unstable main 
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ unstable main

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ stable main 
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ stable main

注意:同一镜像站的测试版软件源和不稳定版软件源应当同时列入sources.list中,因为不同镜像站之间在收录软件包的时候可能存在时间差,这就导致镜像站不同的不稳定版和测试版软件源软件源之间包的衔接可能存在问题。而案例里提供的所有软件源都来自于清华大学的镜像站。

注意:运行时实际起作用的软件源列表除包括 /etc/apt/sources.list 中的全部内容外,亦包括按文件名顺序依次串接 /etc/apt/sources.list.d 下的所有文件而得的内容,因此为了便于管理,可以将 /etc/apt/sources.list 的内容按一定规律拆分后置于 /etc/apt/sources.list.d 下。

保存退出进行接下来的操作。

2.不稳定版软件源更新速度最快,快于测试版软件源,但它“不稳定”,不应该作为最主要的软件源。为了让软件包主要来自测试版软件源而不是不稳定版,我们还需要设置软件源的优先级。

我们需要在/etc/apt/preferences.d目录下创建一个prioritize-testing# nano /etc/apt/preferences.d/prioritize-testing),并在文件中写入以下内容:

Package: * 
Pin: release a=unstable 
Pin-Priority: 800

Package: * 
Pin: release a=testing 
Pin-Priority: 900

保存退出。

该文件的配置信息可以保证测试版软件源的优先级高于不稳定版和稳定版。

提示:稳定版是测试版的下游软件源,本来就不新于 testing ,优先级天生就低,所以prioritize-testing中不必规定 stable 源的优先级。

为了让我们修改的配置生效,我们还需要主动使用 apt,调用 apt 的软件包列表更新命令

# apt update ,如果没有关于软件源的报错信息,在列表更新结束后就算完成了系统软件源的配置工作。