2

私は Java プログラムのグループの設計に取り組んでおり、いつか Java ベースの OS になることを望んでいます。カーネルが機能するまでは、Linux システム上で実行したいだけです (問題があれば Ubuntu を使用しています)。このため、ホーム フォルダー内の別のディレクトリに向けられたすべてのファイル システム呼び出しが必要なので、/Java 内からアクセスすると実際には/home/<user>/Thunderbolt/.

私は基本的にこの質問と同じものが必要ですが、この質問Java用です。

に関するものを見たことchrootがありますが、これでうまくいくと思いますが、Java で動作させる方法がわかりません。セキュリティについてまったく心配する必要はありません。別の偽のファイルシステムが必要なだけです。

また、コア Java ライブラリは、それらを偽のファイルシステムにコピーせずにアクセスする必要があります。

これは可能ですか?可能であれば、どのように設定すればよいですか?

4

3 に答える 3

4

確かではありませんが、ファイルシステムのセマンティクスのみを再現したい場合 (おそらくテスト用)、ファイルシステムのバックエンドを抽象化することをお勧めします。

良い代替手段はcommons-vfsを使用することです。仮想ファイルシステムを模倣し、以下をサポートします。

  • .zip ファイル / .jar ファイル
  • .gz ファイル
  • インメモリファイルシステム
  • クラスパスベースのファイルシステム
  • URL ベース

したがって、基本的に、「サンダーボルト」ディレクトリは、テストと設計に使用できる別の実装されたファイルシステムになります。

すべてのアプリは VFS の呼び出しに依存する必要がありますが、これは大きな問題ではないと思います。

于 2013-01-05T21:12:52.343 に答える
0

[Linux] Chroot は正しい (ただし単純ではない)。すべてのライブラリを再コピーしないために...使用できます

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

(詳細についてはマンマウント)

于 2013-01-05T21:15:42.663 に答える
0

システム ライブラリには、ファイル パス文字列を引数として取るクラスはそれほど多くありません。ファイルは、おそらく FileInputStream、FileReader、RandomAccessFile、おそらく URL を確認する必要があります。他のものである可能性もあります。数日間の確認で最も多くのことが明らかになるはずです。

あなたの特定のケースでは、オープンソースであり、これを可能にするOpenJDKを使用してJavaシステムライブラリを微調整することを考えるのが合理的かもしれません。GNU ClasspathApache Harmonyという 2 つの代替 FOSS プロジェクトが他にあり、これらは構築が容易かもしれません (私は過去に何度も GNU Classpath を構築していました) が、これらのプロジェクトは現在あまり活発ではありません。これらは、研究やその他のプロジェクトで Java システム ライブラリを変更する必要がある場合に正確に開始されています。

これらのプロジェクトをビルドするのが難しい場合は、個別にビルドして、いくつかのシステム クラスだけを置き換えてみてください。

このソリューションにより、commonsfs API を介してすべてのファイルシステム アクセスをルーティングするように変更できないサード パーティの Java プログラムを実行することもできます。

于 2013-01-05T21:22:02.987 に答える