Использование Chroot с приложением Java

Я работаю над созданием группы программ на Java, которые я надеюсь когда-нибудь превратить в ОС на базе Java. Пока ядро ​​не заработает, я хочу просто запустить его поверх Ubuntu. Из-за этого мне нужно, чтобы все вызовы файловой системы направлялись в другой каталог в моей домашней папке, поэтому доступ к / изнутри Java фактически обеспечит доступ к /home/<user>/Thunderbolt/.

Я просмотрел документацию сообщества по использованию chroot , но там говорится, что в ней должна быть установлена ​​базовая установка Ubuntu. Это действительно необходимо? Все, что я хочу, - это запускать внутри себя Java-приложения, чтобы приложение считало, что оно находится в своей поддельной файловой системе. Я не хочу все лишние вещи из Ubuntu.

Согласно вышеупомянутым документам:

Во многих отношениях chroot подобен установке другой операционной системы внутри существующей операционной системы.

Но я не хочу этого. Все, что я хочу - это скрыть большую часть реальной файловой системы от приложения, чтобы оно видело только один каталог.

Я также видел man-страницу для функции chroot . Будет ли это делать то, что я хочу?

Есть ли какой-нибудь простой способ запустить приложение Java в своей собственной поддельной файловой системе, используя chroot (без всех дополнительных вещей Ubuntu), и если да, то как?

2
задан 6 January 2013 в 03:39

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, я создал скрипт с именем thunderbolt, который называется .profile (который устанавливает окружения), чем запустил мое приложение Java (/sys/Thunderbolt.sys - это файл Jar, я только что изменил расширение):

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

0
ответ дан 6 January 2013 в 03:39

Другие вопросы по тегам:

Похожие вопросы: