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

这篇具有很好参考价值的文章主要介绍了安卓手机部署ubuntu的lxc容器,并安装好dockerd。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 前置作业

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

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

pkg update
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都是绿字就行。

安卓内核 lxc systemd,android,linux,ubuntu,docker,linux

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

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

0. 安装termux

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

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

pkg  install  root-repo   #它会添加新源
termux-change-repo    # 选择Mirror group -> 选择Mirrors in China
pkg  install  tsu  lxc  which  

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

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

tsu
mount | grep 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 都要执行

# 修改/data/data/com.termux/files/usr/bin/lxc-setup-cgroups文件:
vi /data/data/com.termux/files/usr/bin/lxc-setup-cgroups
--- a/lxc-setup-cgroups   2020-07-24 05:01:51.000000000 +0800
+++ b/lxc-setup-cgroups   2023-10-30 12:28:23.758527725 +0800
@@ -3,9 +3,7 @@ set -e
 export PATH=$PATH:/system/xbin:/system/bin
-if ! mountpoint -q /sys/fs/cgroup; then
-       mount -t tmpfs -o mode=755,nodev,noexec,nosuid tmpfs /sys/fs/cgroup
-fi
+mount -t tmpfs -o mode=755,nodev,noexec,nosuid tmpfs /sys/fs/cgroup
 for cg in blkio cpu cpuacct cpuset devices freezer memory; do
        if [ ! -d "/sys/fs/cgroup/${cg}" ]; then
@@ -16,3 +14,7 @@ for cg in blkio cpu cpuacct cpuset devic
                mount -t cgroup -o "${cg}" cgroup "/sys/fs/cgroup/${cg}" || true
        fi
 done
+
+mkdir -p /sys/fs/cgroup/systemd;
+mount -t cgroup cgroup -o none,name=systemd /sys/fs/cgroup/systemd;
+

配置网络,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(以后每次重启设备后,都要执行)

sudo umount /sys/fs/cgroup
sudo umount /debug_ramdisk/.magisk/mirror/sys/fs/cgroup
# 上面两个umount只需安装新lxc容器,需要执行。主要用于排除对lxc的干扰。
tsu -s "lxc-setup-cgroups"

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

tsu
lxc-create -t download -n ubuntu -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images --no-validate 
# 然后选择“ubuntu”, “bionic”,“arm64” ## !!注意不要选成amd64了
# 等待系统下载完成  

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

# vim开启鼠标的话,可输入“:set mouse=n”关闭
# 使用vi设置root密码:
vi  /data/data/com.termux/files/usr/var/lib/lxc/ubuntu/rootfs/etc/shadow
--- a/shadow    2023-10-31 08:57:36.605348208 +0800
+++ b/shadow    2023-10-31 08:58:10.808684949 +0800
@@ -1,4 +1,4 @@
-root:*:19598:0:99999:7:::
+root:paa5KD6arxLr2:19598:0:99999:7:::
 daemon:*:19598:0:99999:7:::
 bin:*:19598:0:99999:7:::
# 修改密码,就是修改用户名后 2 个:之间的内容,星号改为:paa5KD6arxLr2,这个密码的明文是123456

5. 启动lxc容器

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

lxc-start -n ubuntu -d -F    # 启动 ubuntu 系统
#登录用户名为root,密码为123456

#登录lxc容器后,再在lxc容器里,执行如下配置命令:
passwd root #启动后,立即使用passwd修改root密码
#修改源
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse" > /etc/apt/sources.list
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
apt update
# 没有网络的话,需要修复一下
### vi /etc/resolv.conf  #修改dns(apt更新不了,就修改dns,然后ping一下www.baidu.com)
# 测试一下 apt update, 还是没有网络的话,执行以下 2 条命令:
### groupadd -g 3003 aid_inet  执行这命令可能提示 aid_inet 已经存在,那就执行第 2 条命令即可
### usermod -G nogroup -g aid_inet _apt

#安装sshd,并配置root登录允许,开机自启动
apt install openssh-server
vi /etc/ssh/sshd_config  #修改为:PermitRootLogin yes
systemctl restart sshd
#改时区
date
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date 

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

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

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

# 以下命令需要在lxc容器外面执行

