Commentaires fermés

Netatalk : Back to the Mac !

2011
03.12

Samba c’est bien, mais si vous avez des Mac sur votre réseau, essayez Netatalk, l’implémentation libre du protocole AFP d’Apple. Nativement géré par MacOS X (dans sa dernière variante afpovertcp), les perfs sont bien meilleures, même out-of-the-box ! 85 à 90Mo/s, en lecture comme en écriture, ca donne une autre dimension au stockage en réseau, qui devient réellement utilisable comme s’il s’agissait d’un disque dur interne, le fil à la patte en plus.

Installation

Comme la plupart des billets de ce blog, les commandes et manips qui suivent sont spécifiques à FreeBSD, dans sa version 8.2 Stable. Mais la configuration proposée ici peut être transposée à un autre système facilement.

On va donc commencer par installer Netatalk, via les ports comme d’habitude :

# cd /usr/ports/net/netatalk ; make install clean

Pensez à valider l’option ‘PAM’, chez moi ca ne marche pas sans cela.

Ensuite on déclare le service dans le fichier /etc/rc.conf en rajoutant les lignes :

# Netatalk
netatalk_enable="YES"
afpd_enable="YES"
cnid_metad_enable="YES"

Ainsi, le daemon sera chargé au boot. Si vous voulez démarrer le service manuellement, tapez la commande :

# /usr/local/etc/rc.d/netatalk start

Une fois l’installation finie, vous devriez avoir les fichiers de configuration par défaut installés dans /usr/local/etc/

On utilise Avahi pour l’annonce des services via le protocole ZeroConf, aka Bonjour sur les Macs. Direction les ports une nouvelle fois :

# cd /usr/ports/net/avahi/ ; make install clean

Retour au rc.conf, avec les lignes :

# Avahi daemon
avahi_daemon_enable="YES"
avahi_dnsconfd_enable="YES"

Configuration du daemon afpd

On va utiliser 2 serveurs afp différents, le premier ( par défaut, « - » ) pour les partages classiques (répertoires perso, espace public, médiathèque …) qui reprend grosso modo la configuration de Samba, le second (« timemachine ») sera quant à lui dédié aux sauvegardes TimeMachine.

?Download afpd.conf
1
2
3
- -tcp -noddp  -savepassword -loginmesg "Welcome in Heaven !"  -uamlist uams_dhx.so,uams_guest.so,uams_clrtxt.so
 
"timemachine" -tcp -noddp -port 12002 -savepassword 	-loginmesg "Welcome Back in the Future !" -uamlist uams_dhx.so,uams_guest.so,uams_clrtxt.so -defaultvol /usr/local/etc/AppleVolumes.timemachine

Les options dans l’ordre et dans le détail :

-tcp -noddp
Toutes les machines sont récentes, on utilisera donc uniquement AFPoverTCP, et on désactive le transport historique AFP.

-port 12002
le port d’écoute du serveur « timemachine », afin de le differencier du serveur par défaut (qui écoute le port 548).

-savepassword
Permet aux utilisateurs de sauvegarder leurs infos de connection, pour ne pas avoir à retaper le MdP à chaque fois.

-loginmesg « Welcome »
Affiche une boite de dialogue avec le message défini ici. Pratique au début, ça devient vite agaçant d’avoir une pop-up à chaque connection …

-uamlist uams_dhx.so,uams_guest.so,uams_clrtxt.so
permet l’authentification, respectivement, via Diffie-Hellman, des invités, et avec un MdP en clair (MacOS X, dans sa mouture 10.6, utilise Diffie-Hellman)

-defaultvol _path_
par défaut, AFPD va chercher ses infos de partage dans le fichier /etc/AppleVolumes.default, mais on peut spécifier n’importe quel emplacement. C’est utilisé ici pour dénifir les partages de TimeMachine

Configuration du daemon Netatalk

Ici, pas grand chose de différent avec la config par défaut, juste l’id de l’utilisateur GUEST adapté à mon système

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# netatalk configuration
AFPD_MAX_CLIENTS=20
 
# Change this to set the machine's atalk name and zone.
#ATALK_ZONE=@zone
ATALK_NAME=`/bin/hostname -s`
 
# specify the Mac and unix charsets to be used
ATALK_MAC_CHARSET='MAC_ROMAN'
ATALK_UNIX_CHARSET='LOCALE'
 
# Change this to set the id of the guest user
AFPD_GUEST="media"
 
# config for cnid_metad. Default log config:
# CNID_CONFIG="-l log_note"

Configuration des serveurs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# The line below sets some DEFAULT, starting with Netatalk 2.1.
:DEFAULT: options:upriv,usedots
 
# The "~" below indicates that Home directories are visible by default.
# If you do not wish to have people accessing their Home directories,
# please put a pound sign in front of the tilde or delete it.
 
#~
 
/home/media "MediaTeK" rolist:@public_user rwlist:@user
/home/docs "Docs communs" allow:"Ti nicO","aurel","Xav"
/home/Ti_nicO "Ti nicO Docs" allow:"Ti nicO","aurel"
/home/aurel "Aurel Docs" allow:"Ti nicO","aurel"
/home/xav "Xav Docs" allow:"Xav"

Détail

Le partage par défaut du répertoire Home de chaque utilisateur est desactivé, remplacé par des partages définis manuellement, principalement pour affiner la gestion permissions.
Les autorisations sont définies par :
deny : accès interdit
allow : accès autorisé
rolist : accès lecture seule
rwlist: accès en écriture

