安卓与docker----在旧手机上部署服务

nicevoice 2024-01-12 PM 62℃ 0条

前言

之前把手机作为智能家居控制中心安装了homeassistant,达到了能用的目的。但每次版本更新总是非常不爽,意味着有些组件需要跟随升级。那么,如果可以在手机上跑docker的话,一句话就能更新容器,岂不美哉。

查询资料后发现确实可行,遂动手实现,并记录一下过程。



前置技能:

一点linux知识,能根据资料编译内核

会刷安卓手机系统,并root。

使用设备:

红米4x 手机最好是有大量第三方固件,官方开源较好的,可以更容易的操作,如小米、一加、三星等。

一台linux电脑

开始操作

选择固件

一开始准备在MIUI上直接进行操作,在git上找到MIUI开源的kernel,下载后编译。编译完成后发现没有wifi驱动,根据官方资料下载高通相应材料,发现非常巨大,耗费时间非常长,十几个小时未完成下载,故放弃此方案。有大神知道如何操作还请指教一二。

无法使用官方原版,那就去找第三方开源的也可以。在xda上找了最新的一个包

https://forum.xda-developers.com/t/rom-official-10-0-11-0-12-0-crdroidandroid-6-x-7-x-8-x-santoni-stable.4176461/

下载后使用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


扫描二维码,在手机上阅读!
标签: 安卓与docker

非特殊说明,本博所有文章均为博主原创。

评论啦~