在没有chroot的情况下伪造Linux环境


1

对于大学项目,我想在32核机器上测试C ++ 11程序。不幸的是,该机器安装了UCCntu 12.04并安装了GCC 4.6(由于一些C ++ 11线程功能,我们需要GCC 4.7)。在这样的环境中,我通常会使用自定义linux运行chroot(比如使用Ubuntu 12.10进行debootstrap)。由于我们没有在机器上获得root访问权限,因此我们无法使用chroot。

到目前为止,我已经为我们的代码使用debootstrap准备了一个运行时环境,我在debootstrap environemnt中编译了它。然后将其复制到服务器上(使用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模块来运行我们的测试。也许我应该从中提出两个问题。


如何下载更新版本的gcc(或源代码)并将其作为主目录中的用户安装(如果有的话)?嗯,这个程序有多大?
尼克

1
你也试过设置PYTHONHOME吗?
塞德里克

PYTHONHOME的标准位置是什么?是/usr/lib/python2.7吗?
Pascal

尼克:创建一个沙盒环境更容易,因为替换gcc还需要替换glibc(或重新编译),这也会产生非常广泛的副作用。
Pascal

1
你尝试过fakeroot或fakeroot-ng吗?你可能能够chrootfakeroot-ng
allquixotic
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.