tmoe icon indicating copy to clipboard operation
tmoe copied to clipboard

chroot 的 kali-rolling-amd64 容器,无法切换至zsh,总是以bash启动

Open merlin-kitsune opened this issue 3 years ago • 12 comments

Are you using tmoe?

Yes

Are you rooted?

Yes

What is your desktop environment?

🦖 kde plasma

Describe the bug

在linux和wsl2环境下,安装kali-rolling-amd64的chroot容器,每次启动都会强制以bash作为shell,使用chsh修改并不能起作用(在/etc/passwd中可以看到默认shell已经是zsh了,使用neofetch也能看到默认shell是zsh)

测试用的系统:ubuntu,pop!_os,kubuntu,rocky linux,ubuntu wsl2

How to reproduce

No response

Expected behavior

No response

Screenshots

No response

Error Logs

No response

What is the container type?

No response

Configuration

container value
distro kali-rolling
arch amd64

host value
os kubuntu 21.10
arch amd64
terminal konsole(KDE)
tmoe latest

Additional context

kali-rolling的chroot容器启动脚本有问题,默认以bash作为终端了

merlin-kitsune avatar Oct 22 '21 14:10 merlin-kitsune

2021-10-22 22-19-52屏幕截图 对于konsole: konsole --> 设置 --> 编辑当前方案 --> 命令:/bin/zsh --> apply(应用)

2021-10-22 22-27-28屏幕截图 2021-10-22 22-27-45屏幕截图 对于tmoe: 切换登录shell

2moe avatar Oct 22 '21 14:10 2moe

在 konsole 里输入

echo $SHELL

输出的结果是什么?

2moe avatar Oct 22 '21 14:10 2moe

顺带一说, WSL2 支持自定义 rootfs 导入。 咱以后可能会适配这个功能,然后就不需要再装个容器了,直接再开个 WSL 就行了。

2moe avatar Oct 22 '21 14:10 2moe

我尝试在tmoe里切换shell,在容器内使用chsh命令,使用全局env方式,均无法切换到zsh,依旧是bash。 顺带一提,在按照kali-linux-core或者更高的包之后,默认bash终端会变成kali的zsh,但是依旧无法切换到自己安装的zsh也不能使用自己的配置文件(在konsole终端上依旧显示为bash) 另外这里提wsl2仅仅是测试在其他系统和平台上是否存在相同的问题,我自己测试不论宿主是linux还是wsl2,只要是chroot都必定出这个问题,至于termux,我没有root设备没法测试chroot,proot环境下是正常的

merlin-kitsune avatar Oct 23 '21 05:10 merlin-kitsune

在 konsole 里输入

echo $SHELL

输出的结果是什么?

/bin/bash 安装kali-linux-core包之后变成/bin/zsh(但是实际上只能用kali的zsh,无法使用自行安装的zsh。kali应该是替换了/bin/bash可执行文件的软链接)

merlin-kitsune avatar Oct 23 '21 05:10 merlin-kitsune

对于开启了boot模式的 systemd-nspawn 容器来说,默认shell跟 /etc/passwd 有关。 对于 chroot,跟启动脚本有关,这个很简单。

咱之前写了自动判断的步骤,default_shell 有好几个。 截屏2021-10-23 22 24 07 当没有检测到0时,会自动fallback到1,当没有检测到1时,会fallback到2。 可能是检测出错了。


折衷的方法是改Entrypoint,不是改全局环境变量。 就是编辑 entrypoint 文件, 然后在最后一行里加入 exec /usr/bin/zshexec /usr/bin/zsh -l 不过咱不推荐这种方法,毕竟是 login shell,这样做不太好。

2moe avatar Oct 23 '21 14:10 2moe

之前, kali 自带的zsh会覆盖掉用户自己配置的 .zshrc。 现在的话,不清楚呢! 我明天早上再来测试一下吧!

2moe avatar Oct 23 '21 14:10 2moe

我自己的测试是kali的zsh包并不会覆盖.zshrc,安装kali-linux-core或者更高的合集包都会自动修改shell为/usr/bin/zsh 匪夷所思的是kali在chroot下的zsh并不会读取用户的.zshrc而是变成了内置的,无论怎么修改都无济于事 但是proot环境下就没有这种问题

merlin-kitsune avatar Oct 23 '21 15:10 merlin-kitsune

截屏2021-10-24 03 06 47 root 用户的.zshrc 会被覆盖,普通用户不会。

普通用户可以读取自己的 .zshrc


对于systemd 容器无法切换默认shell的问题。

咱测试过了,用 boot模式就好了。


注: 如果不读取 .zshrc, 那就把 "ZDOTDIR" 变量的值设置为 "$HOME"

2moe avatar Oct 23 '21 19:10 2moe

我给你出个教程吧!

2moe avatar Oct 23 '21 19:10 2moe

  1. 更新 截屏2021-10-24 03 17 06

  2. chroot/systemd

  3. 若当前不为systemd-mode, 则使用systemd mode. 注:标题栏下方会有提示信息。 截屏2021-10-24 03 17 27

4.每周构建 截屏2021-10-24 03 17 41

5.zsh(nogui) 截屏2021-10-24 03 17 48

6.kali 截屏2021-10-24 03 17 55

  1. 新建容器 截屏2021-10-24 03 18 07

  2. 输入自定义名称时,要输入英文/数字。刚刚发现汉字名称会出bug, 以后再来修复。 截屏2021-10-24 03 27 36

9.然后就是正常的安装 截屏2021-10-24 03 19 18

10.安装过程中,新建一个有sudo特权的普通用户。 截屏2021-10-24 03 32 36

截屏2021-10-24 03 33 00 截屏2021-10-24 03 33 09 截屏2021-10-24 03 33 16 截屏2021-10-24 03 33 21 截屏2021-10-24 03 33 26
  1. 选no, 然后按Ctrl+ ]]] (按住Ctrl, 再按三次 ] 退出)

12.回到该界面 截屏2021-10-24 03 40 23

  1. boot模式 截屏2021-10-24 03 40 31

  2. enable

截屏2021-10-24 03 40 37
  1. 回到容器菜单,启动kali
截屏2021-10-24 03 44 11 user: momo passwd: momo

16.输入zsh,回车 再输入2

截屏2021-10-24 03 46 48

输入 chsh -s /usr/bin/zsh

Ctrl+ ]]] 退出

  1. 重进容器,登录 momo 看看。 截屏2021-10-24 03 49 47 看看是不是zsh的界面。

执行


. <(curl -L l.tmoe.me/zsh)

虽然这个zsh管理器还能用,不过咱之后要重写它了。

2moe avatar Oct 23 '21 19:10 2moe

我自己按照你前面的建议试了一下,发现用entrypoint加exec /usr/bin/zsh 是可以的,但是不能带 -l 参数(会导致容器卡死) 总之这个问题可能还是和入口点有关,并没有正确的使用用户shell(没有kali-linux-core就只能启动bash,有就启动kali自己的zsh,手动启动/usr/bin/zsh才能读取用户的.zshrc)

merlin-kitsune avatar Oct 24 '21 03:10 merlin-kitsune