![不使用 chroot 伪造 Linux 环境](https://linux22.com/image/1342328/%E4%B8%8D%E4%BD%BF%E7%94%A8%20chroot%20%E4%BC%AA%E9%80%A0%20Linux%20%E7%8E%AF%E5%A2%83.png)
对于一个大学项目,我想在一台 32 核机器上测试一个 C++11 程序。不幸的是,这台机器安装了 Ubuntu 12.04 和 GCC 4.6(由于一些 C++11 线程功能,我们需要 GCC 4.7)。在这样的环境中,我通常会使用自定义 Linux 运行 chroot(例如使用 Ubuntu 12.10 的 debootstrap)。由于我们没有机器上的 root 访问权限,因此我们无法使用 chroot。
到目前为止,我已经使用 debootstrap 为我们的代码准备了一个运行时环境,我在 debootstrap 环境中对其进行了编译。然后将其复制到服务器上(使用 rsync)。为了运行我们的 C++ 代码,我将 LD_LIBRARY_PATH 设置为
export LD_LIBRARY_PATH=~/debootstrap/usr/lib/:~/debootstrap/lib64/:~/debootstrap/usr/lib/x86_64-linux-gnu/:~/debootstrap/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH
到目前为止,我们的代码似乎可以运行。然而,我被我们的 Python 代码困住了。手动设置路径似乎不够。
export PYTHONPATH=~/debootstrap/usr/lib/python2.7/dist-packages:~/debootstrap/usr/lib/python2.7:~/debootstrap/usr/lib/python2.7/plat-linux2:~/debootstrap/usr/lib/python2.7/lib-tk:~/debootstrap/usr/lib/python2.7/lib-dynload:~/debootstrap/usr/local/lib/python2.7/dist-packages:~/debootstrap/usr/lib/pymodules/python2.7:~/debootstrap/usr/lib/python2.7/dist-packages/PIL:~/debootstrap/usr/lib/python2.7/dist-packages/gtk-2.0:~/debootstrap/usr/lib/python2.7
执行我们的脚本会导致
ImportError: No module named _path
除了覆盖和创建环境变量之外,有没有更简单的方法来实现“假”chroot?
注意我需要 Python,因为我们创建了一个自定义 C++-Python 模块来运行我们的测试。也许我应该从中创建两个问题。