2moe/tmoe

无法使用chroot容器里的包管理器

dabao1955 opened this issue · 18 comments

Are you rooted?

Yes

Desktop environment

No response

Container type

unshare

Configuration

container value
os debian sid
arch arm64

host value
os android 12
arch arm64
terminal termux
tmoe latest

Describe the bug

无法使用chroot容器里的包管理器,在proot容器下使用正常

Screenshots

Screenshot_20221103-220902_Termux
Screenshot_20221103-220834_Termux

How to reproduce

1.启动tmoe菜单
2.创建chroot容器
3.报错

Expected behavior

恢复正常

Error Logs

No response

Additional context

No response

最新报错
root@Redmi-K20-Pro:~# apt update
取得:1 http://mirrors.bfsu.edu.cn/debian experimental InRelease [97.5 kB]
0% [処理中]/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
E: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
エラー:1 http://mirrors.bfsu.edu.cn/debian experimental InRelease
gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
パッケージリストを読み込んでいます... 完了
W: GPG エラー: http://mirrors.bfsu.edu.cn/debian experimental InRelease: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
E: リポジトリ http://mirrors.bfsu.edu.cn/debian experimental InRelease は署名されていません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。

2moe commented
screen-20221104-201424.mp4

我无法在 Android 12 上复现此问题呢!
ps: Magisk 版本是 25.2(25200)

这个问题有点像是好久之前有人跟我反馈过的挂载问题呢!

其实不需要在容器内创建 /dev/null ,直接绑定(挂载)android 自身的同文件就可以了。

题外话:我记得你之前用的是 OPPO 的 Reno 系列,现在又换新手机啦?

等下我去找找那条 issue...

2moe commented

找到了
#153

Screenshot_20221104-204300_Termux
貌似是自动创建的
magisk版本为25.2,不排除是因为部分模块的问题导致

screen-20221104-201424.mp4
我无法在 Android 12 上复现此问题呢! ps: Magisk 版本是 25.2(25200)

这个问题有点像是好久之前有人跟我反馈过的挂载问题呢!

/dev/null 其实是不需要手动去创建的,绑定(挂载)android 自身的同文件就可以了。

题外话:我记得你之前用的是 OPPO 的 Reno 系列,现在又换新手机啦?

等下我去找找那条 issue...

欧加系不好折腾玩机,遂换红米刷着玩

2moe commented

欧加系不好折腾玩机,遂换红米刷着玩

从“玩”的角度来看,据说 Google 家的 pixel 也不错呢。

抛开可以吃上最新的 Android 不谈,部分用 Tensor cpu 的机子(比如pixel 6) 还可以折腾 KVM 呢。

呜,我就不折腾了,而且我也只是道听途说。

感觉没救力
Screenshot_20221104-212656_Termux

Screenshot_20221104-212755_Termux
/dev挂载不全?

2moe commented

你可以参考 #153 试着手动挂载一些目录。

你可以参考 #153 试着手动挂载一些目录。

su -c "/system/bin/mount -o rw,nosuid,nodev,noexec,relatime -t dev dev /data/data/com.termux/files/home/.local/share/tmoe-linux/containers/chroot/debian-sid_arm64/dev"
mount: 'dev'->'/data/data/com.termux/files/home/.local/share/tmoe-linux/containers/chroot/debian-sid_arm64/dev': No such device
是不是哪里出了问题

2moe commented
Dir=/data/data/com.termux/files/home/.local/share/tmoe-linux/containers/chroot/debian-sid_arm64

su -c "/system/bin/umount -lvf $Dir/dev" 2>/dev/null

su -c "/system/bin/mount -o bind /dev $Dir/dev"

sudo ls -la $Dir/dev
2moe commented

上面那段挂载命令调用的是 /system/bin 下的二进制文件(那里面的东西应该是Android 系统自带的), 虽然是在手机上打的,但应该没有打错。

Screenshot_20221104-221624_Termux
挂载失败惹

2moe commented

umount 用于卸载(排除先前的挂载对本次挂载产生的干扰),出错也没事。
mount 挂载出错的问题就很大了。

在部分系统上, /system/bin/mount 来自于Android 系统自带的 toybox。
系统自带的东西不应该会出现这种挂载失败的错误。

这可能是其他原因,比如说之间那个issue 中 magisk 的问题。
也有可能是部分系统的分区(布局,类型,权限)跟传统系统不一样。

抱歉,我因为无法复现此问题,所以暂时帮不了你了。

Screenshot_20221104-223154_Termux
貌似只能挂载/dev/null?

2moe commented

容器内的那个 null 不是挂载进去的,而是由部分应用自动创建的。
注意:它的权限和类型都不对。
它的权限应该是任何人可读写的,而不是只有其所有者可读写。
类型也不是0字节大小的普通文件,而是特殊的字符设备。

你可以手动创建它。

unlink /dev/null
mknod -m 666 /dev/null c 1 3

不过这样做也于事无补,核心问题是挂载失败了。

容器不是虚拟机,它需要去使用宿主的一些资源。

Screenshot_20221105-200924_Termux
貌似只有alpine能够正常使用包管理器

Screenshot_20221109-132905_Termux
重刷系统之后又好了,原因未知