Vou cortar o montador automático do FreeBSD em pequenos pedaços e cozinhá-los em óleo

40

Eu estou tentando expor uma hierarquia de diretórios home para um número de cadeias de FreeBSD. Os diretórios base são configurados de forma que cada um seja um conjunto de dados exclusivo do ZFS. As prisões são usadas para o trabalho de desenvolvimento e, portanto, são criadas e destruídas regularmente.

Meu primeiro pensamento foi simplesmente usar nullfs para montar /home dentro da cadeia, mas nullfs não fornece nenhuma maneira de acessar sistemas de arquivos subordinados.

Meu segundo pensamento foi exportar os diretórios via NFS e depois executar o daemon automounter (amd) dentro de cada cadeia. Isso teria funcionado ... se fosse possível executar montagens NFS dentro de uma cadeia. Mas não é.

O meu terceiro pensamento foi correr no host e prover nullfs nas cadeias ... mas o suporte para nullfs não existe.

Meu quarto pensamento foi voltar a exportar os diretórios usando o NFS, porque é claro que funciona com o NFS, certo? Infelizmente, em vez de montar um diretório no ponto de montagem de destino, a amd gosta de montar coisas em um local temporário ( /.amd_mnt/... ) e então criar um link simbólico ... que, é claro, é inútil dentro do ambiente jail.

Então talvez você possa usar nullfs para expor um subdiretório de /.amd_mnt para a cadeia? Não! Isso nos leva de volta à minha primeira tentativa, na qual descobrimos que não há como acessar sistemas de arquivos subordinados usando nullfs .

E então minha cabeça explodiu.

Existe uma boa solução para o que estou tentando fazer? Uma solução bad seria executar um script depois de inicializar o jail que criaria vários pontos de montagem nullfs para cada diretório inicial, mas isso é muito desajeitado - precisaria ser executar periodicamente para levar em conta novos diretórios ou diretórios removidos. Então, basicamente, eu teria que escrever um mau montador automático.

Deve haver uma maneira melhor. Ajude-me, Serverfault, você é minha única esperança!

UPDATE 1 : Ocorreu-me que eu poderia resolver parte do problema com pam_mount , embora isso fosse, na melhor das hipóteses, incompleto. Além disso, não está claro na documentação se pam_mount pode ou não criar automaticamente o ponto de montagem de destino. Se for necessário que o ponto de montagem exista a priori, essa solução não seria melhor do que o mau montador automático que já propus.

UPDATE 2 : Conforme discutido nas respostas abaixo, a configuração de VFCF_JAIL no sistema de arquivos NFS permite que os jails executem montagens NFS. Infelizmente, o automounter continua a se comportar de maneira pouco útil, e quando executado em uma cadeia parece ser muito bom em ficar preso de tal maneira que uma reinicialização do sistema é necessária para remover a entrada do processo.

    
por larsks 16.06.2011 / 15:20

1 resposta

26

Olá, Lars! Essa é uma pergunta fascinante que você perguntou, e depois de alguma pesquisa, posso ter encontrado uma resposta para você.

De acordo com este e outras mensagens por aí, pode ser possível definir o VFCF_JAIL atributo no provedor de sistema de arquivos NFS, o que, em teoria, permitiria jails para executar montagens NFS. Isso pode, por sua vez, permitir que se corra dentro da prisão ... o que resolveria essa questão com clareza.

Vou tentar reconstruir o kernel esta noite para ver como as coisas funcionam Fora. Não é necessariamente a melhor solução (já que significa você precisa ter certeza de que essa mudança persiste em futuras atualizações do kernel), mas seria interessante se funcionasse.

E lembre-se ...

           ___________    ____                                           
    ______/   \__//   \__/____\                             
  _/   \_/  :           //____\                             
 /|      :  :  ..      /        \                         
| |     ::     ::      \        /                             
| |     :|     ||     \ \______/     Don't try to rebuild the
| |     ||     ||      |\  /  |        kernel remotely because
 \|     ||     ||      |   / | \         you know you're just
  |     ||     ||      |  / /_\ \        going to hose the server.
  | ___ || ___ ||      | /  /    \    
   \_-_/  \_-_/ | ____ |/__/      \   
                _\_--_/    \      /   
               /____             /  
              /     \           /    
              \______\_________/     
    
por 17.06.2011 / 21:51