首页 > 其他分享 >安卓运行 lxc + docker 教程

安卓运行 lxc + docker 教程

时间:2023-07-30 21:56:31浏览次数:48  
标签:安卓 sudo etc lxc cgroup ubuntu docker

by redblue (弗朗西斯科)

【 一 】

安装 lxc

手机打开 termux

一键更换北京大学源,执行

 echo "deb https://mirrors.pku.edu.cn/termux/termux-main stable main" > PREFIX/etc/apt/sources.list

安装 lxc

 pkg update
 pkg install root-repo
 pkg install lxc

【 二 】

关于 cgroup

 tsu

—— 检测 cgroup 版本

 mount | grep cgroup

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

如果你是 cgroup1 版本,执行
(执行 1 次即可,以后每次启动 无需再次执行)

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

如果你是 cgroup2 版本 执行
(执行 1 次即可,以后每次启动 无需再次执行)

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

配置网络,cgroup1 和 cgroup2 都要执行
(执行 1 次即可,以后每次启动 无需再次执行)

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

【 三 】

挂载 cgroup

共 2 条命令
(以后每次重新启动 lxc 都需要执行)

 sudo mount -t tmpfs -o mode=755 tmpfs /sys/fs/cgroup && sudo mkdir -p /sys/fs/cgroup/devices && sudo mount -t cgroup -o devices cgroup /sys/fs/cgroup/devices && sudo mkdir -p /sys/fs/cgroup/systemd && sudo mount -t cgroup cgroup -o none,name=systemd /sys/fs/cgroup/systemd
 sudo lxc-setup-cgroups

【 四 】

启动 lxc

 tsu 
 lxc-create -t download -n my-container -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images --no-validate

ubuntu 22.04 为例
输入

ubuntu
jammy
arm64

等待完成

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

mt 管理器,打开

/data/data/com.termux/files/usr/var/lib/lxc/ubuntu/rootfs/etc/shadow

这个文件,把 root 和 ubuntu 用户后的密码改一下,改为这个加密密码

paa5KD6arxLr2

[具体细节]
修改密码,就是修改用户名后 2 个:之间的内容
修改前
root:*:19525:0:99999:7:::
ubuntu:!:19525:0:99999:7:::
修改后
root:paa5KD6arxLr2:19525:0:99999:7:::
ubuntu:paa5KD6arxLr2:19525:0:99999:7:::

启动 ubuntu 系统

 lxc-start -n ubuntu -d -F
 lxc-start -n my-container -d -F

输入用户名 和 密码
root 和 ubuntu 的密码都是 123456

建议 root 用户登录

【 五 】

ubuntu 系统后续配置

进入 ubuntu 系统以后,
( 1 )
执行

 sudo passwd root

可以修改 root 用户密码

( 2 )
更换为清华大学源
ubuntu22.04 更换清华大学源
共 4 条命令

 echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse" > /etc/apt/sources.list
 echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse" >> /etc/apt/sources.list
 echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse" >> /etc/apt/sources.list
 echo "deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse" >> /etc/apt/sources.list

( 3 )
修改 dns:

 echo "nameserver 8.8.8.8" > /etc/resolv.conf

但是这个文件会自动重置,也就是说安卓 lxc 有一个 dns 会自动重置的问题,
解决办法 在这篇文章末尾
[ 关于安卓 lxc 容器 dns 自动重置的
解决办法 ]

试着执行

 apt update

如果做了以上操作,
apt update 还是没有网络的话,
执行以下 2 条命令

  • 执行第 1 条命令可能提示 aid_inet 已经存在,那就执行第 2 条命令即可

     groupadd -g 3003 aid_inet
    
     usermod -G nogroup -g aid_inet _apt
    

执行

apt update

成功

( 4 )
ssh 连接

 apt install openssh-server

修改 ssh 配置文件,允许 root 用户的 ssh 连接,

 nano /etc/ssh/sshd_config

找到并用 #注释掉这行
PermitRootLogin prohibit-password
然后在它下面 1 行添加

PermitRootLogin yes

重启 sshd 服务

 systemctl restart sshd

( 5 )
改时区
描述:日期时间不对,需要改下时区

执行

date

发现日期时间不对

执行以下命令
(即设定时区 让它自动校正时间)

sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

执行

date

