J’ai transformé un vieux PC en serveur maison puissant

En tant que passionné de technologie toujours à la recherche de moyens d’optimiser mon environnement domestique, je me suis lancé il y a un an dans une aventure qui a commencé avec un simple Raspberry Pi et s’est terminée par un serveur Ubuntu qui fait tourner des containers Docker. Cet article détaille mon cheminement, les défis auxquels j’ai été confrontés et les solutions que j’ai trouvées en cours de route. Que vous soyez novice en matière de domotique ou bricoleur chevronné, j’espère que vous y trouverez des informations utiles.

La phase du Raspberry Pi

Ma modeste aventure dans la domotique a commencé il y a un an. J’avais un Raspberry Pi qui traînait et j’ai décidé de le mettre à profit en installant un serveur Home Assistant. Pour ceux qui ne connaissent pas, Home Assistant est une application open-source qui vous permet de contrôler et d’automatiser divers appareils intelligents de votre maison à partir d’une seule interface graphique qui disons le clairement est plutôt sympathique.

Au départ, mon installation était assez basique. Je l’utilisais principalement pour suivre les données de capteurs de température et d’humidité répartis un peu partout dans la maison. Cette configuration simple a fonctionné sans problème pendant environ un an, me fournissant des informations intéressantes. Je pouvais suivre :

  • comment la température évoluait dans différentes pièces au fil des jours et des saisons.
  • l’impact de l’ouverture ou de la fermeture des volets sur la température des pièces
  • la vitesse à laquelle la cheminée chauffait la maison.
  • la dissipation de l’humidité dans la salle de bain après les douches.
  • les moments de la journée les plus chauds et les plus froids dans le jardin

Encouragé par ces résultats, j’ai commencé à envisager un système domotique plus complet. J’imaginais gérer des automatisations, des alarmes, des caméras de surveillance, le potager, la boite aux lettres, et la collecte des ordures… Bref, j’étais 🥔🔥…

Le revers inattendu

Au moment où je commençais à m’enthousiasmer pour l’expansion de mon système, le désastre a frappé. Sans crier gare, mon fidèle Raspberry Pi a cessé de fonctionner. Pour couronner le tout, la carte mémoire s’est retrouvée corrompue, emportant avec elle tous mes fichiers de configuration et mes logs. Oui je sais il faut toujours sauvegarder régulièrement ses données… plus facile à dire qu’à faire!

Repenser l’approche

Me retrouvant à la case départ, j’ai décidé d’en profiter pour réévaluer mon infrastructure. J’avais encore des vieux Raspberry Pi 2 mais ils me semblaient maintenant limités en ressources pour le système étendu que j’avais en tête, et surtout pas fiables suite a cette expérience. De plus, je voulais héberger d’autres serveurs aux côtés de Home Assistant (comme Plex, Nginx, n8n, Pi-hole, SmartTube et Wallabag… je sens que cette série d’articles va être longue 🙌).

Une rapide recherche sur internet m’a fait tombé dans le piège classique du « juste un peu plus cher mais beaucoup mieux » : Vous cherchez un Raspberry Pi 5 pour environ 100 euros, puis vous découvrez que pour à peu près le même prix, vous pouvez avoir un mini PC comme un NUC, qui offre bien plus de puissance et de fonctionnalités. Et puis, comme si cela ne suffisait pas, vous commencez à regarder les options légèrement plus chères, qui offrent des mises à niveau significatives en termes de RAM, de processeur et de disque dur. Et avant que vous ne vous en rendiez compte, vous vous retrouvez avec un mini PC qui coûte deux ou trois fois plus cher que votre budget initial ! Un coup d’oeil rapide sur le marché de l’occasion (type ebay ou backmarket) et vous réaliser que, maintenant avec votre configuration de rêve, le rapport « prix » vs « informatique seconde main » n’est pas très rassurant…

La solution du vieux PC

Je tournais en rond et je me suis épuisé à passer au peigne fin les spécifications et comparer les différents mini PC disponibles sur le marché. Puis, l’illumination tomba… Je me suis souvenu d’un vieux PC HP des années 2010 qui prenait la poussière dans un tiroir. Avec son disque dur de 700 Go, son processeur i5 et ses 4 Go de RAM, il s’est imposé comme la solution idéale. J’avais la solution sous les yeux ! Bon après, il ne faut pas trop s’emballer, elle reste une vielle machine, et ils faut l’optimiser aux petits oignons.

Installation d’Ubuntu Server

Ubuntu Server est une variante du système d’exploitation Ubuntu conçue spécifiquement pour les environnements serveur. Il est gratuit, open-source et fournit une plateforme stable pour héberger des sites web, exécuter des applications et gérer des bases de données sans interface graphique.

