+++
title = "Monter son propre NAS"
date = 2024-10-29
[taxonomies]
tags = [ "système", "nas", "zfs", "nfs" ]
+++

![This is brilliant meme: TrueNAS, this is brilliant. Debian, but I like this](/2024/truenas_i_like_this.jpg)

Il y a de nombreuses lunes, j’avais un NAS TrueNAS Core. C’était du FreeBSD, il ne faisait pas grand-chose à part du S3 et du NFS et tout allait pour le mieux.

Il se trouve que TrueNAS est en train de petit à petit laisser tomber TrueNAS Core (certains tickets ouverts sur des bogues sont corrigés en TrueNAS Scale mais pas en TrueNAS Core par exemple).

Bref, bienvenue dans les aventures de TrueNAS Scale.

<!-- more -->

# TrueNAS Core, TrueNAS Scale, c’est quoi le truc ?

TrueNAS Core, c’est une base de FreeBSD (qui commence à dater un peu d’ailleurs). TrueNAS Scale, c’est une base de Debian. Les deux font du ZFS, les deux font du NFS, les deux font du CIFS.

La grosse différence, c’est donc essentiellement la « fraîcheur » du système et sa maintenabilité.

Maintenant, dans un cas comme dans l’autre, mes vieux démons me rattrappent : il m’est impossible d’intégrer ça proprement nulle part. Ajouter du Munin ? Impossible ! Faire la conf via Ansible ? Impossible ! Vous voulez intégrer [acme.sh](https://github.com/acmesh-official/acme.sh) ? Impossible !

Certes, il y a une API. Mais faut encore se taper tout le bordel de l’API en question alors que j’ai déjà des choses toutes prêtes à côté.

Et le [MinIO S3](https://min.io/) sur TrueNAS Scale est maintenant disponible dans un [K3s](https://k3s.io/) donc en terme de simplicité et de ressources, c’est pas ouf… Même si ça fonctionne tout-à-fait correctement, je tiens à le préciser.

Mais comme c’est une putain de Debian avec finalement pas grand-chose dessus, est-ce que c’est si compliqué que ça à faire soi-même « à la main » ? Ben non en fait…

# Installation Debian

Je ne vais pas te mentir, c’est presque la partie la plus compliquée. L’installation de TrueNAS est hyper simple : tout le partitionnement, toute la mécanique derrière, est 100% automatique, tu ne vois rien, tu ne sais rien, tu ne t’occupes de rien.

Tout s’installe aussi sur du ZFS. Bon installer Debian sur du ZFS à la main, c’est pas [infaisable mais v’là la race quoi…](https://openzfs.github.io/openzfs-docs/Getting%20Started/Debian/Debian%20Bookworm%20Root%20on%20ZFS.html). Donc il vaut mieux partir sur plus simple : `mdadm` avec du LVM par dessus.

J’ai fini par tomber d’accord avec moi-même sur une configuration de ce type : une première partition EFI sur chaque disque système (en l’occurence pour moi 2 SSDs de 120Gio recyclés), puis une seconde partition pour `mdadm`.

Une fois, `mdadm` installé, LVM vient après avec une configuration finalement assez classique : `swap`, une partition `/`, une partition `/home` plus petite (il ne devrait pas y avoir d’utilisateurs dans mon cas) et une partition `/var` un peu conséquente.

Pareil, je pars aussi du principe que la partie réseau n’est pas vraiment un problème : soit tu as une adresse fixe, soit c’est du DHCP, mais en gros, tu sais te débrouiller là-dessus et tu n’a pas de config cheloue avec des interfaces agrégées qui partent dans tous les sens.

# Installation d’OpenZFS

Là où ça se complique un peu, c’est pour l’étape d’après : il faut aller importer les informations ZFS existantes.

La première étape, c’est donc d’installer ZFS. Pour éviter un *downgrade*, opération pas toujours bien supportée par ZFS, j’ai choisi de ne baser sur OpenZFS disponible dans les *backports* de Debian 12. Si tu commences juste avec ZFS et que tu n’as créé aucun pool, tu peux très bien démarrer avec les dépôts `contrib` standard.

```bash
echo "deb http://deb.debian.org/debian bookworm-backports main contrib
deb-src http://deb.debian.org/debian bookworm-backports main contrib" > /etc/apt/sources.list.d/bookworm-backports.list
echo "Package: src:zfs-linux
Pin: release n=bookworm-backports
Pin-Priority: 990" > /etc/apt/preferences.d/90_zfs
apt update && apt install dpkg-dev linux-headers-generic linux-image-generic zfs-dkms zfsutils-linux
```

À partir de ce moment, tu devrais avoir un ZFS parfaitement fonctionnel. Encore une fois, s’il s’agit d’une récup depuis un ZFS existant, faut suivre la suite. S’il s’agit d’une première installation, faut créer les volumes, la doc en ligne devrait te suffire.

Généralement, TrueNAS monte l’ensemble des volumes dans `/mnt`. Pour refaire la même, il faut faire deux ou trois petites manips côté ZFS :

```bash
zpool import -fR /mnt <mon volume>
zfs set mountpoint=/mnt/<mon volume> <mon volume>
```

Ces deux jolies lignes permettent d’importer le volume existant (en forçant, sinon ZFS n’est pas content), de le monter au même endroit que ce que faisait TrueNAS et de mettre ce point de montage en dur dans ZFS.

Ça permet de s’assurer qu’on retrouvera les mêmes chemins ce qui est très important pour NFS, nettement moins pour les autres services.

Pour permettre au démon ZFS de monter tout ce petit monde au démarrage du serveur, il faut aller fixer un fichier de cache du côté de la configuration dudit démon.

```bash
zpool set cachefile=/etc/zfs/zpool.cache <mon volume>
```

Une fois rendu là, tu devrais avoir des points de montage exactement similaire à ce que fait TrueNAS. Et les mêmes volumes. Tu peux d’ailleurs en profiter pour faire un peu de ménage et supprimer les datasets qui ne seront plus utiles de toutes manières.

```bash
zfs destroy <mon volume>/.system
```

# Installation de NFS

Bon là, c’est un peu con comme la mort, on va pas se mentir.

```bash
apt install nfs-kernel-server && systemctl start --enable nfs-server.service
```

C’est à peu près tout. Bon, idéalement, il faut récupérer le fichier `/etc/exports` qui existait à l’origine sur le TrueNAS d’origine. Si ce n’est pas ton cas, il faudra aller le recréer, mais la syntaxe n’est pas bien compliqué.

Une fois arrivé là, tu as déjà 90% de TrueNAS, sauf évidemment si tu n’as aucun self-respect et que tu fais du CIFS. Mais seuls les déments font ça, donc je suppose que c’est bon.

# SMART

Histoire de compléter, tu peux installer SMART. Là, aussi c’est à peu près très con :

```bash
apt install smartmontools && systemctl start --enable smartd.service
```

# Le reste

Une fois que tout cela est fait, tu fais… bah ce que tu veux ! T’as besoin de rajouter du S3, tu peux faire du [garage](/tags/garage/). T’as besoin d’héberger du Bittorent, tu peux faire du transmission, du déluge, etc…

Si ton TrueNAS ne te servait vraiment que de stockage, là, tu n’as que du stockage, point.

# Conclusage

Oui, c’est déjà fini. En fait, avec ça, tu as un TrueNAS maison. Évidemment, il faudra potentiellement rajouter un relais SMTP, de la supervision, etc… Mais je suppose ici que tu as déjà ça à côté et que tu sais faire en gros.

TrueNAS, ça se limite à peu près à ça : gérer du ZFS, gérer du partage, gérer des disques.

Manque l’interface clicaconvy, mais qui a vraiment envie de tout faire en passant par ça ou par une API imbitable ?
