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.
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 :
Basé sur FreeBSD, solution pour NAS avec interface web avec gestion du stockage via ZFS.
Basé sur Debian, solution pour NAS avec interface web avec gestion du RAID logiciel via mdadm.
Basé sur Raspian/Debian, distribution minimaliste pour Raspberry Pi et autres joyeusetés.
Petit nouveau dans le game, basé sur Debian, solution pour NAS avec interface web sans solution de gestion du stockage.
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
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.
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 !
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.
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.
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
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…