130 lines
6.6 KiB
Markdown
130 lines
6.6 KiB
Markdown
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.
|