¿Puedo almacenar los tenedores de recursos de OS X en un recurso compartido de Samba en cualquier otro lugar * que no sea en los archivos de barra de puntos?

15

Las bifurcaciones de recursos de OS X son flujos alternativos de datos adjuntos a archivos normales. Pueden contener el icono personalizado del archivo, etiqueta de color, palabras clave o cualquier otro metadato establecido por el usuario o por las aplicaciones.

Son compatibles de forma nativa con el sistema de archivos HFS + de OS X, pero cada vez que OS X monta otro sistema de archivos, ya sea local (FAT32) o remoto (NFS, SMB), se almacenan en los llamados archivos "dotbar": la bifurcación de recursos para el archivo normal name.extes almacenado en otro archivo regular pero oculto ._name.ext. (No deben confundirse con los .DS_Storearchivos, que almacenan la configuración de vista de un directorio, como la vista de icono frente a columna o la posición de su ventana).

El problema con los ._archivos dotbar es que son archivos regulares reales, en el sistema de archivos de destino, con la misma extensión que el archivo original, lo que causa estragos de varias maneras. Por ejemplo, Ant y Maven verán ._MyClass.javacomo otro archivo Java para compilar.

Veo que OS X se puede configurar para almacenar bifurcaciones de recursos en secuencias con nombre SMB y que Samba se puede configurar para almacenar secuencias con nombre en atributos extendidos POSIX o, alternativamente, en un directorio de depósito en otro lugar .

Ambas soluciones resolverían el problema de los archivos de barra de puntos que contaminan el sistema de archivos de destino, pero no puedo hacer que ninguno funcione.

 
Xattr

Primero probé con xattr:

vfs objects = streams_xattr
kernel oplocks = no

La última opción se debe a este error . Le dije a OS X que lo usara, haciendo esto en la raíz del recurso compartido, antes de montarlo:

touch .com.apple.smb.streams.on

Pero cuando intenté copiar un archivo con Finder, recibí este error:

El Finder no puede completar la operación porque algunos datos en "hello.java" no se pueden leer ni escribir.
(Código de error -36)

 
deposito

Luego probé con depósito:

vfs objects = streams_depot

dejando .com.apple.smb.streams.onen la raíz de la acción. Intentando copiar el mismo archivo con Finder, recibí otro error:

La operación no se puede completar porque se produjo un error inesperado
(código de error -50)

 
¿Cómo puedo hacer que OS X funcione con cualquiera de estas dos opciones? Mi propósito es sacar a esos desagradables ._de los directorios compartidos.

Intenté simplemente vetar los archivos de barra de puntos:

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

Pero eso hace que algunas aplicaciones fallen, por ejemplo Mercurial cuando se ejecuta desde OS X sobre un recurso compartido SMB montado .

Estoy usando OS X 10.9.5 como cliente; Samba 3.6.6 de Debian Wheezy como el servidor.

Editar: aquí está mi configuración según lo 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
fuente
¿Intentó cambiar la unix extensionsdirectiva en la [global]sesión para ver si resuelve su caso? ¿Puedes actualizar tu pregunta con la salida del testparmcomando?
fgbreel
@fgbreel Configuración agregada a mi pregunta. No he intentado cambiar las extensiones de Unix, porque está habilitado de forma predeterminada (y necesito mapear enlaces simbólicos y otras cosas). ¿Crees que debería deshabilitarlo?
Tobia
Sí, no tiene sentido :(
fgbreel

Respuestas:

2

Parece que puede hacer esto con el nuevo módulo vfs_fruit , apilado con el módulo vfs_streams_xattr VFS.

Vea, por ejemplo, este hilo de la lista de correo . Necesita un sistema de archivos subyacente que admita atributos extendidos, y debe tenerlo montado con ellos habilitados.

Sin embargo , según el wiki de Samba , esta es una nueva característica en Samba 4.2, por lo que necesitará actualizar. (En este momento, incluso Debian Sid [experimental] aún no tiene 4.2).

Si no está interesado en deshacerse del paquete Debian y construir una nueva versión de Samba (o actualizar a Jessie y esperar a que aparezca 4.2 en jessie-backports), puede ocultar los archivos de puntos de los clientes.

Podría tener dos recursos compartidos diferentes que apuntan al mismo directorio, uno de los cuales oculta los archivos ._, por ejemplo. Quizás no sea óptimo, pero podría ser viable.

Keith
fuente
0

No sé si es posible con las preferencias nativas de Mac, pero puede usar una herramienta como Asepsis para ayudar con ese problema. Moverá todos los excrementos de Mac a sus propias carpetas.

Blake Johnson
fuente
La última vez que lo verifiqué, Asepsis solo elimina .DS_Storearchivos, no los archivos "dotbar" ._*que causan la mayoría de los problemas en los recursos compartidos de red
Tobia
@Tobia: Planteas un buen punto. En ese caso, también encontré BlueHarvest , pero no es gratis. Parece que BlueHarvest usa monitoreo en tiempo real, mientras que Asepsis usa redireccionamiento pasivo (parcheando un archivo del sistema).
Blake Johnson
Gracias. Pero esperaré una solución en el lado de Samba, ya que creo que es solo una cuestión de configuración.
Tobia