
Introduction (car il en faut des fois)
Comme ma timecapsule a lâchement cramé récemment à cause de la chaleur, en fait ça fait la seconde fois que l'alim crame, celle que j'avais mise marchais mais n'as pas supportée les 35°C dans l'appart donc.... je récupère le disque de 1To que j'avais mis dans la timecapsule et je vais l'utiliser pour autre chose (et après analyse post mortem, c'est pas l'alim qui a cramé, mais .. la carte mère de la timecapsule.... il me reste donc le disk de 1To, déjà changé, et la carte wifi nimo.... qui peux marcher sur OpenWRT en passant, a condition d'être zen aussi !).
Donc un filer c'est quoi ?
- de l'espace disque
- de la sécurité (bon on peux faire sans sécu aussi)
- de la performance
Dans mon cas j'ai besoin aussi des protocoles suivants :
- NFS
- AFP (Apple)
- DAAP (iTunes pour mes zolis MP3 de mes CD)
- Bonjour aka MDNS
J'aimerais aussi éviter d'avoir 3000 fois la même donnée sur les disques alors on vas utiliser le ZFS dedup. Donc il me reste plus que OpenSolaris. Le ZFS dedup n'étant dispo que sur les version de Dev ultra experimentales de FreeBSD on va éviter de tout perdre...
Open Solaris ou encore merci Oracle
La distribution OpenSolaris avec du dedup étant encore "un developper preview" et vu qu'elle prends trop de place a mon goût (pas besoin de Gnome ou autre pour avoir un serveur de fichier), et vu que nos amis "Oracle" a décidé que OpenSolaris deviendrai ClosedSolaris, donc il ne reste plus que Nexenta Core Platform 3.0. A télécharger sur : http://www.nexenta.org/
Le hardware
Alors j'ai récupéré une vielle carte mère AMD64, collé 3Go de DDR1 (sisi ca existe) et un DOM de 4Go pour l'OS... (voir photo la à gauche !)
Une carte LSI JBOD type AOC-USAS-L8i, qui peux accessoirement faire du RAID, mais là on s'en fout car la carte passe en mode propriétaire et deviens incompatible avec Solaris (open ou pas). On peux la trouver sur ebay en fouillant :p
Un "Mobile Rack CSE-M35T-1" de supermicro, sur lequel j'ai mis un régul de vitesse pour éviter l'effet "avion" dans le salon.
Deux cables : CBL-0118L-02 (supermicro !!!) pour connecter les disk SAS vers le Mobile Rack.
Je passe sur le montage, c'est pas le but.
Installation de Nexenta Core Platform 3.0
Bon l'install étant en mode texte, suffit juste d'installer le minimum et après effectuer des détails de base afin de ne pas se faire casser les pieds avec des trucs qui ne servent pas à nos besoins.
Ip en statique
Configuration de l'IP en static. Contrairement a OpenSolaris ou on est obligé de virer "nwam", sur NCP on est resté dans les bonnes anciennes méthodes :
echo "192.168.1.1/24" > /etc/hostname.nge0
echo "192.168.1.254" > /etc/defaultrouter
rm /etc/dhcp.nge0
Evidement il faut remplacer "nge0" par le nom de l'interface que vous avez sur cette machine.
Ne pas oublier de modifer /etc/resolv.conf après le reboot pour y ajouter les serveurs DNS car, lors du passage DHCP vers IP Fixe, le dns installé via DHCP est supprimé de ce fichier.
Normalement /etc/nsswitch.conf a bien aussi les lignes suivantes :
hosts: files dns mdns
ipnodes: files dns mdns
Un bon reboot et on a un truc propre a l'emploi.
Désactivation des services inutiles
NCP installe pas mal de services inutiles... On les désactive
svcadm disable svc:/network/iscsi/initiator:default
svcadm disable svc:/system/fcoe_initiator:default
Création du pool de disks..
Laissé comme un exercice... Hein ? Faut pas déconner non plus ?
NFS
Bah pareil... Sauf qu'il ne faut pas oublier de mettre les bon attributs a sharenfs 
filer/smb sharenfs root=@192.168.0.0/23,sec=none,rw=@192.168.0.0/23,root_mapping=0
AFP, ou Netatalk.
Sur Nexenta Core Platform il y a un port de netatalk, il ne fonctionne pas alors c'est pas la peine de le charger, il vas surtout tomber dans dépendances foireuses...
Donc nous allons donc compiler le port et le coller dans /usr/local, car au moins il risque pas de foutre la zone dans le système.
Il faut installer les dépendances suivantes sur NCP :
apt-get install sunwopenssl-include sunwopenssl-libraries libdb-dev
Un fois installé "y a plus qu'à" compiler le bidule :
./configure --prefix=/usr/local --with-pam=/usr/lib/security
make
make install
Les fichiers de conf sont dans /usr/local/etc/netatalk.
C'est par la que se situe les points délicats
netatalk.conf
Configuration de netatalk, on utilise que le partage de fichiers, tout le reste est inutile :
# Netatalk configuration
# Change this to increase the maximum number of clients that can connect:
AFPD_MAX_CLIENTS=20
# Change this to set the machine's atalk name and zone.
# NOTE: if your zone has spaces in it, you're better off specifying
# it in afpd.conf
#ATALK_ZONE=@zone
ATALK_NAME=`echo ${HOSTNAME}|cut -d. -f1`
# specify the Mac and unix charsets to be used
ATALK_MAC_CHARSET='MAC_ROMAN'
ATALK_UNIX_CHARSET='LOCALE'
# specify the UAMs to enable
# available options: uams_guest.so, uams_clrtxt.so, uams_randnum.so,
# uams_dhx.so, uams_dhx2.so
# AFPD_UAMLIST="-U uams_dhx.so,uams_dhx2.so"
# Change this to set the id of the guest user
AFPD_GUEST=nobody
# Set which daemons to run.
# If you need legacy AppleTalk, run atalkd.
# papd, timelord and a2boot are dependent upon atalkd.
# If you use "AFP over TCP" server only, run only cnid_metad and afpd.
ATALKD_RUN=no
PAPD_RUN=no
TIMELORD_RUN=no
A2BOOT_RUN=no
CNID_METAD_RUN=yes
AFPD_RUN=yes
# Control whether the daemons are started in the background.
# If it is dissatisfied that atalkd starts slowly, set "yes".
ATALK_BGROUND=no
# export the charsets, read form ENV by apps
export ATALK_MAC_CHARSET
export ATALK_UNIX_CHARSET
# config for cnid_metad. Default log config:
# CNID_CONFIG="-l log_note"
afpd.conf
- -tcp -noddp -uamlist uams_cleartxt.so,uams_dhx.so,uams_dhx2.so -nosavepassword
#- -transall -uamlist uams_dhx.so,uams_dhx2.so -nosavepassword
Ceci permet d'utiliser les MDP de Solaris sur Netatalk, donc ne pas oublier de créer un user ayant le même user que celui de votre mac pour qu'on puisse s'identifier. Si vous mettez un gecos, le serveur netalk fera la correspondance correcte...
AppleVolumes.default
Les volumes a exporter en AFP
# [...]
/stuff/smb "Fichiers" allow:@staff cnidscheme:dbd options:usedots,invisibledots,upriv perm:0770
/filer/tmp "Temporaire" allow:@staff cnidscheme:dbd options:usedots,invisibledots,upriv perm:0770
/filer/sav "Sauvegardes" allow:kiwi cnidscheme:dbd options:usedots,invisibledots,upriv perm:0770
/filer/archives "Archives" allow:kiwi cnidscheme:dbd options:usedots,invisibledots,upriv perm:0770
/filer/miaomiao "Miaomiao" allow:miaomiao cnidscheme:dbd options:usedots,invisibledots,upriv perm:0770
/filer/timemachine/mina "TimeMachine Mina" allow:kiwi cnidscheme:dbd options:usedots,invisibledots,upriv perm:0770
/filer/timemachine/taya "TimeMachine Taya" allow:kiwi cnidscheme:dbd options:usedots,invisibledots,upriv perm:0770
/filer/timemachine/miaomiao "TimeMachine Miaomiao" allow:miaomiao cnidscheme:dbd options:usedots,invisibledots,upriv perm:0770
Ce qui fait les volumes suivants :
- Fichiers
- Temporaire
- Sauvegardes
- Archives
- Miaomiao
- TimeMachine Mina
- TimeMachine Taya
- TimeMachine Miaomiao
Exporter avec mdns les volumes...
Créez un fichier /var/svc/manifest/site/dnssd-afp.xml avec le contenu :
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type="manifest" name="dnssd-afp">
<service
name="site/dnssd-afp"
type="service"
version="1">
<single_instance/>
<dependency
name="filesystem-local"
grouping="require_all"
restart_on="none"
type="service">
<service_fmri value="svc:/system/filesystem/local:default"/>
</dependency>
<dependency
name="dns-multicast"
grouping="require_all"
restart_on="none"
type="service">
<service_fmri value="svc:/network/dns/multicast:default"/>
</dependency>
<exec_method
type="method"
name="start"
exec="/lib/svc/method/dnssd-afp"
timeout_seconds="60">
<method_context>
<method_credential user="root" group="root"/>
</method_context>
</exec_method>
<exec_method
type="method"
name="stop"
exec=":kill"
timeout_seconds="60">
</exec_method>
<instance name="default" enabled="false" />
<stability value="Unstable" />
<template>
<common_name>
<loctext xml:lang="C">
dns-sd registration of afp daemon
</loctext>
</common_name>
<documentation>
<manpage title="dns-sd" section="1M" manpath="/usr/man"/>
</documentation>
</template>
</service>
</service_bundle>
Puis dans le fichier /lib/svc/method/, créez le fichier dnssd-afp :
#!/sbin/sh
#
# Registers the AFP daemon with dns-sd.
#
/usr/bin/dns-sd -R filer _afpovertcp._tcp local 548 &
/usr/bin/dns-sd -R filer _device-info._tcp. local 548 model=Xserve &
# Sleep to ensure service has enough time to start up,
# otherwise SMF will timeout waiting for it to be ready.
sleep 5
Ne pas oublier de chmod 755 dnssd-afp; chown root:root dnssd-afp.
Importer le service :
pfexec svccfg -v import /var/svc/manifest/site/dnssd-afp.xml
Executer le service :
pfexec svcadm enable dnssd-afp
Et vous pouvez voir si le service tourne :
svcs dnssd-afp
STATE STIME FMRI
online Aug_22 svc:/site/dnssd-afp:default
Normalement votre serveur de fichier doit donc apparaitre assez rapidement sur la barre à gauche de votre finder.
MT-DAAPT ou le partage iTunes.
Bon... Normalement on prenant la version SVN de mt-daapd on arrivais à faire des choses. Vu que Apple a changé la version du protocole avec la version 10 de iTunes, on vas donc ... pas aborder cette section pour l'instant. On verra plus tard quand un fix ou un autre fork de mt-daapd/firefly existeras.
Et time machine ?
Et bien vous avez vu dans les partage j'ai prévu des exports time machine...
On peux faire accepter a OS X de prendre un partage AFP non Timecapsule de la façon suivante, sur un shell sur le Mac :
defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
Monter le volume sur votre finder, puis jouer avec Panneau de configuration et choisir le volume Timemachine.
Et *hop* 
Conclusion.
Un bon début, il me reste a ajouter :
- CIFS car sur Solaris le serveur NFS (qui n'est PAS samba) est un peu tricky
- L'ajout de napp-it