Avec les annonces d'Apple qui annonce son passage à l'ARM sur ses Mac et les enjeux écologiques actuels, c'est le bon moment pour présenter le petit serveur ARM qui nous accompagne à la maison depuis quelques mois et qui a remplacé le Raspberry Pi.

De la Box Android TV au serveur Armbian

Reprenons depuis le début. En Novembre 2017 après avoir lu un article du blog MiniMachines.net sur une Box Android à moins de 30€, la Mecool M8S Pro Plus, j'ai jeté mon dévolu sur cette box un peu cheap. Avec ses 2Go de RAM, son port ethernet base 100Mbps et son processeur Amlogic S905X, elle ne paie pas de mine et pourtant elle à un atout : elle prend en charge les DRM nécessaires pour utiliser Netflix, MyCanal et les autres et est compatible H265 !

On se retrouve donc avec une box TV sous Android 7.1 qui supporte les applications de streaming les plus connues, et qui grâce à un tuto de Pierre Lecourt  on peut même la faire tourner sous Android TV, au même titre qu'une très chère Nvidia Shield, pour une fraction du prix.

La promesse est tenue, pendant quelques mois nous avons donc pu profiter d'Android TV avec notamment Netflix et Kodi (pour les Films/Séries sur le NAS). L'expérience n'était pas optimale avec l'énorme télécommande infrarouge et des ralentissements occasionnels, mais si tant que ça fonctionne je n'ai rien à redire.

Puis un beau matin Netflix se lance dans un grand nettoyage de printemps s'est affairé à faire sauter les DRM des appareils non certifiés comme nombre de box chinoises (dont ma pauvre M8S Pro+). On se retrouve donc avec une boite en plastique noire qui peut servir de lecteur multimédia pour Kodi et Youtube, mais pour de nombreux utilisateurs dont moi elle ne répond plus aux besoins initiaux.

Source : Freaktab

Après cette mésaventure j'ai mis la main au portefeuille pour acheter une Nvidia Shield 2017 pour me lancer dans l'aventure de Plex, et j'ai rangé soigneusement la Mecool dans une boite au fond d'un placard. Puis, fin 2019, pour un projet où mon Raspberry Pi 2 n'était pas disponible, j'ai ressorti la Mecool pour tenter d'installer une version de Linux en ligne de commande. Sur Youtube je tombe sur cette vidéo (lien) où un bricoleur montre qu'il est possible d'installer Armbian sur cette boite. Le projet terminé, je remballe tout.

En Avril 2020, un autre bricoleur se lance dans un tuto détaillé que je vous conseille de lire, où il explique comment installer Armbian sur sa M8S Pro+. C'est là que m'est venue l'idée : "Et si je remplaçait mon Raspberry Pi 2 par cette solution plus performante, bien que surement bien plus foireuse ?".

Pour le côté expérimental et le luxe de contrarier l'ami Julien amateur d'installations propres et carrées, j'ai débranché le RPi et je me suis affairé non sans mal à installer un serveur fiable.

Quelques mois plus tard, la machine détournée de son utilisation de base est toujours opérationnelle et fait tourner sous Docker :

  • Radarr pour les Films,
  • Sonarr pour les Séries,
  • Jackett pour les trackers français,
  • Portainer pour avoir une belle interface pour Docker,
  • Watchtower pour mettre à jour les container,
  • Nginx Proxy Manager qui remplace le reverse proxy du Synology,

Pour ceux qui seraient intéréssés je développe un peu plus bas une partie de la configuration de la machine.

Portainer en action

La plupart de ces applications peuvent être installées en standalone, mais j'ai préféré passer par Docker pour simplifier la gestion et les mises à jour des containers. Cela me permet aussi de tester des applications (Pi-Hole, Home Assistant...) et de pouvoir les virer vite et proprement.

Je suis assez fier d'avoir pu prouver grace à cette experience qu'il est facile de réutiliser du matériel censé être obsolète, et de disposer d'un serveur au processeur ARM moins consommateur (moins de 10W en pic) et plus silencieux qu'un Intel équivalent.

A l'heure où les processeurs x86_64 sont remis en question par les plus grands fabriquants, la question de l'ARM est vite répondue.

Je sais que maintenant un RPi4 avec 4Go de RAM serai plus performant, mais ce n'est pas le but de l'expérience. Pour un investissement d'environ 0€, je me retrouve avec une solution qui correspond à mes besoins, malgré quelques surprises de temps en temps !


Configuration logicielle du serveur

Cette configuration est valable pour mon installation mais est de manière générale compatible avec les Raspberry Pi. Ce n'est pas la configuration la plus parfaite mais elle fonctionne bien.

