terça-feira, 18 de setembro de 2012

Mac OS X: Samba 3, versão open source

Desde o OS X 10.7(*) que tenho tido alguns problemas na partilha de ficheiros entre o meu MacBook e os PCs com o Windows da empresa (a única excepção é o PC com o Ubuntu Linux - parece que foram feitos um para o outro ;), sobretudo no acesso às pastas partilhadas via conta "guest". Recorrendo ao Google, tenho arranjado algumas soluções provisórias/imediatas, nomeadamente através de pequenos "tweaks" no registry (ver exemplo aqui).

Farto de procurar por "remendos", resolvi instalar a versão open source do Samba 3 e, até agora, parece que todos os problemas de compatibilidade foram resolvidos :) Os PCs com o Windows já encontram e acedem de imediato à minha pasta "pública", incluindo via conta "guest". Também o acesso às impressoras partilhadas parece ser agora mais rápido.

Para quem quiser experimentar, aqui ficam os passos que eu dei:

1.- Confirmar que a opção "File Sharing" está desactivada (System Preferences, Sharing).

2.- Desactivar o serviço com.apple.netbiosd (Apple's SMB server)
~$ sudo mv /System/Library/LaunchDaemons/com.apple.netbiosd.plist com.apple.netbiosd.bak

3.- Reiniciar.

4.- Instalar o Samba 3 no OS X via MacPorts
~$ sudo port install samba3

5.- Copiar smb.sample para smb.conf
~$ sudo cp /opt/local/etc/samba3/smb.conf.sample /opt/local/etc/samba3/smb.conf

6.- Editar/configurar smb.conf (configuração de modo a permitir o acesso "guest")
~$ sudo nano /opt/local/etc/samba3/smb.conf
#======================= Global Settings =====================================
[global]
   workgroup = WORKGROUP
   server string = Samba Server on (%L)
   netbios name = gandalf
   security = user
   Map to guest = Bad User
...   
#============================ Share Definitions ==============================
...
[share]
   comment = MacBook
   path = /Users/Shared/share
  
browseable = yes
   guest ok = yes
   create mask = 644

   directory mask = 755
   read only = no


7.- Iniciar samba3
~$ sudo /opt/local/sbin/smbd -D && sudo /opt/local/sbin/nmbd -D

There.

(*) Apple replaces Samba for Windows networking services (because of GPLv3).


Inicar/parar serviço via launchctl:
~$ sudo launchctl start|stop org.samba.nmbd
~$ sudo launchctl start|stop org.samba.smbd


Ficheiros (serviço):

1.- Criar ficheiro org.samba.nmbd.plist:
~$ sudo nano /Library/LaunchDaemons/org.samba.nmbd.plist

2.- Copy/paste:
 <?xml version="1.0" encoding="UTF-8"?>  
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
 <plist version="1.0">  
 <dict>  
      <key>Label</key>  
      <string>org.samba.nmbd</string>  
      <key>OnDemand</key>  
      <false/>  
      <key>ProgramArguments</key>  
      <array>  
           <string>/opt/local/sbin/nmbd</string>  
           <string>-F</string>  
      </array>  
      <key>RunAtLoad</key>  
      <true/>  
      <key>ServiceDescription</key>  
      <string>netbios</string>  
 </dict>  
 </plist>  

3.- Criar ficheiro org.samba.smbd.plist:
~$ sudo nano /Library/LaunchDaemons/org.samba.smbd.plist

4.- Copy/paste:
 <?xml version="1.0" encoding="UTF-8"?>  
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
 <plist version="1.0">  
 <dict>  
      <key>Label</key>  
      <string>org.samba.smbd</string>  
      <key>OnDemand</key>  
      <true/>  
      <key>ProgramArguments</key>  
      <array>  
           <string>/opt/local/sbin/smbd</string>  
           <string>-Fs</string>  
           <string>/opt/local/etc/samba3/smb.conf</string>  
      </array>  
      <key>RunAtLoad</key>  
      <true/>  
      <key>ServiceDescription</key>  
      <string>samba</string>  
 </dict>  
 </plist>  

5.- Reiniciar.

Ficheiro applescript (por ex., para correr em contas "standard"):
 display dialog "Samba3 disabler.  
 Version 1.1.1  
 Support for Lion/Mountain Lion." buttons {"Enable", "Disable", "Cancel"} with icon stop  
 set userChoice to button returned of result  
 if userChoice = "Enable" then  
      do shell script "launchctl load -w /Library/LaunchDaemons/org.samba.nmbd.plist" with administrator privileges  
      do shell script "launchctl load -w /Library/LaunchDaemons/org.samba.smbd.plist" with administrator privileges  
      do shell script "launchctl start org.samba.nmbd" with administrator privileges  
      do shell script "launchctl start org.samba.smbd" with administrator privileges  
 else if userChoice = "Disable" then  
      do shell script "launchctl stop org.samba.nmbd" with administrator privileges  
      do shell script "launchctl stop org.samba.smbd" with administrator privileges  
      do shell script "launchctl unload -w /Library/LaunchDaemons/org.samba.nmbd.plist" with administrator privileges  
      do shell script "launchctl unload -w /Library/LaunchDaemons/org.samba.smbd.plist" with administrator privileges  
 else if userChoise = "Cancel" then  
      return  
 end if  

# edit 27/05/2013