近日,我尝试把Ubuntu Touch
装入手机,以便取代x86服务器(家用时噪音太大)。刷机过程很顺利,电脑下载UBports Installer 汉化版,一路按提示操作即可,比刷安卓简单多了。
按网上现有教程,换了国内镜像源,更新了apt
,装好nginx、Alist、AdGuard Home、AList等软件后,发现每次重启手机后,新装的这些软件的服务均未启动。ssh
或者adb shell
登陆上去后,手动启动各个服务又恢复正常。经过若干天排查后,终于找出问题原因。
原来是system
分区为只读,导致开机时systemd
试图启动这些服务时报错。而我ssh
或adb
登陆后又总是习惯先执行sudo mount -o remount,rw /
,以可读写权限重新挂载system
分区,所以才一直没找到造成问题的真正原因,浪费了好几天。
经多方查找,官方曾经提供解除只读的方法,sudo touch /userdata/.writable_image
,实测发现对Ubuntu 20.4
失效。后来在/etc/fatab
文件中第一行发现/dev/root / rootfs defaults,ro 0 0
,尝试将ro
改为rw
,重启后发现被复原。
在官方论坛找到一篇帖子证实了/etc/fatab
确实会在系统启动时被覆盖。fstab getting overwritten?
绞尽脑汁在官方git
库中各种搜索后,在<boot 分区>/ramdisk/scripts/halium
找到一行shell脚本: echo "/dev/root / rootfs defaults,ro 0 0" >>$FSTAB
最终解决方案为:
- 打开刷机时用的电脑
- 找到
%APPDATA%\Roaming\ubports\lavender\Ubuntu Touch\boot-xxxxxxx.tar.xz
并解压出boot.img
- 解包
boot.img
,将其中/ramdisk/scripts/halium
里第320行左右,找到echo "/dev/root / rootfs defaults,ro 0 0" >>$FSTAB
,将其中的ro
改为rw
,保存后重新打包 - 手机重启到fastboot模式(重启前按住
音量-
不放,直到完全黑屏只亮背光)(注意,刷入Ubuntu Toch会去掉[fastboot的图片](93976f283b08c951af37eaf379f903e0.jpg (800×517)),导致此处黑屏,但功能正常) fastboot
重刷boot
分区fastboot flash boot /your/path/to/new/boot.img
经过以上处理,Ubuntu Touch
系统分区(system)只读的特性被彻底抹除,日常使用体验(只用CLI
、不用GUI
)与Ubuntu
桌面版别无二致。
总结近段日子,发现用手机刷Ubuntu Touch
代替x86
服务器有两大障碍,一是system
分区太小,装不了多少软件。好在网上有linux给磁盘重新分区的教程,帮我把分区扩大为12G。第二大障碍每次重启系统都回复只读状态。经过全网搜索,未发现其他有效的解决方案,故特作此文记录,以备日后查询。