不使用 chroot 伪造 Linux 环境

不使用 chroot 伪造 Linux 环境

对于一个大学项目,我想在一台 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 模块来运行我们的测试。也许我应该从中创建两个问题。

相关内容