# 开启网络转发
tsu -s "sysctl -w net.ipv4.ip_forward=1" 
# 清理安卓防火墙
tsu -s "iptables -t filter -F"
tsu -s "iptables -t filter -X"
tsu -s "iptables -t nat -F"
tsu -s "iptables -t nat -X"
tsu -s "iptables -t raw -F"
tsu -s "iptables -t raw -X"
tsu -s "iptables -t mangle -F"
tsu -s "iptables -t mangle -X"
# 添加路由
tsu -s "ip rule add pref 1 from all lookup main"
tsu -s "ip rule add pref 2 from all lookup default"
# 这里的192.168.1.1需要换成自己当前网络的网关ip或路由器的ip
tsu -s "ip route add default via 192.168.1.1 dev wlan0"
tsu -s "ip rule add from all lookup main pref 30000"

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

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

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
update-alternatives --set iptables /usr/sbin/iptables-legacy  # 切换到传统iptables模式
# 启用 docker
service docker start
service docker restart
systemctl enable docker
# 测试docker是否正常工作
docker run hello-world

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

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

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

tsu
echo "lxc.cgroup.devices.allow = c 10:200 rwm" >> /data/data/com.termux/files/usr/share/lxc/config/common.conf.d/ubuntu.conf

3. 其他补充

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

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

lxc.init.cmd = /sbin/init systemd.unified_cgroup_hierarchy=0
lxc.cgroup.devices.allow = c 10:200 rwm
lxc.mount.entry = /storage/self/primary mnt/ none bind 0 0
lxc.mount.entry = /data data/ none bind 0 0
lxc.mount.entry = /system system/ none bind 0 0 

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

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

# 在lxc容器内部,执行如下配置:
rm  -f  /etc/resolv.conf  #删除旧文件(旧文件是一个软链接)
echo "nameserver 8.8.8.8" > /etc/resolv.conf
systemctl   stop   systemd-resolved
systemctl   disable   systemd-resolved
systemctl   mask  systemd-resolved​

3. 停止容器的方法

# 方法一:
sudo lxc-stop -n 容器名  -k   # 强行停止 termux,lxc 容器并不会停止,所以还是需要用命令
# 方法二:
# 进入容器,执行 `poweroff` 命令

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

# cat start_ubuntu.sh


#!/data/data/com.termux/files/usr/bin/bash

BootLog() {
        echo `date` >> myboot.log
        echo `id` >> myboot.log
        echo `pwd` >> myboot.log
        env >> myboot.log
        echo "============================================" >> myboot.log
}

BootLog
termux-wake-lock

tsu -s "sysctl -w net.ipv4.ip_forward=1"
tsu -s "iptables -t filter -F"
tsu -s "iptables -t filter -X"
tsu -s "iptables -t nat -F"
tsu -s "iptables -t nat -X"
tsu -s "iptables -t raw -F"
tsu -s "iptables -t raw -X"
tsu -s "iptables -t mangle -F"
tsu -s "iptables -t mangle -X"
tsu -s "ip rule add pref 1 from all lookup main"
tsu -s "ip rule add pref 2 from all lookup default"
tsu -s "ip route add default via 192.168.1.1 dev wlan0"
tsu -s "ip rule add from all lookup main pref 30000"

tsu -s "lxc-setup-cgroups"
tsu -s "lxc-start -n ubuntu"

 5. 补充其他问题解决

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

mount -n -o remount,suid /

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

usermod -g aid_inet 用户名

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

sudo chroot $PREFIX/var/lib/lxc/容器名/rootfs bin/passwd
按提示
输入密码 回车
再次输入密码 回车

其他参考链接:
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 啤酒。文章来源地址https://www.toymoban.com/news/detail-773118.html

