NIX logo

Les systèmes d’exploitation, c’est un peu comme une maison. On a les fondations et des murs au début, puis au fur et à mesure on ajoute des meubles, des objets, des photos, des plantes, bref on personnalise notre espace de vie. Mais un jour, on déménage, et on doit tout recommencer. On ne pourra jamais retrouver exactement la même maison avec les mêmes objets.

Un OS c’est pareil, on installe des logiciels, on configure des services, on personnalise notre environnement de travail. Mais un jour, on doit réinstaller notre système, pour x ou y raison, et on doit tout recommencer. Réfléchir au nom du logiciel qu’on ouvre une fois par an, se rappeler de tous les outils qu’on a installé, avec un cas comme ça, on ne peut pas simplement commencer à travailler.

C’est là que NixOS intervient. NixOS est un système de package manager et un système d’exploitation. Il permet de déclarer l’état désiré du système, et de le reproduire à l’identique sur n’importe quelle machine. Avec un seul fichier de configuration, on peut installer et configurer notre système, et le déployer sur n’importe quelle machine. Et dupliquer notre environnement de travail devient un jeu d’enfant.

Installation

NixOS est un système d’exploitation à part entière, il faut donc l’installer. Vous avez plusieurs options pour installer NixOS : en dual boot sur votre machine physique, dans une machine virtuelle, ou même sur un Raspberry Pi ! Pour cet article, et pour mon homelab, je vais l’installer dans une machine virtuelle.

Pour cela, il suffit de télécharger l’image ISO sur le site officiel de NixOS. Pour moi, je vais la lancer dans mon homelab, sur une machine virtuelle Proxmox.

Pour rappel, voilà à quoi ressemble mon homelab Proxmox :

graph TD %% Éléments principaux simplifiés Internet((Internet)) PC[PC Mohamad] Switch[Switch] %% Architecture simplifiée subgraph Proxmox1[Serveur Proxmox 1] Master[Kubernetes Master Node] end subgraph Proxmox2[Serveur Proxmox 2] Worker1[Kubernetes Worker 1] Worker2[Kubernetes Worker 2] end %% Connexions simplifiées et directes Internet --> PC PC --> Switch Switch --> Proxmox1 Switch --> Proxmox2 %% Relations Kubernetes claires Master --> Worker1 Master --> Worker2 %% Application Pi-Hole sur les deux workers Worker1 --> PiHole1[Pi-Hole 1] Worker2 --> PiHole2[Pi-Hole 2] %% Load Balancer MetalLB Switch --> LB[MetalLB Load Balancer] LB --> Worker1 LB --> Worker2 %% Styling adapté aux couleurs de votre site classDef proxmox fill:#FF9966,stroke:#333,stroke-width:1px,color:#000 classDef k8s fill:#4169E1,stroke:#fff,color:#fff,stroke-width:1px classDef network fill:#87CEFA,stroke:#333,stroke-width:1px,color:#000 classDef internet fill:#58D68D,stroke:#333,stroke-width:1px,color:#000 classDef client fill:#F4D03F,stroke:#333,stroke-width:1px,color:#000 classDef pihole fill:#AA4444,stroke:#fff,color:#fff,stroke-width:1px classDef loadbalancer fill:#90EE90,stroke:#333,color:#000,stroke-width:1px class Proxmox1,Proxmox2 proxmox class Master,Worker1,Worker2 k8s class Switch network class Internet internet class PC client class PiHole1,PiHole2 pihole class LB loadbalancer

Donc pour résumer, une machine virtuelle sur Proxmox, avec un disque dur de 30Go, et 4Go de RAM.

Si jamais vous le souhaitez, voilà la commande pour créer une machine virtuelle avec Proxmox :

qm create 115 --name VM-Test --memory 4096 --cores 2 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci --ide2 local-lvm:cloudinit --boot c --agent enabled=1 --ostype l26
qm set 115 --scsi0 local-lvm:30G
qm set 115 --cdrom local:iso/nix-os.iso
qm start 115

Ou sinon vous pouvez le faire directement depuis l’interface web de Proxmox.

Et en suivant attentivement les étapes d’installation classiques, vous devriez arriver à installer NixOS très facilement. Pour plus de détails sur l’installation, vous pouvez consulter la documentation officielle.

Acceueil nix

Configuration : On Décore Notre Maison !

Maintenant que NixOS est installé, laissons de côté les fondations pour passer à la décoration intérieure ! On va enfin pouvoir définir les meubles, les objets, les plantes, bref tout ce qui fait notre environnement de travail. Et avec NixOS, tout ça se passe dans un seul endroit : le fichier de configuration.

Ce fichier magique, c’est celui-ci :

sudo vim /etc/nixos/configuration.nix

