Upgrade Samba su Snow Leopard

Me & My Mac
by Martin Gommel

Dopo una lunga e sofferta serie di tentativi sono finalmente riuscito nell’intento e quindi è meglio che lo condivido, così nel caso mi dovesse ri-servire almeno so dove trovarlo! Il problema è il seguente: a casa ho un WD TV Live media center che ha sempre lavorato egregiamente. Da qualche tempo però lamentavo dei problemi sulla lettura delle cartelle condivise dal mio iMac. Anzi, non vedevo praticamente più l’iMac! Cerca e porcheggia in giro finchè non trovo la causa: ho fatto un paio di aggiornamenti del firmware e a quanto pare gli ultimi firmware utilizzano delle funzionalità di samba non più compatibili con la versione montata da Apple. Che strano, mi dico, e così controllo: Apple monta la versione di samba 3.0.28 ovvero piuttosto vecchiotta. Che a quanto pare, oltre a non andare con il mio media center, non va neppure con Windows 7. Il motivo lo leggo sul forum di supporto di Apple: dalla versione 3.2.x samba è passato alla licenza GPLv3 che è molto più restrittiva della GPLv2. E quindi Apple si è fermata con gli aggiornamenti.

Sinceramente non la vedo come una grande trovata. Soprattutto visti i problemi che nascono con i nuovi device che vanno in rete. Spero che inventino qualcosa, ma al momento devo inventarmi qualcosa io. Provo quindi la forza bruta: prendo l’ultima versione dal sito samba e mi metto a compilare con scarsi risultati. Cerco qualcosa on-line e trovo questa discussione pressochè illuminante. Quello che segue sono gli step che ho fatto, che vado ad integrare rispetto a quanto scritto nella discussione, dato che ho trovato delle cose che non tornano molto.

Primo step: andare su http://www.macports.org/ e scaricare il pacchetto di installazione di macports (il .dmg con il relativo package funziona perfettamente).

Secondo step: a quanto pare i riferimenti di installazione presenti su macports per samba3 sono errati. Se non si fa nulla si ottiene in fase di installazione il seguente errore:

dyld: Library not loaded: bin/libtalloc.dylib.1
Referenced from: /opt/local/sbin/./smbd Reason: image not found

per risolvere la cosa è necessario andare sul file /opt/local/var/macports/sources/rsync.macports.org/release/ports/net/samba3/Portfile ed aggiungere le seguenti righe:

system “install_name_tool ${changeline} ${destroot}${prefix}/sbin/smbd”
system “install_name_tool ${changeline} ${destroot}${prefix}/sbin/nmbd”

subito dopo la riga indicante

system “install_name_tool ${changeline} ${destroot}${prefix}/bin/testparm”

Terzo step: installare samba3 ed i relativi pacchetti dipendenti mediante il comando di macports

sudo port install samba3

e verificarne il funzionamento.

Quarto step: disabilitare il samba utilizzato di default in modo che non venga caricato all’avvio:

# launchctl
launchd% unload -w /System/Library/LaunchDaemons/smbd.plist
launchd% unload -w /System/Library/LaunchDaemons/nmbd.plist
launchd% quit

Quinto step: creare il plist che permetta di lanciare il nuovo samba automaticamente all’avvio. Per prima cosa creare la struttura:

mkdir -p /opt/local/etc/LaunchDaemons/org.macports.samba3/

Dopodichè creare in questa cartella due file:  samba3.wrapperorg.macports.samba3.plist. Il primo è il file che permette il lancio di samba. Copiateci dentro il seguente codice:

#!/bin/sh
#
# MacPorts generated daemondo support script
#

#
# Init
#
prefix=/opt/local

#
# Start
#
Start()
{
/opt/local/sbin/smbd -D
/opt/local/sbin/nmbd -D
}

#
# Stop
#
Stop()
{
/opt/local/bin/smbcontrol nmbd shutdown
/opt/local/bin/smbcontrol smbd shutdown
}

#
# Restart
#
Restart()
{
Stop
Start
}

#
# Run
#
Run()
{
case $1 in
start ) Start ;;
stop ) Stop ;;
restart) Restart ;;
* ) echo "$0: unknown argument: $1";;
esac
}

#
# Run a phase based on the selector
#
Run $1

Il secondo file invece rappresenta il file utilizzato da MacOSX per il lancio ed è in formato xml. Basta usare il seguente codice:

