Voilà un petit moment que je me devais de faire cet article pour vous en dire un peu plus sur comment je gère mes données numériques au quotidien.

Et après plusieurs essais et échecs, je peux enfin dire que j’ai trouvé des outils simples et maintenus pour cette quête. Même si ce n’est pas encore parfait ni à la porté de tous.

Ma philosophie

C’est celle de Framasoft Dégooglelisons l’Internet ! Dans un monde ou si c’est gratuit, c’est vous le produit. Je me devais d’éviter d’aller à la simplicité et utiliser les Gmail, Dropbox, Spotify, iCloud et autres merdes du genre. On peut se dire que c’est cool, c’est simple mais vous ne contrôlez plus rien, et au final les GAFAM se serviront de vos données pour vous faire devenir des moutons consommateurs au service des actionnaires. Et j’entends déjà dire que « oui mais moi je sais mais je m’en fout » !

Le matos

Oui c’est chiant mais pour faire du hors cloud, il faut le construire chez soi ou chez le voisin le nuage. L’avantage de le faire chez soi c’est qu’on dépend de personne et aussi plus c’est proche plus on a de débit donc la donnée locale devient la donnée accessible rapidement.

J’ai viré ma box

Pour ne plus dépendre de mon opérateur en terme de matos, j’ai remplacé le routeur (une NeufBox v6) par Netgear R8000 flashé sous DD-WRT mod Kong. Avantages :

  • Meilleur wifi 30Mo/s sur la bande AC 5Ghz
  • Peu de changement de configuration si changement d’opérateur
  • Beaucoup paramétrage avancés possible
  • Si votre opérateur est en carafe, votre routeur marche toujours.

Par ici pour voir comment se passer de la neufbox v6 de SFR.

Le NAS

Là vous avez plein de solution pour stocker des données. Mais pour avoir un truc flexible surtout si vous avez de gros besoin, il faut faire du sur mesure. Vous pouvez faire avec du Synology ou concurrents mais c’est plutôt cher et en plus ils se font du blé sur des logiciels libres dont ils ne reversent jamais le code, bref des enculés hors la loi.

Donc il vous faut un PC x86 de préférence, moi je suis parti sur une configuration maison avec dans l’idée de faire un truc très compacte.

  • Intel Pentium G4400
  • 24 Go de RAM ( je vous explique après )
  • 4 x Disque de 3 To
  • 1 Disque de merde pour l’OS de base
  • Boîtier compacte In Win IW-MS04 ( Vous pouvez jeter un œil sur le SilverStone CS01-HS )

Et tous ça tient dans mon meuble de salon.

NAS dans le meuble TV

Donc si on fait les compte ça fait :

  • 200€ de routeur
  • Grosso modo 900€ de NAS

Ouai ça fait un budget après faut mettre en parallèle avec le coût du service rendu, pour avoir l’équivalent chez Dropbox c’est l’offre pro à 18€ par mois sauf qu’il faut prendre minimum 3 licences. Cela donne en annuel avec les remises si vous payez comptant 540€. Chez Google on est à 100€ par mois pour 10To soit 1200€ l’année. Après il y a en plus moyen de faire du recyclage de vieux composants ou acheter des trucs d’occasion ce que j’ai fait en partie. Pour ce qui est des solutions clé en main comme les Synology, on est au double du prix pour la même configuration.

Les logiciels

Dans l’idée d’avoir un truc souple et plutôt performant la première étape est de savoir comment vous allez exploiter vos disques-durs :

  • Es que l’on va faire du RAID 1/5/6/10 ?
  • Si du RAID logiciel ou matériel ?
  • Quel système d’exploitation ?

J’ai utilisé pendant longtemps des NAS maison sous Debian avec du raid 5 logiciel, les performances sont correctes (>100Mo/s en écriture) mais il y a pas mal d’inconvénients à cette solution. Comme devoir souvent recourir à la ligne de commande pour installer ou configurer des logiciels, pas de gestion simplifier se rapprochant d’une solution Synology. Au niveau du stockage vous ne pouvez pas augmenter facilement la taille ou le nombre de disque sans devoir recourir à des opérations complexe. Et une simple monté de version de l’OS se transforme rapidement en cauchemar.

