我使用的是 Debian 稳定版 - 我是如何使用 Bullseye 的?

dr.*_*xon 4 debian headless upgrade

也许是一个愚蠢的问题,但是今天远程服务器停机了很长时间。当它恢复时,我意识到停机时间显然是由于系统升级,从 Debian Buster(稳定版)到 Bullseye(测试版)。

我有点困惑,因为我是这台服务器上唯一的超级用户,而且我已经有一段时间没有安排任何类型的更新了。我没有在生产机器上运行测试,也没有刻意将系统设置为自动升级操作系统版本。我确实会定期使用 apt 来更新和升级单个软件包,但我当然没有要求进行完整的版本升级。

我可能进行了任何明显的配置设置来触发这个 - 例如,无意中更改了我的 apt 源等?我不想再有任何意外的更新。(这是一个无头的 Minecraft 服务器,就其价值而言,当人们想玩时,停机时间很糟糕。)

Ste*_*art 6

有两件事可能导致这种情况。您可以使用以下方法找出哪个:

cat /etc/apt/sources.list /etc/apt/sources.list.d/*
Run Code Online (Sandbox Code Playgroud)
  1. 使用套件而不是代号:
(1) deb http://ftp.debian.org/debian/ buster main
(2) deb http://ftp.debian.org/debian/ stable main
Run Code Online (Sandbox Code Playgroud)

Line(1)(2)今天是等价的,但它们不会总是这样。有一天,stable会指向bullseye。发生这种情况时,您的机器也会自动更改。如果您想要控制,请使用 codename buster。检查testing套房。从2019 年 7 月 6 日buster改为bullseye

  1. 多个分布:
(1) deb http://ftp.debian.org/debian/ buster main
(2) deb http://ftp.debian.org/debian/ bullseye main
(3) deb http://ftp.debian.org/debian/ testing main
Run Code Online (Sandbox Code Playgroud)

如果您有类似上面的内容,那么 Debian 可能会看到每个软件包的多个版本。一包的最新版本将被选中,除非你已经设置APT::Default-Release/etc/apt/apt.conf或明确固定的优先级/etc/apt/preferences.d/


下一个问题是为什么你sources.list有一个奇怪的条目?可能是您添加了一行,因为您想要最新版本的软件包,而该软件包仅在 Bullseye 中可用。在这种情况下,您可能已经添加了该行,apt update然后apt install -t testing some-package. 但问题是,除非您删除该行并执行另一行apt update,或添加 ,否则APT::Default-Release您已准备好升级到testing

另一种选择是第三方软件。Debian 官方存档中不存在的软件通常会为您提供*.deb安装程序。我见过*.deb档案包括一个自定义,/etc/apt/sources.list.d/*.list以便您获得更新。他们不难说“我需要这个依赖项的 X 版本,我知道它存在于牛眼中,所以我将创建一行来添加一个牛眼存储库”。他们会马虎,但并非不可能。


那么如何恢复呢?此时有三个选项:

1:完成升级-最简单/最快

2:降级 - 最难/最不可能成功

3:重新安装 - 最可靠/停机时间最长

完成升级,首先显然修复您的/etc/apt/sources.list[.d/]. 然后:

# Make everything 'bullseye'
sudo sed -i                  \
  -e 's/buster/bullseye/g'   \
  -e 's/unstable/bullseye/g' \
  -e 's/stable/bullseye/g'   \
  -e 's/testing/bullseye/g'  \
  -e 's/sid/bullseye/g'      \
  /etc/apt/sources.list      \
  /etc/apt/sources.list.d/*

# Upgrade
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt --fix-broken install
sudo apt autoremove
Run Code Online (Sandbox Code Playgroud)

切换之间upgradedist-upgrade--fix-broken installautoremove直到apt完成成功无处不在。

降级(这很可能会失败,我不能强调足够的):

首先备份一切。然后,创建/etc/apt/preferences.d/buster

Package: *
Pin: release n=buster
Pin-Priority: 1001
Run Code Online (Sandbox Code Playgroud)

然后像我们在步骤 1 中所做的那样升级

sudo sed -i                \
  -e 's/bullseye/buster/g' \
  -e 's/unstable/buster/g' \
  -e 's/stable/buster/g'   \
  -e 's/testing/buster/g'  \
  -e 's/sid/buster/g'      \
  /etc/apt/sources.list    \
  /etc/apt/sources.list.d/*

# Upgrade
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt --fix-broken install
sudo apt autoremove
Run Code Online (Sandbox Code Playgroud)

切换之间upgradedist-upgrade--fix-broken installautoremove直到apt完成成功无处不在。

开心的时候删 /etc/apt/preferences.d/buster