无法使用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
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 ページを参照してください。
screen-20221104-201424.mp4
我无法在 Android 12 上复现此问题呢!
ps: Magisk 版本是 25.2(25200)
这个问题有点像是好久之前有人跟我反馈过的挂载问题呢!
其实不需要在容器内创建 /dev/null
,直接绑定(挂载)android 自身的同文件就可以了。
题外话:我记得你之前用的是 OPPO 的 Reno 系列,现在又换新手机啦?
等下我去找找那条 issue...
screen-20221104-201424.mp4
我无法在 Android 12 上复现此问题呢! ps: Magisk 版本是 25.2(25200)这个问题有点像是好久之前有人跟我反馈过的挂载问题呢!
/dev/null
其实是不需要手动去创建的,绑定(挂载)android 自身的同文件就可以了。题外话:我记得你之前用的是 OPPO 的 Reno 系列,现在又换新手机啦?
等下我去找找那条 issue...
欧加系不好折腾玩机,遂换红米刷着玩
欧加系不好折腾玩机,遂换红米刷着玩
从“玩”的角度来看,据说 Google 家的 pixel 也不错呢。
抛开可以吃上最新的 Android 不谈,部分用 Tensor cpu 的机子(比如pixel 6) 还可以折腾 KVM 呢。
呜,我就不折腾了,而且我也只是道听途说。
你可以参考 #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
是不是哪里出了问题
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
上面那段挂载命令调用的是 /system/bin 下的二进制文件(那里面的东西应该是Android 系统自带的), 虽然是在手机上打的,但应该没有打错。
umount
用于卸载(排除先前的挂载对本次挂载产生的干扰),出错也没事。
mount
挂载出错的问题就很大了。
在部分系统上, /system/bin/mount
来自于Android 系统自带的 toybox。
系统自带的东西不应该会出现这种挂载失败的错误。
这可能是其他原因,比如说之间那个issue 中 magisk 的问题。
也有可能是部分系统的分区(布局,类型,权限)跟传统系统不一样。
抱歉,我因为无法复现此问题,所以暂时帮不了你了。
容器内的那个 null 不是挂载进去的,而是由部分应用自动创建的。
注意:它的权限和类型都不对。
它的权限应该是任何人可读写的,而不是只有其所有者可读写。
类型也不是0字节大小的普通文件,而是特殊的字符设备。
你可以手动创建它。
unlink /dev/null
mknod -m 666 /dev/null c 1 3
不过这样做也于事无补,核心问题是挂载失败了。
容器不是虚拟机,它需要去使用宿主的一些资源。