1
0
contenu/blog/2021/11/07/deux-semaines-sous-nixos-je-divorce-de-debian/index.md
2023-09-05 23:47:36 +02:00

143 lines
6.8 KiB
Markdown

---
title: "Deux semaines sous NixOS : je divorce de debian"
date: 2021-11-07
tags: [
"Administration",
"NixOS",
"Steam",
"Système d'exploitation",
"Debian",
"Retour d'expérience"
]
---
Voilà deux semaines que je fais tourner ma machine de jeu et le laptop du
travail sous [NixOS](https://nixos.org/). J'en suis tellement satisfait que j'ai
la ferme intention d'en faire mon OS par défaut pour toutes mes machines sous
GNU-Linux, et en particulier mes trois serveurs.
> Attention, cet article n'est pas un guide pour NixOS, juste un retour
> d'expérience.
## Présentation de NixOS
Comme toujours, c'est la [Wikipédia](https://fr.wikipedia.org/wiki/NixOS) qui
vous en parlera le mieux (et, évidemment, le site officiel), alors pour vous
présenter rapidement NixOS : c'est une distribution GNU-Linux qui présente la
caractéristique de disposer d'une configuration dite "déclarative". Grosso-modo,
vous définissez l'état logiciel d'une machine dans des fichiers de configuration
et NixOS s'occupe du reste. Un peu comme ansible ou les _docker-compose_. Pour
être exact, NixOS est une distribution Linux qui repose sur le gestionnaire de
paquets nix.
La première version date de 2003, c'est donc une distro ancienne, mais
activement maintenue.
## Du déclaratif, jusqu'à faire du _stateless_
En ce qui me concerne, l'aspect le plus marquant de NixOS est sa configuration
déclarative, qui permet d'aller très loin dans la configuration du système
jusqu'à permettre de construire un environnement _stateless_, c'est-à-dire
qu'une fois la configuration appliquée, plus rien ne peut changer, à moins
d'appliquer manuellement une nouvelle configuration, un peu comme un commit git.
On bénéficie donc de la reproductibilité logicielle : si un jeu de paramètres
fonctionne chez moi, il fonctionnera aussi ailleurs (hors spécificités
matérielles, évidemment). Et si on s'est bien débrouillé, on peut même arriver à
générer des ISO spécifiques pour une machine dédiée : à nous le PXE sans prise
de tête, le déploiement continu à l'échelle du système d'exploitation, la
reprise d'activité en un instant, le versionning local de l'OS, etc. Les
possibilités sont multiples.
## Une courbe d'apprentissage importante
Avant d'en arriver-là, il faudra toutefois passer par une courbe d'apprentissage
assez prononcée. C'est assez facile de bricoler des trucs une fois qu'on a
compris le principe du fichier _configuration.nix_, mais faire des trucs
**vraiment** sympas prend du temps. À titre informatif, j'en suis à un peu plus
de 150 générations, mais mes fichiers de configuration
ne ressemblent toujours à rien 😄 J'ai réussi à éclater la configuration dans
plusieurs fichiers, mais je ne suis pas certain que l'organisation pour laquelle
j'ai opté est la meilleure, ni que je respecte les bonnes pratiques.
Mais c'est comme ça que j'apprends, que je m'imprègne de la philosophie de
NixOS. Et, même si je ne suis pas encore satisfait de mes fichiers de conf, j'ai
un système fonctionnel, y compris pour jouer.
## Ready for Steam, presque out-of-the-box
Ma machine de jeu est basée sur un Core i7 7700K et une GTX 1070 8G. Je ne joue
qu'à des jeux sur Steam, et si [mes jeux préférés](https://steamcommunity.com/id/richarddern/games/?tab=all&sort=playtime)
ne sont pas exigeants, moi je le suis. Je veux un max de FPS partout, une
fluidité sans faille, sans déroger sur la qualité d'image, surtout que mon
moniteur est en 240Hz.
Peu importe la distribution Linux, les pilotes graphiques sont toujours plus ou
moins compliqués à installer - et surtout, configurer. Sous NixOS, c'est plutôt
facile :
```nix {linenos=false,class=not-prose}
services.xserver.videoDrivers = [ "nvidia" ];
```
Quant à Steam, c'est tout aussi simple :
```nix {linenos=false,class=not-prose}
programs.steam.enable = true;
```
Et avec ces deux lignes (plus quelques autres pour i3, fish, firefox et deux ou
trois options de personnalisation), mon PC fait tourner Steam, proton et tous
mes jeux sans aucun soucis, y compris certains que je ne parvenais pas à faire
tourner la veille de la première installation de NixOS, du genre
_Age of Empires III_.
## Easy-peasy
Vu qu'il ne m'a fallut qu'une journée pour faire tourner mon PC de jeu sous
NixOS et que maintenant c'est juste de l'optimisation/amélioration, je me sens
en totale confiance pour l'installer sur mes serveurs. Je pourrais peut-être
même me passer de docker pour la plupart des applications que j'utilise (oui,
c'est un objectif à plus ou moins long terme : je ne veux plus de docker sur mes
machines).
Un sentiment d'autant plus fort que j'ai aussi installé NixOS sur mon laptop
professionnel, où disposer d'un environnement stable est tout de même très
important. Et ce sentiment de stabilité est très concret : une fois qu'on a fait
un `nixos-rebuild switch`, on a vraiment la sensation d'être aux commandes d'un
système indestructible. Si ça marche une fois, ça marche toujours, à chaque
reboot. On a le sentiment d'avoir un système fraîchement installé _à chaque
redémarrage_. C'est grisant. Et en cas de pépin, même majeur, il suffit de
démarrer la génération précédente via un menu créé automatiquement dans grub
pour reprendre les rênes du système.
## Quelques problèmes quand même
J'ai relevé quelques soucis
mineurs (qui ne sont pas forcément liés à NixOS ceci-dit), dont un qui m'embête
en particulier parce que je suis incapable d'en identifier la cause. Si je
démarre une application réseau en même temps que l'environnement graphique (par
exemple, via une commande `exec` dans la configuration d'i3), ces applications
sont incapables de se connecter au réseau. Je me vois dans l'obligation de
`kill` leurs processus respectifs pour les relancer à la main. Aucun problème,
par contre, quand je temporise leur démarrage de quelques secondes via `sleep`
par exemple. Un problème que j'ai constaté autant sur le PC de jeu que sur le
laptop pro, aussi bien en filaire qu'en Wifi. peu importe la configuration des
DNS (_dnsmasq_ en cache local, mon serveur DNS du réseau ou même un DNS
externe).
Autre problème que je ne parviens pas à résoudre : le rendu des fontes me semble
assez moche par défaut, mais j'ignore encore comment l'améliorer.
Ces deux problèmes sont typiquement côté desktop, et ne m'inquiètent pas du tout
pour l'usage serveur que je prévois de faire de NixOS.
## Ma feuille de route
J'ai donc l'intention de remplacer debian par NixOS sur toutes mes machines : le
serveur DNS, le serveur web, le serveur de stockage, et, éventuellement, si
NixOS me le permet, sur la tablette Asus T100-TA qui me sert de panneau de
contrôle domotique, la principale contrainte de cette tablette étant de disposer
d'un EFI 32bits qui démarre un OS 64bits. debian m'a posé beaucoup de problèmes
avec ça.