发现时间自动校正了

【 六 】

lxc 里运行 docker

安装 docker

 curl -fsSL https://get.docker.com -o get-docker.sh
 sh get-docker.sh

配置路由
(以后每次重新启动 lxc 都需要执行一次)

 apt install iproute2
getway=(sudo ip route get 8.8.8.8 | awk '{ for(i=1; i<=NF; i++) { if(i == "via") { print (i+1); break; } } }')
 sudo ip rule add pref 1 from all lookup main
 sudo ip rule add pref 2 from all lookup default
 sudo ip route add default via getway dev wlan0
 sudo ip rule add from all lookup main pref 30000

调整防火墙规则
(以后每次重新启动 lxc 都需要执行一次)

 update-alternatives --set iptables /usr/sbin/iptables-legacy

调整防火墙
(以后每次重新启动 lxc 都需要执行一次)

iptables -t filter -F
  • 如果可以正常使用了就不需要下面的命令
     iptables -t filter -X
    

[重点] docker 镜像运行失败修复
先下载文件 runc-arm64.zip,
下载点这里
下载以后,解压,
把里面的 runc 文件替换到
/data/data/com.termux/files/usr/var/lib/lxc/ubuntu/rootfs/usr/bin/ 下面

termux里

tsu

echo "lxc.cgroup.devices.allow = c 10:200 rwm" >> /data/lxc/share/lxc/config/common.conf

这个是不用换runc了,但是要多执行的一步

【 七 】

dns 重置问题

关于安卓 lxc 容器 dns 自动重置的
解决办法 V3

具体描述:
解决重启 lxc 会重置 dns 的问题
解决一些 docker 操作会 重置 dns 的问题

《 一 》
如果你只是想,这一次解决当下容器问题
那么手动在容器里执行,

 echo "nameserver 8.8.8.8" > /etc/resolv.conf
 systemctl stop systemd-resolved
 systemctl disable systemd-resolved

启动docker

service docker start
service docker restart

安装面板

docker pull wangbinxingkong/fast
docker run --restart always --name fast -p 8081:8081 -d -v /var/run/docker.sock:/var/run/docker.sock wangbinxingkong/fast

《 二 》
如果你想永久解决问题,那么进行以下操作
(设置一次,永久有效
重启 lxc 也不需要 再次操作)
( 1 )
修复 rc.local (修复显示 condition failed)

 chmod +x rc.local

( 2 )

 vi /etc/rc.local

或者

 apt install nano
 nano /etc/rc.local

加入以下内容 (一共 5 行)

#!/bin/sh
systemctl start systemd-resolved
echo "nameserver 8.8.8.8" > /etc/resolv.conf
systemctl stop systemd-resolved
systemctl disable systemd-resolved

保存,并退出

( 3 )
执行

 systemctl enable rc-local

但是发现报错了
解决办法 ——

切换目录

 cd /lib/systemd/system

编辑文件

 vi rc-local.service

或者

nano rc-local.service

在末尾空 1 行 ,再添加 (一共 3 行)
[Install]
WantedBy=multi-user.target
Alias=rc-local.service

重新执行

 systemctl enable rc-local

会看到提示如下

Created symlink /etc/systemd/system/rc-local.service → /lib/systemd/system/rc-local.service.
Created symlink /etc/systemd/system/multi-user.target.wants/rc-local.service → /lib/systemd/system/rc-local.service.

这样就成了
再次执行

 systemctl enable rc-local

即可

( 4 )
停止容器

 sudo lxc-stop -n 容器名 -k

(另外要注意,强行停止 termux,lxc 容器并不会停止,所以还是需要用命令)

启动容器

 sudo lxc-start -n 容器名

【 八 】

普通用户相关问题

( 1 )
lxc 普通用户不能用 sudo 解决方法
执行

 mount -n -o remount,suid /
  • 后续可以加到 rc.local 里,就不用每次手动执行了

( 2 )
lxc 普通用户不能联网 解决方法

  • 用户名填 ubuntu
    usermod -g aid_inet 用户名
    

【 九 】

【 写在最后 】

[补充]
( 1 )
调整 lxc 容器密码 V5

  • 上面文章中是通过改 etc/shadow 文件,来改密码,我们也可以通过执行命令来改密码
  • 设置容器初始 root 用户密码 或者忘记密码情况下 重置 root 用户密码
  • 容器启动或者不启动,命令都有效
  • 支持数字字母

