记一次降级libc6的教训
数天前为了在ubuntu 20上wine可以在ubuntu 18上用wine 3.0运行的寒蝉(其实就是电脑太旧了,引发各种问题),在ubuntu 20上安装了wine 3.0。处理依赖的时候把libc6降级了……因为是降级,dpkg也没提示,于是就遇到了基本上运行什么都报错,甚至不能关机的尴尬局面……
后来直接不能开机了,开机就Kernel Panic
解决
查了一下,libc6是ubuntu的c库,依赖之的程序占了大部分。
当时同一时间也有降级其它library,还好有保留deb文件。根据降级后terminal的输出错误,可以知道至少libc6有问题,又因为libc6是关键的库,先从libc6开始修复。
当时还有ubuntu 18可以用(虽然因为不明原因关机会死机……),于是进入ubuntu 18,从packages.ubuntu.com下载libc6的deb文件。当时(现在也是)只知道linux的点点皮毛,还不清楚deb文件是怎么被安装的,于是先提取看看。
提取后可以看到一些设置文件,和占了大部分的带lib前缀的二进制文件和symbol links,文件夹结构和根目录下的文件夹结构很类似,应该是直接覆盖吧。回到出问题的ubuntu 20的根目录中,果然提取后的文件在根目录下大部分都一一对应。
为了备份ubuntu 20的库,一开始还手动创建了一堆文件夹,半自动地复制了一堆文件,但很奇怪的是重启之后备份文件(包括文件夹)都不见了,这里的原因就不清楚了,无奈直接暴力复制整个/lib/文件夹,和几个其他的文件夹。虽然,但还是学会点东西:
复制某目录下所有内容
ls <Directory> | xargs cp -t <Directory>
xargs: 将ls输出的列表转换成参数
cp的-t参数: 指定目的文件夹
备份完之后直接把从packages.ubuntu.com下载来的libc6提取的文件覆盖到ubuntu 20的根目录,chroot到根目录试一下apt,可以使用apt了,虽然不知道是不是chroot的原因不能下载package list。
重启进入ubuntu20 recovery mode,成功开机。联网,root command prompt下更新包,把libc6和其他几个包完全更新,再重启,正常开机成功
posted on 2021-02-10 20:53 FishBoneEK 阅读(1737) 评论(0) 编辑 收藏 举报