在 chroot 环境中启动程序会立即返回

Posted

技术标签:

【中文标题】在 chroot 环境中启动程序会立即返回【英文标题】:Starting a program in a chroot environment returns immediately 【发布时间】:2015-03-20 09:46:26 【问题描述】:

我在虚拟环境中工作,试图在 chroot 环境中启动打开的 vm 工具。 我用 bash 进行了测试,它似乎工作正常。 我使用./configure --options --prefix=/home/chroot_env安装程序,然后在vmtoolsd上使用ldd,将对应的库复制到/lib目录下。

现在当我启动chroot /home/chroot_env /bin/vmtoolsd 时,没有任何反应,chroot 直接返回。在正常环境中启动相同的二进制文件确实有效。

有人知道它为什么不工作吗,那里有正确的库,并且它可以与 bash 一起工作。

编辑:strace 显示 vmtoolsd 正在尝试访问 /dev/console,我添加了 mount --bind /dev/ /home/chroot_env/dev/ 但它仍然失败。

EDIT2:另一个 strace 显示它正在寻找另一个动态加载的插件,我添加了它并且它工作了,结论 strace 非常适合调试此类问题!

【问题讨论】:

你的/home/chroot_env有足够的rootfs吗?我的意思是,它是否有必要的工具,例如/home/chroot_env/bin/bash/home/chroot_env/bin/vmtoolsd 等?它是否还有必要的共享库等? 我确实将 bash 和 vmtoolsd 添加到了正确的目录中,并复制了所需的库,可能缺少二进制文件,但我不知道如何找到它。 看看你能不能让ldd在chroot里面工作... 你试过用 strace 看看会发生什么吗? @Maxime strace 显示 vmtoolsd 正在尝试访问 /dev/console,我相应地编辑了我的帖子。 【参考方案1】:

当您运行一个程序但没有任何反应时,您始终可以使用strace 运行它,以查看进行了哪些系统调用。这是获取打开的文件(常规或非常规)列表的简单方法。在您的情况下,请检查您的程序是否不会尝试访问不在 chroot 中的文件。

【讨论】:

以上是关于在 chroot 环境中启动程序会立即返回的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.NET 启动进程 - 为啥进程会立即终止?

为啥我的 SharedPreferences 在应用程序启动后没有立即加载?

Java 启动 Node.js 程序立即关闭

应用程序在启动时立即崩溃,仅在设备上

编写高质量代码改善C#程序的157个建议——建议75:警惕线程不会立即启动

Arch Linux 启动始终显示reboot to firmware