Posso armazenar os garfos de recursos do OS X em um compartilhamento Samba em qualquer outro lugar * que não seja em arquivos dotbar?

15

Os garfos de recursos do OS X são fluxos alternativos de dados anexados a arquivos regulares. Eles podem conter o ícone personalizado do arquivo, rótulo colorido, palavras-chave ou qualquer outro metadado definido pelo usuário ou pelos aplicativos.

Eles são suportados nativamente pelo sistema de arquivos HFS + do OS X, mas sempre que o OS X monta outro sistema de arquivos, local (FAT32) ou remoto (NFS, SMB), eles são armazenados nos chamados arquivos "dotbar": a bifurcação de recursos para o arquivo comum name.exté armazenado em outro arquivo regular, mas oculto ._name.ext. (Eles não devem ser confundidos com .DS_Storearquivos, que armazenam as configurações de exibição de um diretório, como ícone versus exibição de coluna ou a posição de sua janela.)

O problema com os ._arquivos dotbar é que eles são arquivos regulares reais, no sistema de arquivos de destino, com a mesma extensão que o arquivo original, causando estragos de várias maneiras. Por exemplo, Ant e Maven verão ._MyClass.javaainda outro arquivo Java para compilar.

Vejo que o OS X pode ser configurado para armazenar bifurcações de recursos em fluxos nomeados para SMB e que o Samba pode ser configurado para armazenar fluxos nomeados em atributos estendidos do POSIX ou, alternativamente, em um diretório de depósito em outro lugar .

Ambas as soluções resolveriam o problema dos arquivos dotbar que poluem o sistema de arquivos de destino, mas também não consigo trabalhar.

 
Xattr

Primeiro eu tentei com o xattr:

vfs objects = streams_xattr
kernel oplocks = no

A última opção é devido a esse bug . Eu disse ao OS X para usá-lo, fazendo isso na raiz do compartilhamento, antes de montá-lo:

touch .com.apple.smb.streams.on

Mas quando tentei copiar um arquivo com o Finder, recebi este erro:

O Finder não pode concluir a operação porque alguns dados em "hello.java" não podem ser lidos ou gravados.
(Código de erro -36)

 
depósito

Então eu tentei com depósito:

vfs objects = streams_depot

saindo .com.apple.smb.streams.onna raiz do compartilhamento. Tentando copiar o mesmo arquivo com o Finder, recebi outro erro:

A operação não pode ser concluída porque ocorreu um erro inesperado
(código de erro -50)

 
Como posso fazer o OS X funcionar com uma dessas duas opções? Meu objetivo é tirá-los ._dos diretórios compartilhados.

Tentei simplesmente vetar arquivos dotbar:

veto files = /._*/
delete veto files = yes

Mas isso faz com que alguns aplicativos falhem, por exemplo, o Mercurial quando executado no OS X em um compartilhamento SMB montado .

Estou usando o OS X 10.9.5 como cliente; Samba 3.6.6 do Debian Wheezy como servidor.

Edit: aqui está a minha configuração, conforme solicitado:

[global]
    security = user
    invalid users = root
    workgroup = COMPANY_NAME
    encrypt passwords = true
    panic action = /usr/share/samba/panic-action %d
    syslog = yes
    syslog only = yes

    # PERFORMANCE TUNING
    socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072 SO_KEEPALIVE
    read raw = true
    write raw = true
    use sendfile = true
    min receivefile size = 16384
    aio read size = 16384
    aio write size = 16384
    max xmit = 131072
    getwd cache = true

    # DEFAULT OPTIONS FOR ALL SHARES
    writeable = true
    force group = company_group

    create mask = 664
    security mask = 664
    force create mode = 664
    force security mode = 664

    directory mask = 2775
    directory security mask = 2775
    force directory mode = 2775
    force directory security mode = 2775

    # solve problem where OS X clients remove mode 0100
    map archive = no

[homes]
    browseable = no
Tobia
fonte
Você tentou alterar a unix extensionsdiretiva na [global]sessão para ver se resolve o seu caso? Você pode atualizar sua pergunta com a saída do testparmcomando?
fgbreel
@fgbreel Adicionada configuração à minha pergunta. Não tentei alterar as extensões unix, porque elas estão ativadas por padrão (e eu meio que preciso mapear links simbólicos e outras coisas.) Você acha que devo desativá-la?
Tobia
Sim, não faz sentido :(
fgbreel 19/03/2015

Respostas:

2

Parece que você pode fazer isso com o novo módulo vfs_fruit , empilhado com o módulo VFS vfs_streams_xattr .

Veja, por exemplo, este encadeamento da lista de discussão . Você precisa de um sistema de arquivos subjacente que suporte atributos estendidos e precisa montá-lo com eles ativados.

No entanto , de acordo com o wiki do Samba , este é um novo recurso do Samba 4.2, então você precisará atualizar. (A partir de agora, mesmo o Debian Sid [experimental] ainda não possui o 4.2.)

Se você não está interessado em abandonar o pacote Debian e criar uma nova versão do Samba (ou atualizar para Jessie e aguardar o 4.2 aparecer no jessie-backports), você pode ocultar arquivos de ponto dos clientes.

Você pode ter dois compartilhamentos diferentes que apontam para o mesmo diretório, um dos quais oculta os arquivos ._, por exemplo. Talvez não seja o ideal, mas pode ser viável.

Keith
fonte
0

Não sei se é possível com as preferências nativas do Mac, mas você pode usar uma ferramenta como Asepsis para ajudar com esse problema. Ele moverá todos os excrementos do Mac para suas próprias pastas.

Blake Johnson
fonte
A última vez que verifiquei, Assepsia só remove .DS_Storearquivos, e não os "dotbar" ._*arquivos que causam a maioria dos problemas em compartilhamentos de rede
Tobia
@Tobia: Você levanta um bom argumento. Nesse caso, encontrei o BlueHarvest também, mas não é gratuito. Parece que o BlueHarvest usa monitoramento em tempo real, enquanto o Asepsis usa redirecionamento passivo (por meio do patch de um arquivo do sistema).
Blake Johnson
Obrigado. Mas vou esperar por uma solução do lado do Samba, pois acredito que é apenas uma questão de configuração.
Tobia