也许是一个愚蠢的问题,但今天远程服务器长时间停机。当它恢复时,我意识到停机显然是由于系统升级所致,从 Debian Buster(稳定)到 Bullseye(测试)。
我有点困惑,因为我是这台服务器上唯一的超级用户,而且我有一段时间没有安排任何类型的更新。我没有在生产机器上进行测试,也没有故意将系统设置为自动升级操作系统版本。我确实定期使用 apt 来更新和升级单个软件包,但我当然没有要求进行完整的版本升级。
我可能做了任何明显的配置设置来触发此操作 - 例如,无意中更改我的 apt 源等?我不想再有任何意外的更新。 (就其价值而言,它是一个无头的《我的世界》服务器,当人们想玩时,停机是很糟糕的。)
答案1
有两件事可能会导致这种情况。您可以使用以下方法找到:
cat /etc/apt/sources.list /etc/apt/sources.list.d/*
- 使用套件代替代号:
(1) deb http://ftp.debian.org/debian/ buster main
(2) deb http://ftp.debian.org/debian/ stable main
Line(1)
和(2)
今天是等价的,但它们不会永远是等价的。有一天,stable
会指向bullseye
。当这种情况发生时,你的机器也会自动改变。如果您想要控制,请使用 codename buster
。检查套房testing
。 2019 年 7 月 6buster
日改为bullseye
。
- 多重分布:
(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
如果您有类似上面的内容,那么 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 版本,而且我知道它存在于 bullseye 中,所以我将创建一行来添加 bullseye 存储库”。他们可能会马虎,但并非不可能。
那么如何恢复呢?此时有三个选择:
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
upgrade
在、和之间切换dist-upgrade
,直到所有位置都成功完成。--fix-broken install
autoremove
apt
到降级(这很可能会失败,我怎么强调都不为过):
首先备份一切。然后,创建/etc/apt/preferences.d/buster
:
Package: *
Pin: release n=buster
Pin-Priority: 1001
然后像我们在步骤 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
upgrade
在、和之间切换dist-upgrade
,直到所有位置都成功完成。--fix-broken install
autoremove
apt
高兴的时候删掉/etc/apt/preferences.d/buster
答案2
除此之外,还为任何受到类似影响的人提供了答案。
我一直在摸不着头脑,不知道自己是如何最终成为靶心的,直到我发现:
deb https://dl.winehq.org/wine-builds/debian/ sid main
deb-src https://dl.winehq.org/wine-builds/debian/ sid main
不知何故,我要么心不在焉地将其添加到酒中/etc/apt/sources.list
,要么酒以我同样心不在焉的方式赞同。具体来说,我没有使用标准的 wine 构建,而是使用最新的不稳定版本来测试项目的某些内容。