NixOS: Dritter Teil - Paketmanagement

  Ralf Hersel   Lesezeit: 5 Minuten  🗪 6 Kommentare

Bei meiner Selbsterkundung von NixOS geht es dieses Mal um das Paketmanagement.

nixos: dritter teil - paketmanagement

Weiter geht es mit meinen NixOS-Versuchen. Im ersten Teil kam ich gar nicht damit zurecht. Im zweiten Teil war ich begeistert, weil ich entdeckte, wie man Pakete temporär installieren kann. Dazwischen gab es noch einen ausführlichen Erfahrungsbericht von Nikolaus Thiel. In diesem dritten Teil schaue ich etwas genauer auf das Paket-Management. Ich bitte alle Leser:innen zu berücksichtigen, dass ich diese Artikelserie als Dokumentation meiner Einarbeitung in diese aussergewöhnliche Distribution betrachte.

Als ersten Schritte habe ich ein Upgrade gefahren: sudo nixos-rebuild switch --upgrade, weil ich nicht weiss, ob NixOS einen auf anstehende Updates hinweist. Es kann ja nicht schaden, das ganze System auf den neusten Stand zu bringen. In der zweiten Folge habe ich den Befehl nix-shell -p [Paketname] vorgestellt, mit dem man ein Paket nur für die Dauer einer Shell-Session installiert. Nun bin ich gespannt, was es mit den beiden anderen Varianten auf sich hat.

Um zu erfahren, wie das Paket-Management mit Nix (dem Paketmanager von NixOS) funktioniert, lohnt sich auf jeden Fall ein Blick in das entsprechende Kapitel der Dokumentation. Dort erfährt man, dass es zwei Varianten gibt, nämlich die deklarative und die ad hoc Installation. So wie ich es verstehe, ist die ad hoc Methode der Normalfall, bei dem man ein gewünschtes Paket über einen Befehl installiert. Bei der deklarativen Methode werden alle gewünschten Pakete in die Datei /etc/nixos/configuration.nix eingetragen.

Deklarativ

Dafür öffnet man die erwähnte Datei mit Root-Rechten und trägt dort zum Beispiel diese Zeile ein, falls man den Terminal-Editor Micro installieren möchte:

environment.systemPackages = [ pkgs.micro ];

Dabei muss man darauf achten, dass es den Eintrag environment.systemPackages in der standardmässigen Datei configuration.nix bereits gibt. Fügt man ihn erneut hinzu, führt das zu Fehlermeldungen. Daher sucht man in der Datei den vorhandenen Eintrag, der z. B. so aussehen könnte:

environment.systemPackages =
  [ pkgs.thunderbird
    pkgs.emacs
    pkgs.micro
  ];

Dann kann man das zu installierende Paket in der Liste hinzufügen. Jetzt ruft man nixos-rebuild switch auf, um es geschehen zu lassen.

Ad hoc

Die ad hoc Methode entspricht eher dem, was man von anderen GNU/Linux-Distribution kennt. Man führt mit Root-Rechten z. B. diesen Befehl aus: sudo nix-env -iA nixos.[Paketname]. Wie man den Paketnamen herausfindet, habe ich im zweiten NixOS-Artikel beschrieben: hier der Such-Link für den Editor Micro. So sieht das im Terminal aus:

Man kann auch den Befehl sudo nix-env -i micro verwenden, der jedoch länger dauert, weil der Paketname nicht eindeutig ist und zuerst mit 80'000 Nix-Pakete abgeglichen werden muss.

Um nachzusehen, welche Anwendungen man über diese Methode installiert hat, dient der Befehl sudo nix-env --query --installed

Im Gegensatz zum oben beschriebenen temporären Installieren führen diese beiden Verfahren zur permanenten Installation der Pakete.

Um das Beispiel-Paket 'micro' zu deinstallieren, kommt dieser Befehl zum Einsatz: sudo nix-env -e micro. Hat man die deklarative Methode verwendet, entfernt man den Paket-Eintrag aus der Liste der environment-systemPackes in der configuration.nix.

Mich hat das Schreiben dieses Artikels wieder zwei Schritte weiter gebracht, wenn es um das Verstehen von NixOS geht. Ich hoffe, das hat anderen Nix-Anfänger:innen auch geholfen.

Quelle: https://nixos.org/manual/nixos/stable/

Tags

NixOS, Nix, Paketmanagement

Sebastian
Geschrieben von Sebastian am 26. Juli 2023 um 12:56

Trägt der nix-env Befehl das Paket auch in die config.nix ein? Wie verhält sich diese Variante bei Paketupdates? Habe gehört man kann mit nicht auch Config files managen. Klang so für mich im entsprechenden Focus:on Linux Podcast an. Ziemlich am Ende.