Chaque champ peut recevoir une liste d’utilisateurs ou de groupes (préfixé par @).
La hiérarchie des autorisations est dans cet ordre : allow > rwlist > rolist > deny.

1
2
3
4
5
6
7
8
9
10
11
12
# The line below sets some DEFAULT, starting with Netatalk 2.1.
:DEFAULT: options:upriv,usedots
 
# The "~" below indicates that Home directories are visible by default.
# If you do not wish to have people accessing their Home directories,
# please put a pound sign in front of the tilde or delete it.
 
#~
 
/home/timemachine/Mac_Ti_nicO "timemachine" allow:"Ti nicO" options:tm volsizelimit:250000
#/home/timemachine/Mac_Xav "timemachine" allow:"Xav" options:tm volsizelimit:250000
#/home/timemachine/Mac_Aurel "timemachine" allow:"Aurel" options:tm volsizelimit:250000

Détail

Ici, j’ai décidé d’attribuer un répertoire par Mac à sauvegarder. Les repertoires sont à créer, avec bien entendu les droits de chaque utilisateur en écriture.

L’option qui change tout, c’est option:tm. Ca active certains tweaks obscurs qui permettent de bluffer TimeMachine et se faire passer pour une Time Capsule :)

Enfin, volsizelimit définit la taille maximale pour chaque sauvegarde. Vu qu’elles sont incrémentales, le double de la capacité du disque à sauvegarder laisse une bonne marge, surtout si vous excluez les fichiers système des backups timemachine.

Config Avahi :

On va utiliser Avahi pour publier nos partages sur le réseau. On a 2 services : les partages netatalk, et les sauvegardes TimeMachine. On crée donc 2 fichiers .service dans /usr/local/etc/avahi/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
 
<service-group>
	<name replace-wildcards="yes">Zurpatator2</name>
 
	<service>
		<type>_afpovertcp._tcp</type>
		<port>548</port>
	</service>
 
	<service>
		<type>_device-info._tcp</type>
		<port>0</port>
		<txt-record>model=MacPro</txt-record>
	</service>
 
</service-group>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
 
<service-group>
	<name replace-wildcards="yes">TimeMachine</name>
	<service>
		<type>_afpovertcp._tcp</type>
		<port>12002</port>
	</service>
 
	<service>
		<type>_device-info._tcp</type>
		<port>0</port>
		<txt-record>model=TimeCapsule</txt-record>
	</service>
 
	<service>
		<type>_adisk._tcp</type>
		<port>0</port>
		<txt-record>sys=waMA=00:e0:81:xx:xx:xx,adVF=0x100</txt-record>
		<txt-record>dk0=adVF=0x83,adVN=TimeMachine</txt-record>
	</service>
 
</service-group>

Détail des options

Le paramètre name est assez évident, c’est le nom qui sera affiché dans le finder. On peut mettre des alias, par exemple %h pour le hostname.

Le service _afpovertcp._tcp est notre partage proprement dit. Le port par défaut est 548, mais on peut utiliser un peu celui qu’on veut, tant que c’est le même que celui défini dans afpd.conf.

Le service _device-info nous permet de simuler un serveur mac, avec son icone dans le finder. Vous trouverez la liste des differents appareils dans ce fichier sur votre mac : /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist.
J’ai choisi un Macpro pour les partages, et une Time Capsule pour TimeMachine, mais c’est libre, vous pouvez frimer avec un gros Xserve en rack :)

L’option _adisk est importante, c’est elle qui va indiquer à votre Mac que le partage est disponible pour TimeMachine.
La première ligne contient l’adresse MAC de votre serveur, pensez à la remplacer ;)
La seconde ligne contient le nom vu par TimeMachine.

Note : je me suis largement inspiré de cette page pour réussir ma configuration.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# installe netatalk via les ports
# veiller à ajouter l'option 'PAM' lors de la config
cd /usr/ports/net/netatalk && make install clean
 
# installe les fichiers de config
cd /usr/local/etc/
fetch https://raw.github.com/lordzurp/Zurpatator2/master/usr_conf/afpd.conf
fetch https://raw.github.com/lordzurp/Zurpatator2/master/usr_conf/netatalk.conf
fetch https://raw.github.com/lordzurp/Zurpatator2/master/usr_conf/AppleVolumes.default
fetch https://raw.github.com/lordzurp/Zurpatator2/master/usr_conf/AppleVolumes.timemachine
echo 'lagg0' >> /usr/local/etc/atalkd.conf
 
# configure le daemon dans /etc/rc.conf
echo '# Netatalk & AFP' >> /etc/rc.conf
echo 'netatalk_enable="YES"' >> /etc/rc.conf
echo 'afpd_enable="YES"' >> /etc/rc.conf
echo 'cnid_metad_enable="YES"' >> /etc/rc.conf
echo '' >> /etc/rc.conf
 
# Installe les services avahi
cd /usr/local/etc/avahi/services
fetch https://raw.github.com/lordzurp/Zurpatator2/master/usr_conf/avahi.services/backup.timemachine.service
fetch https://raw.github.com/lordzurp/Zurpatator2/master/usr_conf/avahi.services/service.netatalk.service
 
# redémarre avahi-daemon
/usr/local/etc/rc.d/avahi-daemon restart

Les commentaires sont fermés.