2

我正在设计一组 Java 程序,希望有朝一日能变成基于 Java 的操作系统。在我得到一个内核工作之前,我只想在 Linux 系统上运行它们(我使用的是 Ubuntu,如果这很重要的话)。因此,我需要将所有文件系统调用定向到我的主文件夹中的不同目录,因此/从 Java 中访问实际上会访问/home/<user>/Thunderbolt/.

我基本上需要和这个问题一样的东西,还有这个问题,但对于 Java。

我看过关于 的东西chroot,我认为这可能有效,但我不知道如何让它与 Java 一起工作。我根本不需要担心安全性,我只需要不同的假文件系统。

此外,需要访问核心 Java 库,而无需将它们复制到假文件系统中。

这可能吗,如果可以,我该如何设置?

4

3 回答 3

4

不确定,但如果你只想重现文件系统语义(可能用于测试),我建议你抽象你的文件系统后端。

一个不错的选择是使用commons-vfs。它模仿一个虚拟文件系统,支持:

  • .zip 文件/.jar 文件
  • .gz 文件
  • 内存文件系统
  • 基于类路径的文件系统
  • 基于 URL

所以基本上,您的“thunderbolt”目录将是另一个已实现的文件系统,您可以将其用于测试和设计。

你所有的应用程序都需要依赖调用 VFS,但这不是一个大问题,我认为。

于 2013-01-05T21:12:52.343 回答
0

系统库中以文件路径字符串作为参数的类并不多。文件确实,可能是 FileInputStream、FileReader、RandomAccessFile,可能是 URL 应该被审查,也可能是其他一些 - 几天的审查应该揭示最多。

在您的具体情况下,考虑使用开源并允许这样做的OpenJDK调整 Java 系统库可能是合理的。还有另外两个可供选择的 FOSS 项目,GNU ClasspathApache Harmony,它们可能更容易构建(我过去曾多次构建 GNU Classpath)但这些项目目前不是很活跃。它们是针对研究或其他项目需要修改 Java 系统库的情况而启动的。

如果您发现这些项目难以构建,您可以尝试单独构建并仅替换几个系统类。

该解决方案还允许运行无法修改以通过 commonsfs API 路由所有文件系统访问的第三方 Java 程序。

于 2013-01-05T21:22:02.987 回答
0

[Linux] Chroot 是正确的(但并不简单)。对于不重新复制所有库...您可以使用

mount --bind -o ro /source/ /destination/

man mount了解更多信息)

于 2013-01-05T21:15:42.663 回答