Avant de plonger dans les détails, je veux vous montrer la puissance de Nix avec un exemple simple. Par défaut, il n’y a pas de serveur SSH installé. Pour l’installer, devinez quoi ? Il suffit de rajouter quelques lignes dans notre fichier de configuration :

services.openssh = {
  enable =true;
  ports = [ 22 ];
  settings = {
      PasswordAuthentication = true;
      AllowUsers = ["mohamad"];
      UseDns = true;
      X11Forwarding = false;
      PermitRootLogin = "prohibit-password";
    };
};

Bien sûr, il faut remplacer mohamad par votre nom d’utilisateur.

Voilà à quoi ça ressemble dans mon fichier de config :

NixOS-ssh

Et pour que SSH fonctionne, il faut aussi ouvrir le port 22 dans le firewall. On ajoute donc cette ligne :

networking.firewall.allowedTCPPorts = [ 22 ];

Une fois ces modifications faites, il ne reste plus qu’à appliquer la configuration avec cette commande :

sudo nixos-rebuild switch

Et en quelques secondes, BIM ! Un serveur SSH qui tourne sur votre machine, configuré exactement comme vous l’avez défini. La magie de la configuration déclarative !

Votre sortie console sera un peu différente de la mienne, car j’avais déjà le paquet SSH installé et lancé. Pas de reboot entre temps pour moi ! :)

Ajout de paquets : On Remplit les Étagères

Pour ajouter des paquets, c’est tout aussi simple que pour SSH. On ajoute une ligne dans le fichier de configuration, et hop !

Pour cet article, on va installer un outil qu’on connaît tous, nmap. Voici la ligne à rajouter :

environment.systemPackages = with pkgs; [
    nmap
  ];

Avec ça, vous installez nmap globalement sur NixOS, disponible pour tous les utilisateurs. Mais si vous voulez limiter l’installation à un seul utilisateur, vous pouvez utiliser cette ligne :

users.users.mohamad.packages = with pkgs; [
    nmap
  ];

Voici ce que ça donne dans mon fichier de configuration avec nmap :

Nmap

Et pour appliquer les changements, toujours la même commande :

sudo nixos-rebuild switch

Admirez la vitesse d’installation :

En moins de 30 secondes, nmap est installé et prêt à l’emploi. C’est quand même super pratique, non ?

Et le Reste ? TOUT est Configurable !

Avec NixOS, tout est configurable. Absolument tout ! Si vous avez une âme de bidouilleur et que vous voulez passer une année sabbatique devant votre écran, apprendre à configurer NixOS est une excellente idée. Parce qu’avec NixOS, les configurations éparpillées dans des dossiers /etc/, c’est terminé !

Un seul fichier pour gouverner le système, c’est ça la philosophie de NixOS. On a une vue d’ensemble de notre système, on sait exactement ce qui est installé, ce qui tourne, et comment c’est configuré. Modifier son système devient simple et transparent.

Quelques exemples rapides pour vous donner une idée :

  • Changer le nom de la machine :
networking.hostName = "nixos-homelab";
  • Changer le fuseau horaire :
time.timeZone = "Europe/Paris";
  • Configurer un serveur web (basique) :
  networking.firewall.allowedTCPPorts = [ 80 ]; # On ouvre juste le port 80 pour commencer

  services.nginx.enable = true; # On active Nginx
  services.nginx.virtualHosts."mon-site.local" = { # On configure un virtual host
    root = "/var/www/mon-site"; # Le dossier racine du site
  };

  systemd.tmpfiles.rules = [ # On crée le dossier racine du site
    "d /var/www/mon-site"
    "f /var/www/mon-site/index.html - - - - <h1>Hello NixOS !</h1>" # Un petit index.html pour tester
  ];

Vous voyez l’idée ? On peut configurer des services complexes comme un serveur web, mais aussi des détails plus fins comme le nom de la machine ou le fuseau horaire. C’est ça la beauté de NixOS : la granularité et la cohérence de la configuration.

C’est particulièrement utile dans un homelab, quand on teste plein de choses, qu’on apprend de nouvelles technologies, qu’on casse des trucs… On peut se permettre d’expérimenter sans crainte de tout casser, car on sait qu’on peut revenir en arrière en un clin d’œil. Et même en production, déployer un nouveau service ou un serveur devient beaucoup plus rapide et serein.

Catastrophe ! … ou pas

NixOS est un système d’exploitation reproductible, je le répète ! Et ça, ça veut dire que si vous faites une boulette dans votre fichier de configuration, pas de panique ! Vous pouvez toujours revenir en arrière. C’est un peu comme un bouton “undo” pour votre système d’exploitation.

Imaginons, je fais une bêtise et je désactive SSH et je verrouille le port 22. Voici les modifications (volontairement mauvaises !) que je vais faire dans mon fichier de configuration :

