Usando o Chroot com um aplicativo Java

2

Estou trabalhando na criação de um grupo de programas Java que espero transformar em um sistema operacional baseado em Java algum dia. Até que eu tenha um kernel funcionando, quero apenas executá-lo no Ubuntu. Por causa disso, eu preciso de todas as chamadas do sistema de arquivos direcionadas para um diretório diferente em minha pasta pessoal, portanto, acessar / de dentro do Java realmente acessaria /home/<user>/Thunderbolt/ .

Eu consultei a documentação da comunidade para usar chroot , mas ela diz para configurar uma instalação básica do Ubuntu nele. Isso é realmente necessário? Tudo que eu quero é rodar aplicativos Java dentro dele, então o aplicativo acha que está em seu próprio sistema de arquivos falso. Eu não quero todas as coisas extras do Ubuntu.

De acordo com os documentos acima mencionados:

  

De muitas maneiras, um chroot é como instalar outro sistema operacional dentro do sistema operacional existente.

Mas eu não quero isso. Tudo que eu quero é esconder a maior parte do sistema de arquivos real do aplicativo para que ele veja apenas um diretório.

Eu também vi a manpage da chroot function . Isso fará o que eu quero?

Existe alguma maneira simples de executar um aplicativo Java em seu próprio sistema de arquivos falso usando chroot (sem todo o material extra do Ubuntu) e, em caso afirmativo, como?

    
por iBelieve 06.01.2013 / 00:39

1 resposta

2

O que fiz foi criar um diretório chamado Thunderbolt na minha pasta pessoal. Então, para os executáveis que eu queria, executei ldd e copiei as bibliotecas necessárias e o executável real no meu diretório Thunderbolt , como

$ 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)

Para o próprio Java, junto com a cópia das bibliotecas necessárias, usei mount --bind para ligar o diretório inicial do Java ( /usr/lib/jvm/java-7-openjdk-i386/ ):

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

Para executar o chroot , criei um script chamado thunderbolt que chamava .profile (que configurava o ambiente) do que executava meu aplicativo Java ( /sys/Thunderbolt.sys é um arquivo Jar, acabei de alterar a extensão) :

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

Para executar o chroot , usei o seguinte comando

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

NOTA: Isso não funciona perfeitamente ainda, estou recebendo este aviso sempre que executo o Java: OpenJDK Server VM warning: Can't detect initial thread stack location - find_vma failed

    
por iBelieve 06.01.2013 / 03:57