tag:linuxfr.org,2005:/tags/nixos/publicLinuxFr.org : les contenus étiquetés avec « nixos »2023-11-14T20:24:49+01:00/favicon.pngtag:linuxfr.org,2005:Post/439332023-11-11T15:17:03+01:002023-11-11T15:17:03+01:00NixOs et Appimage<p>Post à l'intention des utilisateurs de NixOs</p>
<p>Après un premier passage il y a quelques années, voici plusieurs semaines que je teste à nouveau cette distro (usage desktop) mais plus sérieusement (digestion lente mais motivée de la doc'=> conviction croissante).<br>
Cependant, avant une bascule définitive, un petit écueil me chiffonne : l'ouverture des Appimage. J'ai lu tout un tas de truc à ce propos, mais impossible de trouver l'ouverture d'une appimage proprio (je parle ici de Kdrive ( <a href="https://www.infomaniak.com/en/apps/download-kdrive">https://www.infomaniak.com/en/apps/download-kdrive</a> ).</p>
<p>Une idée ?</p>
<div><a href="https://linuxfr.org/forums/linux-general/posts/nixos-et-appimage.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133884/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-general/posts/nixos-et-appimage#comments">ouvrir dans le navigateur</a>
</p>
davidvshttps://linuxfr.org/nodes/133884/comments.atomtag:linuxfr.org,2005:Bookmark/71782023-09-18T13:01:35+02:002023-09-18T13:01:35+02:00 Introduction to immutable Linux systems (via OSnews) - dataswamp (Solène Rapenne)<a href="https://dataswamp.org/~solene/2023-07-12-intro-to-immutable-os.html">https://dataswamp.org/~solene/2023-07-12-intro-to-immutable-os.html</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133348/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/antistress/liens/introduction-to-immutable-linux-systems-via-osnews-dataswamp-solene-rapenne#comments">ouvrir dans le navigateur</a>
</p>
antistresshttps://linuxfr.org/nodes/133348/comments.atomtag:linuxfr.org,2005:Diary/408592023-09-01T19:10:03+02:002023-09-02T09:24:57+02:00LinuxFr.org : seconde quinzaine d'août 2023Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Deux cent douzième épisodes dans la communication entre les différentes équipes de bénévoles autour du site LinuxFr.org : l’idée est de tenir tout le monde au courant de ce qui est fait par la rédaction, l’administration web et système, la modération, le développement, l’association, etc.</p>
<p>L’actu résumée (<code>[*]</code> signifie une modification du sujet du courriel) :</p>
<h2 id="toc-statistiques">Statistiques</h2>
<p>Du 16 au 31 août 2023</p>
<ul>
<li>1348 commentaires publiés (dont 1 masqué depuis), comme suit :
<ul>
<li>480 commentaires publiés sur les liens (dont 0 masqué depuis) ;</li>
<li>527 commentaires publiés sur les journaux (dont 1 masqué depuis) ;</li>
<li>113 commentaires publiés sur les dépêches (dont 0 masqué depuis) ;</li>
<li>220 commentaires publiés sur les entrées de forum (dont 0 masqué depuis) ;</li>
<li>4 commentaires publiés sur les sondages (dont 0 masqué depuis) ;</li>
<li>4 commentaires publiés sur les entrées dans le système de suivi (dont 0 masqué depuis) ;</li>
<li>0 commentaire publié sur les pages wiki (dont 0 masqué depuis) ;</li>
</ul>
</li>
<li>676 étiquettes posées ;</li>
<li>44 comptes ouverts (dont 6 fermés depuis) ;</li>
<li>28 entrées de forum publiées (dont 2 masquées depuis) ;</li>
<li>71 liens publiés (dont 2 masqués depuis) ;</li>
<li>8 dépêches publiées ;</li>
<li>19 journaux publiés (dont 0 masqué depuis) ;</li>
<li>3 entrées nouvelles, 0 corrigée et 0 invalide dans le système de suivi ;</li>
<li>0 sondage publié ;</li>
<li>0 page wiki publiée (dont 0 masquée depuis).</li>
</ul>
<h2 id="toc-listes-de-diffusion-hors-pourriel">Listes de diffusion (hors pourriel)</h2>
<p>Liste ca@ - [restreint]</p>
<ul>
<li>R.A.S.</li>
</ul>
<p>Liste linuxfr-membres@ - [restreint]</p>
<ul>
<li>R.A.S.</li>
</ul>
<p>Liste moderateurs@ - [restreint]</p>
<ul>
<li>[Modérateurs] RELEVÉ DE PLANTAGE</li>
<li>[Modérateurs] info</li>
<li>[Modérateurs] sécurité / …et les DNS filtrants anti-vilains?</li>
<li>[Modérateurs] Votre dépêche sur LinuxFR.org</li>
</ul>
<p>Liste prizes@ - [restreint]</p>
<ul>
<li>R.A.S.</li>
</ul>
<p>Liste redacteurs@ - [restreint]</p>
<ul>
<li>R.A.S.</li>
</ul>
<p>Liste team@ - [restreint]</p>
<ul>
<li>[team linuxfr] [Huma] Mardi 29/08/2023, Réunion préparation Fête de l’Huma</li>
<li>[team linuxfr] [Huma] proposition vignettes 2024</li>
</ul>
<p>Liste webmaster@ - [restreint]</p>
<ul>
<li>R.A.S.</li>
</ul>
<h2 id="toc-canal-irc-adminsys-résumé">Canal IRC adminsys (résumé)</h2>
<ul>
<li>R.A.S.</li>
</ul>
<h2 id="toc-groupe-signal-résumé">Groupe Signal (résumé)</h2>
<ul>
<li>nouvelle politique pour comptes inactifs chez Google : on avait un compte Google dormant, probablement datant de feu Google+. L’ensemble des données du compte a été récupéré, analysé et le compte supprimé.</li>
<li>deux alias de courriel supprimés, car les domaines destinataires ne répondaient plus</li>
<li>évolution de <code>share</code> pour Twitter/X et Bsky (avec un succès limité jusqu’ici)</li>
<li>Free classe notre lettre quotidienne en spam, régulièrement</li>
<li>modification de la page <a href="//linuxfr.org/mentions_legales">Mentions légales</a> avec l’espoir que les questions d’aide iront vers les forums</li>
</ul>
<h2 id="toc-tribune-de-rédaction-résumé">Tribune de rédaction (résumé)</h2>
<p>Du 16 au 31 août 2023</p>
<ul>
<li>gestion d’étiquettes</li>
<li>correction post-publication</li>
<li>pour ceux qui voudraient une <a href="//linuxfr.org/suivi/nouvelle-section-durabilite">section « durabilité »</a> : <a href="https://fr.ifixit.com/News/78830/lappariement-des-pieces-met-la-reparation-electronique-independante-en-danger">L’appariement des pièces met la réparation électronique indépendante en danger</a> (via <a href="https://pouet.couchet.org/@brume@piaille.fr/110844608666716440">un pouet</a>)</li>
<li>pas de balises HTML dans le markdown de LinuxFr.org, ni d’image positionnable à droite ou à gauche</li>
</ul>
<h2 id="toc-tribune-de-modération-résumé">Tribune de modération (résumé)</h2>
<p>Du 16 au 31 août 2023</p>
<ul>
<li>63 messages sur 86 sont des notifications automatiques
<ul>
<li>4 La dépêche a été mise à la une</li>
<li>2 La dépêche a été refusée</li>
<li>4 La dépêche a été supprimée en rédaction</li>
<li>1 La page Aide / foire aux questions a été mise à jour</li>
<li>2 La page Mentions légales a été mise à jour</li>
<li>1 La section de dépêches Programmation a été modifiée</li>
<li>1 La section de dépêches Programmation (autres) a été créée</li>
<li>1 Le commentaire a été masqué</li>
<li>3 Le compte a été désactivé</li>
<li>2 Le compte a été privé de tribune pendant 30 jours</li>
<li>3 Le lien a été supprimé</li>
<li>2 Le message a été supprimé</li>
<li>2 Les commentaires ont été bloqués pendant 30 jours</li>
<li>1 Les commentaires ont été débloqués</li>
<li>7 L’étiquette est désormais cachée, modifiée</li>
<li>27 L’étiquette vient d’être créée</li>
</ul>
</li>
<li>des liens en double</li>
<li>une proposition de logo pour une <a href="//linuxfr.org/suivi/nouvelle-section-durabilite">section « durabilité réparation »</a>
</li>
<li>clarification de la page des <a href="//linuxfr.org/mentions_legales">Mentions légales</a>
</li>
<li>du spam</li>
<li>un étiquetage massif sur flatpak appimage snap nix guix nixos, et deux images de dépêches perdues récupérées</li>
</ul>
<h2 id="toc-commitspushs-de-code-httpsgithubcomlinuxfrorg">Commits/pushs de code <a href="https://github.com/linuxfrorg/">https://github.com/linuxfrorg/</a>
</h2>
<p>Admin. sys. :</p>
<ul>
<li>Update social network accounts</li>
</ul>
<p>Img :</p>
<ul>
<li>Provide Docker instructions</li>
<li>dockerfile explicits use of Docker Hub and rework default command line</li>
</ul>
<p>Share:</p>
<ul>
<li>(branch elmo_update) New decade refresh, aka "Elmo tornado"?</li>
</ul>
<h2 id="toc-divers--todo--pense-bête">Divers / TODO / pense-bête</h2>
<ul>
<li>aide / FAQ : synthèse en cours d’écriture sur <a href="//linuxfr.org/redaction/news/instant-karma-ou-karma-police">le karma</a> ;</li>
<li>finaliser un peu le code qui permet de tester actuellement 283 adresses du site.</li>
</ul>
<div><a href="https://linuxfr.org/users/oumph/journaux/linuxfr-org-seconde-quinzaine-d-aout-2023.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133156/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/oumph/journaux/linuxfr-org-seconde-quinzaine-d-aout-2023#comments">ouvrir dans le navigateur</a>
</p>
Benoît Sibaudhttps://linuxfr.org/nodes/133156/comments.atomtag:linuxfr.org,2005:Post/437462023-07-18T20:17:17+02:002023-07-18T20:17:17+02:00nixos<p>Bonjour,</p>
<p>j'ai voulu tester nixos sur mon pc portable. L'installation s'est bien passé avec le livecd.<br>
j'ai rebooter sur le système fraîchement installé sous KDE. tout est hyper-lent. Je ne comprend pas car sous ma arch je n'avais pas ce soucis.</p>
<p>donc si on pouvais m'éclairer ma lanterne. je vous en serai reconnaissant. <br>
J'ai poster une image de htop.</p>
<p>j'avais eu le même soucis avec l'ancienne iso, il y a quelques mois.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f7a7570696d616765732e6e65742f75702f32332f32392f326672662e706e67/2frf.png" alt="Image de HTOP" title="Source : https://zupimages.net/up/23/29/2frf.png"></p>
<div><a href="https://linuxfr.org/forums/linux-debutant/posts/nixos.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/132764/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-debutant/posts/nixos#comments">ouvrir dans le navigateur</a>
</p>
clelouphttps://linuxfr.org/nodes/132764/comments.atomtag:linuxfr.org,2005:Bookmark/65992023-06-05T05:52:52+02:002023-06-05T05:52:52+02:00[podcast] For those who just don’t Git it (interview with Pierre-Étienne Meunier)<a href="https://stackoverflow.blog/2023/05/23/for-those-who-just-dont-git-it-ep-573/">https://stackoverflow.blog/2023/05/23/for-those-who-just-dont-git-it-ep-573/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/131467/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/gilcot/liens/podcast-for-those-who-just-don-t-git-it-interview-with-pierre-etienne-meunier#comments">ouvrir dans le navigateur</a>
</p>
Gil Cot ✔https://linuxfr.org/nodes/131467/comments.atomtag:linuxfr.org,2005:Post/435742023-04-12T20:17:55+02:002023-04-12T20:17:55+02:00[nixos] imprimante brother hL-4150 CDN<p>Bonjour,</p>
<p>J'ai acheté un ordinateur à ma femme, après une tentative d'installation de debian, puis le noyau backport histoire d'avoir le wifi, je n'avais pas de son.</p>
<p>Étant en train de tester avec succès nixos sur mon propre PC, je me suis dit que tenter une installation sur un protable pourrait être bien.</p>
<p>Tout le hardware à fonctionné du premier coup. Mon seul soucis, c'est l'imprimante… le truc vital pour mon <s>instit</s> professeur des écoles de femme ;-)</p>
<p>L'installation de cups sans soucis, l'ajout du filtre dans cups semble bien. Mais rien ne marche :'(</p>
<p>Quand je vais sur la page printers : <a href="http://localhost:631/printers/">http://localhost:631/printers/</a> , la colonne <code>status</code>me dit ceci :<br>
<code>Idle - "File "/nix/store/012dj5srqiswhm0wz5z232r7fn4jhz6j-cups-progs/lib/cups/filter/brlpdwrapperhl4150cdn" not available: No such file or directory"</code></p>
<p>Je ne sais pas quoi faire. J'avais trouvé un tuto qui proposé de faire un "nix-file" pour générer un paquet, mais je n'ai pas réussi.</p>
<p>Si quelqu'un à une idée de comment avancer.</p>
<div><a href="https://linuxfr.org/forums/linux-general/posts/nixos-imprimante-brother-hl-4150-cdn.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/130908/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-general/posts/nixos-imprimante-brother-hl-4150-cdn#comments">ouvrir dans le navigateur</a>
</p>
Anthony Jaguenaudhttps://linuxfr.org/nodes/130908/comments.atomtag:linuxfr.org,2005:Bookmark/55252022-12-05T21:29:06+01:002022-12-05T21:29:06+01:00NixOS Webzine<a href="https://webzine.nixos.cafe/">https://webzine.nixos.cafe/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/129536/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/vendrediouletrollsauvage/liens/nixos-webzine#comments">ouvrir dans le navigateur</a>
</p>
voltshttps://linuxfr.org/nodes/129536/comments.atomtag:linuxfr.org,2005:Diary/404842022-12-01T22:44:10+01:002022-12-01T22:44:10+01:00L'ordinateur a perdu sa magieLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Salut les moules!</p>
<p>Ce journal aurait davantage sa place sur mon blog, mais malheureusement, je n'ai jamais fait l'effort d'en maintenir un.</p>
<p>Je suis né en 90. Je pense avoir touché un ordinateur pour la première fois vers mes 5 ans et depuis en ai toujours eu dans ma vie. J'ai sérieusement commencé Linux et la programmation vers mes 15 ans. Je suis rentré à l'IUT de Montpellier en 2008 et sorti en 2011 avec une licence pro de développeur sous le bras. Je m'y suis beaucoup ennuyé mais j'y aussi fait de bonnes rencontres. Notamment Mr <a href="https://www.researchgate.net/profile/Olivier-Cogis-2">Cogis</a> (professeur d'algorithmie) qui m'a transmis sa passion pour la théorie des graphes et Mr Sabatier (professeur de base de donnée) qui m'a appris l'amour de la pédagogie. Pis aussi Matthieu, ami pour la vie :)</p>
<p>Sitôt diplomé, sitôt embauché dans une petite boite de services. Même pas eu le temps de prendre des vacances d'étés :(. J'y ai fait des trucs nuls (application facebook pour une marque de pret à porter, yeah…), des trucs surprenants (le prototypage d'un jeu Just Dance multi-joueur sur iPhone que Ubisoft nous avait confié), des trucs étranges (une application iphone & android en réalité augmenté pour trouver des bons plans autour de soi), mais des trucs toujours varié. Ça m'a permis de découvrir plein de technos et langages diverses tel que objective-c (<3), c++, SDL, Cocos2D, php, js, c#, Unity, java, … </p>
<p>Petit interlude d'un mois dans une agence de com parisienne venue s'installer sur Montpellier. J'ai fait de la maintenance sur les applications iPhones de Michel Polnareff et du livre de cuisine de Pierre Perret. J'ai dû faire des trucs étranges pour payer mon loyer.</p>
<p>J'ai été débauché par une start-up de micro-électronique concevant des FPGA (de la logique programmable). J'ai été pris pour remplacer le mec qui était là depuis le début et avait tout mis en place. J'avais un rôle de couteau suisse/support auprès des autres développeurs qui travaillaient sur leurs partis réservées (essentiellement c++/qt). J'ai aussi beaucoup travaillé avec l'équipe hardware pour maintenir et améliorer le flot d'implémentation physique totalement automatisé (beaucoup de méta-génération de code et de scripts à partir de notre app c++/qt : beaucoup de scripts shell et makefiles pour l'ordonnancement, de script TCL pour piloter les outils de micro-électroniques, du perl parce qu'il y était déjà et que ça marchait - ce moment magique où du C++ gènère du bash qui génère du TCL qui génère un rapport analysé en temps réel par une web-app python qui surveille les flots et fait du reporting. Don't ask…). Bref, j'ai pu jouer avec plein de trucs rigolos.</p>
<p>Je suis maintenant dans une start-up de l'éolien. Encore une fois, je suis arrivé pour remplacer le génie qui avait tout fait et maintenir son œuvre. Pour la première fois, je n'étais pas le plus petit jeunot mais le lead dev senior et plus vieux de l'équipe (32 ans >_<). Encore une fois, je joue avec plein de trucs. Du C temps réel exécuté par les copresseurs d'un système linux embarqué et bardés d'instruments de mesure haute fréquence (pour le domaine), un chouette flot automatisé à base de makefile et de dockerfiles pour géner le dit système linux, une stack cloud (beurk) totalement géré par terraform et notre produit à base de python, django et graphes D3.js. Je travaille assez peu à l'ajout de nouvelles fonctionnalités sur le produit lui même. Ce travaille est laissé à nos data scientists qui comprennent les éoliennes et savent manipuler les données. Je suis le facilateur qui leurs permet de travailler efficacement. </p>
<p>Bref, j'ai mis en place beaucoup d'automatisation. J'y consacre une énergie folle. La semaine dernière, j'ai passé quelques heures à automatiser une tâche qui me prenaient ponctuellement quelques minutes afin qu'elle ne me prenne plus que quelques secondes (<a href="https://xkcd.com/1205/">related xkcd</a>). Je travaille dur à en faire le moins possible. Mon manager est satisfait parce que tout marche et que j'avance sur mes tâches de fonds, je suis content parce que j'ai plein de temps à faire un peu ce que je veux. J'en profite pour faire ma veille, découvrir des trucs, mouler ici, tester des trucs parfois utiles (à quel point on va pleurer si on veut mettre un front moderne genre vuejs avec notre app django), parfois à la pertinance plus douteuse ("oh, quelqu'un à désassemblé les ROM de pokémons blue/red. Est-ce que mes connaissances de l'arm z80 sont suffisantes pour bidouiller des trucs muches ? <em>2 hours later</em> Les 3 oiseaux légendaires remplacent les starters habituels et votre rival prend celui qui est faible contre vous. Mwahaha. Bon, il temps d'aller prendre un café et d'embêter l'alternant"). </p>
<p>J'essaye aussi de passer un maximun de temps avec l'alternant. C'est rigolo. Il fait les mêmes erreurs de débutant que moi 10 ans plus tôt. Nostalgie… Le pauvre, il a du reécrire son code un nombre incalculable de fois à cause de moi. Je ne l'y ai jamais forcé, bien au contraire, c'est lui qui tenait à utiliser tout ce qu'il venait apprendre et nous faire du bon petit code propre et efficace :) "là, je vois que tu as fait ces fonctions. Regarde ce module de lib standard de python, y'a déjà tout ce qu'il te faut ;) Tiens, là, regarde ces conditions. Il se passe quoi si ces variables valent ça et ça ? Yup, ça casse tout, à corriger ;) Là, je vois que tu as retrouvé l'algo de … pour traiter …, mais avec l'implémentation naive en n². Ouvre wikipedia, il y a une implémentation en n log n preeeeesque pas plus compliqué. Attends, passe moi ton cahier, je t'explique…". Merci Mr Sabatier pour votre passion de l'enseignement. Le pitchoune apprend bien et progresse bien, c'est cool de bosser avec lui. Là, je viens de lui faire subir un stage intensif en 3D, et il a réussi à nous sortir un super truc avec threejs. Quand j'en été à son stade, je ne pense pas que j'aurai pu sortir un truc propre aussi rapidement. Il faudra que je pense à lui dire.</p>
<p>J'ai de moins en moins envie de coder utile pour la prod. Je veux juste que tout soit propre et carré, marche sans mon intervention, apprendre de nouveaux trucs, jouet avec des machins, et transmettre la passion et le savoir aux petits jeunots (et les convertir à la révolution communiste, mais c'est un autre sujet).</p>
<p>Fin de la parenthèse pro.</p>
<p>J'ai toujours été passionné par l'ordinateur pour lui même, et non simplement en tant qu'outil même si je l'ai beaucoup utisé comme ça. J'ai toujours voulu comprendre son fonctionnement. Au fil de ma vie, de mes différents jobs, de mes différents projets persos, j'ai pu explorer toute la chaine. Du silicium jusqu'à l'affichage de son rendu temps réel sur un écran VGA. J'ai appris à dompter les transistors à coup de vérilog et synthèse logique. J'ai crée mon processeur de type MIPS pour expliquer le fonctionnement d'un CPU aux jeunots (journal en cours de rédaction, quand j'aurai fini le simulateur web pour illustrer le journal), j'ai écrit mes assembleurs, compilateurs (théorie du langage & des graphes <3). Mon propre kernel qui boot et affiche hello world (je me contente de peu), du code pour tout et n'importe quoi : pour téléphone, pour serveur, pour navigateur web, des daemons systèmes, pour kernel, pour application de desktop, pour FPGA, pour micro-controleurs, systèmes embarqués, systèmes temps réels, sous le permafrost (<a href="https://gopher.floodgap.com/gopher/gw?=bitreich.org+70+312f6172637469632d7661756c74">wut?!</a>) et même une fois pour un mainframe IBM. J'ai exploré le domaine de la 2d et 3D via mes moteurs de raycasting et le raytracing mais aussi en bossant sur divers jeux utilisant diverses technologies sur diverses platformes. J'ai aussi fait mon prototype de "carte graphique" comme celle du Commodore C64 et la puce associée générant le signal VGA (jamais testé IRL mais les simulations étaient satisfaisantes).</p>
<p>Cela m'aura pris un paquet d'années, mais maintenant, j'ai l'impression d'avoir fait le tour, d'avoir appris tout ce qui m'interessait, d'avoir levé le voile sur tout ce qui m'était mystérieux. L'ordinateur a perdu sa magie. Ce n'est plus un objet opaque qui exécute par je ne sais quel procédé des invocations déclamés par de puissants sorciers barbus. Maintenant, c'est objet transparent que je comprends, que j'ai dompté. J'ai exploré à tous les niveaux. Je suis allé à la source de la magie. J'y ai acquis la connaissance mais y ai perdu mon âme d'enfant.</p>
<p>De plus, la découverte récente de NixOS a rendu cet outil ennuyeusement utilisable. L'ordinateur n'est plus un objet magique, c'est juste un outil aussi ennuyeux et banale qu'une clé à molette, qui me permet de faire des trucs quand j'en ai besoin. Et je crois que j'ai de moins en moins envie de l'utiliser. </p>
<p>Je fais quoi moi maintenant ? Je part élever des moutons mérinos sur le Larzac ?</p>
<div><a href="https://linuxfr.org/users/killruana/journaux/l-ordinateur-a-perdu-sa-magie.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/129478/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/killruana/journaux/l-ordinateur-a-perdu-sa-magie#comments">ouvrir dans le navigateur</a>
</p>
jtremesayhttps://linuxfr.org/nodes/129478/comments.atomtag:linuxfr.org,2005:Diary/404832022-12-01T19:35:39+01:002022-12-01T19:35:39+01:00NixOS 22.11 et OpenBSD 7.2Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Petit journal pour annoncer la sortie d'<a href="https://www.openbsd.org/72.html">OpenBSD 7.2</a> le 20 octobre et de <a href="https://nixos.org/manual/nixos/stable/release-notes.html#sec-release-22.11">NixOS 22.11</a> aujourd'hui.</p>
<p>Comme d'habitude, c'est ennuyeusement simple et sans surprise.</p>
<p><a href="https://www.openbsd.org/faq/upgrade72.html">OpenBSD</a> : d'abord vérifier dans la section "Configuration and syntax changes" et suivantes les changements impactant votre système, puis <code>doas sysupgrade</code>, se faire un café le temps que la mise à jour se télécharge et s'installe, et faire les changements indiqués dans la documentation.</p>
<p><a href="https://nixos.org/manual/nixos/stable/#sec-upgrading">NixOS</a> : <code>sudo nix-channel --add https://nixos.org/channels/nixos-22.11 nixos && sudo nixos-rebuild switch --upgrade && sudo reboot</code>. YOLO. Je n'ai même pas lu le release note. Au pire, si quelque chose ne va pas, je pourrais toujours redémarrer sur la dernière version fonctionnelle de mon système. Je vous ai déjà dit que NixOS était <a href="//linuxfr.org/users/killruana/journaux/nixos-ou-comment-j-ai-rendu-mes-machines-interchangeables-et-ennuyeuses">ennuyeux</a> ? </p>
<div><a href="https://linuxfr.org/users/killruana/journaux/nixos-22-11-et-openbsd-7-2.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/129477/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/killruana/journaux/nixos-22-11-et-openbsd-7-2#comments">ouvrir dans le navigateur</a>
</p>
jtremesayhttps://linuxfr.org/nodes/129477/comments.atomtag:linuxfr.org,2005:Diary/404612022-11-10T21:27:56+01:002022-11-10T21:27:56+01:00NixOS ou comment j'ai rendu mes machines interchangeables et ennuyeusesLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Salut,</p>
<p>Je voudrais te parler de <a href="https://fr.wikipedia.org/wiki/NixOS">NixOS</a>, la distribution Linux déclarative. C'est solène% qui me l'a fait découvrir. Elle en a pas mal parlé sur son <a href="https://dataswamp.org/%7Esolene/tag-nixos.html">blog</a>. Elle a même fait des trucs plutôt créatifs avec.</p>
<p>Je l'avais installé sur mon laptop secondaire il y a quelques mois à la place d'OpenBSD (déso / pas déso). C'est une machine que j'utilise assez rarement, et quasi exclusivement pour de la navigation web (youtube/rss dans la chambre). J'ai cherché à faire le truc le plus simple possible. LVM over LUKS, ext4, plasma5, firefox. L'installation est facile. Les utilisateurs de Arch ou BSD ne seront pas dépaysés, il suffit de booter sur un live usb et lire la <a href="https://nixos.org/manual/nixos/stable/#sec-installation">fine documentation</a>. L'administration est pour ainsi dire inexistante. Ça casse pas les gonades, ça marche, ça a totalement le killou seal of approval pour une machine d'usage léger ou ponctuel.</p>
<p>Le concept est simple. <code>/etc/nixos/configuration.nix</code> contient l'état désiré du système et la commande <code>nixos-rebuild</code> s'occupe de tout. Par exemple, si je prends cette configuration</p>
<pre><code class="nix"><span class="c1"># Edit this configuration file to define what should be installed on</span>
<span class="c1"># your system. Help is available in the configuration.nix(5) man page</span>
<span class="c1"># and in the NixOS manual (accessible by running ‘nixos-help’).</span>
<span class="p">{</span> config<span class="p">,</span> pkgs<span class="p">,</span> <span class="o">...</span> <span class="p">}:</span>
<span class="p">{</span>
<span class="ss">imports =</span>
<span class="p">[</span> <span class="c1"># Include the results of the hardware scan.</span>
<span class="o">.</span><span class="l">/hardware-configuration.nix</span>
<span class="p">];</span>
<span class="c1"># Bootloader.</span>
<span class="ss">boot =</span> <span class="p">{</span>
initrd<span class="o">.</span>luks<span class="o">.</span>devices<span class="o">.</span><span class="ss">crypted =</span> <span class="p">{</span>
<span class="ss">device =</span> <span class="s2">"/dev/disk/by-uuid/5819e617-8899-4e6e-a4f1-4986a6e3bc8e"</span><span class="p">;</span>
<span class="ss">allowDiscards =</span> <span class="no">true</span><span class="p">;</span>
<span class="ss">bypassWorkqueues =</span> <span class="no">true</span><span class="p">;</span>
<span class="p">};</span>
<span class="ss">loader =</span> <span class="p">{</span>
systemd-boot<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
<span class="ss">efi =</span> <span class="p">{</span>
<span class="ss">canTouchEfiVariables =</span> <span class="no">true</span><span class="p">;</span>
<span class="ss">efiSysMountPoint =</span> <span class="s2">"/boot/efi"</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">};</span>
<span class="p">}</span>
<span class="ss">networking =</span> <span class="p">{</span>
<span class="ss">hostName =</span> <span class="s2">"music"</span><span class="p">;</span>
<span class="ss">domain =</span> <span class="s2">"slaanesh.org"</span><span class="p">;</span>
<span class="c1"># Enable networking</span>
networkmanager<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1"># Set your time zone.</span>
time<span class="o">.</span><span class="ss">timeZone =</span> <span class="s2">"Europe/Paris"</span><span class="p">;</span>
<span class="c1"># Select internationalisation properties.</span>
i18n<span class="o">.</span><span class="ss">defaultLocale =</span> <span class="s2">"en_US.utf8"</span><span class="p">;</span>
<span class="c1"># Enable the X11 windowing system.</span>
services<span class="o">.</span>xserver<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
<span class="c1"># Enable the KDE Plasma Desktop Environment.</span>
services<span class="o">.</span>xserver<span class="o">.</span>displayManager<span class="o">.</span>sddm<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
services<span class="o">.</span>xserver<span class="o">.</span>desktopManager<span class="o">.</span>plasma5<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
<span class="c1"># Configure keymap in X11</span>
services<span class="o">.</span><span class="ss">xserver =</span> <span class="p">{</span>
<span class="ss">layout =</span> <span class="s2">"fr"</span><span class="p">;</span>
<span class="ss">xkbVariant =</span> <span class="s2">"bepo"</span><span class="p">;</span>
<span class="p">};</span>
<span class="c1"># Configure console keymap</span>
console<span class="o">.</span><span class="ss">useXkbConfig =</span> <span class="no">true</span><span class="p">;</span>
<span class="c1"># Enable CUPS to print documents.</span>
services<span class="o">.</span>printing<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
<span class="c1"># Enable sound with pipewire.</span>
sound<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
hardware<span class="o">.</span>pulseaudio<span class="o">.</span><span class="ss">enable =</span> <span class="no">false</span><span class="p">;</span>
security<span class="o">.</span>rtkit<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
services<span class="o">.</span><span class="ss">pipewire =</span> <span class="p">{</span>
<span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
alsa<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
alsa<span class="o">.</span><span class="ss">support32Bit =</span> <span class="no">true</span><span class="p">;</span>
pulse<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
<span class="p">};</span>
users<span class="o">.</span>users<span class="o">.</span><span class="ss">killruana =</span> <span class="p">{</span>
<span class="ss">isNormalUser =</span> <span class="no">true</span><span class="p">;</span>
<span class="ss">description =</span> <span class="s2">"killruana"</span><span class="p">;</span>
<span class="ss">extraGroups =</span> <span class="p">[</span> <span class="s2">"networkmanager"</span> <span class="s2">"wheel"</span> <span class="p">];</span>
<span class="ss">packages =</span> <span class="k">with</span> pkgs<span class="p">;</span> <span class="p">[</span>
firefox
thunderbird
vlc
deltachat-desktop
keepassxc
libreoffice-qt
libsForQt5<span class="o">.</span>kpat
lutris
nextcloud-client
<span class="p">];</span>
<span class="p">};</span>
<span class="c1"># Enable automatic login for the user.</span>
services<span class="o">.</span>xserver<span class="o">.</span>displayManager<span class="o">.</span>autoLogin<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
services<span class="o">.</span>xserver<span class="o">.</span>displayManager<span class="o">.</span>autoLogin<span class="o">.</span><span class="ss">user =</span> <span class="s2">"killruana"</span><span class="p">;</span>
<span class="c1"># Allow unfree packages</span>
nixpkgs<span class="o">.</span>config<span class="o">.</span><span class="ss">allowUnfree =</span> <span class="no">true</span><span class="p">;</span>
<span class="c1"># List packages installed in system profile. To search, run:</span>
<span class="c1"># $ nix search wget</span>
environment<span class="o">.</span><span class="ss">systemPackages =</span> <span class="k">with</span> pkgs<span class="p">;</span> <span class="p">[</span>
<span class="p">];</span>
<span class="c1"># This value determines the NixOS release from which the default</span>
<span class="c1"># settings for stateful data, like file locations and database versions</span>
<span class="c1"># on your system were taken. It‘s perfectly fine and recommended to leave</span>
<span class="c1"># this value at the release version of the first install of this system.</span>
<span class="c1"># Before changing this value read the documentation for this option</span>
<span class="c1"># (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).</span>
system<span class="o">.</span><span class="ss">stateVersion =</span> <span class="s2">"22.05"</span><span class="p">;</span> <span class="c1"># Did you read the comment?</span>
<span class="p">}</span></code></pre>
<p>(on aime ou on aime pas la syntaxe. Pour ma part, je ne la trouve pas pire que celle de terraform) et que je fais un petit <code>sudo nixos-rebuild switch</code>; poof ! Je me retrouve avec la machine décrite plus haut. Mon utilisateur est créer automatiquement. Les paquets demandés sont installés. Y'a plus qu'à lancer firefox et venir mouler par ici. Vous remarquerez que les paquets sont déclarés au niveau de la config de mon utilisateur (<code>users.users.killruana</code>) au lieu de le faire au niveau du système (<code>environment.systemPackages</code>). NixOS possède les deux niveaux de granularité. Je peux installer des paquets au niveau global et les rendre à tous (typiquement les trucs tel que <code>sudo</code>, <code>htop</code>, <code>fish</code>) et je peux installer des paquets qui ne seront visible qu'au niveau de mon utilisateur (mon borderl quoi). Si je créai un second utilisateur et que je lui donne une autre liste de paquets, ben il n'aura pas les mêmes programmes d'installé. Et si y'a des paquets communs, les données sont mutualisés pour économiser de la place. Bref, chacun peut se créer son concon sans empieter sur celui des autres. C'est carré, c'est propre. J'aime. Ça a le killou seal of approval des trucs simples et qui juste marchent®.</p>
<p>Mon laptop principal est sous Arch. Arch à le killou seal of approval des trucs cool depuis 2007 (privilège partagé avec gentoo, LFS et OpenBSD). J'ai beaucoup aimé découvrir Arch. Rien ne m'était caché, tout m'était accessible. C'était un lieu idéal pour l'apprentissage et la manipulation des systèmes GNU/Linux/X/… tout en étant plus facile d'accès que Gentoo. Avec les années et l'expérince (15 ans quand même >_<), ça a perdu de sa coolitude, de son charme. Je l'utilise par défaut parce que je n'ai pas trouvé mieux depuis. Ça correspondait exactement à mes besoins. Simple, léger, ça juste marche. À tel point que ça en est ennuyeux. Y'a plus de surprise. Plus de magie. Une ou deux fois par an, un mail sur la mailing list prévenant d'une opération manuelle à effectuer lors d'une mise à jour. Et c'est à peu près tout. J'ai tout qui marche comme je veux, pourquoi est-ce que je chercherai à bidouiller/casser des trucs ? Bref, c'est devenu ennuyeux. </p>
<p>L'envie de nouveauté m'a poussé à remplacer Arch par NixOS. Je sais que cela va rapidement devenir <a href="https://dataswamp.org/%7Esolene/2022-10-10-nixos-is-the-most-boring-os.html">ennuyeux</a> parce que ça marche trop bien. Mais avant d'en arriver là, j'ai encore plein de trucs à maitriser, donc ça devrait aller quelque temps. Pis comme de toute façom je n'ai pas trouvé mieux, faudra faire avec.</p>
<p>Alors pourquoi NixOS c'est mieux que tout ? Déjà, comme mentionné plus haut, c'est très simple. La maintenance du système se résume à l'édition du fichier config. Y'a rien d'autre à faire, la magie (problament très noire et malfaisante mais diablement efficace) s'occupe de tout. À partir de là, je peux versionner la config avec git et facilement revenir en arrière si je ne suis pas satisfait de mes changements. La magie s'occupe de désinstaller et installer ce qu'il faut, générer les fichiers de configs qu'il faut, et recharger tout ce qu'il faut. La magie est tellement puissante qu'elle arrive à demander à i3 de relire sa config quand je modifie cette dernière dans <code>configuration.nix</code>. Yup, une bonne partie de mes dotfiles est directement géré par NixOS. Là, vous pourrez trouvez ma config pour <a href="https://github.com/killruana/nixos-config/blob/7a0e4291c2620a5e353cee68d0d737991d59744c/users/jtremesay/user.nix#L123">i3</a>. Bref, le système est toujours dans un état propre et à jour. J'aime même vu des exemples de configuration où les gens n'avaient des partitions que pour <code>/boot</code>, <code>/home</code> et <code>/var</code> (et la partition maudit <code>/nix</code> permettant l'accomplissement de la magie); <code>/</code> étant généré dynamiquement au démarage et monté en lecture seule. Car après tout, avec un tel systèm déclaratif et dynamique, pourquoi s'embeter à stocker <code>/</code> ? Avoir sa config avec git, c'est bien. Mais quid en cas de fuckage suffisant au point que le système ne boot plus ? Ben figurez-vous que le système aussi est versionné. à Chaque fois que <code>nixos-rebuild</code> s'exécute avec succès, il créait une nouvelle entrée dans le boot loader pour charger votre système nouvellement créer. Imaginez ici une capture d'écran de mon bootloader me permettant de choisir entre différentes générations du système (différentes options sont disponibles tel que "NixOS generation 85 - 2022-11-08", "NixOS generation 86 - 2022-11-08" ou "NixOS generation 87 - 2022-11-10"). Vous pouvez donc facilement rebooter à un état antérieur du système qui n'était pas encore cassé et retourner à vos occupations. C'est magique. Ça marche. J'aime. Ça a le killou seal of approval des trucs cools et simples qui juste marchent. Y'a la gestion des paquets aussi qui est bien. C'est très simple, y'en a pas. Je demande au système de me rendre tel logiciel disponible, et il s'occupe de tout. Je veux virer un truc, je supprime la ligne idoine dans <code>configuration.nix</code> et tadam, la magie fait le reste. Mon système est propre. Et il le reste. Tous les fichiers gérés par NixOS sont en lecture seule. Impossible d'éditer un fichier de config pour ajouter une option afin de tester un truc à la rache sur redis. Tu modifies la variable <code>packages.services.redis.bla</code> idoine et ton système reste propre et carré. Mais quid si je veux juste installer un truc à la rache ? Y'a une commande pour ça. Elle va automatiquement créer un nouvel environnement temporaire où le programme est disponible. Je quitte le shell, l'environnemnt est détruit. Pensez containers, mais sans les containers. Conceptuellement, un shell avec une variable $PATH augmenté d'une entrée vers un dossier temporaire contenant le programme désiré. Ce n'est pas du containeur ou du chroot. Vous êtes toujours pleinement dans votre système.</p>
<pre><code>jtremesay@edemaruh ~> ruby
The program 'ruby' is not in your PATH. It is provided by several packages.
You can make it available in an ephemeral shell by typing one of the following:
nix-shell -p jruby
nix-shell -p logstash6-oss
nix-shell -p logstash7-oss
nix-shell -p ruby
nix-shell -p ruby_3_0
nix-shell -p ruby_3_1
jtremesay@edemaruh ~ [127]> nix-shell -p ruby
[nix-shell:~]$ ruby
^CTraceback (most recent call last):
ruby: Interrupt
[nix-shell:~]$
exit
jtremesay@edemaruh ~ [SIGINT]> which ruby
which: no ruby in (/run/wrappers/bin:/home/jtremesay/.nix-profile/bin:/etc/profiles/per-user/jtremesay/bin:/nix/var/nix/profiles/default/bin:/run/current-system/sw/bin:/home/jtremesay/.local/bin)
</code></pre>
<p>Y'a même plus de sens à la notion de paquets installés. Y'a les trucs que je veux qu'ils soient tous le temps disponibles et indiqués dans <code>configuration.nix</code> et y'a les trucs dont j'ai besoin que très ponctuellement et dont ça ne me dérange pas de taper quelques caractères de plus pour les avoir. Au moins je n'aurai pas à payer le coup de sa mise à jour lors de la mise à jour du système, seulement lors d'un très éventuel usage futur. De plus, ça permet de créer des environnement de développement très propre. Vous faites votre <code>shell.nix</code> qui contient les trucs nécessaire à votre projet, et <code>nix-shell</code>. Genre <code>pip install -r requirements.txt</code> sauf que ça s'occupe d'installer python et tous le reste. De cette manière, vous vous assurez que tous le monde utilise les mêmes libs et versions, diminuant fortement l'occurence des chezmoiçamarche®. C'est le genre de truc que j'aurai aimé avoir que je faisais du C++. J'ai pas encore fini de tout explorer, mais il semblerait qu'<a href="https://nixos.wiki/wiki/NixOS_Containers">il soit aussi possible</a> de gérer des groupes de containers remplaçant ainsi les outils tel que docker compose pour avoir un truc simple et pas relou à la maison. Toutes les options de configurationt disponibles sont disponible <a href="https://search.nixos.org/options?">là</a>. La liste des paquets est disponible <a href="https://search.nixos.org/packages?channel=22.05&from=0&size=50&sort=relevance&type=packages&query=.">là</a>.</p>
<p>Bref, voici quelque unes des raisons pour lesquels NixOS est le meilleur système du monde. </p>
<p>Retournons à mon laptop principal. Insertion de la clé USB. Allumage du laptop. Mashage de toutes les touches parce que je ne me souviens jamais de quel touche permet de choisir le périphérique de boot (déso / pas déso, je n'ai pas à réinstaller souvent). Boot sur la clé USB. passage du clavier en bépo. Formatage. On va rester sur un truc simple. Parce j'aime les trucs simples qui juste marchent. 2 "disques" NVMe de 1 To, chacun contenant un swap chiffré par LUKS (<code>cryptsetup luksFormat /dev/sda2 && cryptsetup open /dev/sda2 swap0 && mkswap /dev/mapper/swap0</code> + pareil sur <code>sdb</code> avec <code>swap1</code>) (le swap n'est utilisé que pour l'hibernation, cela fait sens de les chiffrer) et une partition chiffrée utilisées dans un btrfs en raid 1 (<code>cryptsetup … && mkfs.btrfs -d raid1 -m raid1 /dev/mapper/root{0,1}</code>). Y'a aussi une petite partion fa32 pour l'ESP (UEFI system partition )(<code>mkfs.vfat -f32 /dev/sda1</code>). On monte les partitions (<code>swapon /dev/mapper/swap{0,1} && mount /dev/mapper/root0 /mnt && mkdir /mnt/boot && mount /dev/sda1 /mnt/boot</code>). On génère la config initiale (<code>nixos-generate-config --root /mnt</code>). On fait des ajustements (<code>vim /mnt/etc/nixos/configuration.nix</code>) (ATTENTION: si vous utilisez des partitions chiffrées nécéssaires au boot, il faut l'indiquer ici. Un exemple est disponible <a href="https://github.com/killruana/nixos-config/blob/7a0e4291c2620a5e353cee68d0d737991d59744c/machines/edemaruh.nix#L11">là</a>. Tout le reste est detecté automatiquement sauf ça -_-). On fait le bootstrap (<code>nixos-install</code>). On reboot (<code>reboot</code>). Le bootloader a bien été configuré, notre système démarre. Il nous demande bien la phrase de déchiffrement des différentes partitions (une seule phrase pour les 4 partitions parce que c'est déjà suffisament bien relou à taper comme ça). Toute la séquence de boot se passe bien. On arrive sur le prompt. On se connecte en root, on récupére la configuration du laptop secondaire via une clé usb, <code>nixos-rebuild && reboot</code>. Une phrase de déchiffrement plus tard, on arrive sur notre bureau plasma et tous nos programmes sont installés. As expected. Simple et cool. Ça juste marche. Il est temps de faire la configuration fine du système. Après quelques heures passés dans la doc et la config, j'ai accouché d'une <a href="https://github.com/killruana/nixos-config">monstruosité</a>. Dans ce dépot, j'ai la config pour récréer mon système pour qu'il soit tel que je l'aime (i3, xterm, fish, XRessources au petits oignons, nvim avec quelques plugins) tout en tenant compte des différences hardware (une machine intel avec carte graphique intégré et l'autre avec amd et nvidia + drivers proprio; Aussi des différences dans le formatage : btrfs raid 1 vs ext4 over lvm). Bref, (re-)installer une nouvelle machine se résume à formater; git clone; nixos-install; récréer les comptes partout (firefox sync, thunderbird, deltachat, nextcloud-desktop, keepass, steam) et la machine et prête pour le service. Pas de surprise. Simple et efficace. Ça juste marche.</p>
<p>Grace à sa nature déclarative et un dépot git, je peux facilement avoir le même système partout. <code>nvim . && git add . && git commit && git push</code> d'un côté, <code>git pull && nixos-rebuild switch</code> de l'autre. Tadam. La magie noire fait le reste.</p>
<p>Après quelques jours à l'avoir utilisé activement, je suis très satisfait. J'ai pu jouer à mes jeux steam. J'ai pu mettre en place un environement pour faire du dev web "moderne" avec vue.js (:cry: mais plus la partie purement nodejs parce que j'y comprends rien. Pas la mise en place de l'environnement dans NixOS crée à coup de <code>nix-shell -p nodejs</code> :P).</p>
<p>La magie noire est assuré par le gestionnaire de paquet <a href="https://en.wikipedia.org/wiki/Nix_(package_manager)">Nix</a> et le langage de programmation (configuration ?) <a href="https://nixos.wiki/wiki/Overview_of_the_Nix_Language">Nix</a> qui méritent un journal dédié.</p>
<p>À court terme, j'envisage de passer mon serveur @home de OpenBSD vers NixOS. Il n'héberge que quelques apps php et mon site perso. La migration devrait être facile. Juste le temps de faire des expérimentations avec les stacks webs sur n'importe laquelle de mes maintenant totalement interchangeables machines. Pas de peur de crader le système, <code>git revert && nixos-rebuild switch</code> si on est pas satisfait. <code>git add . && git commit</code> si on est satisfait. Pas peur de rater une ligne dans un fichier de config lors de l'installation du serveur. Tout est versionné et a déjà était testé. C'est simple, c'est propre, ça juste marche. Ça m'ennui déjà… Où est la plaisir ? Où est la découverte ?</p>
<p>trucs ayant le killou seal of approval c'est simple et ça juste marche® :</p>
<ul>
<li>NixOS</li>
<li>Arch Linux</li>
<li>OpenBSD (pas en desktop; mais en petit serveur @home, c'est fabuleux <%)</li>
<li>i3</li>
<li>xterm</li>
<li>fish</li>
<li>la bouilloire en fonte</li>
<li>la gourde en alu à fermeture comme la bouteille de limonade en verre façon traditionelle, si tu sais comment ça s'appelle n'hésite pas à le dire dans les commentaires</li>
<li>le rasoir de sureté (todo: essayer le rasoir sabre)/blaireau/savon</li>
<li>l'Opinel (mon cœur dit Laguiole, la praticité dit Opinel)</li>
<li>le vélo</li>
</ul>
<div><a href="https://linuxfr.org/users/killruana/journaux/nixos-ou-comment-j-ai-rendu-mes-machines-interchangeables-et-ennuyeuses.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/129261/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/killruana/journaux/nixos-ou-comment-j-ai-rendu-mes-machines-interchangeables-et-ennuyeuses#comments">ouvrir dans le navigateur</a>
</p>
jtremesayhttps://linuxfr.org/nodes/129261/comments.atomtag:linuxfr.org,2005:Bookmark/37862021-11-02T19:30:54+01:002021-11-02T19:30:54+01:00nix 2.4 released<a href="https://discourse.nixos.org/t/nix-2-4-released/15822">https://discourse.nixos.org/t/nix-2-4-released/15822</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/125856/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/tla47/liens/nix-2-4-released#comments">ouvrir dans le navigateur</a>
</p>
tla47https://linuxfr.org/nodes/125856/comments.atomtag:linuxfr.org,2005:Bookmark/32322021-06-21T12:18:12+02:002021-06-21T12:18:12+02:00L'image minimale de Nixos unstable est 100℅ reproductible<a href="https://discourse.nixos.org/t/nixos-unstable-s-iso-minimal-x86-64-linux-is-100-reproducible/13723">https://discourse.nixos.org/t/nixos-unstable-s-iso-minimal-x86-64-linux-is-100-reproducible/13723</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/124653/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/ted/liens/l-image-minimale-de-nixos-unstable-est-100-reproductible#comments">ouvrir dans le navigateur</a>
</p>
tedhttps://linuxfr.org/nodes/124653/comments.atomtag:linuxfr.org,2005:Diary/394772020-12-05T13:57:05+01:002020-12-05T13:57:05+01:00Les rollbacks avec Manjaro, Btrs et TimeshiftLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#toc-%C3%80-propos-du-syst%C3%A8me-de-fichiers-btrfs">À propos du système de fichiers btrfs</a></li>
<li><a href="#toc-installer-manjaro-sur-une-partition-btrfs">Installer Manjaro sur une partition btrfs</a></li>
<li><a href="#toc-afficher-le-menu-grub">Afficher le menu grub</a></li>
<li>
<a href="#toc-configurer-timeshift-et-timeshift-autosnap">Configurer timeshift et timeshift-autosnap</a><ul>
<li><a href="#toc-timeshift">Timeshift</a></li>
<li><a href="#toc-timeshift-autosnap">Timeshift-autosnap</a></li>
</ul>
</li>
<li><a href="#toc-ajouter-un-hook-pacman">Ajouter un hook pacman</a></li>
<li><a href="#toc-faire-un-rollback-en-cas-de-probl%C3%A8me">Faire un rollback en cas de problème</a></li>
<li><a href="#toc-conclusion">Conclusion</a></li>
</ul>
<p>D'après son site web, <a href="https://manjaro.org/">Manjaro</a> est un système d'exploitation "pour tout le monde" et qui permet "d'apprécier la simplicité". En effet, comme il s'agit, entre autres, d'une distribution Linux en rolling release, l'utilisateur n'aura jamais à faire de montée de version majeure. Cependant, en pratique, on trouve quelques témoignages d'utilisateurs pour qui une mise-à-jour "a tout cassé" et ne permettait pas de retrouver un système exploitable facilement. Si ceci ne prouve pas grand chose sur la stabilité réelle de Manjaro, cela confirme néanmoins l'intérêt des systèmes de rollbacks automatiques et accessibles au démarrage.</p>
<p>Dans <a href="//linuxfr.org/users/nokomprendo-3/journaux/les-rollbacks-avec-nixos-ou-comment-casser-son-systeme">un article précédent</a>, je montrais comment NixOS permettait, de base, d'utiliser un tel système de rollbacks. Ici, je vais essayer d'expliquer comment mettre en place et utiliser un système équivalent avec Manjaro.</p>
<p>Voir aussi : <a href="https://youtu.be/twQugVrtD3E">video youtube</a> - <a href="https://peertube.fr/videos/watch/0cfc0d25-9d78-4dcb-8400-188561fedb95">video peertube</a> - <a href="https://nokomprendo.gitlab.io/posts/tuto_fonctionnel_49/2020-12-04-fr-README.html">article de blog</a></p>
<h2 id="toc-À-propos-du-système-de-fichiers-btrfs">À propos du système de fichiers btrfs</h2>
<p>Le système de rollback illustré dans cet article repose sur <a href="https://fr.wikipedia.org/wiki/Btrfs">btrfs</a>. Il s'agit d'un système de fichiers moderne qui propose toutes sortes de fonctionnalités intéressantes comme les sous-volumes, le chiffrement, la compression, l'écriture transactionnelle…</p>
<p>Btrfs propose un système de snapshots, c'est-à-dire d'instanés permettant de fixer des états successifs d'une partition (un peu comme les commits avec git). L'intérêt de gérer les snapshots dans le système de fichiers est d'optimiser son implémentation (le système retient les différences entre snapshots, sans stocker de copie superflue) et de pouvoir accéder à ces snapshots avant même le démarrage du système d'exploitation.</p>
<p>Attention, les snapshots btrfs ne sont pas un système de sauvegarde : ils sont gérés au niveau d'une même partition et si celle-ci crashe alors les données sont perdues.</p>
<h2 id="toc-installer-manjaro-sur-une-partition-btrfs">Installer Manjaro sur une partition btrfs</h2>
<p>L'installation de Manjaro est très simple. Il suffit de télécharger l'image ISO, de préparer et de booter le support d'installation, puis de lancer l'installeur graphique.</p>
<p>Ici, la seule particularité est d'utiliser une partition racine en btrfs. Pour cela, on peut, par exemple, créer une table <code>GPT</code> et les partitions suivantes :</p>
<ul>
<li>
<code>/dev/sda1</code> de 8M en <code>unformatted</code> et avec le drapeau <code>bios-grub</code>
</li>
<li>
<code>/dev/sda2</code> de 200M en <code>ext4</code> sur <code>/boot</code>
</li>
<li>
<code>/dev/sda3</code> en <code>btrfs</code> sur <code>/</code> </li>
</ul>
<h2 id="toc-afficher-le-menu-grub">Afficher le menu grub</h2>
<p>Une fois le système installé, on peut le démarrer. Par défaut le système d'amorçage (<code>grub</code>) est caché. Pour afficher le menu au démarrage, on peut éditer le fichier <code>/etc/default/grub</code> (en <code>root</code> ou via <code>sudo</code>) et régler les paramètres suivants :</p>
<pre><code>GRUB_TIMEOUT_STYLE=menu
GRUB_GFXPAYLOAD_LINUX=1024x768 # pour le test en VM, éventuellement
</code></pre>
<p>Pour prendre en compte la modification, il faut mettre à jour le grub. Ceci sera fait automatiquement lors des étapes suivantes mais on peut le faire manuellement avec la commande : </p>
<pre><code>$ sudo update-grub
</code></pre>
<h2 id="toc-configurer-timeshift-et-timeshift-autosnap">Configurer timeshift et timeshift-autosnap</h2>
<p>Pour gérer les snapshots btrfs, on installe les paquets suivants :</p>
<pre><code>grub-btrfs timeshift timeshift-autosnap
</code></pre>
<h3 id="toc-timeshift">Timeshift</h3>
<p>Timeshift est un outil classique pour gérer les snapshots (btrfs ou autres). Il s'agit à la fois d'un programme en ligne de commande et d'une interface graphique.</p>
<p>Pour initialiser les snapshots, on lance timeshift et on suit l'assistant (normalement les paramètres par défaut conviennent).</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6e6f6b6f6d7072656e646f2e6769746c61622e696f2f706f7374732f7475746f5f666f6e6374696f6e6e656c5f34392f696d616765732f74696d6573686966742d312e6a7067/timeshift-1.jpg" alt="" title="Source : https://nokomprendo.gitlab.io/posts/tuto_fonctionnel_49/images/timeshift-1.jpg"></p>
<p>On peut créer un premier snapshot avec l'interface graphique et les lister avec la ligne de commande :</p>
<pre><code>$ sudo timeshift --list
/dev/sda3 is mounted at: /run/timeshift/backup, options: rw,relatime,space_cache,subvolid=5,subvol=/
Device : /dev/sda3
UUID : 218b6029-172b-4eba-b553-09d7605a463e
Path : /run/timeshift/backup
Mode : BTRFS
Status : OK
1 snapshots, 6.2 GB free
Num Name Tags Description
------------------------------------------------------------------------------
0 > 2020-12-05_03-12-40 O
</code></pre>
<h3 id="toc-timeshift-autosnap">Timeshift-autosnap</h3>
<p>Timeshift-autosnap est un outil en ligne de commande qui permet de prendre un snapshot et de mettre à jour le grub automatiquement, en y ajoutant une entrée pour démarrer sur ce snapshot :</p>
<pre><code>$ sudo timeshift-autosnap
Using system disk as snapshot device for creating snapshots in BTRFS mode
/dev/sda3 is mounted at: /run/timeshift/backup, options: rw,relatime,space_cache,subvolid=5,subvol=/
Creating new backup...(BTRFS)
Saving to device: /dev/sda3, mounted at path: /run/timeshift/backup
Created directory: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-12-05_03-13-38
Created subvolume snapshot: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-12-05_03-13-38/@
Created control file: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-12-05_03-13-38/info.json
BTRFS Snapshot saved successfully (0s)
Tagged snapshot '2020-12-05_03-13-38': ondemand
------------------------------------------------------------------------------
Création du fichier de configuration GRUB…
Thème trouvé : /usr/share/grub/themes/manjaro/theme.txt
Image Linux trouvée : /boot/vmlinuz-5.9-x86_64
Image mémoire initiale trouvée : /boot/intel-ucode.img /boot/initramfs-5.9-x86_64.img
Found initrd fallback image: /boot/initramfs-5.9-x86_64-fallback.img
Detecting snapshots ...
Info: Separate boot partition detected
Found snapshot: 2020-12-05 03:13:38 | timeshift-btrfs/snapshots/2020-12-05_03-13-38/@
Found snapshot: 2020-12-05 03:12:40 | timeshift-btrfs/snapshots/2020-12-05_03-12-40/@
Found 2 snapshot(s)
Found memtest86+ image: /boot/memtest86+/memtest.bin
fait
</code></pre>
<p>Les snapshots ainsi créés apparaissent également dans Timeshift (ligne de commande et interface graphique) :</p>
<pre><code>$ sudo timeshift --list
/dev/sda3 is mounted at: /run/timeshift/backup, options: rw,relatime,space_cache,subvolid=5,subvol=/
Device : /dev/sda3
UUID : 218b6029-172b-4eba-b553-09d7605a463e
Path : /run/timeshift/backup
Mode : BTRFS
Status : OK
2 snapshots, 6.2 GB free
Num Name Tags Description
------------------------------------------------------------------------------
0 > 2020-12-05_03-12-40 O
1 > 2020-12-05_03-13-38 O {timeshift-autosnap} {created before upgrade}
</code></pre>
<h2 id="toc-ajouter-un-hook-pacman">Ajouter un hook pacman</h2>
<p>Avec la configuration présentée jusqu'ici, on peut lancer un <code>timeshift-autosnap</code> puis faire une mise-à-jour des logiciels (via <code>pacman</code> ou une de ses interfaces graphiques), et ainsi pouvoir revenir sur le snapshot si la mise-à-jour pose problème.</p>
<p>Cependant, cette configuration nécessite de faire le snapshot manuellement et en ligne de commande. Pour automatiser cette étape, on peut ajouter un <a href="https://wiki.archlinux.org/index.php/pacman#Hooks">hook pacman</a>, par exemple en ajoutant un fichier <code>/etc/pacman.d/hooks/autosnap.hook</code> :</p>
<pre><code>[Trigger]
Operation = Install
Operation = Upgrade
Operation = Remove
Type = Path
Target = *
[Action]
When = PreTransaction
Exec = /usr/bin/timeshift-autosnap
</code></pre>
<p>Ainsi, avant chaque installation, suppression ou mise-à-jour, <code>timeshift-autosnap</code> est lancé automatiquement, ce qui crée un snapshot et met à jour le grub :</p>
<pre><code>$ sudo pacman -S geany
résolution des dépendances…
recherche des conflits entre paquets…
Paquets (1) geany-1.37-1
Taille totale du téléchargement : 3,65 MiB
Taille totale installée : 13,23 MiB
:: Procéder à l’installation ? [O/n]
:: Récupération des paquets…
geany-1.37-1-x86_64 3,7 MiB 1730 KiB/s 00:02 [###############################] 100%
(1/1) vérification des clés dans le trousseau [###############################] 100%
(1/1) vérification de l’intégrité des paquets [###############################] 100%
(1/1) chargement des fichiers des paquets [###############################] 100%
(1/1) analyse des conflits entre fichiers [###############################] 100%
(1/1) vérification de l’espace disque disponible [###############################] 100%
:: Exécution des crochets de pré-transaction…
(1/1) autosnap.hook
Using system disk as snapshot device for creating snapshots in BTRFS mode
/dev/sda3 is mounted at: /run/timeshift/backup, options: rw,relatime,space_cache,subvolid=5,subvol=/
Creating new backup...(BTRFS)
Saving to device: /dev/sda3, mounted at path: /run/timeshift/backup
Created directory: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-12-05_03-16-02
Created subvolume snapshot: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-12-05_03-16-02/@
Created control file: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-12-05_03-16-02/info.json
BTRFS Snapshot saved successfully (0s)
Tagged snapshot '2020-12-05_03-16-02': ondemand
------------------------------------------------------------------------------
Création du fichier de configuration GRUB…
Thème trouvé : /usr/share/grub/themes/manjaro/theme.txt
Image Linux trouvée : /boot/vmlinuz-5.9-x86_64
Image mémoire initiale trouvée : /boot/intel-ucode.img /boot/initramfs-5.9-x86_64.img
Found initrd fallback image: /boot/initramfs-5.9-x86_64-fallback.img
Detecting snapshots ...
Info: Separate boot partition detected
Found snapshot: 2020-12-05 03:16:02 | timeshift-btrfs/snapshots/2020-12-05_03-16-02/@
Found snapshot: 2020-12-05 03:13:38 | timeshift-btrfs/snapshots/2020-12-05_03-13-38/@
Found snapshot: 2020-12-05 03:12:40 | timeshift-btrfs/snapshots/2020-12-05_03-12-40/@
Found 3 snapshot(s)
Found memtest86+ image: /boot/memtest86+/memtest.bin
fait
:: Traitement des changements du paquet…
(1/1) installation de geany [###############################] 100%
Dépendances optionnelles pour geany
geany-plugins: additional functionality
vte3: embedded terminal support [installé]
:: Exécution des crochets de post-transaction…
(1/3) Arming ConditionNeedsUpdate...
(2/3) Updating icon theme caches...
(3/3) Updating the desktop file MIME type cache...
</code></pre>
<h2 id="toc-faire-un-rollback-en-cas-de-problème">Faire un rollback en cas de problème</h2>
<p>Avec cette configuration, on peut désormais redémarrer sur un état précédent du système en cas de problème lors d'une mise-à-jour. Pour cela, on sélectionne un snapshot au démarrage :</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6e6f6b6f6d7072656e646f2e6769746c61622e696f2f706f7374732f7475746f5f666f6e6374696f6e6e656c5f34392f696d616765732f67727562312e6a7067/grub1.jpg" alt="" title="Source : https://nokomprendo.gitlab.io/posts/tuto_fonctionnel_49/images/grub1.jpg"></p>
<p>Le système devrait alors démarrer sur un état précédent et fonctionnel. Si on veut rétablir cet état (et donc "annuler" la mise-à-jour problématique), on peut lancer <code>timeshift</code>, sélectionner le snapshot correspondant et le restaurer : </p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6e6f6b6f6d7072656e646f2e6769746c61622e696f2f706f7374732f7475746f5f666f6e6374696f6e6e656c5f34392f696d616765732f74696d6573686966742d322e6a7067/timeshift-2.jpg" alt="" title="Source : https://nokomprendo.gitlab.io/posts/tuto_fonctionnel_49/images/timeshift-2.jpg"></p>
<p>Éventuellement, on peut aussi faire un peu de ménage dans les snapshots et mettre à jour le grub avec un <code>update-grub</code>.</p>
<h2 id="toc-conclusion">Conclusion</h2>
<p>En utilisant btrfs et timeshift, on peut mettre en place, sur une Manjaro, un système de snapshots automatiques accessibles au démarrage, similaire à ce que propose NixOS de base.</p>
<p>La méthode décrite ici présente une façon de faire. Elle peut certainement être améliorée et mériterait, dans tous les cas, d'être testée un peu plus sérieusement. Enfin, concernant la simplicité, chacun appréciera…</p>
<div><a href="https://linuxfr.org/users/nokomprendo-3/journaux/les-rollbacks-avec-manjaro-btrs-et-timeshift.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/122452/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nokomprendo-3/journaux/les-rollbacks-avec-manjaro-btrs-et-timeshift#comments">ouvrir dans le navigateur</a>
</p>
nokomprendohttps://linuxfr.org/nodes/122452/comments.atomtag:linuxfr.org,2005:Diary/394742020-12-03T00:53:19+01:002020-12-03T00:53:19+01:00NixOS vs Guix System, premiers pasLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li>
<a href="#toc-installer-le-syst%C3%A8me">Installer le système</a><ul>
<li><a href="#toc-nixos">NixOS</a></li>
<li><a href="#toc-guix-system">Guix System</a></li>
</ul>
</li>
<li>
<a href="#toc-mettre-%C3%A0-jour-le-syst%C3%A8me">Mettre à jour le système</a><ul>
<li><a href="#toc-nixos-1">NixOS</a></li>
<li><a href="#toc-guix-system-1">Guix System</a></li>
</ul>
</li>
<li>
<a href="#toc-installer-des-logiciels">Installer des logiciels</a><ul>
<li><a href="#toc-nix">Nix</a></li>
<li><a href="#toc-guix">Guix</a></li>
</ul>
</li>
<li>
<a href="#toc-quelques-fonctionnalit%C3%A9s-pour-d%C3%A9velopper">Quelques fonctionnalités pour développer</a><ul>
<li><a href="#toc-projet-dexemple">Projet d'exemple</a></li>
<li><a href="#toc-nix-1">Nix</a></li>
<li><a href="#toc-guix-1">Guix</a></li>
</ul>
</li>
<li><a href="#toc-conclusion">Conclusion</a></li>
</ul>
<p><a href="https://nixos.org/">NixOS</a> et <a href="https://guix.gnu.org/">Guix System</a> sont des distributions Linux basées sur des gestionnaires de paquets utilisant une approche fonctionnelle (Nix et GNU Guix). Cette approche permet de gérer des environnements logiciels reproductibles et composables, ce qui est très pratique pour un développeur ou pour un administrateur système.</p>
<p>Cet article ne compare pas vraiment NixOS et Guix System mais présente, pour les deux solutions, comment installer le système, le configurer et l'utiliser pour développer. L'idée est plutôt d'aider un utilisateur de l'un à découvrir l'autre, et vice et versa.</p>
<p>Voir aussi : <a href="https://youtu.be/OhO4TKp_1o0">video youtube</a> - <a href="https://peertube.fr/videos/watch/f539a2e4-8ea7-4fa4-ac16-446070e6d6bc">video peertube</a> - <a href="https://nokomprendo.gitlab.io/posts/tuto_fonctionnel_48/2020-12-01-fr-README.html">article de blog</a></p>
<h2 id="toc-installer-le-système">Installer le système</h2>
<h3 id="toc-nixos">NixOS</h3>
<p>NixOS nécessite une installation manuelle (voir le <a href="https://nixos.org/manual/nixos/stable/">manuel NixOS</a> ou <a href="https://nokomprendo.gitlab.io/posts/tuto_fonctionnel_45/2020-11-09-fr-README.html#installation-de-nixos">cet article de blog</a>). Celle-ci n'est pas compliquée mais un peu fastidieuse. Il s'agit notamment de :</p>
<ul>
<li>
<a href="https://nixos.org/download.html">télécharger l'image ISO</a> et booter dessus</li>
<li>préparer les partitions</li>
<li>générer et éditer la configuration du système à installer</li>
<li>lancer l'installation et rebooter sur le système installé</li>
</ul>
<h3 id="toc-guix-system">Guix System</h3>
<p>Guix System propose un installeur semi-graphique très pratique (voir le <a href="https://guix.gnu.org/manual/en/html_node/index.html">manuel de référence GNU Guix</a>). Ainsi l'installation se résume à :</p>
<ul>
<li>
<a href="https://guix.gnu.org/en/download/">télécharger l'image ISO</a>, la décompresser et booter dessus</li>
<li>suivre les étapes de l'installeur</li>
<li>lancer l'installation et rebooter sur le système installé</li>
</ul>
<h2 id="toc-mettre-à-jour-le-système">Mettre à jour le système</h2>
<p>Les deux solutions fonctionnent de façon très similaire :</p>
<ul>
<li>un <em>update</em> télécharge des dernières versions des paquets (sans les installer)</li>
<li>un fichier définit la configuration du système</li>
<li>un <em>rebuild</em> reconstruit le système (installe les nouveaux paquets ou la nouvelle configuration système)</li>
</ul>
<h3 id="toc-nixos-1">NixOS</h3>
<ul>
<li>update :</li>
</ul>
<pre><code>$ sudo nix-channel --update
</code></pre>
<ul>
<li>rebuild (utilise le <code>channel</code> du <code>root</code>) :</li>
</ul>
<pre><code>$ sudo nixos-rebuild switch
</code></pre>
<ul>
<li>exemple de fichier de configuration <code>/etc/nixos/configuration.nix</code> :</li>
</ul>
<pre><code class="nix"><span class="p">{</span> config<span class="p">,</span> pkgs<span class="p">,</span> <span class="o">...</span> <span class="p">}:</span> <span class="p">{</span>
<span class="ss">imports =</span> <span class="p">[</span> <span class="o">.</span><span class="l">/hardware-configuration.nix</span> <span class="p">];</span>
boot<span class="o">.</span>loader<span class="o">.</span><span class="ss">grub =</span> <span class="p">{</span>
<span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
<span class="ss">device =</span> <span class="s2">"/dev/sda"</span><span class="p">;</span>
<span class="ss">version =</span> <span class="mi">2</span><span class="p">;</span>
<span class="p">};</span>
i18n<span class="o">.</span><span class="ss">defaultLocale =</span> <span class="s2">"fr_FR.UTF-8"</span><span class="p">;</span>
system<span class="o">.</span><span class="ss">stateVersion =</span> <span class="s2">"20.09"</span><span class="p">;</span>
time<span class="o">.</span><span class="ss">timeZone =</span> <span class="s2">"Europe/Paris"</span><span class="p">;</span>
<span class="ss">console =</span> <span class="p">{</span>
<span class="ss">font =</span> <span class="s2">"Lat2-Terminus16"</span><span class="p">;</span>
<span class="ss">keyMap =</span> <span class="s2">"fr-bepo"</span><span class="p">;</span>
<span class="p">};</span>
environment<span class="o">.</span><span class="ss">systemPackages =</span> <span class="k">with</span> pkgs<span class="p">;</span> <span class="p">[</span> vim <span class="p">];</span>
<span class="ss">networking =</span> <span class="p">{</span>
<span class="ss">hostName =</span> <span class="s2">"mynixos"</span><span class="p">;</span>
<span class="ss">useDHCP =</span> <span class="no">false</span><span class="p">;</span>
interfaces<span class="o">.</span>enp0s3<span class="o">.</span><span class="ss">useDHCP =</span> <span class="no">true</span><span class="p">;</span>
<span class="p">};</span>
<span class="ss">services =</span> <span class="p">{</span>
<span class="ss">xserver =</span> <span class="p">{</span>
<span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
<span class="ss">layout =</span> <span class="s2">"fr"</span><span class="p">;</span>
displayManager<span class="o">.</span>lightdm<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
desktopManager<span class="o">.</span>xfce<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">};</span>
users<span class="o">.</span>users<span class="o">.</span><span class="ss">toto =</span> <span class="p">{</span>
<span class="ss">isNormalUser =</span> <span class="no">true</span><span class="p">;</span>
<span class="ss">extraGroups =</span> <span class="p">[</span> <span class="s2">"wheel"</span> <span class="p">];</span>
<span class="p">};</span>
<span class="p">}</span></code></pre>
<h3 id="toc-guix-system-1">Guix System</h3>
<ul>
<li>update :</li>
</ul>
<pre><code>$ guix pull
</code></pre>
<ul>
<li>rebuild (utilise le <code>PATH</code> courant) :</li>
</ul>
<pre><code>$ sudo guix system reconfigure /etc/config.scm
</code></pre>
<ul>
<li>exemple de fichier de configuration <code>/etc/config.scm</code> :</li>
</ul>
<pre><code class="scheme"><span class="p">(</span><span class="nf">use-modules</span> <span class="p">(</span><span class="nf">gnu</span><span class="p">)</span> <span class="p">(</span><span class="nf">gnu</span> <span class="nv">packages</span> <span class="nv">vim</span><span class="p">)</span> <span class="p">(</span><span class="nf">gnu</span> <span class="nv">packages</span> <span class="nv">admin</span><span class="p">)</span> <span class="p">(</span><span class="nf">gnu</span> <span class="nv">packages</span> <span class="nv">certs</span><span class="p">))</span>
<span class="p">(</span><span class="nf">use-service-modules</span> <span class="nv">desktop</span> <span class="nv">networking</span> <span class="nv">ssh</span> <span class="nv">xorg</span><span class="p">)</span>
<span class="p">(</span><span class="nf">operating-system</span>
<span class="p">(</span><span class="nf">locale</span> <span class="s">"fr_FR.utf8"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">timezone</span> <span class="s">"Europe/Paris"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">keyboard-layout</span> <span class="p">(</span><span class="nf">keyboard-layout</span> <span class="s">"fr"</span> <span class="s">"bepo"</span><span class="p">))</span>
<span class="p">(</span><span class="nf">host-name</span> <span class="s">"myguix"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">users</span> <span class="p">(</span><span class="nf">cons*</span> <span class="p">(</span><span class="nf">user-account</span>
<span class="p">(</span><span class="nf">name</span> <span class="s">"toto"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">comment</span> <span class="s">"Toto"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">group</span> <span class="s">"users"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">home-directory</span> <span class="s">"/home/toto"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">supplementary-groups</span> <span class="o">'</span><span class="p">(</span><span class="s">"wheel"</span> <span class="s">"netdev"</span> <span class="s">"audio"</span> <span class="s">"video"</span><span class="p">)))</span>
<span class="nv">%base-user-accounts</span><span class="p">))</span>
<span class="p">(</span><span class="nf">packages</span>
<span class="p">(</span><span class="nf">append</span>
<span class="p">(</span><span class="nb">list </span><span class="nv">vim</span> <span class="nv">htop</span> <span class="nv">nss-certs</span><span class="p">)</span>
<span class="nv">%base-packages</span><span class="p">))</span>
<span class="p">(</span><span class="nf">services</span>
<span class="p">(</span><span class="nf">append</span>
<span class="p">(</span><span class="nb">list </span><span class="p">(</span><span class="nf">service</span> <span class="nv">xfce-desktop-service-type</span><span class="p">)</span>
<span class="p">(</span><span class="nf">set-xorg-configuration</span>
<span class="p">(</span><span class="nf">xorg-configuration</span> <span class="p">(</span><span class="nf">keyboard-layout</span> <span class="nv">keyboard-layout</span><span class="p">))))</span>
<span class="nv">%desktop-services</span><span class="p">))</span>
<span class="p">(</span><span class="nf">bootloader</span>
<span class="p">(</span><span class="nf">bootloader-configuration</span>
<span class="p">(</span><span class="nf">bootloader</span> <span class="nv">grub-bootloader</span><span class="p">)</span>
<span class="p">(</span><span class="nf">target</span> <span class="s">"/dev/sda"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">keyboard-layout</span> <span class="nv">keyboard-layout</span><span class="p">)))</span>
<span class="p">(</span><span class="nf">file-systems</span>
<span class="p">(</span><span class="nf">cons*</span> <span class="p">(</span><span class="nf">file-system</span>
<span class="p">(</span><span class="nf">mount-point</span> <span class="s">"/"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">device</span> <span class="p">(</span><span class="nf">uuid</span> <span class="s">"ad23de44-8331-487f-b86f-8a5f940bd702"</span> <span class="ss">'ext4</span><span class="p">))</span>
<span class="p">(</span><span class="nf">type</span> <span class="s">"ext4"</span><span class="p">))</span>
<span class="nv">%base-file-systems</span><span class="p">)))</span></code></pre>
<h2 id="toc-installer-des-logiciels">Installer des logiciels</h2>
<p>Les deux systèmes permettent à un utilisateur standard de gérer ses logiciels (installer, supprimer, rollbacks…).</p>
<h3 id="toc-nix">Nix</h3>
<ul>
<li>chercher un logiciel :</li>
</ul>
<pre><code>$ nix search geany
* nixpkgs.geany (geany)
Small and lightweight IDE
...
</code></pre>
<ul>
<li>installer un logiciel :</li>
</ul>
<pre><code>$ nix-env -iA nixos.geany
installing 'geany-1.36'
...
</code></pre>
<ul>
<li>lister les logiciels installés :</li>
</ul>
<pre><code>$ nix-env -q
geany-1.36
...
</code></pre>
<ul>
<li>désinstaller un logiciel :</li>
</ul>
<pre><code>$ nix-env -e geany
uninstalling 'geany-1.36'
</code></pre>
<ul>
<li>lister les générations :</li>
</ul>
<pre><code>$ nix-env --list-generations
72 2020-11-28 19:31:13
73 2020-12-02 21:18:48 (current)
</code></pre>
<h3 id="toc-guix">Guix</h3>
<ul>
<li>chercher un logiciel :</li>
</ul>
<pre><code>$ guix search geany
name: geany
version: 1.37
...
</code></pre>
<ul>
<li>installer un logiciel :</li>
</ul>
<pre><code>$ guix install geany
Le paquet suivant sera installé :
geany 1.37
...
</code></pre>
<ul>
<li>lister les logiciels installés :</li>
</ul>
<pre><code>$ guix packages --list-installed
geany 1.37 out /gnu/store/bsffsj4iqaq0f14m8zpds81gklrs0n4x-geany-1.37
...
</code></pre>
<ul>
<li>désinstaller un logiciel :</li>
</ul>
<pre><code>$ guix remove geany
Le paquet suivant sera supprimé :
geany 1.37
</code></pre>
<ul>
<li>lister les générations :</li>
</ul>
<pre><code>$ guix packages --list-generations
Génération 6 02 déc. 2020 19:14:03
+ geany 1.37 out /gnu/store/bsffsj4iqaq0f14m8zpds81gklrs0n4x-geany-1.37
Génération 7 02 déc. 2020 21:50:15 (actuelle)
- geany 1.37 out /gnu/store/bsffsj4iqaq0f14m8zpds81gklrs0n4x-geany-1.37
</code></pre>
<h2 id="toc-quelques-fonctionnalités-pour-développer">Quelques fonctionnalités pour développer</h2>
<p>Nix et Guix sont très pratique pour un développeur. En gros, on ajoute un fichier de packaging à un projet et on peut ensuite lancer un environnement de développement, construire le projet, installer le projet comme un logiciel classique, etc.</p>
<h3 id="toc-projet-dexemple">Projet d'exemple</h3>
<ul>
<li>code source C++ (<code>myhello.cpp</code>) :</li>
</ul>
<pre><code class="cpp"><span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"This is myhello!"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span></code></pre>
<ul>
<li>fichier de configuration cmake (<code>CMakeLists.txt</code>) :</li>
</ul>
<pre><code class="cmake"><span class="nb">project</span><span class="p">(</span> <span class="s">myhello</span> <span class="p">)</span>
<span class="nb">add_executable</span><span class="p">(</span> <span class="s">myhello</span> <span class="s">myhello.cpp</span> <span class="p">)</span>
<span class="nb">install</span><span class="p">(</span> <span class="s">TARGETS</span> <span class="s">myhello</span> <span class="s">DESTINATION</span> <span class="s">bin</span> <span class="p">)</span></code></pre>
<h3 id="toc-nix-1">Nix</h3>
<ul>
<li>fichier de packaging (<code>default.nix</code>) :</li>
</ul>
<pre><code class="nix"><span class="p">{</span> pkgs <span class="o">?</span> <span class="nb">import</span> <span class="l"><nixpkgs></span> <span class="p">{}</span> <span class="p">}:</span>
<span class="k">with</span> pkgs<span class="p">;</span> stdenv<span class="o">.</span>mkDerivation <span class="p">{</span>
<span class="ss">name =</span> <span class="s2">"myhello"</span><span class="p">;</span>
<span class="ss">src =</span> <span class="o">.</span><span class="l">/.</span><span class="p">;</span>
<span class="ss">buildInputs =</span> <span class="p">[</span> cmake <span class="p">];</span>
<span class="p">}</span></code></pre>
<ul>
<li>lancer un environnement de développement (<code>exit</code> ou Ctrl-d pour quitter) :</li>
</ul>
<pre><code>$ nix-shell
[nix-shell]$ cmake -S . -B build
...
$ cmake --build build
...
$ ./build/myhello
This is hello!
</code></pre>
<ul>
<li>construire le projet (penser à supprimer le dossier <code>build</code> avant) :</li>
</ul>
<pre><code>$ nix-build
...
$ ./result/bin/myhello
This is hello!
</code></pre>
<ul>
<li>installer le projet :</li>
</ul>
<pre><code>$ nix-env -f . -i
...
$ myhello
This is hello!
</code></pre>
<h3 id="toc-guix-1">Guix</h3>
<ul>
<li>fichier de packaging (<code>myhello.scm</code>) :</li>
</ul>
<pre><code class="scheme"><span class="p">(</span><span class="nf">define-module</span> <span class="p">(</span><span class="nf">myhello</span><span class="p">)</span>
<span class="o">#</span><span class="nv">:use-module</span> <span class="p">(</span><span class="nf">guix</span> <span class="nv">gexp</span><span class="p">)</span>
<span class="o">#</span><span class="nv">:use-module</span> <span class="p">(</span><span class="nf">guix</span> <span class="nv">packages</span><span class="p">)</span>
<span class="o">#</span><span class="nv">:use-module</span> <span class="p">(</span><span class="nf">gnu</span> <span class="nv">packages</span> <span class="nv">cmake</span><span class="p">)</span>
<span class="o">#</span><span class="nv">:use-module</span> <span class="p">(</span><span class="nf">guix</span> <span class="nv">build-system</span> <span class="nv">cmake</span><span class="p">))</span>
<span class="p">(</span><span class="nf">define-public</span> <span class="nv">myhello</span>
<span class="p">(</span><span class="nf">package</span>
<span class="p">(</span><span class="nf">name</span> <span class="s">"myhello"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">version</span> <span class="s">"0.1"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">source</span> <span class="p">(</span><span class="nf">local-file</span> <span class="s">""</span> <span class="o">#</span><span class="nv">:recursive?</span> <span class="no">#t</span><span class="p">))</span>
<span class="p">(</span><span class="nf">build-system</span> <span class="nv">cmake-build-system</span><span class="p">)</span>
<span class="p">(</span><span class="nf">arguments</span> <span class="o">'</span><span class="p">(</span><span class="o">#</span><span class="nv">:tests?</span> <span class="no">#f</span><span class="p">))</span>
<span class="p">(</span><span class="nf">synopsis</span> <span class="s">"myhello synopsis"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">description</span> <span class="s">"myhello description"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">home-page</span> <span class="s">"http://www.example.org"</span><span class="p">)</span>
<span class="p">(</span><span class="nf">license</span> <span class="no">#f</span><span class="p">)))</span></code></pre>
<ul>
<li>lancer un environnement de développement (<code>exit</code> ou Ctrl-d pour quitter) :</li>
</ul>
<pre><code>$ guix environment --load-path=. myhello
...
[env]$ cmake -S . -B build
...
</code></pre>
<ul>
<li>construire le projet :</li>
</ul>
<pre><code>$ guix build --load-path=. myhello
...
/gnu/store/pxl4lx7h01a7mpn7ddqyp2r4xbdyhaxy-myhello-0.1
$ /gnu/store/pxl4lx7h01a7mpn7ddqyp2r4xbdyhaxy-myhello-0.1/bin/myhello
This is hello!
</code></pre>
<ul>
<li>installer le projet :</li>
</ul>
<pre><code>$ guix install --load-path=. myhello
...
$ myhello
This is hello!
</code></pre>
<h2 id="toc-conclusion">Conclusion</h2>
<p>Nix et Guix sont tous les deux inspirés des <a href="https://edolstra.github.io/pubs/phd-thesis.pdf">travaux de thèse de Eelco Dolstra</a> (modèle de déploiement logiciel purement fonctionnel). Si la mise en œuvre diffère dans ces deux projets (implémentations, langages, etc), certaines fonctionnalités de base y sont assez similaires.</p>
<p>Bien-sûr, cet article n'a fait qu'effleurer le sujet. Nix et Guix ont beaucoup d'autres fonctionnalités, et c'est sur ces fonctionnalités plus avancées que les deux projets vont certainement se différencier.</p>
<div><a href="https://linuxfr.org/users/nokomprendo-3/journaux/nixos-vs-guix-system-premiers-pas.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/122425/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nokomprendo-3/journaux/nixos-vs-guix-system-premiers-pas#comments">ouvrir dans le navigateur</a>
</p>
nokomprendohttps://linuxfr.org/nodes/122425/comments.atomtag:linuxfr.org,2005:Diary/394602020-11-23T21:12:20+01:002020-11-23T21:12:20+01:00Les rollbacks avec NixOS, ou comment casser son systèmeLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#toc-les-canaux-de-nixos">Les canaux de NixOS</a></li>
<li><a href="#toc-les-g%C3%A9n%C3%A9rations-syst%C3%A8mes">Les générations systèmes</a></li>
<li><a href="#toc-nettoyer-les-g%C3%A9n%C3%A9rations-syst%C3%A8mes">Nettoyer les générations systèmes</a></li>
<li><a href="#toc-les-v%C3%A9rifications-automatiques">Les vérifications automatiques</a></li>
<li><a href="#toc-conclusion">Conclusion</a></li>
</ul>
<p>Voir aussi : <a href="https://youtu.be/o0clsnkTxTY">video youtube</a> - <a href="https://peertube.fr/videos/watch/36bc6106-4342-468a-942a-98b9c71b4272">video peertube</a> - <a href="https://nokomprendo.gitlab.io/posts/tuto_fonctionnel_47/2020-11-23-fr-README.html">article de blog</a></p>
<p>Une distribution Linux "rolling release" permet de faire évoluer progressivement son système. Ceci permet d'avoir des logiciels plus à jour et surtout d'éviter les montées de version majeure. </p>
<p>Cependant, le rolling release augmente le risque de "mise-à-jour qui casse tout". Une solution classique à ce risque est de lire les news de mise-à-jour, faire un snapshot avec Timeshift, lancer la mise-à-jour après avoir tirer une carte chance et faire un rollback vers la case départ sans toucher vingt milles francs en cas de problème. Ou sinon, utiliser NixOS…</p>
<h2 id="toc-les-canaux-de-nixos">Les canaux de NixOS</h2>
<p>NixOS utilise un système de canaux de paquets. Ceci permet de choisir entre une approche rolling release (canal <code>nixos-unstable</code>) ou une approche par version (<code>nixos-20.09</code>, <code>nixos-20.03</code>…). Il est même possible de changer de canal, d'utiliser plusieurs canaux en même temps, de spécifier des canaux par utilisateur, de personnaliser des canaux…</p>
<p>On peut lister les canaux systèmes avec la commande suivante :</p>
<pre><code># nix-channel --list
nixos https://nixos.org/channels/nixos-unstable
</code></pre>
<p>On peut également mettre à jour le système, avec les dernières versions de paquets disponibles sur le canal :</p>
<pre><code># nixos-rebuild switch --upgrade
[...]
</code></pre>
<p>Il peut arriver que des paquets soient cassés, que des incompatibilités apparaissent, ou tout simplement qu'on n'ait fait une erreur dans le fichier de configuration. NixOS propose différents outils pour gérer les mises-à-jour et résoudre les éventuels problèmes.</p>
<h2 id="toc-les-générations-systèmes">Les générations systèmes</h2>
<p>Lors d'une mise-à-jour système (<code>nixos-rebuild</code>), NixOS crée une nouvelle "génération" de la configuration et ajoute une entrée dans l'historique des générations systèmes.</p>
<p>Par exemple, on peut afficher l'historique des générations :</p>
<pre><code># nix-env -p /nix/var/nix/profiles/system --list-generations
11 2020-11-22 22:27:47 (current)
</code></pre>
<p>Puis modifier la configuration et mettre à jour le système :</p>
<pre><code># nixos-rebuild edit
[...]
# nixos-rebuild switch
building Nix...
building the system configuration...
these derivations will be built:
[...]
</code></pre>
<p>L'historique indiquera alors une nouvelle génération :</p>
<pre><code># nix-env -p /nix/var/nix/profiles/system --list-generations
11 2020-11-22 22:27:47
12 2020-11-22 23:34:26 (current)
</code></pre>
<p>Il est alors possible de faire un <code>nixos-rebuild switch --rollback</code> pour revenir sur la configuration précédente. </p>
<p>En fait, les générations sont également accessibles depuis le bootloader. On peut donc rebooter la machine et sélectionner la génération à utiliser, depuis l'amorceur.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6e6f6b6f6d7072656e646f2e6769746c61622e696f2f706f7374732f7475746f5f666f6e6374696f6e6e656c5f34372f696d616765732f7475746f34372d67656e65726174696f6e732d736d616c6c2e706e67/tuto47-generations-small.png" alt="" title="Source : https://nokomprendo.gitlab.io/posts/tuto_fonctionnel_47/images/tuto47-generations-small.png"></p>
<h2 id="toc-nettoyer-les-générations-systèmes">Nettoyer les générations systèmes</h2>
<p>Avec NixOS, tout paquet ou configuration est stocké sous forme de dossier dans <code>/nix/store/</code>. L'environnement courant est simplement un ensemble de liens symboliques vers des éléments du store. Lorsqu'on "désinstalle" un paquet Nix, seuls les liens symboliques sont supprimés; les éléments du store sont conservés.</p>
<p>Ainsi, pour nettoyer complètement les générations inutilisées, il faut nettoyer le store, supprimer les générations et mettre à jour les entrées du bootloader : </p>
<pre><code># nix-collect-garbage -d
# nix-env -p /nix/var/nix/profiles/system --delete-generations
# nixos-rebuild switch
</code></pre>
<h2 id="toc-les-vérifications-automatiques">Les vérifications automatiques</h2>
<p>Si NixOS permet de revenir facilement à des configurations précédentes, il effectue même des vérifications pour éviter de générer des configurations invalides.</p>
<p>Par exemple, soit la configuration suivante du serveur graphique : </p>
<pre><code class="nix"> <span class="ss">services =</span> <span class="p">{</span>
<span class="ss">xserver =</span> <span class="p">{</span>
<span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
<span class="ss">layout =</span> <span class="s2">"fr"</span><span class="p">;</span>
displayManager<span class="o">.</span>lightdm<span class="o">.</span><span class="ss">enable =</span> <span class="no">true</span><span class="p">;</span>
<span class="o">...</span></code></pre>
<p>Nix vérifie que les options spécifiées existent bien. Par exemple, si on remplace <code>layout</code> par <code>layoute</code>,</p>
<pre><code class="nix"> <span class="ss">layoute =</span> <span class="s2">"fr"</span><span class="p">;</span></code></pre>
<p>alors on obtient l'erreur suivante :</p>
<pre><code># nixos-rebuild switch
building the system configuration...
error: The option `services.xserver.layoute' does not exist. Definition values:
- In `/etc/nixos/configuration.nix': "fr"
(use '--show-trace' to show detailed location information)
</code></pre>
<p>Nix vérifie également les valeurs de certaines options. Par exemple, si on remplace le layout <code>fr</code> par <code>fre</code>,</p>
<pre><code class="nix"> <span class="ss">layout =</span> <span class="s2">"fre"</span><span class="p">;</span></code></pre>
<p>on obtient l'erreur :</p>
<pre><code># nixos-rebuild switch
building Nix...
building the system configuration...
[...]
The value `fre' for keyboard layout is invalid.
Please check the definition in `services.xserver.layout'.
Detailed XKB compiler errors:
[...]
</code></pre>
<p>Enfin, Nix vérifie certaines assertions, notamment des dépendances entre options. Par exemple, si on désactive le serveur graphique (tout en laissant activer le gestionnaire de connection <code>lightdm</code>).</p>
<pre><code class="nix"> <span class="ss">enable =</span> <span class="no">false</span><span class="p">;</span></code></pre>
<p>on obtient l'erreur :</p>
<pre><code># nixos-rebuild switch
building Nix...
building the system configuration...
error:
Failed assertions:
- LightDM requires services.xserver.enable to be true
(use '--show-trace' to show detailed location information)
</code></pre>
<h2 id="toc-conclusion">Conclusion</h2>
<p>NixOS est basé sur un système d'environnements immuables, reproductibles et composables, ce qui permet, assez naturellement, de naviguer dans l'historique des mises-à-jour. De plus, comme ce système est déclaratif, Nix peut effectuer certaines vérifications et donc éviter de générer des configurations invalides.</p>
<p>Tout ceci permet de simplifier les mises-à-jour du système, sans avoir à utiliser un système de snapshots supplémentaire ni de prendre des précautions particulières avant de lancer la commande de mise-à-jour. Cependant, le système de mise-à-jour de NixOS ne se substitue pas non plus à un système de sauvegarde de fichiers.</p>
<div><a href="https://linuxfr.org/users/nokomprendo-3/journaux/les-rollbacks-avec-nixos-ou-comment-casser-son-systeme.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/122330/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nokomprendo-3/journaux/les-rollbacks-avec-nixos-ou-comment-casser-son-systeme#comments">ouvrir dans le navigateur</a>
</p>
nokomprendohttps://linuxfr.org/nodes/122330/comments.atom