Vou cortar o montador automático do FreeBSD em pedacinhos e fervê-los em óleo

40

Estou tentando expor uma hierarquia de diretórios pessoais a várias cadeias do FreeBSD. Os diretórios pessoais são configurados de modo que cada um seja um conjunto de dados ZFS exclusivo. As cadeias são usadas para o trabalho de desenvolvimento e, portanto, são criadas e destruídas regularmente.

Meu primeiro pensamento foi simplesmente usar o nullfs para montar /homedentro da prisão, mas o 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 do montador automático (amd) dentro de cada prisão. Isso teria acabado de funcionar ... se fosse possível executar montagens NFS dentro de uma prisão. Mas isso não.

Meu terceiro pensamento foi rodar o amd no host e provisionar montagens do nullfs nas cadeias ... mas o suporte ao ndf para o nullfs não existe.

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

Então, talvez você possa usar o nullfs para expor um subdiretório da /.amd_mntprisão? 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 ruim seria executar um script após a inicialização da cadeia que criaria vários pontos de montagem nullfs para cada diretório inicial, mas isso é bastante complicado - seria necessário ser executado periodicamente para levar em conta novos diretórios ou diretórios removidos. Então, basicamente, eu teria que escrever um montador ruim.

Deve haver uma maneira melhor. Me ajude, Serverfault, você é minha única esperança!

ATUALIZAÇÃO 1 : Ocorreu-me que talvez eu consiga resolver parte do problema pam_mount, embora isso seja, na melhor das hipóteses, incompleto. Além disso, não está claro na documentação se é pam_mountpossível ou não criar automaticamente o ponto de montagem de destino. Se exigir que o ponto de montagem exista a priori, essa solução não seria melhor do que o montador ruim que eu já propus.

ATUALIZAÇÃO 2 : Conforme discutido nas respostas abaixo, a configuração VFCF_JAILno sistema de arquivos NFS permite que as cadeias executem montagens NFS. Infelizmente, o montador automático continua se comportando de maneira inútil e, quando executado em uma prisão, parece ser muito bom em ser entalhado de tal maneira que uma reinicialização do sistema é necessária para remover a entrada do processo.

larsks
fonte
11
E se você estiver disposto a portar esses recursos para o FreeBSD, isso seria incrível. Sério, o comportamento do montador automático de Linux padrão também seria perfeito, já que ele realmente monta sistemas de arquivos no ponto de montagem de destino, em vez de usar links simbólicos.
larsks
4
Eu culpo uma grave falta de tempo. E talvez um pouco de falta de motivação ...>.>
Ignacio Vazquez-Abrams
15
+1 Apenas para o título incrível. :)
Shauna
4
Preocupa-me how específico o seu método particular de execução é
Mark Henderson
2
@ Wilshire, você não é divertido.
Larsks

Respostas:

26

Olá, Lars! Essa é uma pergunta fascinante que você fez e, depois de algumas pesquisas, posso ter encontrado uma resposta para você.

De acordo com este e outros posts, pode ser possível definir o VFCF_JAIL atributo no provedor de sistema de arquivos NFS, o que, em teoria, permitiria que as cadeias executassem montagens NFS. Isso pode, por sua vez, permitir que alguém rode o amd dentro da prisão ... o que resolveria perfeitamente esse problema.

Vou tentar reconstruir o kernel hoje à noite para ver como as coisas funcionam. Não é necessariamente a melhor solução (já que significa que você precisa garantir que essa alteração persista nas futuras atualizações do kernel), mas seria interessante se funcionar.

E lembre-se...

           ___________    ____                                           
    ______/   \__//   \__/____\                             
  _/   \_/  :           //____\\                             
 /|      :  :  ..      /        \                         
| |     ::     ::      \        /                             
| |     :|     ||     \ \______/     Don't try to rebuild the
| |     ||     ||      |\  /  |        kernel remotely because
 \|     ||     ||      |   / | \         you know you're just
  |     ||     ||      |  / /_\ \        going to hose the server.
  | ___ || ___ ||      | /  /    \    
   \_-_/  \_-_/ | ____ |/__/      \   
                _\_--_/    \      /   
               /____             /  
              /     \           /    
              \______\_________/     
larsks
fonte
6
Obrigado, Lars; Eu gostaria de ter seguido o seu conselho, porque agora não consigo acessar o servidor e vou ter que esperar até chegar em casa para fazer isso.
Larsks
10
+1 para os LOLs. Considere também isso como um direito de passagem - Dirigir-se para o servidor no meio da noite para inicializar o KERNEL.OLD (ou KERNEL.GENERIC - Você mantém um GENERIC atualizado em seus sistemas, certo? . deve começar) ensina muitas lições ...
voretaq7
Também mantenho uma cópia inicializável em rede do mfsbsd , o que me salvou de vários problemas relacionados ao carregador de inicialização.
Larsks 17/06
11
A configuração VFCF_JAILfez com que as montagens NFS funcionassem, mas o montador automático continua me atormentando.
Larsks
11
Eh, eu tenho usado automount para diretórios pessoais por mais de uma década em vários ambientes e fiquei feliz com isso. Lembre-se, este é o montador automático de Linux (e Solaris), não amd.
Larsks