VirtualBox com convidado de host / Linux do Win10, como compartilhar arquivos com semântica unix completa

0

Eu tenho o Windows 10 em execução em um laptop que executa o VirtualBox que executa um convidado do Linux.

Eu faço muita programação para o ambiente Linux e estou trabalhando com repositórios de código fonte localizados em uma árvore de diretórios FS / compartilhada entre o host Windows e o guest Linux, por exemplo. editando com o SublimeText sendo executado no Windows, mas fazendo compilação, teste, controle de versão, etc, em um terminal conectado ao convidado Linux.

Por várias razões, eu preciso dos diretórios que hospedam os repositórios de código-fonte para permitir a semântica unix completa, ou seja, ser capaz de definir uid / gid para proprietário, bits de permissão, fifos, links simbólicos, etc.

Eu não me importo se esses recursos não são compartilhados de maneira significativa entre o Windows e o Linux. Eu só preciso que essas coisas sejam bem definidas no lado do Linux. No lado do Windows, eu só preciso ser capaz de ler / escrever o conteúdo do arquivo.

Eu quero que os arquivos sejam hospedados no lado do Windows / host, não no guest Linux, já que eu não quero ter que acionar o guest Linux para que os arquivos se tornem visíveis / acessíveis no Windows.

Como posso definir isso?

Eu tentei várias coisas.

Parece que o vboxsf oferece apenas um pequeno subconjunto de recursos unix. Por favor, corrija-me se estiver errado.

Eu tentei posixovl em cima de uma montagem vboxsf, mas parece que não consigo suportá-la para uma operação simples como "mkdir mydir; rm -rf mydir". Tal operação falharia com "rm: cannot remove 'mydir': Diretório não vazio". Meu diagnóstico do problema com isso é que ele irá criar um arquivo "somedir / .pxovl" para manter os bits de permissão do somedir e coisas assim no FS mais baixo. No FS superior esse arquivo não é visível, então "rm -rf" não pode se livrar do arquivo. Quando "rm -rf" tenta "rmdir mydir" no FS superior, isso acionará uma tentativa de fazer isso no FS inferior, que falha porque o arquivo ".pxovl" ainda está lá. Por favor, corrijam-me se houver uma solução para isso, mas isso está me enlouquecendo.

Eu tentei configurar um diretório como um compartilhamento de rede no lado do Windows, depois montei via mount.cifs no linux. Parece que tal montagem não oferece recursos unix propriamente, e nesse sentido tem limitações semelhantes ao vboxsf, e não consigo encontrar nenhuma opção que permita qualquer tipo de emulação ou algo assim.

Ocorreu-me que talvez houvesse programas que podem ser configurados no lado do host do Windows que oferecem semântica unix real e fazem algum tipo de emulação de recursos unix como um servidor NFS ou outro tipo de servidor para compartilhamento de rede sistemas de arquivos, mas não consigo encontrar nenhum.

Ocorreu-me também que os sistemas de arquivos de sobreposição podem ser uma ferramenta útil para trazer tal solução, mas não podem realmente conceituar como essa solução pode parecer.

Alguma idéia?

    
por R Bergmair 03.07.2018 / 13:47

2 respostas

0

Infelizmente, o Windows não considera que os arquivos tenham os mesmos metadados que os sistemas Linux / Unix - isso leva à dor de cabeça que você está experimentando atualmente.

Minha solução (infelizmente para você) seria manter os arquivos na VM do Linux e usar o CIFS / Samba para compartilhá-los com o host do Windows - eu faço isso com frequência.

Não estou ciente de nenhuma maneira de obter a transparência e a confiabilidade que você procura depois de hospedar os arquivos em um sistema de arquivos do Windows (não-Unix).

Pode valer a pena pesquisar Windows Subsystem for Linux . Eles vêm progredindo recentemente (por exemplo: Melhorias no Chmod / Chown WSL ), assim você pode ser capaz de instalar um servidor NFS ou algo no WSL para alcançar o que você está procurando, mas dado onde o NFS é implementado no Linux (no kernel), está provavelmente fora de questão.

    
por 03.07.2018 / 14:39
0

Descobri que eu poderia chegar perto do que queria por meio de uma combinação de

  • WSL usando os novos recursos do drvfs, onde determinados aspectos da semântica unix são emulados sob o WSL ( metadata opção para o drvfs mount);
  • sshd em execução nessa WSL no host do Windows;
  • sshfs em execução no convidado do VirtualBox no Linux.

A solução foi:

  • Instalando o Ubuntu para Windows (WSL).
  • Ativando o sudo sem senha no WSL usando a linha %sudo ALL=(ALL:ALL) NOPASSWD: ALL in /etc/sudoers no WSL.
  • Colocando o comando "bash -c 'sudo /etc/init.d/ssh start'" no início automático no Windows usando o registro para que o servidor OpenSSH baseado em WSL seja iniciado automaticamente assim que eu fizer login.
  • Configurando o firewall do Windows Defender para permitir conexões à porta 22.
  • Configurando chaves SSH para permitir login sem senha do convidado linux para o servidor SSH baseado em WSL.
  • Usando wsl.conf para injetar as opções metadata,umask=0002,fmask=0113 ao montar o drvfs no WSL.
  • No convidado linux, colocando user_allow_other em /etc/fuse.conf
  • No convidado linux, colocando sudo -u myuser sshfs -o allow_other myuser@windowshost:/mnt/c /mnt/c para compartilhar o C-Drive.
  • Certificando-se de que o UID para myuser seja o mesmo entre o WSL e o Linux.

RESULTADO: Isso faz com que os nomes de arquivos e arquivos sejam compartilhados entre o Windows, WSL e Linux na VM guest, que recursos unix adicionais, como bits de permissão e links, sejam emulados e que esses recursos emulados sejam compartilhados entre o WSL e Linux. Mas:

  • LIMITAÇÃO: Quando eu crio um arquivo, mesmo através de um usuário diferente de myuser no convidado Linux, ele acaba sendo de propriedade de myuser .
  • LIMITAÇÃO: fifos não são suportados.
  • Eu posso viver com essas limitações, já que não preciso de fifos e realmente me importo apenas com o que acontece com o arquivo com o qual trabalho sob o único usuário que utilizo para desenvolvimento de software no meu laptop.
por 12.07.2018 / 21:14