Je pars du principe que votre OS est installé, en plus le tuto de galipe.net détaille toute la marche à suivre.

J'ai profité d'avoir un NAS à la maison pour monter un dossier Backup où je copie régulièrement les volumes de Docker (il est même possible d'automatiser la sauvegarde).

Maintenant, on peut s'y mettre ! On va commencer par installer Docker :

sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
    
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

On enchaine avec la création des dossiers Films, Séries, docker et backup :

mkdir Films
mkdir Series
mkdir docker
mkdir backup

On créé un fichier .smbcredentials pour stocker les identifiants :

sudo nano /root/.smbcredentials

On renseigne les identifiants de l'utilisateur du NAS :

username=XXXXX
password=XXXXX
Note : Il est fortement recommandé de créer un utilisateur dédié avec des accès en lecture/écriture restreins au strict nécessaire

On installe samba et cifs-utils :

sudo apt-get install samba
sudo apt-get install cifs-utils

Et maintenant nous pouvons remplir le fstab pour indiquer au système où monter le NAS :

sudo nano /etc/fstab

Puis :

//IPDUNAS/Films    /home/guiom/Films     cifs    credentials=/root/.smbcredentials,iocharset=utf8,gid=1000,uid=1000,vers=1.0,_netdev     0       0
//IPDUNAS/Series   /home/guiom/Series    cifs    credentials=/root/.smbcredentials,iocharset=utf8,gid=1000,uid=1000,vers=1.0,_netdev     0       0
//IPDUNAS/Backup/docker_backup   /home/guiom/backup    cifs    credentials=/root/.smbcredentials,iocharset=utf8,gid=1000,uid=1000,vers=1.0,_netdev     0       0

Et on monte les dossiers avec :

sudo mount -a

Si les indentifiants sont bons et que tout fonctionne bien, on passe à l'installation de tous les containers. Avec la commande sudo -i on va s'éviter quelques sudo :

sudo -i

Pour l'installation de Portainer :

docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Portainer sera accessible sur http://IPDUSERVEUR:9000

Pour Radarr :

docker create \
 --name=radarr \
 -e PUID=1000 \
 -e PGID=1000 \
 -e TZ=Europe/Paris \
 -p 7878:7878 \
 -v /home/guiom/docker/radarr:/config \
 -v /home/guiom/Films:/movies \
 --restart unless-stopped \
 linuxserver/radarr:preview

Radarr sera accessible sur http://IPDUSERVEUR:7878

Pour Sonarr :

docker create \
 --name=sonarr \
 -e PUID=1000 \
 -e PGID=1000 \
 -e TZ=Europe/Paris \
 -p 8989:8989 \
 -v /home/guiom/docker/sonarr:/config \
 -v /home/guiom/Series:/tv \
 --restart unless-stopped \
 linuxserver/sonarr:preview  

Radarr sera accessible sur http://IPDUSERVEUR:8989

Pour Jackett :

docker create \
 --name=jackett \
 -e PUID=1000 \
 -e PGID=1000 \
 -e TZ=Europe/Paris \
 -p 9117:9117 \
 -v /home/guiom/docker/jackett:/config \
 --restart unless-stopped \
 linuxserver/jackett

Jackett sera accessible sur http://IPDUSERVEUR:9117

Et pour Watchtover :

docker create \
 --name Watchtower \
 -e TZ=Europe/Paris \
 -e WATCHTOWER_CLEANUP=true \
 -e WATCHTOWER_DEBUG=true \
 -e WATCHTOWER_INCLUDE_STOPPED=true \
 -e WATCHTOWER_REVIVE_STOPPED=true \
 -e WATCHTOWER_POLL_INTERVAL=3600  \
 -v /var/run/docker.sock:/var/run/docker.sock \
 containrrr/watchtower

Occasionnellement, ou de manière automatisée via Cron, il est conseillé de faire une sauvegarde de nos volumes Docker, les cartes SD sont des équipements fragiles qui peuvent lacher, et la configuration des applications est assez fastidieuse à faire et refaire. On peut donc utiliser :

cp -r docker/* backup

Et inversement, pour récupérer une ancienne sauvegarde, lors d'une réinstallation par exemple, on peut utiliser :

cp -r backup/* docker

Personnellement j'ai mis une carte SD de 16Go, mais Docker à tendance à se mettre bien à l'aise, et si vous décidez d'ajouter d'autres containers comme Home Assistant, vous risquez d'être un peu à l'étroit avec le temps, prévoyez 32Go, au prix des cartes SD, cela ne nécessite pas un gros investissement.


Crédit photo cover : Alexandre Debiève