环境

LAPTOP:I5-11300H,chrome os R97 -> R98,Brunch r97 stable 20220121,装有chromebrew包管理,volteer镜像。


出现的问题

brunch框架选项启用了enable_update。原生更新到R98(14388.52.098.0.4758.91)后开机

问题:

  • Android无法启动,运行任何app都是转圈圈

  • shell打开后出现“GLIBC_2.33' not found (required by /bin/bash) /bin/bash: /usr/local/lib64/libc.so.6: version”,无法使用常用的一些命令,运行全是报这个。

  • 运行crew直接segment fault。

  • 无法关机,点关机黑屏后一直处于黑屏状态。

  • 无法从退出访客模式,状况与无法关机一样


尝试解决问题

首先
重更新了一遍brunch,发现问题依旧存在。
然后关机,发现无法关机,便强制电源键关机了,再开时跑码提示ntfs3g报dirty,无法挂载。
回到win,运行chkdsk /f /r 磁盘号后跑了五个stage,重启,正常进cros。

能进cros了后再去修shell,glibc能报错就是因为环境问题,装了crew的包后默认加载路径优先加载/usr/local下的(crew安装软件包就在这),版本问题导致报错了。
按照issue的回复解决了。(通过LD_LIBRARY_PATH指定环境后更glibc)

再解决android问题,优先想到了crosvm,在shell里调用了crosvm后发现直接报了某个so的未知符号。。。立马就明白又是local下软件包的锅,直接删了local下所有文件还原环境。此时crosvm能正常运行

重启后发现android依然无法打开,linux正常。通过cat /var/log/messages |grep arcvm发现日志里arcvm是在运行的。(arcvm为google在cros上启动android的虚拟机),打算手动重启下android容器。

在shell端使用sudo vmc restart arcvm后发现依旧无法使用android,这就得进android里去看具体日志了。

在shell端使用sudo android-sh进去后,用户显示为root用户。但是实际是这个用户没有任何用。。。。dmesg没权限,setenforce没权限,连ls都没权限。。具体不清楚是在selinux里规则限制了还是别的限制。

通过logcat查看日志发现具体问题所在了,(此处图炸了)iorapd的一个sqlite数据库打不开了。这像极了android上关了fsync后异常关机丢数据的情况。一想,哦,前面报了一次dirty,估计那时候只是因为环境问题导致crosvm起不来,无法关机强制关机后把数据丢了。。。一般来说只要把这个坏文件删了让它重新创一个即可,但是,这用户下rm掉它压根没有权限(nnd,google你玩阴的是吧)

诶嘿嘿,啊~哈哈哈哈哈哈…id=0的root来咯咯哈哈哈。唉,这 这,这都root权限都有了,怎么还不用呀。google啊,这大伙都不敢用,有人说,说是有人在root里下了permission denied。

删不掉文件,又没root,也没办法外部访问data,那就清数据咯,尝试使用sudo vmc destroy arcvm,发现在vmc list里arcvm没了,但是实际还在,所以尝试单独清掉data也没戏了。系统服务没起来,adb显示未授权状态,连不进去;即使连进去,也没权限删。

抱着试试的心态,决定尝试尝试修改内置的android镜像,在init.rc类的文件里写rm(

cros android的system镜像是以squashfs打包的,直接挂载为回环设备的情况下无法修改,需要解包改后打包。cros下确实自带unsquashfs,然而,镜像用lz4方式打包的,自带的不支持这压缩算法。。不愧你google,这都想到了

挪到另一台pc上进行修改,在rc里写上exec rm 坏的数据库文件,打包,放回去,用vmc命令重启,发现文件依旧在。算了放弃直接powerwash(

chromeos好就好在,linux的东西可以整个备份成一个文件,其他设置,布局,壁纸,全都同步在云端了。powerwash后一切正常(


exp

下次更新前先确保crew包管理下有没有软件包需要更新,以及issue下有没有人先提出了问题,环境出现问题后不如直接把/usr/local/*删了来还原环境(