Donc pour la base de mon NAS je me suis dit que j’allais devoir choisir une solution d’OS plus proche de l’objectif que juste une simple distribution Linux ou il faut tout configurer de 0. Inventaire du possible :

FreeNAS

Basé sur FreeBSD, solution pour NAS avec interface web avec gestion du stockage via ZFS.

OpenMediaVault

Basé sur Debian, solution pour NAS avec interface web avec gestion du RAID logiciel via mdadm.

Syncloud

Basé sur Raspian/Debian, distribution minimaliste pour Raspberry Pi et autres joyeusetés.

Yunohost

Petit nouveau dans le game, basé sur Debian, solution pour NAS avec interface web sans solution de gestion du stockage.

Proxmox

Basé sur Debian distribution commercial, environnement complet de stockage et de virtualisation avec interface web.

UnRaid
Distribution Linux commercial proposant un solution de RAID propriétaire. Interface Web et virtualisation.

En faisant cet article je suis tombé sur snapraid qui fournit un comparatif des différentes solutions de RAID logiciel au niveau du système de fichier.

J’ai opté pour FreeNAS comme OS de base. Pour les raisons suivantes :

  • Support natif de ZFS qui permet de faire du RAIDZ2 avec tolérance de panne de 2 disques, et gère les checksum sur fichier ainsi qu’une correction d’erreur. Gestion des snapshot comme LVM et permet de faire du stockage block pour d’autre système de fichier.
  • Gère le chiffrement sur disque en natif.
  • Robustesse et maintenue pour du commercial.
  • Possibilité de faire de la virtualisation ainsi qu’un système de JAIL.
  • L’interface WEB qui marche et est complète.
  • Mise à jour hyper simple via l’interface Web
  • Backup de la configuration via un simple fichier

FreeNAS

Déjà la mauvaise nouvelle c’est que pour avoir de bonne performance de stockage avec ZFS c’est qu’il vous faut de la RAM beaucoup de RAM car elle utilisé pour faire du cache et gérer les opérations interne de ZFS. J’en ai un peu plus que nécessaire car je prévois de faire de la virtualisation et ajouter d’autres fonctions sur mon NAS. Pour l’installation je vous recommande d’utiliser un device de merde pour le système car j’ai utilisé un SSD mais cela ne sert à rien, votre SSD sera beaucoup plus utile pour faire du cache pour ZFS. Vous pouvez utiliser une clé USB ou une carte SD.

NDLR: je vous laisse lire la doc de FreeNAS pour savoir comment installer le merdier. #RTFM

Ci-dessous un petit benchmark des performances disques sur du RAIDZ2 avec 4 disques de 3To, environ 400Mo/s de moyenne en écriture très correcte sans cache.

% fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=64k --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
 TEST: (g=0): rw=write, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=psync, iodepth=32
 fio-3.0
 Starting 1 process
 Jobs: 1 (f=1): [W(1)][31.8%][r=0KiB/s,w=626MiB/s][r=0,w=10.0k IOPS][eta 00m:15s]
 Jobs: 1 (f=1): [W(1)][58.3%][r=0KiB/s,w=0KiB/s][r=0,w=0 IOPS][eta 00m:10s]
 Jobs: 1 (f=1): [W(1)][83.3%][r=0KiB/s,w=625MiB/s][r=0,w=10.0k IOPS][eta 00m:04s]
 Jobs: 1 (f=1): [W(1)][100.0%][r=0KiB/s,w=0KiB/s][r=0,w=0 IOPS][eta 00m:00s]
 TEST: (groupid=0, jobs=1): err= 0: pid=20290: Sun Mar 17 17:01:13 2019
   write: IOPS=6702, BW=419MiB/s (439MB/s)(10.0GiB/24445msec)
     clat (usec): min=5, max=17384, avg=10.20, stdev=96.40
      lat (usec): min=6, max=17440, avg=10.76, stdev=105.67
     clat percentiles (usec):
      |  1.00th=[    8],  5.00th=[    8], 10.00th=[    8], 20.00th=[    9],
      | 30.00th=[    9], 40.00th=[    9], 50.00th=[    9], 60.00th=[   10],
      | 70.00th=[   10], 80.00th=[   10], 90.00th=[   11], 95.00th=[   11],
      | 99.00th=[   21], 99.50th=[   30], 99.90th=[   75], 99.95th=[  165],
      | 99.99th=[ 2999]
    bw (  MiB/s): min=  105, max= 1250, per=100.00%, avg=1104.55, stdev=362.70, samples=18
    iops        : min= 1688, max=20000, avg=17672.50, stdev=5803.29, samples=18
   lat (usec)   : 10=90.15%, 20=8.83%, 50=0.87%, 100=0.07%, 250=0.04%
   lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
   lat (msec)   : 2=0.01%, 4=0.01%, 10=0.01%, 20=0.01%
   cpu          : usr=0.68%, sys=7.26%, ctx=3362, majf=0, minf=1
   IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
      issued rwt: total=0,163840,0, short=0,0,0, dropped=0,0,0
      latency   : target=0, window=0, percentile=100.00%, depth=32