services.openssh = {
  enable =false; # On désactive SSH (la GROSSE erreur !)
  ports = [ 22 ];
  settings = {
      PasswordAuthentication = true;
      AllowUsers = ["mohamad"];
      UseDns = true;
      X11Forwarding = false;
      PermitRootLogin = "prohibit-password";
    };
};

networking.firewall.allowedTCPPorts = [ ]; # On ferme TOUS les ports TCP (la DOUBLE GROSSE erreur !)

J’applique les changements, comme d’habitude :

sudo nixos-rebuild switch

Et là… c’est le drame ! Je n’ai plus accès à ma machine en SSH. Panique à bord ? Absolument pas ! Avec NixOS, c’est super simple de réparer les erreurs. Il suffit de redémarrer la machine et de choisir de booter sur la génération système précédente. NixOS garde en mémoire chaque configuration précédente, comme des points de sauvegarde.

Regardez comme c’est facile :

Et voilà ! En moins d’une minute, j’ai récupéré l’accès à ma machine, comme si de rien n’était. C’est pas génial, ça ? Cette fonctionnalité de rollback est vraiment un game-changer, surtout quand on expérimente ou qu’on fait des mises à jour un peu risquées. La sérénité, ça n’a pas de prix !

Est-ce Vraiment Mieux que les Autres Solutions ?

NixOS, c’est cool, c’est reproductible, c’est déclaratif… Mais soyons honnêtes, il existe d’autres outils pour automatiser et gérer la configuration de nos systèmes : Ansible, Docker, et j’en passe. Alors, est-ce que NixOS est vraiment mieux ? Et surtout, est-ce que c’est pertinent pour un homelab ?

La réponse, comme souvent, est : ça dépend. Mais dans le contexte d’un homelab, je pense que NixOS a de sérieux arguments à faire valoir. Comparons un peu avec les alternatives courantes :

  • Ansible : L’orchestrateur de configuration. Ansible est super pour automatiser la configuration de serveurs existants. Vous avez déjà vos machines en place (Debian, Ubuntu, etc.), et Ansible va vous permettre de déployer des applications, configurer des services, etc., de manière automatisée et reproductible. La force d’Ansible, c’est sa capacité à gérer des systèmes existants et hétérogènes. Par contre, Ansible ne gère pas tout le système d’exploitation en profondeur. Il va configurer des applications au-dessus d’un OS déjà en place. Avec NixOS, on configure tout : du kernel aux applications, en passant par les services système. C’est une approche plus holistique. Pour un homelab où on construit souvent des systèmes de zéro, NixOS est plus adapté.

  • Docker (et les conteneurs) : L’isolation applicative. Docker, c’est génial pour isoler des applications dans des conteneurs et les déployer de manière portable. C’est parfait pour des applications web, des bases de données, etc. Docker se concentre sur l’isolation et la distribution des applications. NixOS, lui, se concentre sur la configuration du système d’exploitation. Les deux ne sont pas mutuellement exclusifs ! On peut tout à fait utiliser Docker dans NixOS. D’ailleurs, NixOS gère très bien Docker. Mais si votre besoin est de configurer l’ensemble de votre système (pas juste des applications isolées), NixOS va plus loin que Docker. Pour un homelab, on a souvent besoin des deux : des conteneurs pour certaines applications, et un système d’exploitation bien configuré et reproductible pour héberger tout ça. NixOS peut être la base solide pour construire cet environnement.

Alors, “mieux”, c’est peut-être un mot trop fort. Mais dans un contexte homelab, NixOS apporte des avantages uniques :

  • Reproductibilité totale : On peut recréer son système à l’identique, sur n’importe quelle machine, à partir d’un seul fichier de configuration. C’est super pratique pour tester, dupliquer des environnements, ou simplement pour ne pas perdre des heures à reconfigurer son système après une réinstallation.
  • Gestion de configuration granulaire et cohérente : On configure tout le système, de manière déclarative, dans un seul fichier. On a une vue d’ensemble et on évite les configurations éparpillées et les incohérences.
  • Rollback facile et sécurisé : On peut expérimenter sans crainte de tout casser, grâce aux générations système et au rollback en un clic. C’est un gain de temps et de sérénité énorme.
  • Communauté passionnée et active : La communauté NixOS est super accueillante et il y a plein de ressources disponibles (documentation, forums, etc.). C’est important quand on débute avec un nouveau système.

Bien sûr, NixOS a aussi une courbe d’apprentissage. La syntaxe Nix peut paraître un peu déroutante au début, et il faut changer ses habitudes de configuration. Mais l’investissement en vaut vraiment la peine, surtout si vous passez du temps à bidouiller votre homelab et que vous cherchez un système fiable, reproductible et agréable à utiliser.

Alors, prêt à décorer votre homelab avec NixOS ? N’hésitez pas à télécharger l’ISO, à tester dans une machine virtuelle, et à partager vos impressions en m’envoyant un message sur LinedIn ! Et si vous avez des questions, la communauté NixOS est là pour vous aider !