建议新用户不要破坏 Debian 系统
Debian 是一个健壮、可靠的系统,但拥有 root 访问权限的用户可以随意更改。因此,新用户很容易因为没有按照 Debian 的方式操作而破坏系统。本页列出了新用户常犯的错误。这里列出的一些事情可以安全地完成,前提是您必须有足够的经验,知道如何在出错时修复系统。
这里的总体主题是,后果并不总是立即出现,而且可能导致未来不能升级系统,除非完全重装系统。如果在不重装系统的情况下进行升级对你来说很重要,那就请小心避免下面概述的种种错误。
Debian 的主要优势之一是它的中央库里包含数千个软件包。如果您是从其他操作系统转到 Debian 的,可能习惯了从随便找到的网站上下载并安装软件。在 Debian 上,从随机网站安装软件是一个坏习惯。如果可能的话,最好使用官方 Debian 库中的软件。众所周知,Debian 库中的软件包运行良好且能正确安装的。仅使用 Debian 库中的软件也比从随机网站安装软件安全得多,因为随机网站可能会捆绑恶意软件以及其他安全风险。
Contents
不要制造 FrankenDebian
Debian Stable 不应随意与其他版本组合。如果您尝试安装当前 Debian 稳定版本中不可用的软件,那么添加来自其他 Debian 发行版的库并不是一个好主意。
首先,apt-get upgrade 的默认行为将任何已安装的软件包升级到可用的最高版本。例如在 bookworm 系统上配置 trixie 存档,APT 将尝试将几乎所有软件包升级到 trixie。
这可以通过配置 apt pinning 优先处理来自 bookworm 的包来缓解。
然而,即使安装“未来”版本中的几个软件包也可能存在风险。这些问题可能不会立即发生,而是在您下次安装更新时发生。
事情可能会出现问题的原因是,为某个 Debian 版本打包的软件是为了与该版本的其他软件兼容而构建的。例如,在 bookworm 系统上安装 trixie 的软件包也可以安装更新版本的核心库,包括 libc6。这会导致系统未经过测试或稳定,而是两者的混合体。
如果与 Debian Stable 一起使用,则可以创建 FrankenDebian 的存储库:
Debian testing release(当前是 trixie)
Debian unstable release(也叫作 sid)
Ubuntu、Mint 或其他衍生存储库与 Debian 不兼容!
- Ubuntu PPA 和其他用于分发单个应用程序的存储库
某些第三方存储库可能看起来可以安全使用,因为它们仅包含 Debian 中没有等效项的软件包。但是,不能保证任何存储库将来不会添加更多包而导致被损坏。
最后,官方 Debian 版本中的软件包已经经过了持续数月的广泛测试,并且版本中只允许使用合适的软件包。另一方面,来自外部源的软件包可能会更改属于其他软件包的文件,以意外的方式配置系统,引入漏洞、导致许可问题。
一旦非官方来源的软件包被引入系统,就很难查明损坏的原因,尤其是在几个月后发生的情况下。
不要使用 GPU 制造商安装脚本
Debian 包含了支持大多数显卡的自由且开源的驱动程序。自由的驱动程序提供了与 Debian 系统其余部分的最佳集成,并且对于大多数用户来说工作得很好。
如果您绝对必须拥有专有的闭源驱动程序,请不要直接从制造商的网站下载它们!这种方式安装驱动程序仅适用于当前版本的内核,在下一次内核升级更新后,您的视频驱动程序将无法工作,直到再次手动重新安装。
幸运的是,Debian 提供了一种使用存储库中的软件包来安装显卡驱动程序的方法。以 Debian 方式安装驱动程序将确保驱动程序在内核更新后可以继续工作。
AtiHowTo 提供了有关为 ATI/AMD 显卡设置推荐的免费和开源驱动程序的说明。
NvidiaGraphicsDrivers 提供了以 Debian 方式安装专有 NVIDIA 驱动程序的说明。
不要受“新版综合症”的困扰
Debian Stable 之所以如此可靠,是因为软件在包含之前经过了广泛的测试和错误修复。这意味着稳定存储库中通常不提供最新版本的软件。但这并不意味着该软件太旧而无法使用!
在尝试从 Debian Stable 存储库以外的其他地方安装某些软件的最新版本之前,谨记几点:
Debian 向后移植安全修复和可靠性修复。通过比较 Debian 软件包的版本号与上游版本号来判断软件并没有考虑到这一点。
Debian 安全团队不涵盖从官方 Debian 存储库以外的地方安装软件。
请注意:现有软件中会发现错误,但只有软件的新版本才会引入新的错误与漏洞。
随着版本进入 Debian 并接受错误修复,未知漏洞和错误的数量将在软件包生命周期内不断地减少。
“make install”可能与软件包冲突
下载的源代码 tar 包编译软件非常容易,但以后删除它并不总是那么容易。通常,源代码附带的说明包括使用 ./configure && make && make install 等命令的说明。
当您以这种方式安装软件时,您将无法使用 apt-get 或 Synaptic 删除它。 APT 打包系统只能删除 APT 打包系统安装的软件。更糟糕的是,以这种方式安装的软件有时会与为 Debian 打包的软件发生冲突。
以这种方式安装的软件也无法像 Debian 软件包那样受益于安全更新。如果您想让系统保持最新状态,而无需每次更新都手动编译和重新安装,请坚持使用 Debian 软件包。
make install 脚本可能会对编译的二进制文件以及相关文件在文件系统中的位置和所需的权限/所有权做出无效的假设。通过这种方式安装的软件也可能替换掉对系统和软件包维护至关重要的软件,使得使用标准的 Debian 工具修复系统变得困难。
不要盲目听从不好的建议
不幸的是,网上有很多不好的建议。在博客、论坛和其他网站上找到的教程通常包含会以微妙的方式破坏您的系统的说明。不要简单地遵循您找到的第一个建议或看起来最简单的教程。花一些时间阅读文档,再对比下这些教程之间的差异。
最好先花时间找出做某事的正确方法,而不是稍后花更多时间去修复损坏的系统。你不会让一位陌生人来喂养你的宝宝;同样地,在没有了解命令的具体作用之前,也请不要执行它们。
博客和论坛帖子不会过期。或许在几年前还是是安全的指令,到现在可能已经不安全了。当有疑问时,请继续进行研究并阅读你所使用版本的文档。
阅读精彩的手册
通常,阅读教程仅足以了解如何安装或使用应用程序。几乎所有为 Debian 打包的软件都至少有一些可用的文档。一些值得一看的地方:
Debian 文档主页:https://www.debian.org/doc/
Debian 参考文档主页:https://www.debian.org/doc/manuals/debian-reference/
Debian 管理员手册:https://debian-handbook.info/
apropos 命令将帮助您查找手册页。
man 命令用于阅读您不理解的命令的手册页。
某些软件有一个单独的 <package name>-doc 包,其中包含文档。
系统上安装的每个 Debian 软件包在 /usr/share/doc 中都有一个目录,该目录通常包含 README.Debian 文件,其中包含有关与软件上游版本的差异的信息以及其他文档。
不要盲目删除软件
有时删除某个包时,包管理器也需要删除其他包。这是因为附加包取决于您尝试删除的包。
如果发生这种情况,包管理器将向您显示将删除的所有内容的列表,并要求您确认。请务必仔细阅读此列表!如果您不知道要删除的某些软件包的用途,请阅读每个软件包的说明。如有疑问,请进行更多研究。一些可以帮助您研究软件包的资源:
apt-cache(8) 命令:
apt-cache show <package name> 查看包的信息
apt-cache policy <package name> 查看包的版本信息
apt-cache depends <package name> 依赖于包的依赖项
aptitude(8) 命令:
aptitude why <package name> 显示安装包的不完整原因
aptitude why-not <package name> 显示软件包无法安装的原因
将 --simulate 选项与 apt-get(8) 和 aptitude 一起使用,与此列表中的其他命令一样,它不需要以 root 身份运行:
apt-get --simulate remove <package name>
安装前阅读软件包说明
建议在安装之前阅读软件包的说明。有时某个软件在 Debian 存储库中会提供不同的软件包,每个软件包的配置方式都不同。阅读软件包描述并搜索类似的软件包名称,以确保您获得所需的软件包。
这一点对于安装内核模块的软件包尤其重要。
做笔记
您很容易忘记在计算机上执行某些操作所采取的步骤,尤其是几个月后当您尝试升级时。有时,当您尝试几种不同的方法来解决问题时,第二天很容易忘记是用哪种方法成功的!
记录您已安装的软件和所做的配置更改是一个非常好的主意。编辑配置文件时,最好在文件中添加注释,解释更改的原因以及更改的日期。
一些更安全的软件安装方法在 Debian Stable 中不可用
有时需要安装不是为 Debian 打包的软件,或者比 stable 版本打包的版本更新的版本。以下是降低上述风险的一些方法。
向后移植的包
通常可以在 Debian Backports 存档中找到较新版本的软件包。这些软件包没有像 Debian stable 版本中的软件包那样经过广泛的测试,因此应该适度安装。
更有经验的用户可以自行向后移植最新的 Debian 软件。自我向后移植通常比其他方法更安全。当自向后移植失败时,表明手动安装软件(例如用 make install 或安装程序脚本)可能会损害您的 Debian 系统。
可以从 Debian IRC 机器人 的 factoid 中获得 替代指令。
此外,在 IRC 上,judd 机器人还提供了 checkbackport 命令,以通过查询 UltimateDebianDatabase 来提供有关是否可以向后移植的一些指导。
从源头构建
如果您要从 Debian 以外的源代码构建软件,最好以普通用户身份在该用户的主目录中构建和运行它。如果您在主目录中保留敏感、有价值或不可替换的数据,那么为此目的创建另一个用户帐户可能是个好主意。
automake 和其他构建系统可以在非标准位置安装自建软件。使用 root 身份或使用“sudo”将自建的软件安装到 /usr/bin 或其他标准位置并不是个好主意。几乎总是可以安装到您的主目录中。(使用 ./configure --prefix=~/.local 或类似命令)。如果您了解如何编辑 Makefile,那么也可以更改 Makefile,以使 make install 对您的系统有用;或添加 prefix=~ /.local 选项。
如果您想让该软件可供所有用户使用,请不要允许其将自身安装到 /usr 目录层次结构中,因为只有 Debian 软件包才能在那里创建文件。把软件安装到 /usr/local 目录,所有用户就都能使用它了,并且还不会影响到包管理器的功能。stow 包对于管理安装到 /usr/local 的软件很有用。
安装 Debian Stable 中不可用的软件的不太安全的方法
请注意:官方 Debian 版本中的软件包已经经过了广泛的测试,通常持续数月,并且版本中只允许使用合适的软件包。另一方面,外部来源的软件可能会带来安全性、可靠性及法律问题。 Debian 不支持使用外部来源的软件。
使用 chroot、容器和虚拟机
使用 Debian 稳定版中不可用的软件的另一个策略是在包含在其目录或映像文件中的虚拟 Debian 系统中运行该软件。这允许在虚拟 Debian 系统上安装软件,而不会对运行的主系统产生任何影响。
Debian 包含多种工具,可提供与主机操作系统不同程度的隔离。其中一些包括:
systemd-container 包提供了 systemd-nspawn 和 machinectl 容器命令
- flatpak - 见下文
- snap - 见下文
Flatpak
一些应用程序和游戏也以新的 Flatpak 软件包格式提供。Flatpaks 可以由非 root 用户在本地安装,并且不会干扰 Debian 软件包系统。Flatpak 应用程序也可以在沙箱中运行。从 stretch 开始,Debian 就提供了 flatpak 软件包。gnome-software 可以在安装了 gnome-software-plugin-flatpak 软件包的情况下更新和安装 Flatpak 应用程序。有关更多信息,请参阅 FlatpakHowto 页面。
Snap
另一种选择是 Canonical 开发的 Snappy,该公司为 Ubuntu 提供支持。 Snap 本质上与 Flatpaks 类似,但目前(2018-10-26)中央 snapcraft 存储库比 Flathub 打包了更多的应用程序。
重要提示:许多用户对 Snap 持谨慎态度。请自行决定使用。他们按照自己的时间表进行更新,并将文件安装到非标准位置。在不首先了解 Snap 的声誉/局限性的情况下使用 Snap 可能并不明智。
充分利用同行支持资源
在寻求支持时,请务必记住 Debian 是一个志愿者项目,如果您有礼貌并愿意为自己付出一点努力,人们会更愿意提供帮助。以下是一些可帮助您获得帮助的一般准则:
- 首先自己研究这个问题,包括阅读文档和使用搜索引擎。
提供详细信息并提出聪明的问题:http://www.catb.org/~esr/faqs/smart-questions.html。
- 如果你感到沮丧,请不要把情绪发泄在试图帮助你的志愿者身上,即使他们似乎对你感到沮丧。
- 不要期望别人喂你,如果你需要一步一步地引导,那说明你需要通过阅读文档自己多学习一些知识。
- 如果您知道如何回答其他用户的问题,我们鼓励您做出贡献!
- 特别是在 IRC 上:
不要每隔几个单词就按一下回车,这样会很难理解。
- 请耐心等待答复,人们经常在别人回答他们的问题之前就消失了。
使用 https://paste.debian.net/ 而不是直接粘贴到频道中。
其他参考
DebianSoftware -- The software available to Debian Stable users
