什么是chroot容器?
chroot是Linux发行版中一个用于将进程隔离在一个受限空间的软件,而由于将进程隔离到了受限空间中,我们只需要将系统运行所必要的分区挂载在这个隔离出来的受限空间中就可以使用chroot运行一个与宿主系统共用内核的容器系统了。内核基于Linux的安卓系统当然也是可以使用chroot的,但是需要root权限。接下来我们就来在已root的安卓设备上安装一个Linux容器吧。
前置要求
Root权限
首先你的安卓手机需要获得root权限,这里就不说了,可以看看我的其他博客。
终端模拟器
然后你需要一个终端模拟器来操作root shell,建议使用termux。
首次进入termux中,我们先换国内源来提高下载速度:
termux-change-repo
使用上下箭头键来切换选项,使用空格选中选项,回车键确定选项,选tsinghua(清华大学)、ustc(中国科技大学)、bfsu(北京外国语大学)等大学的源即可。
回车后会自动更新源索引文件,我们再手动更新下自带软件:
pkg upgrade -y
# 可简化成
pkg up -y
然后再运行一次termux-change-repo
,选Single Mirror,将我们之前选的镜像源再选中确定一次。
使用以下命令给termux赋予存储读写权限:
termux-setup-storage
必要软件
如果想使用Magisk赋予termux root权限,那么需要使用tsu来申请root权限。
Tips:KernelSU可直接跳过此步,在KernelSU的管理器中给termux root权限并重新启动termux即可
pkg install tsu -y
# 可简化成
pkg i tsu -y
# 从Magisk获取root权限
tsu
下载rootfs
这里我们选择Arch Linux ARM系统来作为我们的容器系统,我们在官网可以下载到,一般的安卓设备选择名称为ARMv8 AArch64 Multi-platform、文件名为ArchLinuxARM-aarch64-latest.tar.gz的rootfs下载即可。
可以在termux里使用wget或者curl下载,或者用安卓自带浏览器下载,只要你知道下载到哪里就行。
解压rootfs
我们首先创建一个用于存放容器文件系统的目录,这里我选择在 /data/linux 下创建一个叫 arch 的目录。
# 先进入root shell
su
# 创建目录
mkdir -p /data/linux/arch
然后我们将下载的rootfs压缩包解压缩到这个目录中(假设你已经cd
到了下载压缩包的目录):
tar zxpf ArchLinuxARM-aarch64-latest.tar.gz -C /data/linux/arch/
创建/dev/shm
因为我们可能会用chroot容器来运行一些基于chromium内核的软件,比如electron应用以及chromium本体,所以我们需要创建/dev/shm
这个目录来让这些软件能够正常运行。
# 在宿主机文件系统中创建
mkdir /dev/shm
# 在容器文件系统中创建
mkdir /data/linux/arch/dev/shm
编写启动脚本
我们需要挂载一些宿主机的分区到容器系统才能驱动让其成为一个独立运行的容器,所以我们来编辑chroot容器的启动脚本。我们先使用exit
来退出root shell,然后输入nano a
来创建并编辑一个名叫a的脚本文件,在其中输入以下内容:
#!/bin/sh
ARCHPATH