<?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>Debug</key>
<false/>
<key>Label</key>
<string>org.macports.samba3</string>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/opt/local/etc/LaunchDaemons/org.macports.samba3/samba3.wrapper</string>
<string>start</string>
</array>
<key>RunAtLoad</key>
<false/>
</dict>
</plist>

L’unica raccomandazione è di rendere eseguibile il primo script (basta un chmod 755 del file).

A questo punto basta creare il link per il plist

ln -s /opt/local/etc/LaunchDaemons/org.macports.samba3/org.macports.samba3.plist

ed aggiungerlo al lancio iniziale del sistema:

launchctl load -w /Library/LaunchDaemons/org.macports.samba3.plist

Fine! E’ un po’ lunga e intricata, quindi… se ci provate: buona fortuna!

11 Responses to Upgrade Samba su Snow Leopard

  1. Mattia says:

    Su Snow Leopard è bastato dare il comando di macports e ha installato tutto correttamente!

    • mikyjpeg says:

      Immagino però tu abbia modificato il path di installazione predefinito di macports. Perchè il samba originale è in /usr/sbin mentre quello installato da macports sta in /opt/local/sbin a meno di modifiche. Io personalmente ho preferito averlo come un’installazione separata, sperando che prima o poi Apple aggiorni il suo così da poter utilizzare il giro normale di condivisione.

      Se invece non hai fatto così fammi sapere!

      • Mattia says:

        Ti incollo direttamente l’output del terminale 😉

        Bart:Sites zupolgec$ smbclient --version
        Version 3.0.28a-apple
        Bart:Sites zupolgec$ sudo -s
        Password:
        bash-3.2# port install samba3
        Warning: port definitions are more than two weeks old, consider using selfupdate
        --->  Computing dependencies for samba3
        --->  Fetching samba3
        --->  Attempting to fetch samba-3.2.15.tar.gz from http://lil.fr.distfiles.macports.org/samba3
        --->  Verifying checksum(s) for samba3
        --->  Extracting samba3
        --->  Configuring samba3
        --->  Building samba3
        --->  Staging samba3 into destroot
        --->  Installing samba3 @3.2.15_1
        --->  Activating samba3 @3.2.15_1
        --->  Cleaning samba3
        bash-3.2# smbclient --version
        Version 3.2.15
        bash-3.2# whereis smbclient
        /usr/bin/smbclient
        
  2. mikyjpeg says:

    Ma i demoni da dove ti si avviano? Se dai /usr/bin/smbstatus cosa ti ritorna? A me 3.0.28apple, mentre quello corretto arriva da /opt/local/sbin/smbstatus.
    Inoltre nel plist di smbd e nmbd sono chiaramente indicati i demoni presenti in /usr/sbin che sono quelli originali. Sinceramente non capisco.

    • Mattia says:

      Avevo fatto un gran casino =P
      Rifacendo tutto da capo (con la modifica suggerita da te) e disattivando il samba originale sembra che adesso funzioni tutto 😉

  3. rust says:

    ottimo articolo. Grazie mille.
    Ho un paio di dubbi:

    1) non riesco a completare il quarto step.

    anidir:sbin rust$ sudo launchctl
    Password:
    launchd% unload -w /System/Library/LaunchDaemons/smbd.plist
    launchctl: Error unloading: org.samba.smbd
    launchd% unload -w /System/Library/LaunchDaemons/nmbd.plist
    launchctl: Error unloading: org.samba.nmbd

    2)
    immagino che il comando per il link simbolico sia

    ln -s /opt/local/etc/LaunchDaemons/org.macports.samba3/org.macports.samba3.plist /Library/LaunchDaemons/org.macports.samba3.plist

    • mikyjpeg says:

      Sull’errore non saprei, non sono un esperto di launchd. Prova a farlo direttamente da root, forse il sudo può avere qualche problema.

      Relativamente al link hai ragione. Però se sei già nella directory corretta puoi lanciarlo senza specificare dove crearlo.

  4. Joni says:

    Thank you for howto, it really saved my day! We did have problems with our xserve wich file sharing services were somereason broken. I installed samba3, followed your guide and now we can contiune our work.

    Thank you again 🙂
    ps. I used google translate

  5. mikyjpeg says:

    AGGIORNAMENTO: sembra che l’ultimo aggiornamento di Apple abbia sanato la situazione, o forse è stato l’ultimo upgrade del firmware ma non me ne ero accorto. L’aggiornamento ha comunque rimesso nell’avvio automatico il samba di default per cui è necessario rimuovere quello aggiunto con il seguente comando: launchctl unload -w /Library/LaunchDaemons/org.macports.samba3.plist