改 root 用户密码 ,termux 里执行

 sudo chroot PREFIX/var/lib/lxc/容器名/rootfs bin/passwd

按提示
输入密码 回车
再次输入密码 回车
即可!

标签:安卓,sudo,etc,lxc,cgroup,ubuntu,docker
From: https://www.cnblogs.com/ifwz/p/17592111.html

相关文章

  • Docker cp命令
     进入容器内部命令dockerexec-ittomcat-8082bash退回容器命令:exit,root@4ecf5be63f95,红色表示在容器内部复制web文件到tomcat-8082容器内部,dockercpwebtomcat-8082:/usr/local/tomcat/webapps/ROOT复制tomcat-8080容器内部index.html文件,至......
  • nacos的docker安装
    nacos的官方文档地址:https://github.com/nacos-group/nacos-docker/blob/master/README_ZH.md登录docker镜像,查询镜像仓库:deckersearchnacos拉取镜像:dockerpullnacos/nacos-server查看镜像:dockerimages单机启动:dockerrun--namenacos-quick-eMODE=standalone-p884......
  • docker install
    dockerinstall安装DockerDocker软件包和依赖包已经包含在默认的CentOS-Extras软件源里,安装命令如下:[root@localhost~]#yum-yinstalldocker启动Docker后台服务[root@localhost~]#servicedockerstart一、获取nginx镜像1.使用dockersearchnginx命令获取nginx镜像......
  • Docker Desktop for Mac使用
    说明:不用编辑从https://github.com/AliyunContainerService/k8s-for-docker-desktop.git下载的images.properties文件,直接切换分支即可相关资料说明DockerDesktopforMac安装Kubernetes解决kubernetesisstarting...https://www.cnblogs.com/darope/p/12624678......
  • docker安装
    1、下载docker二进制文件:https://download.docker.com/linux/static/stable/x86_64/2、docker镜像等文件默认保存在/var/lib/docker目录下,为防止根目录爆满,建议先在/var/lib/docker目录下挂载一个磁盘。然后新建一个docker用户。groupadd dockeruseradd-Gdocker docker ......
  • dolphinscheduler docker-compose 运行简单说明
    因为官方提供的dolphinscheduler有一些问题,所以自己调整环境变量的配置,方便直接运行运行docker-compose文件version:"3"services:dolphinscheduler-postgresql:image:bitnami/postgresql:15.2.0ports:-"5432:5432"profi......
  • 群晖docker nastools搭建家庭影音中心
    1.所需镜像nastools(2.9.0),nastools2.9.1版本之后,只能够使用PT下载,对于没有PT只能够用BT的小伙伴,选这个版本nastools作用主要是对下载的电影电视剧等进行整理,方便后边的jellyfin更好的识别。同时,能够做硬链接,方便PT的小伙伴保种,对于不需要保种的,可以使用移动的方式qbittore......
  • 使用WGCLOUD监测安卓(Android)设备的运行状态
    WGCLOUD是一款开源运维软件,除了能监测各种服务器、主机、进程应用、端口、接口、docker容器、日志、数据等资源WGCLOUD还可以监测安卓设备,比如安卓手机、安卓设备等我们只要下载对应的安卓客户端,部署运行即可详细说明:https://www.wgstart.com/help/docs63.html......
  • Vue3 如何开发移动端(安卓,ios)
    Vue3有没有一款好用的开发移动端的工具1.uniapp我个人认为uniapp适合开发小程序之类的,用这个去开发原生应用会存在一些问题性能限制:由于Uniapp是通过中间层实现跨平台,应用在访问底层功能时可能存在性能损失。与原生开发相比,Uniapp在处理大规模数据、复杂动画和高性能要求的应......
  • 如何拉取指定CPU架构的并且指定ubuntu版本的并且指定cuda和cudnn版本的docker镜像
    本篇讲的重点是如何拉取带有cuda和cudnn的docker镜像,因此这些的镜像源的频道为NVIDIA:官方地址:https://hub.docker.com/r/nvidia/cuda   根据官方资料我们知道NVIDIA的docker的tag分为三类:  base版本、runtime版本、devel版本:base版本只安装了cuda,runtime版本安装......