Run status group 0 (all jobs):
 WRITE: bw=419MiB/s (439MB/s), 419MiB/s-419MiB/s (439MB/s-439MB/s), io=10.0GiB (10.7GB), run=24445-24445msec
Capture FreeNAS écran des disques

Donc à partir de cette étape vous avez du stockage utilisable en 3 cliques vous pouvez l’utiliser en réseau.

  • Partage NFS
  • Partage SMB pour Windaube
  • Partage MacOS avec AFP
  • Et bien-sur aussi via SFTP
  • Et aussi iSCSI

Vous allez me dire ouai c’est cool mais comment je fais pour utiliser mes données en dehors de chez moi comme dans le nuage. Vous pouvez mettre en place un VPN mais ça solutionne pas vraiment le problème de la mobilité

Les JAILs et la virtu

FreeNAS fournit des plugins basés sur les JAIL ancestre des containers Docker. Le truc assez cool vous pouvez installer Nextcloud, Owncloud et une dizaines d’autres donc si vos besoins sont limités et que vous voulez pas vous faire chier les plugins FreeNAS c’est la vie.

FreeNAS liste des plugins

Moi j’avais besoin de plus de souplesse et surtout de plus d’outils que ceux disponibles, et certains outils que je voulais avoir que j’utilisais déjà auparavant. C’est pour ça que mon usage des plugins est limité. J’utilise uniquement les plugins Transmission, SickRage et CouchPotato. Si vous voulez vous amusez le tuto ici est très bien fait pour configurer les différents plugins. J’utilise aussi une jail pour faire tourner Unbound comme résolveur DNS pour mon réseau local très pratique.

Yunohost

Comme FreeNAS ne fait pas tout, il me fallait une solution pour exploiter pleinement mon NAS et lui ajouter des features digne d’un cloud maison. Et Yunohost est vraiment super cool pour ça !

Page d’accueil utilisateur de Yunohost

Yunohost c’est faire plein de trucs !

  • Les courriels en natif oui oui ! Multi-domaines multi-utilisateurs avec une interface web du bonheur !
  • Baikal pour gérer la synchronisation Agenda / Contact sur tout mes devices en CardDav/CalDav
  • Roundcube pour l’accès webmail
  • Ampache pour gérer ma bibliothèque musical
  • Wallabag pour gérer mes liens favoris à lire plus tard
  • Tiny Tiny RSS pour gérer mes flux RSS
  • Gitea pour gérer mes dépôts git
  • Lufi pour uploader simplement des fichiers de manière temporaire et sécurisé
  • Seafile pour faire comme Dropbox, ce soft est TRÈS PERFORMANT surtout quand vous devez synchroniser de gros volume de fichier aussi bien en taille que en nombre !
  • Piwigo pour partager des albums photos pour la famille
  • Riot pour tchater !
  • Mastodon ( Je déconseille fortement car bouffe à mort de RAM ) pour remplacer Twitter

Pour installer Yunohost il vous faut une VM dans Freenas et vous installez Debian dedans, une fois Debian installé vous pouvez suivre la procédure pour installer Yunohost.

Je vous recommande de faire comme ça pour le partitionnement de votre VM Debian. Vous créez 2 disques virtuels un pour / et swap. Et le deuxième pour toutes les données donc /home /var.

FreeNAS volume pour yunohost

Pour le deuxième disque vous allez faire un truc un peu particulier, vous allez l’utiliser comme LVM mais sans table de partition si qui permettra de faire grossir le volume à chaud sans éditer la table de partition comme il y en aura pas ! Je suis pas sur que se soit supporté par Bhyve de FreeBSD donc faudra à minima que votre VM reboot une fois après le changement de taille.