Ubuntu Server par rapport au classique Ubuntu Desktop a plusieurs avantages :

  1. Il inclut des fonctionnalités orientées serveur assez complètes.
  2. Il est léger et efficace, idéal pour les serveurs aux ressources limitées comme ma vielle bécane.
  3. Il n’inclut pas d’environnement graphique de bureau, tout se fait en ligne de commande, ce qui réduit la taille de l’installation, l’utilisation de la RAM et au passage les vulnérabilités potentielles en matière de sécurité.
  4. Il fournit une interface en ligne de commande pour un contrôle et une personnalisation sans limite.
  5. Il inclut des fonctionnalités axées sur la sécurité comme les mises à jour automatiques et la configuration du pare-feu.

Le processus d’installation était simple, avec le guide officiel et une ou deux videos youtube fournissant d’excellentes explications.

Configuration

Après l’installation, j’ai effectué quelques vérifications sur la configuration de ma machine en utilisant la commande

inxi -Fxz

Cette commande pratique fournit des informations détaillées sur le matériel, le logiciel et la configuration réseau d’un système. Voici une explication de chaque partie de la commande :

  • inxi : c’est la commande elle-même, qui signifie « Informations sur votre système ». C’est un outil gratuit et open-source qui fournit des informations détaillées sur le matériel et les logiciels de votre système.
  • -F : ce drapeau indique à inxi d’afficher des informations complètes sur votre système. Cela inclut des détails sur votre processeur, votre carte mère, votre mémoire vive, vos disques durs, etc.
  • x : ce drapeau active des informations supplémentaires sur votre système. Cela inclut des détails sur vos interfaces réseau, vos partitions de disque, etc.
  • z : ce drapeau indique à inxi de supprimer les messages d’avertissement qui seraient normalement affichés lorsque l’outil rencontre du matériel inconnu ou non pris en charge.

Pour moi, çela renvoie quelque chose comme:

J’aime la flexibilité et la puissance de linux. Je vous laisse chercher le constructeur de la webcam ou le voltage de la batterie sous windows 😛…

et là, j’ai rencontré deux surprises :

  1. Mon PC n’avait pas de Bluetooth, ce qui signifiait que je ne pouvais pas connecter mes fameux capteurs de température. Bon, je commanderai un adaptateur Bluetooth USB externe pour résoudre ce problème et on remet ce problème pour plus tard. Et pourquoi pas en prendre un avec une couverture étendue pour couvrir toute la maison, y compris le jardin et le garage !
  2. Ubuntu n’utilisait pas tout l’espace de mon disque dur. Sur 700 Go, seule la moitié était utilisée. Je me suis donc mis à creuser un peu plus en profondeur et j’ai utilisé la commande lsblk pour lister les block mémoire de ma machine. Voici ce que j’obtiens :
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0 698.6G  0 disk 
├─sda1                      8:1    0     1G  0 part /boot/efi
├─sda2                      8:2    0     2G  0 part /boot
└─sda3                      8:3    0 695.6G  0 part 
  └─ubuntu--vg-ubuntu--lv 252:0    0 350.6G  0 lvm  /

Après avoir fait un peu de recherche, j’ai compris que cela venait du fait qu’Ubuntu Server utilise le manager de volumes logiques (LVM) pour gérer l’espace disque de la machine. Le LVM permet de créer des volumes logiques (LV) (ou virtuels) qui peuvent être utilisés pour stocker des données. Les volumes logiques (LV) sont différents des Volumes Physiques (PV) qui sont eux en gros le disque dur physique. Dans la configuration par défaut d’Ubuntu Server, le LVM laisse la moitié de l’espace disque physique inutilisé pour être éventuellement réutilisé pour agrandir le LV ou créer d’autres LV pour d’autres usages. Cette stratégie d’allocation d’espace disque laisse de l’espace inutilisé pour nous donner de la flexibilité dans la façon dont nous voulons utiliser l’espace disque restant… Mais moi ce n’est pas mon cas.

Pour résoudre ce problème, j’ai fini par trouver deux commandes magiques à exécuter en mode sudo :

lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

Comme son nom l’indique, cette commande étend la taille du LV en utilisant l’espace libre disponible dans le groupe de volumes (VG) avec:

  • -l : c’est l’option pour spécifier la taille à ajouter au volume logique.
  • +100%FREE : spécifie que le LV doit être étendu en utilisant 100 % de l’espace libre disponible dans le VG.
  • /dev/mapper/ubuntu--vg-ubuntu--lv : c’est le chemin du volume logique que nous voulons étendre. Dans ce cas, il s’agit du volume logique ubuntu--lv dans le groupe de volumes logiques ubuntu--vg comme indiqué précédemment à la sortie de la commande lsblk

Puis il faudra taper la commande suivante:

resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

cette commande redimensionne le système de fichiers sur le volume logique (LV) ubuntu--vg-ubuntu--lv pour correspondre à la nouvelle taille du LV. Elle est utilisée pour étendre le système de fichiers afin qu’il utilise l’espace supplémentaire rendu disponible par la commande lvextend

et voilà, mission accomplie…

Configuration réseau

Je voulais également que mon serveur ait une adresse IP fixe sur mon réseau local afin d’éviter que ma box attribue aléatoirement des adresses qui pourraient changer au fil du temps. Comme j’ai d’autres appareils sur le même réseau, comme une imprimante, un NAS, des téléphones portables, des ordinateurs… définir des adresses IP faciles à retenir simplifie grandement la gestion de mon réseau.

