ubuntu降级
上一级页面:index-wsl
前言
降级是很危险的,降级需要谨慎!!
备份文件
首先备份整个系统,这个方法多样,例如wsl的备份方法见wsl2安装与基本环境配置
然后备份apt源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 注意下面这个用mv,因为降级时最好不启用第三方PPA
sudo mv /etc/apt/sources.list.d /etc/apt/sources.list.d.bak
安装依赖
会用到aptitude和wget(wget可用curl替代)来处理依赖关系。需要编辑文件,会用到vim。
sudo apt-get update
sudo apt install aptitude wget vim
由于 apt
源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及CA证书。
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
找到系统的版本号
详细的版本号以及降级所用到的源可以参考ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
- 2204 jammy
- 2110 impish
- 2104 hirsute
- 2004 focal
修改更新优先级以及修改源信息
修改更新优先级:
修改或增加文件/etc/apt/preferences.d/downgrade.pref
只填写以下内容
其中,两版本号中的较旧版本号(如下文的focal)优先级设为1001
Package: *
Pin: release a=focal
Pin-Priority: 1001
Package: *
Pin: release a=groovy
Pin-Priority: 60
修改源信息:
修改 /etc/apt/sources.list
文件,
只放入以下两行
较旧的版本号放在前面,较新的版本号放在后面
deb http://archive.ubuntu.com/ubuntu focal main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu groovy main restricted universe multiverse
hold libc6为降级做准备
libc6是很容易出问题的一个重要依赖,降级之前hold它
sudo apt-mark hold libc6
dist-upgrade
更新源信息并保证依赖链正常
sudo apt update
sudo apt -y --fix-broken install
接下来要降级了!!!!
使用apt-get dist-upgrade
或apt full-upgrade
- 小心,最好不要使用
-f
--fix-broken
- 小心使用
--fix-missing
# 建议多次重复一次,保证成功降级所有应当降级的包
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
清理无用包
sudo apt autoremove
dist-upgrade与full-upgrade的区别只在命令行的输出上不同,见命令行 - apt full-upgrade vs apt-get dist-upgrade - Ask Ubuntu
dist-upgrade报错怎么办?
有时候会失败,这时候不要着急,检查一下版本号
lsb_release -a
版本号降下来了:
版本号降下来就可以了,接着往后面看下一小节即可。
版本号没降下来:
版本号没降下来也别慌,这种情形下,
- 先进行重启
- 跟着报错消息操作,但最好不要使用
-f
--fix-broken
,并且小心使用--fix-missing
fix 报错,找不到GLIBC_2.34
下面这个报错也别慌
version `GLIBC_2.34' not found (required by /bin/sh)
解决方案见debian - 如何修复 “/lib/x86_64-linux-gnu/libc.so.6: 版本 'GLIBC_2.14' 未找到”?- 超级用户 (superuser.com)
我这是在从impish降级到hirsute的过程中出错的,
搜索后发现,从 Ubuntu 官方仓库 下载对应版本的 libc6 ,我这里是2.34
并且由于我是从impish往下降级的,所以应当在impish仓库找到对应包:
安装libc6_2.34
sudo dpkg -i libc6_2.34-0ubuntu3.2_amd64.deb
尝试替换源信息到较新的版本(两个版本中教新的版本),
sudo vim /etc/apt/sources.list
下面给出对应的版本号参考值,见2.33-0ubuntu5 : libc-bin : amd64 : Hirsute (21.04) : Ubuntu (launchpad.net)
- 20.04 --> 2.31
- 21.04 --> 2.33
- 21.10 --> 2.34
之后就是见下文的恢复依赖链一节。
恢复依赖链后重新从开头开始操作,一般这个报错的原因是,你没有hold libc6
fix 报错,找不到ldconfig
看这篇14.04 - 无法安装 libc6-dev - 询问 Ubuntu (askubuntu.com)
这里,由于我们是高版本向低版本降级,参考找不到glibc,我们一样去寻找高版本的ldconfig
ldconfig被包含在了libc-bin包中(注意不是libc6-bin),libc-bin包的版本号参考下面列出的版本号即可
下面给出对应的版本号参考值,见2.33-0ubuntu5 : libc-bin : amd64 : Hirsute (21.04) : Ubuntu (launchpad.net)
- 20.04 --> 2.31
- 21.04 --> 2.33
- 21.10 --> 2.34
如何找到正确版本号
访问链接,这里的hirsute替换为你两个版本号中较高的一个
https://launchpad.net/ubuntu/hirsute
如图所示,在图中位置搜索包名,如libc6,libc-bin等
降级完成后重启
完成后重启
wsl.exe --shutdown
其他 debian 系版本降级方法类似
unhold libc6并更新
在修改更新优先级以及添加完整源信息之前,必须先unhiod libc,这是为了保证将libc成功降级到较旧版本
sudo apt-mark unhold libc6
保证依赖链的正常很重要!!
sudo apt update
sudo apt -y --fix-broken install
更新,建议多次重复几次,保证成功降级所有应当降级的包
# 建议多次重复一次,保证成功降级所有应当降级的包
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
清理无用包
sudo apt autoremove
修改更新优先级以及添加完整源信息
移动文件
sudo mv /etc/apt/preferences.d/downgrade.pref ~/downgrade.pref
添加完整的源,可以参考ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-proposed main restricted universe multiverse
恢复依赖链
保证依赖链的正常很重要!!
sudo apt update
sudo apt -y --fix-broken install
更新,建议多次重复几次,保证成功降级所有应当降级的包
# 建议多次重复一次,保证成功降级所有应当降级的包
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
清理无用包
sudo apt autoremove
dist-upgrade与full-upgrade的区别只在命令行的输出上不同,见命令行 - apt full-upgrade vs apt-get dist-upgrade - Ask Ubuntu
然后将提示中,被保持(不能自动升级)的包都卸载
- 这非常重要,因为要保持依赖链,不然在下次降级时会出bug
sudo apt remove package_name1 ....
再次重复上面操作
sudo apt update
sudo apt -y --fix-broken install
更新,建议多次重复一次,保证成功降级所有应当降级的包
# 建议多次重复一次,保证成功降级所有应当降级的包
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
sudo apt-get dist-upgrade
清理无用包
sudo apt autoremove
完成后重启,
wsl.exe --shutdown
处理PPA源
完成降级后,还需要处理PPA源的问题
先更改更新优先级
sudo vim /etc/apt/preferences.d/downgrade.pref
其中focal是降级之后的最后版本,其余的是较新的版本
Package: *
Pin: release a=focal
Pin-Priority: 1060
Package: *
Pin: release a=groovy
Pin-Priority: 60
Package: *
Pin: release a=hirsute
Pin-Priority: 60
Package: *
Pin: release a=impish
Pin-Priority: 60
Package: *
Pin: release a=jammy
Pin-Priority: 60
更改原本的PPA源,更换成新的源,例如
sudo add-apt-repository ppa:kubuntu-ppa/backports
sudo apt update
进行更新
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
去除更改优先级的配置文件
sudo rm -rf /etc/apt/preferences.d/downgrade.pref
进行更新
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
sudo apt update && sudo apt full-upgrade
如果降级的两个版本号之间相差多个版本
如果降级的两个版本号之间相差多个版本,
请先在相邻的两个版本之间降级
然后重复上面的操作,多次在相邻的两个版本之间降级,来达到目的
例如:22.04-->20.04,中间有多个版本
- 2204 -> 21.10
- 21.10 -> 21.04
- 21.04 -> 20.04
其他
字符串替换命令
sed 's/search_string/replace_string/' filename
示例
sudo sed -i.bak 's/jammy/focal/g' /etc/apt/sources.list.d.bak/microsoft-edge-stable.list
参考、引用、致谢
ubuntu20.10降级ubuntu20.04LTS - Leif160519's blog (github.icu)
标 题:ubuntu20.10 降级 ubuntu20.04LTS
作 者:Leif160519
出 处:https://github.icu/articles/2020/11/10/1604972751680.html
关于博主:坐标南京,运维工程师,如有问题探讨可以直接下方留言。
声援博主:如果您觉得文章对您有帮助,可以评论、订阅、收藏。您的鼓励是博主的最大动力!
本文由 简悦 SimpRead 转码, 原文地址 github.icu