Partitionnement VM Debian

Donc on a vda partitionné normalement avec une partition de boot EFI et le système dans un LVM mais pas indispensable. Le deuxième disque vdb n’a pas de table des partitions et a directement un LVM avec /var et /home Yunohost utilise principalement ces points de montages pour stocker les donnée des applications installées. Cette solution n’est pas parfaite car vous n’avez pas de moyen simple pour accéder au fichier de la machine Yunohost depuis FreeNas. Par contre l’inverse est possible rendre disponible vos fichiers et partages FreeNas dans Yunohost en utilisant un point de montage NFS. Ci-dessous mon fichier /etc/fstab.

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/osvg-root /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/vda1 during installation
UUID=4CFA-31EB  /boot/efi       vfat    umask=0077      0       1
/dev/mapper/datasvg-home /home           ext4    defaults        0       2
/dev/mapper/datasvg-var /var            xfs     defaults        0       0
/dev/mapper/osvg-swap none            swap    sw              0       0
192.168.1.35:/mnt/Mainraidz2/medias	/home/yunohost.multimedia/share	nfs	auto,x-systemd.automount,x-systemd.device-timeout=10,timeo=14,x-systemd.idle-timeout=1min	0	0

Pour revenir aux avantages de cette solution en machine virtuelle, cela permet une grande facilite de maintenance grâce a la possibilité de snapshot de la VM quand on le souhaite. Promis je vous fais un script de déploiement de Yunohost pour FreeNas, je ne sais si c’est possible que j’en fasse un plugin car Yunohost s’appuie beaucoup sur Debian, et on ne pas faire de plugin de VM dans FreeNas pour l’instant. J’ai aussi commencé à investiguer une autre solution plus élégante qui serait d’utiliser le sous-système d’émulation linux dans une Jail BSD pour monter Debian+Yunohost sauf que cette méthode ne permet que d’installer Wheezy comme version de Debian donc pas possible. La solution la plus probable serait d’utiliser Docker pour FreeBSD c’est encore en expérimental.

Schéma du merdier

Schéma de mon réseau à la maison

Améliorations et travaux en cours

Tout se merdier je le fais sur mon temps libre et tout est loin d’être parfait donc voici la liste des travaux à faire ou en cours :

  • Secondary SMTP entry point has fail safe
  • External offsite backup via ZFS Sync or S3 protocol
  • Monitoring stuff (Premetheus, Grafana, snmp)
  • Upgrade Router firmware
  • Torrent stuff available on network trought SMB and other protocol
  • Add a reverse proxy over transmission web and other freenas apps
  • Use SSD for ZFS caching
  • Add 4G fallback connection on the router
  • Mastodon to Pleroma (save lot of ressource)
  • Configure HDD hidle for saving some juice
  • DNS-over-TLS
  • VPN ? already have ssh … usefull only for UDP
  • Have a haproxy in front of yunohost and the other stuff for manage ressource easily for sharing port like 443
  • IPv6 !


4 commentaires

clement · 11 juillet 2019 à 22 h 15 min

Merci pour le retour d’expérience (et l’humour sur le blog!) ^^. Chez moi, c’est Synology avec l’OS d’origine et Yunohost sur RASPI! #fun

emilien mougeat · 27 janvier 2020 à 22 h 42 min

Salut !
Merci pour ce retour d’experience.
J’ai également passé le pas ! freenas + yunohost en iohyve ( debian9+yunohost). plutot cool.
Par contre j’ai une petite galere que je n’arrive pas à resoudre, et je voulais savoir si tu avais rencontré la meme problematique.
En effet quand j’essaye de monter le NFS entre le yuno et le freenas, impossible.
Ma conf « semble » bonne maiiiiiiis je n’y arrive pas.
Qu niveau de la conf nfs du freenas, quels paramètres as tu ?
++

emilien mougeat · 27 janvier 2020 à 23 h 44 min

Bon Je viens de comprendre le probleme NFS, les droits configurés sur le volume etaient des droits windaube ….. SERIEUX Oo

T'es pas sérieux · 19 septembre 2020 à 15 h 46 min

Comment peut-on confondre « sait » et « c’est » ? Ce et se? Mon dieu…

Répondre à emilien mougeat Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *