Upgrade Samba su Snow Leopard
19 febbraio 2011 11 commenti
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
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.wrapper e org.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!
Su Snow Leopard è bastato dare il comando di macports e ha installato tutto correttamente!
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!
Ti incollo direttamente l’output del terminale 😉
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.
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 😉
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
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.
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
Glad to be useful!
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
Nuovi commenti sul nuovo sito