0%

ArchLinux滚挂的一次修复

我的Arch一年没更新 滚挂了

事情是这样的:好久没用另一台电脑,登入系统的时候打开chrome想更新下插件,好死不死的退了google账号,想重新登入的,发现google账号被疯狂登出,整了一个小时才发现是chrome的问题(我是弱智)。我用的是chrome的开源版:chromium,自从21年2月份开始google的登陆api收紧了政策,只有chrome可以登陆google账号。

一开始不知道这个政策,以为是chromiu的版本问题,事发的版本是83,我用pacman upgrade了下到了93的版本,启动chromium的时候提示动态链接库缺失。

这个问题其实我是知道的,因为arch的版本更新政策比较激进,可能半个月就更新了一次,且大部分上游的软件都依赖这些最新的库,所以如果是老系统更新新软件很容易出现动态链接库的问题,我本来也没在意,pacman -F 查了下软件包的依赖库,打算更新下以来。

但是! 问题就出在了更新依赖库,我更新了一个底层依赖库 icu,导致我reboot的时候gnome-shell这些依赖老版本库的应用都无法启动了,只能进tty看了alt + ctrl +3

回退也很麻烦我都忘了刚刚的icu是啥版本了,还更新几个其他的库,这样看来,只能全盘更新了,但是全盘更新估计也是出问题的。原因一个是我的系统太久没更新了一年了,版本跨太大还不知道有啥bug。其次我的内核是自定义的用了签名机制,如果内核更新了,原来的内核哈希码肯定对应不上新的内核,必定失败的。没办法,怀着忐忑的心情 sudo pacman -Syu

嗯 果然挂了

shim 签名问题

因为的内核是自定义编译的内核,比较适配我的surface硬件,为了美观开了secureboot,不然每次开机上面红色的锁的刺眼ui真的难受。secureboot是微软的一个机制,微软信任windows系统和几个第三放的bootloader(内核加载器)。这几个内核加载器呢需要我来指定内核,怎么指定呢,用shim签名(哈希)来做这件事。

举例:我的编译好的新内核,我用shim签名生成了哈希结果,我需要再下一次开机启动是enroll,引入这个签名,这样secureboot启动bootloader,bootlaoder查看自己的信任列表,有这个内核,可以启动。

签好名后还需要重新编写启动的配置文件,因为需要指定内核,真麻烦

重新配置内核引导

arch的livecd在做,家里突然没网了,下次整

Welcome to my other publishing channels