Como fazer chroot falso no RHEL / CentOS 7

1

Eu quero fazer uma 'virtualização' primitiva do meu ambiente RHEL. Isso decorre do fato de eu ter que executar alguns binários com caminhos hardcored apontando para, por exemplo. /etc/conf directory. Há alguns binários diferentes que, na verdade, precisam de configurações conflitantes diferentes colocadas no mesmo diretório.

Portanto, quero executar o aplicativo A que lê conf de /etc/conf e quero executar o aplicativo B que lê conf de /mnt/etc/conf , mas na verdade "acredita" que está lendo /etc/conf fornecendo um script que " altera "a localização atual do / dir para /mnt .

Eu diria que para este tipo de operações você pode fazer com fakechroot, mas não está mais disponível. Isso está correto? Existe alguma maneira melhor de fornecer essa funcionalidade?

    
por Niemand 20.02.2017 / 16:21

1 resposta

1

Você pode tentar usar um contêiner docker. A maneira mais simples de fazer isso (para que você não tenha que aprender a sintaxe Dockerfile ) seria instalar o docker e docker run -it centos:<version> (onde está a versão do RHEL para o qual esses utilitários foram gravados) e configurar o contêiner. os binários e executáveis como eles precisam ser, saia do shell / contêiner e use docker ps para localizar o ID do contêiner.

Por exemplo:

[root@website ~]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                  PORTS                   NAMES
42f454cc1c71        centos:latest               "/bin/bash"              About an hour ago   Up About an hour                                sick_davinci

Em seguida, use docker commit para salvar a imagem:

docker commit 42f454cc1c71 baseImage

Em seguida, execute firstUtil (ou seja o que for chamado):

docker run -it --rm -v /srv/configs/firstUtil:/etc/conf baseImage /path/to/firstUtil

Em seguida, execute secondUtil :

docker run -it --rm -v /srv/configs/secondUtil:/etc/conf baseImage /path/to/secondUtil

etc, etc

Em cada um dos comandos docker run acima, ele executará o comando em um contêiner baseado na imagem que você configurou e, em seguida, o --rm fará com que ele seja desfeito depois que o comando fornecido sair. O --rm é útil para que uma execução do utilitário não possa influenciar a próxima, a menos que o utilitário modifique algo dentro de /etc/conf , pois cada vez que o comando é executado é a primeira vez que algo é executado no contêiner.

Você pode colocar esses comandos docker run em um script ou alias de shell se facilitar a digitação.

Lembre-se de que o docker tentará, por padrão, modificar o firewall e a tabela de roteamento no host também.

    
por 20.02.2017 / 17:28