前言
之前把手机作为智能家居控制中心安装了homeassistant,达到了能用的目的。但每次版本更新总是非常不爽,意味着有些组件需要跟随升级。那么,如果可以在手机上跑docker的话,一句话就能更新容器,岂不美哉。
查询资料后发现确实可行,遂动手实现,并记录一下过程。
前置技能:
一点linux知识,能根据资料编译内核。
会刷安卓手机系统,并root。
使用设备:
红米4x 手机最好是有大量第三方固件,官方开源较好的,可以更容易的操作,如小米、一加、三星等。
一台linux电脑
开始操作
选择固件
一开始准备在MIUI上直接进行操作,在git上找到MIUI开源的kernel,下载后编译。编译完成后发现没有wifi驱动,根据官方资料下载高通相应材料,发现非常巨大,耗费时间非常长,十几个小时未完成下载,故放弃此方案。有大神知道如何操作还请指教一二。
无法使用官方原版,那就去找第三方开源的也可以。在xda上找了最新的一个包
下载后使用orangefox刷入系统,刷入面具后root,之后开始编译kernel。
编译kernel
安装termux,然后执行以下操作。
pkg install wget tsu
wget https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh
chmod +x check-config.sh
sed -i '1s_.*_#!/data/data/com.termux/files/usr/bin/bash_' check-config.sh
sudo ./check-config.sh
此时会有很多 CONFIG 都处于 missing 的状态,记录下来,我们需要对必要内核配置的缺失, 尽量补全缺少的。
以该kernel为例,下载kernel后,修改santoni_treble_defconfig,把需要的配置全部改为y,以及修改path。(此处由于我的核心没有修改的地方,故并未修改)最后执行
make santoni_treble_defconfig
此处可以先编译一次默认的,打包刷入后没有问题再进行修改,以避免出现问题不知道是不是自己改出来的。
重新打包boot.img
等到编译完成,备份当前系统的boot,并保留,以防自己的boot不能使用还能刷回。使用Android Image Kitchen将boot.img解包后,Image.gz-dtb替换原boot中的.img-kernel(注意名称一致性)。打包完成后刷入boot分区,完成。再次打开termux检测是否大部分都为enabled。
这里提供一下我自己编译的boot,刷入boot分区即可,仅在 crDroidAndroid-12.0-20220130-santoni-v8.1.zip 版本上测试通过。
https://wwb.lanzouw.com/iH62x003em9e密码:i13c
安装docker
pkg install root-repo
pkg install docker
运行如下设置
sudo DOCKER_RAMDISK=true dockerd --iptables=false
Termux从左边滑出并打开第二个终端窗口
sudo docker run hello-world
此时已经可以运行了
补充:如果有需要使用如下指令挂载cgroup
sudo mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
网络
网络建议使用net,bridge未成功。具体看这里。
完成之后,就可以拉取服务运行了,例如
安装homeassistant
sudo docker run -d --name="home-assistant" --restart unless-stopped -e "TZ=Asia/Shanghai" -v ~/homeassistant:/config --net=host --dns=114.114.114.114 homeassistant/home-assistant
安装Portainer
sudo docker run -d -p 9000:9000 --name Portainer --net=host --restart=always -v /data/docker/run/docker.sock:/var/run/docker.sock portainer/portainer
写在最后:
如果要实现在手机上跑docker服务,还有其他的一些可行方法。
比如mobian(该手机型号红米2)
https://wiki.mobian-project.org/
比如postmarketos,适配了一部分手机。
https://wiki.postmarketos.org/wiki/Devices
参考资料
主要来源:https://gist.github.com/FreddieOliveira/efe850df7ff3951cb62d74bd770dce27
xda:https://forum.xda-developers.com
小米内核:https://github.com/MiCode/Xiaomi_Kernel_OpenSource
小米百科:https://github.com/MiCode/Xiaomi_Kernel_OpenSource/wiki/How-To-Use