安卓手机部署ubuntu的lxc容器,并安装好dockerd

nicevoice 2024-01-12 PM 63℃ 0条

1. 前置作业

刷机获取root是必须的,而且必需要有一个支持docker的内核。
检测当前设备支持docker的方法:

安装Termux并初始化。 这里给个安装包下载链接:[termux app链接]
下载Moby的脚本用于检查缺少的内核功能

  1. wget https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh

  2. sed -i '1s_.*_#!/data/data/com.termux/files/usr/bin/bash_' check-config.sh

查看CONFIG都是绿字就行。

编译支持docker的安卓内核的方法,就不在此写了,有很多链接可以参考。
比如:自定义小米10pro(代号cmi)的kernel内核,并开启安卓支持docker

2. 开始安装ubuntu的lxc容器,以及安装dockerd

0. 安装termux

这一步就不用说了,因为下面都是在termux里执行的。本身验证内核是否符合要求,就已经要求安装好termux了。这里再发一下安装包下载链接(赚赚积分):[termux app链接]

1. 安装lxc(仅第一次要执行)

  1. pkg  install  root-repo   #它会添加新源

  2. termux-change-repo    # 选择Mirror group -> 选择Mirrors in China

  3. pkg  install  tsu  lxc  which  

2. 配置cgroup和网络(仅第一次要执行)

执行如下命令检查cgroup版本:

注意看 /sys/fs/cgroup type cgroup2 这行,根据显示的信息,我的是 cgroup2

如果你是 cgroup1 版本,则执行

echo "lxc.init.cmd = /sbin/init systemd.unified_cgroup_hierarchy" >> $PREFIX/share/lxc/config/common.conf.d/ubuntu.conf

如果你是 cgroup2 版本 执行

echo "lxc.init.cmd = /sbin/init systemd.unified_cgroup_hierarchy=0" >> $PREFIX/share/lxc/config/common.conf.d/ubuntu.conf

修改cgroup自动挂载脚本,cgroup1 和 cgroup2 都要执行

配置网络,cgroup1 和 cgroup2 都要执行

sed -i 's/lxc\.net\.0\.type = empty/lxc.net.0.type = none/g'  /data/data/com.termux/files/usr/etc/lxc/default.conf

3. 挂载cgroup(以后每次重启设备后,都要执行)

  1. sudo umount /sys/fs/cgroup

  2. sudo umount /debug_ramdisk/.magisk/mirror/sys/fs/cgroup

  3. # 上面两个umount只需安装新lxc容器,需要执行。主要用于排除对lxc的干扰。

  4. tsu -s "lxc-setup-cgroups"

4. 安装ubuntu的 lxc 容器(仅第一次要执行)

到这里,先别急着启动系统,因为如果启动了 你会发现不知道登录用户名和密码

5. 启动lxc容器

第一次启动,使用如下命令启动,并立即做一些配置:(仅第一次要执行)

以后每次重启设备,使用如下命令启动:(以后每次重启设备后,都要执行)

tsu -s "lxc-start -n 容器名"

6. 配置路由和网络(以后每次重启设备后,都要执行)(这部分可以先执行,然后再启动lxc容器)

7. lxc里安装dockerd(仅第一次要执行)

在lxc容器里执行这些命令,安装 dockerd:

[重点] docker 镜像运行失败修复:

如果hello-world运行失败,则需要下载runc文件:[runc链接]。替换/usr/bin/runc文件,并添加可执行权限。

同时需要在lxc容器外部,再执行:

3. 其他补充

1. 目录挂载(仅第一次要执行)

在/data/data/com.termux/files/usr/share/lxc/config/common.conf.d/ubuntu.conf配置文件里,添加目录挂载,将安卓系统的system、data、sdcard目录挂载进去,方便使用。最终该配置文件里的内容如下:

  1. lxc.init.cmd = /sbin/init systemd.unified_cgroup_hierarchy=0

  2. lxc.cgroup.devices.allow = c 10:200 rwm

  3. lxc.mount.entry = /storage/self/primary mnt/ none bind 0 0

  4. lxc.mount.entry = /data data/ none bind 0 0

  5. lxc.mount.entry = /system system/ none bind 0 0 

 2. dns自动重置文件修复(仅第一次要执行)

lxc的dns配置文件/etc/resolv.conf会自动重置,需要这样配置:

3. 停止容器的方法

4. 这里把我用的termux启动lxc容器的脚本,提供给大家参考:

 5. 补充其他问题解决

解决普通用户不能用sudo的方法

mount -n -o remount,suid /

解决普通用户不能联网的方法

usermod -g aid_inet 用户名

初始密码修改为其他自定义值的方法

其他参考链接:
1. https://www.cnblogs.com/ifwz/p/17592111.html 
2. https://www.jianshu.com/p/1c3aa39d9eb4

4. 遗留问题

如果要拿手机当服务器来跑docker,还需要解决电池的问题。因为既然是跑服务,肯定是24小时接电源适配器的,这样时间长了,手机电池绝对遭不住。轻则鼓包漏气、后盖起翘,重则起火就得不偿失了。本人可不承担,请自行承担后果哦。

但古人有言,祸福相依,手机的电池,并非只会带来坏处。如果我们处理得当,相当于给我们的服务器自带了一个UPS,岂不美哉。
方法暂不公开了,如需技术协助,可以邮件我:w._heng@163.com,¥50 for 啤酒。

            </div>

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

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

评论啦~