Я работаю над созданием группы программ на Java, которые я надеюсь когда-нибудь превратить в ОС на базе Java. Пока ядро не заработает, я хочу просто запустить его поверх Ubuntu. Из-за этого мне нужно, чтобы все вызовы файловой системы направлялись в другой каталог в моей домашней папке, поэтому доступ к /
изнутри Java фактически обеспечит доступ к /home/<user>/Thunderbolt/
.
Я просмотрел документацию сообщества по использованию chroot
, но там говорится, что в ней должна быть установлена базовая установка Ubuntu. Это действительно необходимо? Все, что я хочу, - это запускать внутри себя Java-приложения, чтобы приложение считало, что оно находится в своей поддельной файловой системе. Я не хочу все лишние вещи из Ubuntu.
Согласно вышеупомянутым документам:
Во многих отношениях chroot подобен установке другой операционной системы внутри существующей операционной системы.
blockquote>Но я не хочу этого. Все, что я хочу - это скрыть большую часть реальной файловой системы от приложения, чтобы оно видело только один каталог.
Я также видел man-страницу для функции
chroot
. Будет ли это делать то, что я хочу?Есть ли какой-нибудь простой способ запустить приложение Java в своей собственной поддельной файловой системе, используя
chroot
(без всех дополнительных вещей Ubuntu), и если да, то как?
Я создал каталог 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