Linux, como executar processos com diferentes visualizações do sistema de arquivos

0

Eu preciso executar várias instâncias de um processo com configurações diferentes. No entanto, este processo é codificado para ler a configuração de um determinado arquivo (escusado será dizer que a sua fonte fechada). Além disso, o processo grava periodicamente a configuração de volta no arquivo.

Eu tentei iniciar o processo usando um script depois de mover o arquivo de configuração correto para essa instância, mas isso falha porque as instâncias substituem o arquivo de configuração para o outro.

Essencialmente eu preciso de um equivalente de lançamento com diferentes ambientes, mas no nível do sistema de arquivos

EDIT: Cada processo é executado como um usuário independente, mas procura por um arquivo de configuração em um local comum Obrigado

    
por eskhool 28.11.2017 / 12:12

2 respostas

1

Dê uma olhada nos namespaces , especialmente para montarias. Talvez seja necessário replicar o sistema de arquivos raiz, portanto, observe também as sobreposições de FS e / ou montagens de ligação.

Outra opção é usar LD_PRELOAD e seqüestrar a chamada open , para que você possa substituir o arquivo de configuração (ou outros arquivos) pelos caminhos desejados.

A ferramenta userspace é chamada unshare , então você faz algo como

$ mkdir dir1
$ mkdir dir2
$ touch dir1/foo.conf
$ touch dir2/foo.conf
$ rm conf/foo.conf
$ sudo unshare -m /bin/bash
# mount --bind dir1 conf
# su your_userid
$ ls conf
foo.conf

e da mesma forma para dir2 etc. Skript conforme necessário.

    
por 28.11.2017 / 12:34
0

Dependendo do programa, você pode configurar cada instância em sua própria jaula (chroot) - você pode precisar usar montagens de bind para permitir que ele também acesse partes comuns do sistema.

Um chroot jail cria uma raiz virtual em um diretório (geralmente usando o comando chroot). Montagens de amarração podem ser usadas antes de criar a cadeia para tornar uma cópia de partes do sistema de arquivos visível como subdiretórios do diretório de cadeia raiz.

Outra alternativa seria usar algum tipo de virtualização - acredito que os contêineres do Docker seriam o que você quer (mas eu não joguei muito com eles). Certamente, o KVM poderia fazer isso, mas descobriu-se que seria muito grande - ou seja, uma VM completa por instância - para torná-lo prático.

    
por 28.11.2017 / 12:35