到了这里,关于安卓手机部署ubuntu的lxc容器,并安装好dockerd的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov5安卓(鸿蒙)手机部署

    本篇文章主要是针对yolov5s在安卓(鸿蒙)手机部署过程进行记录。 有关YOLOv5其他资料可以参考我以下文章进行学习: C++版tensorrt YOLOv5推理 如何通过YAML文件修改YOLOv5网络 YOLOv5通道剪枝 YOLOv5图像分割代码详解1 YOLOv5图像分割之NMS YOLOv5+霍夫变换之车道线检测 YOLOv5损失函数详解

    2024年02月09日
    浏览(40)
  • 【学习笔记】部署yolov8到安卓手机

    首先你需要配置好pytorch环境,本文不再详细阐述,若未配置好环境,可以参考我的另一篇博客:https://blog.csdn.net/liujiahao123987/article/details/128743017 yolov8的安装可参考:https://blog.csdn.net/weixin_44120785/article/details/128681117 官网链接:https://developer.android.google.cn/ 自行配置AS环境(这方

    2024年02月03日
    浏览(40)
  • 将安装好的图标添加到Ubuntu桌面

    linux下安装的所有软件的图标都在、usr/share/application中,如下图所示: 那么如何找到此路径呢? 1.点击文件,继续点击“其他位置” 2.选择“计算机” 3.选择“usr” 4.选择“share” 5.选择“applications” 6.选完applications后会出现你已经安装好的所有软件图标 7.找到你想要添加到

    2024年02月13日
    浏览(37)
  • 无线投屏手机(安卓)屏幕到 Linux(ubuntu 22.04)桌面

    1.安装 scrcpy 安装 scrcpy会自动安装 adb. 这个版本的adb功能不是最全的,需要删掉,然后从链接 https://dl.google.com/android/repository/platform-tools-latest-darwin.zip 下载,解压安装即可。 2. 在手机上 打开开发者模式和  USB调试模式,并且允许无线调试,会看到下面一个界面: 点击 \\\"pair

    2024年02月16日
    浏览(53)
  • 轻量化的yolov8部署到安卓Android手机端

    一、pytorch环境配置和yolov8源码安装 首先在电脑上需要配置好pytorch环境,和yolov8源码的下载 然后针对yolov8做自己的轻量化改进 二、下载Android Studio和ncnn-android-yolov8 1. Android Studio官网链接: 下载 Android Studio 和应用工具 - Android 开发者  |  Android Developers 自行配置AS环境和JDK 我

    2024年01月19日
    浏览(45)
  • [手机Linux] 二,安卓手机安装linux系统, 部署完全属于自己的服务器(Linux Deploy)

    背景: 之前买过一台阿里云服务器1G1核的,玩起来真的是卡脑壳,卡卡的,经费在燃烧却得不到灰烬,而是萌想做一台完全属于自己的服务器,而是百度发现原来我们的安卓手机也可以当服务器器(Linux),而是翻了一下箱底找到了曾经的宝贝,差点当垃圾(其实可以拿去市场换

    2024年02月04日
    浏览(52)
  • 新手小白安装aio小主机布置家庭网络-4-proxmox-ve安装LXC、pve创建ct容器安装docker。

    PVE是使用Debian系统作为底层。我们创建Debian LXC容器。 下载Debian11DE  ct模板 创建CT,一定把无特权容器前面的勾去掉。我们需要一个特权的容器。勾选嵌套。完成后不要启动! 。 开启ct102容器前,进入pve shell 设置ct102容器设置 添加代码 ctrl+x保存配置,y确认,回车。

    2024年02月15日
    浏览(48)
  • 从零开始部署yolov8到安卓手机详细教程【Android Studio】

    首先你需要配置好pytorch环境,本文不再详细阐述,若未配置好环境,可以参考: https://blog.csdn.net/weixin_43507693/article/details/109015177 安装yolov8可参考: https://blog.csdn.net/weixin_44120785/article/details/128681117 Android Studio官网链接:https://developer.android.google.cn/ 自行配置AS环境(网上很多相

    2024年01月25日
    浏览(48)
  • Ubuntu2204部署容器引擎Containerd

    为什么使用containerd? 使用containerd的原因主要有两点吧,第一个是docker在k8s1.24以后不再支持,如果需要在k8s中继续使用docker作为容器引擎,我们需要额外部署cri-dockerd;其次即便我们部署cri-dockerd,docker最后也是调用containerd;所以为了减少调用提高性能,我们直接使用contai

    2023年04月10日
    浏览(74)
  • Ubuntu18.04下使用安卓手机Camera和IMU信息运行ORB-SLAM2

    1、下载Android_Camera-IMU,将其中的Camera-Imu.apk文件发送至手机端进行安装。 下载命令: git clone https://github.com/hitcm/Android_Camera-IMU.git  发送至手机的文件在手机端安装以后的软件  在手机端安装好以后的软件如下:  2、安装功能依赖包:sudo apt-get install ros-melodic-imu-tools  # 修改

    2024年02月09日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包