栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

termux.apk 原理分析

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

termux.apk 原理分析

termux 是一个非常流行的,在安卓手机上免root加载linux的app,

网上全是它的使用方法,而我又比较好奇其实现原理,故而做个粗浅的分析。

都知道的事:

1). 它用 proot 加载的 linux rootfs ——用户态的 chroot ,基于 linux ptrace 函数。

2). 它的维护团队,编译了一堆(近千个)用于扩展 android console 的命令行工具,

包括 "安卓版的linux桌面环境" —— xfce(这不同的于proot出来的linux中运行的xfce)

少有人研究的是:

1). 它自带的 proot ,默认会检查这两个环境变量:

export PROOT_LOADER=$home/proot_loader/loader
export PROOT_LOADER_32=$home/proot_loader/loader32

如果没设置,loader路径就固定为

/data/data/com.termux/files/usr/libexec/proot/loader32
/data/data/com.termux/files/usr/libexec/proot/loader

这个可以通过反编译 proot 或查看 proot 源码确认。

2). 它会生成假的 /proc ,供它加载的 guest linux 访问,不然 guest linux 用不了 ps、top 指令

这个通过可以读 /usr/bin/proot-distro 脚本确认,脚本里面的:setup_fake_proc() 处

3). 它会 apt-mark hold gvfs-daemons udisks2 这样的指令不让 apt 更新这两个库

这个可以读通过 /usr/etc/proot-distro/*linux*.sh  脚本确认,不然 guest linux 中装不x11 server,

包括 xvnc、xfce

换句话说,termux 里面的 proot-distro 自备的 rootfs 中,已经有他们自己编译的 udisks2 了。

也可以说是需要对 rootfs 进行改造——添加特定的 udisks2 才能在proot出来的环境中安装xfce。

如果想自己在 proot 出来的 guest linux 中安装 udisks2 或 gvfs-daemons,会出现如下错误提示:

Setting up udisks2 (2.8.4-1ubuntu2) ...
Failed to scan devices: Permission denied
dpkg: error processing package udisks2 (--configure):

即装不上,而 x11vnc、xfce 又依赖于这两玩意。

下面这个链接是目前最新版的 termux 在用的 ubuntu rootfs :

https://github.com/termux/proot-distro/releases/download/v3.0.1/ubuntu-aarch64-pd-v3.0.1.tar.xz

也就是 termux 的github仓库:

Releases · termux/proot-distro · GitHub​​​​​​

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号