Ralf Hersel
Geschrieben von Ralf Hersel am 26. Juli 2023 um 18:35

Nein, wird nicht in die config.nix eingetragen. Das ist so:

  • nix-shell ist flüchtig (Pakete ist wieder weg, sobald man die Shell schliesst)
  • nix-env ist ein User Environment (Paket lebt nur in dieser Umgebung, aber dauerhaft)
  • configuration.nix ist dauerhaft und allumfassend
kaligule
Geschrieben von kaligule am 26. Juli 2023 um 21:02

Nein, nur der user schreibt die konfig (abgesehen von dem autogenerierten startfile, in dem ein bisschen hardwarespeziefisches drin steht). Deshalb benutze ich den env-Befehl auch nicht. Config editieren ist nachvollziehbarer und die Änderung landet früher oder später in allen meinen Nixos Geräten.

Mike
Geschrieben von Mike am 26. Juli 2023 um 18:46

Moin. Bzgl. ad-hoc vs. deklarativ würde ich eher sagen:

Auf Systemen, auf denen nur Nix als Paketmanager installiert ist, ist ad-hoc der Normalfall (weil einzige Möglichkeit) für die Paketinstallation.

Auf Systemen, auf denen Nix mit home-manager und/oder nix-darwin installiert ist, bzw. NixOS, dürfte zu 99% deklarativ das Mittel der Wahl sein. ad-hoc geht dann zwar auch noch, aber ich persönlich kann da nicht den Vorteil sehen (nicht, daß es den nicht geben könnte).

Bei Development-Environments (z.B. via flake.nix oder shell.nix in einem Projekt) wäre deklarativ ebenfalls der Normalfall.

Nick Tsobe-Geistert
Geschrieben von Nick Tsobe-Geistert am 1. August 2023 um 15:23

Ich finde es wirklich toll, dass du dich mit NixOS beschäftigst, aber ich muss ehrlich sagen mir gefällt die Art und Weise wie du darüber schreibst überhaupt nicht. Anstatt dich ernsthaft mit der Materie zu beschäftigen wählst du den mit dem Kopf durch die Wand Ansatz und lässt in deinen Artikeln häufiger mal unrecherchiertes Halbwissen einfließen, dass zwar toll klingt aber eben leider auch einen komplett falschen Eindruck davon erzeugt, was NixOS ist oder wie Leute es wirklich verwenden.

Im ersten Artikel bist du zuerst daran gescheitert zuerst die Fehlermeldungen des Terminals und danach daran die Anleitung richtig zu lesen.

Im zweiten Artikel scheinst du schon wieder nicht die Ausgabe des Terminals lesen zu wollen, welche mit "these 129 derivations will be built:", sondern beschwerst dich über die Länge und Unverständlichkeit der Ausgabe und lässt dann noch die Aussage liegen, dass man eine dicke Festplatte braucht, was ebenfalls so nicht stimmt.

Und im dritten Artikel erklärst du zwar wie Paketmanagement funktioniert und dass deinem Verständnis nach die Ad Hoc Methode der Standard ist, was auch nicht stimmt und hier schon in anderen Kommentaren wundervoll erklärt wurde.

Deine Artikel zu dem Thema lesen sich, als ob du eine Personifikation von Cunninghams Law bist und jedes mal wenn ich einen Artikel von dir zum Thema NixOS gelesen habe wünsche ich mir, dass gnulinux.ch keine große Reichweite hat.

Das was du hier veröffentlichst lässt NixOS ziemlich schlecht erscheinen und das scheint daran zu liegen, dass du dich nicht tief genug damit beschäftigst, bevor du einen Artikel schreibst.

Hör doch bitte auf Artikel über Themen zu veröffentlichen mit denen du dich nur halbherzig beschäftigt hast oder die du nicht verstehst und nimm dir doch lieber die Zeit mal länger als nur ein paar Minuten zu investieren bevor du gleich wieder einen Artikel schreibst, den unerfahrene Leser glauben und für den dich Leute die sich damit auskennen auslachen.

Ralf Hersel
Geschrieben von Ralf Hersel am 2. August 2023 um 23:05

Lieber Nick, vielen Dank für Deinen ausführlichen Kommentar und für Dein Lob, dass ich mich mit NixOS beschäftigt habe. Als Community-Mitglied, dass seine Freizeit mit dem Schreiben von Artikeln für Euch alle verbringt, ist mir das viel wert. Mir gefällt, dass Du die Aussage von Ward Cunningham erwähnst, die er selbst widerlegt hat. Für mich ist NixOS eine spannende Distribution, die ich jeder und jedem zur Entdeckung empfehlen möchte. Und nein, ich werde nicht aufhören, Neues für die Community zu entdecken.