Pour cela, il y a deux façons de procéder. La première consiste à configurer l’adresse IP directement sur le serveur. La seconde se fait via l’interface d’administration du routeur en assignant une IP au serveur depuis la section DHCP (Dynamic Host Configuration Protocol). Le protocol DHCP attribue automatiquement des adresses IP aux appareils d’un réseau, mais vous pouvez en assigner une manuellement pour n’importe quel appareil connecté à votre réseau local. Inconvénient de cette approche, si vous changez de routeur, il faudra refaire toute la configuration, c’est pourquoi j’ai choisi de configurer cela directement sur le serveur en éditant le fichier de configuration Netplan :

sudo vim /etc/netplan/00-installer-config.yaml

Modifiez les paramètres comme suit (ajustez-les pour votre réseau) :

network:
  ethernets:
    eth0:
      dhcp4: no
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
  version: 2

J’ai ensuite appliqué ces changements avec :

sudo netplan apply

Mesures de sécurité

Mon serveur Ubuntu se sera pas accessible depuis l’extérieur, en tout cas ce n’est pas prévu pour le moment. Mais cela n’empêche pas d’améliorer un peu la sécurité. Il faut donc a minima prendre les mesures suivantes :

  1. Mise à jour régulière du serveur :
   sudo apt update && sudo apt upgrade
  1. Création d’un nouvel utilisateur avec des privilèges administrateur pour éviter d’utiliser le compte root dans les tâches quotidiennes :
   sudo adduser <votre nom d utilisateur>
   sudo usermod -aG sudo <votre nom d utilisateur>

Accès à distance

L’intérêt d’avoir un serveur à la maison est de pouvoir le ranger quelque part tout en le laissant branché en permanence. Je n’ai pas envie de le sortir à chaque fois que je dois faire des modifications. Il faudra donc pourvoir y accéder à distance. Pour cela, il est nécessaire de configurer un tunnel SSH. SSH (Secure Shell) est un protocole réseau cryptographique qui permet un accès distant sécurisé à un ordinateur ou un réseau. Il offre un moyen sécurisé de se connecter à un serveur ou à un appareil distant, permettant ainsi d’exécuter des commandes, de transférer des fichiers et d’accéder à des applications à distance. Sur notre serveur Ubuntu, il faut s’assurer que OpenSSH est installé en exécutant la commande suivante (normalement il est installé par défaut dans Ubuntu Server):

sudo apt install openssh-server


Une fois SSH activé, vous pouvez vous connecter à distance à l’aide d’un client SSH (par exemple, PuTTY pour windows ou la commande ssh sur un terminal linux/mac). Pour renforcer la sécurité, pensez à changer le port SSH par défaut et à configurer l’authentification par clé SSH. Nous aborderons cela un autre jour.

Gestion des particularités d’un ordinateur portable

Un avantage inattendu de l’utilisation d’un ordinateur portable comme serveur pour mon cas est sa batterie intégrée. En cas de coupure de courant, mes applications continueront à fonctionner pendant 2 à 3 heures, ce qui est assez cool. Cependant, les ordinateurs portables ont d’autres problèmes. Par défaut, ils sont conçus pour économiser l’énergie, passant en mode veille après une période d’inactivité, une coupure de courant prolongée ou lorsque le capot est refermé. Après avoir consulté de nombreux forums et de nombreuses tentatives sans succès, j’ai finalement trouvé une solution qui a fonctionné pour moi. La clé était de modifier le fichier /etc/systemd/sleep.conf, en ajoutant les lignes suivante pour désactiver les modes veille, hibernation et sommeil hybride:

AllowSuspend=no
AllowHibernation=no
AllowSuspendThenHibernate=no
AllowHybridSleep=no

Cette configuration garantit que mon ordinateur portable transformé en serveur restera les yeux grands ouverts quoi qu’il arrive.

Autre mesure intéressante et particulièrement utile pour les anciennes machines avec batterie comme la mienne, c’est de vérifier régulièrement l’état de la batterie. Pour cela, j’utilise la commande acpi. C’est une commande Linux qui permet d’afficher des informations sur l’état de la batterie, la température, le refroidissement et d’autres paramètres liés à l’alimentation électrique de l’ordinateur. On obtient quelque chose comme ça:

C’est parfait tout ça…

Conclusion

Ce voyage, d’une simple configuration Raspberry Pi à un serveur Ubuntu complet sur du matériel réaffecté, a été très stimulant. Bien que ma configuration ne soit peut-être pas aussi élégante qu’un tout nouveau mini PC ou aussi cool que le dernier Raspberry Pi, elle a le gros avantage d’être une solution plus puissante, gratuite et donnant une nouvelle vie à du matériel qui aurait pu finir dans une décharge.

Dans le prochain article, on attaquera mes premières aventure avec Docker, stay tuned!

Partagez!

Catégories :

Aucune réponse

Laisser un commentaire

Index