2moe / tmoe

TMOE, More Optional Environments.
https://doc.tmoe.me
Other
845 stars 79 forks source link

Bug: chroot 容器的保存位置相关 #252

Open FurryR opened 1 year ago

FurryR commented 1 year ago

Are you rooted?

Yes

Desktop environment

None

Container type

chroot

Configuration

container value
os Kali Linux
arch arm64

host value
os android 13
arch arm64
terminal termux
tmoe latest

Describe the bug

我使用 chroot 容器安装 Kali Linux,并且在映射时选中了 /sdcard(不推荐的),安装过程一切正常。

但在安装完成后我又想到了一个更好的方案,于是我直接删除了 Termux App,并打算使用 Kali-Nethunter(这个问题跟其无关)。

但随即我发现手机变砖,因为 /sdcard/storage/emulated 中的链接全部失效了。

Screenshots

无法提供任何截图,因为内部存储已损毁。

How to reproduce

  1. 安装 Termux App,并且下载 tmoe。
  2. 安装 Kali Linux chroot 容器,在映射 /sdcard 到容器内部时,选择 /sdcard(不推荐)。其余选项任意。
  3. 确保 Kali Linux 容器可以正常启动。
  4. 删除 Termux App,复现完成。

任何跟内部存储有关的程序将崩溃并无法正常使用,比如 文件极客ZArchiver Pro等。

Expected behavior

删除 Termux App 时不会导致内部存储链接丢失。

亦或者,在选择映射时二次确认。

Error Logs

N/A

Additional context

N/A

2moe commented 1 year ago

重启手机,看看数据有没有丢失吧。

看标题,本来以为又是 MIUI 上 mount 相关的问题,结果是 “未 umount 就 remove” 的危险行为。 一时间竟不知道如何评价。 想了想,之后搞个知识问答吧。

假设前方有座山,山上有老虎,我在山脚下围了一圈,放了无数块告示牌,牌上写着:“⚠ 山上有老虎,请远离此地!” 人们往往对警告视而不见,甚至更兴奋了:“嘿嘿嘿,😽大猫猫,我的大猫猫🤤”。

把它改成答题形式的话,会变成题目:进了山后,以下哪种行为对一般人有利? 如果你选择了 “我和山中的小可爱开心地玩耍,它温暖了我的心,我也温暖了它的肚皮” 这个选项的话,那么你将失去进入此山的资格。


chroot 容器的 挂载 sd 默认会使用操作系统的 mount, 并以 root 权限挂载特定目录。
默认是可读写挂载,而不是只读挂载。 当然,你也可以禁用掉挂载 sd 的选项,然后手动配置只读挂载。

mount[0]=true
media_ro[0]=true
mount_src[0]="/data/media/0/Download"
mount_dst[0]="/media/sd"

这些其实都不是关键,关键的是后果。

在可读可写挂载的前提下,如果不先卸载 (umount),就直接删掉 (remove) 容器以及相关目录,那造成的后果是难以想象的。

FurryR commented 1 year ago

了解了,谢谢解惑。

但或许还有一种方式可以解决问题。

和 proot 一样,chroot 的容器也是保存在 Termux 下的,在安卓下直接删除 Termux app 会导致严重的后果。

但既然有 root 权限了,用户可以选择将 chroot 容器保存在 /data/local 目录下。

这样,删除 Termux 也不会导致容器被删除,可能会减少一些误操作的后果。

(当然,这可能不是一个好的替代方案。)


山上有老虎,人避开是一种方法,请人来收容又是另一种办法了。

~捡个猫,家人们!它想跟我回家!~

此方法参照了 Kali Nethunter 容器的保存方式。

2moe commented 1 year ago

你说的对。 默认的 chroot 容器位置不应该是 app 的数据目录,之后可能会增加一个自定义容器目录的选项。