将 Chroot 与 Java 应用程序结合使用

将 Chroot 与 Java 应用程序结合使用

我正在设计一组 Java 程序,希望有一天能将它们变成基于 Java 的操作系统。在内核运行之前,我只想在 Ubuntu 上运行它们。因此,我需要将所有文件系统调用定向到我的主文件夹中的不同目录,因此/从 Java 内部访问实际上会访问/home/<user>/Thunderbolt/

我看过社区文档使用chroot,但它说要在其中设置 Ubuntu 的基本安装。这真的有必要吗?我只想在其中运行 Java 应用程序,这样应用程序就会认为它位于自己的假文件系统中。我不想要所有额外的 Ubuntu 东西。

根据上述文件:

从很多方面来看,chroot 就像在现有操作系统内安装另一个操作系统。

但我不想这样。我只想对应用程序隐藏大部分真实文件系统,以便它只能看到一个目录。

我还看到了chroot功能。这会满足我的要求吗?

有没有什么简单的方法可以在其自己的伪文件系统中运行 Java 应用程序chroot(无需所有额外的 Ubuntu 内容),如果有,如何操作?

答案1

我所做的是Thunderbolt在我的主文件夹中创建一个名为的目录。然后对于我想要的可执行文件,我运行ldd并将所需的库和实际的可执行文件复制到我的Thunderbolt目录中,例如

$ ldd /bin/bash
    linux-gate.so.1 =>  (0xb7781000)
    libtinfo.so.5 => /lib/i386-linux-gnu/libtinfo.so.5 (0xb7743000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb773e000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7593000)
    /lib/ld-linux.so.2 (0xb7782000)

对于 Java 本身,除了复制所需的库之外,我还mount --bind绑定了 Java 主目录(/usr/lib/jvm/java-7-openjdk-i386/):

$ mount --bind -o ro /usr/lib/jvm/java-7-openjdk-i386/ sys/java/

为了运行,我创建了一个名为chroot的脚本(它设置了环境),然后运行我的 Java 应用程序(是一个 Jar 文件,我只是更改了扩展名):thunderbolt.profile/sys/Thunderbolt.sys

source /.profile
/sys/java/bin/java -jar /sys/Thunderbolt.sys Files

为了运行chroot,我使用了以下命令

sudo chroot /home/mspencer/Thunderbolt /bin/bash /thunderbolt

笔记:目前它还不能完美运行,每当我运行 Java 时都会收到此警告:OpenJDK Server VM warning: Can't detect initial thread stack location - find_vma failed

相关内容