English | Deutsch

Installation von Paketen auf Betriebssystemebene mit Nix

Installieren Sie jedes Paket mit Nix. Erfahren Sie, wie es funktioniert und wie Sie von apt-get dorthin wechseln.

December 14, 2023 4 Min Lesezeit
Installation von Paketen auf Betriebssystemebene mit Nix
Installation von Paketen auf Betriebssystemebene mit Nix

Simon Pfeiffer

Head of Product @ Codesphere

Der Nix Package Manager ist ein leistungsfähiges Werkzeug zur Verwaltung von Paketen auf Unix-ähnlichen Betriebssystemen. Mit Nix können User Software auf eine vorhersehbare, reproduzierbare und zuverlässige Weise installieren. Er unterscheidet sich von traditionellen Paketmanagern wie apt-get, yum und pacman dadurch, dass er die Koexistenz mehrerer Softwareversionen auf demselben System ohne Konflikte ermöglicht.

Wie Nix funktioniert

Nix funktioniert durch die Installation von Paketen in den Nix-Speicher, der sich normalerweise unter /nix/store befindet. Jedes Paket im Store hat einen eindeutigen Pfad, der seinen Namen, seine Version und einen Hash der Abhängigkeiten enthält:

  1. Atomare Upgrades und Rollbacks: Änderungen am System werden atomar durchgeführt. Wenn die Installation eines Pakets fehlschlägt, bleibt das System in seinem vorherigen Zustand. Außerdem können Sie bei Bedarf zu einer früheren Konfiguration zurückkehren.
  2. Mehrere Versionen: Verschiedene Anwendungen können verschiedene Versionen desselben Pakets verwenden, ohne dass es zu Konflikten kommt.
  3. Reproduzierbare Umgebung: Bei einem Nix-Ausdruck baut Nix immer die gleiche Umgebung, unabhängig vom aktuellen Zustand des Systems.

Darüber hinaus macht Nix nach der Installation eines Pakets dessen Befehle automatisch vom Terminal aus verfügbar, indem es den Installationsort zur Umgebungsvariablen PATH hinzufügt. Das bedeutet, dass Sie die Befehle, die das Paket bereitstellt, sofort nach der Installation verwenden können, genau wie Sie es von anderen Paketmanagern gewohnt sind.

Nix verwenden

Nix wird mit Codesphere vorinstalliert. Sie können Pakete mit dem Befehl nix-env installieren. Um zum Beispiel hello zu installieren, ein Programm, das eine freundliche Begrüßung erzeugt, führen Sie (gemäß den Anweisungen des Pakets) aus:

nix-env -iA nixpkgs.hello

Sie können Pakete mit der Option -e entfernen:

nix-env -e hello

Und Sie können Pakete mit der Option -u aktualisieren:

nix-env -uA nixpkgs.hello

Eine Liste der verfügbaren Nix-Pakete mit Installationsanweisungen finden Sie auf deren Suche: https://search.nixos.org/packages

Paketnamen und -versionen in Nix

Bitte beachten Sie, dass sich die Paketnamen in Nix von denen in anderen Paketmanagern wie apt-get unterscheiden können. Die genauen Namen und Versionen der in Nix verfügbaren Pakete können Sie im Nix-Paketindex auf der genannten NixOS-Website einsehen.

Einige Pakete in Nix können anders benannt sein oder andere Versionen haben als in anderen Paketmanagern, da die Nix-Community die Pakete unabhängig voneinander pflegt.

Projektspezifische Umgebungen mit Nix erstellen

Im Gegensatz zu traditionellen Paketmanagern, die Entwicklungswerkzeuge und Bibliotheken systemweit installieren, ermöglicht Nix die Erstellung von projektspezifischen Umgebungen mit den erforderlichen Werkzeugen und Bibliotheken. Dies kann mit dem Befehl nix-shell erreicht werden.

Um eine projektspezifische Umgebung zu erstellen, müssen Sie in Ihrem Projektverzeichnis eine Datei shell.nix erstellen, in der die erforderlichen Abhängigkeiten aufgeführt sind. Hier ist ein einfaches Beispiel:

{ pkgs ? import <nixpkgs> {} }:

pkgs.mkShell {
  buildInputs = [ pkgs.python3 pkgs.python3Packages.numpy ];
}

Sie können dann nix-shell in Ihrem Projektverzeichnis ausführen, um eine Shell mit Python und NumPy bereitzustellen. In dieser Umgebung können Sie sicher sein, dass Sie die richtigen Versionen Ihrer Abhängigkeiten haben, unabhängig vom Zustand des restlichen Systems.

Sie können dies auch in unseren CI-Pipelines mit einer Syntax ähnlich der folgenden verwenden: nix-shell --run "your command".

Erstellen Sie Ihre eigenen Pakete

Sie können auch .nix-Dateien verwenden, um Ihre eigenen Pakete zu erstellen oder sogar Dinge mit anderen Paketmanagern zu installieren, die selbst ein Nix-Paket sind.

Sie können dies zum Beispiel nutzen, um Java-Quarkus zu installieren, indem Sie die folgende shell.nix-Datei hinzufügen:

{pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
  packages = with pkgs; [ jbang ];
  shellHook = ''
    echo ">>>> Making sure quarkus is installed"
	jbang trust add https://repo1.maven.org/maven2/io/quarkus/quarkus-cli/
    jbang app install --fresh --force quarkus@quarkusio
    echo ">>>> Updating PATH"
    export PATH=~/.jbang/bin/:$PATH
    echo ">>>> You can start the debug mode via 'quarkus dev' (this project was created via 'quarkus create')."
  '';
}

Auffinden von Legacy-Paketen

Manchmal kann es schwierig sein, Paketversionen für ältere Legacy-Versionen einiger Frameworks wie php zu finden, weil sie nicht im Nix-Kernrepository gepflegt werden. Wir fanden diese von der Gemeinschaft verwaltete Suchmaschine in diesen Fällen sehr hilfreich: https://lazamar.co.uk/nix-versions/?channel=nixpkgs-unstable&package=

Seien Sie vorsichtig, manche Pakete werden besser gewartet als andere.

Umstellung von apt-get auf Nix

Wenn Sie es gewohnt sind, apt-get oder einen anderen traditionellen Paketmanager zu benutzen, gibt es ein paar wichtige Unterschiede, die Sie beim Wechsel zu Nix beachten sollten.

  • Installationsort: Wie bereits erwähnt, installiert Nix die Pakete in den Nix-Speicher und nicht in gewöhnliche Verzeichnisse wie /usr/bin.
  • Root-Rechte: Sie brauchen kein sudo, um Pakete mit Nix zu installieren. Das liegt daran, dass Nix Pakete in den Nix-Speicher Ihres Users installiert, nicht systemweit.
  • Mehrere Versionen: Nix erlaubt es Ihnen, mehrere Versionen eines Pakets gleichzeitig zu installieren. Dies unterscheidet sich von apt-get, mit dem nur eine Version gleichzeitig installiert werden kann.
  • Systemkonfiguration: Nix geht über die Paketverwaltung hinaus und kann Ihre Systemkonfiguration verwalten. Dies ist eine fortgeschrittene Funktion, die den Rahmen dieser Einführung sprengen würde.

Abhilfe für NX Die folgenden Projekte sind an mehreren Standorten definiert:

Es scheint, dass einige Frameworks wie NX sich über Pakete beschweren, die über Nix in unserem .codesphere-internal-Ordner installiert wurden, der in jedem Workspace existiert.

Dies scheint ein Fehler auf ihrer Seite zu sein. https://github.com/nrwl/nx/issues/20959#issue-2060897714 Es gibt eine einfache Lösung, indem Sie .codesphere-internal/* in Ihre .nxignore oder alternativ .gitignore Datei einfügen.

Über den Autor

Installation von Paketen auf Betriebssystemebene mit Nix

Simon Pfeiffer

Head of Product @ Codesphere

Simon ist verantwortlich für unser Produktmarketing und die Roadmap. Er ist ein ehemaliger Green-Tech-Gründer und IT-Berater bei KPMG. Er berichtet über Trends und Erkenntnisse aus dem Aufbau von Codesphere.

Weitere Beiträge

Deployment von Landscapes auf Codesphere

Deployment von Landscapes auf Codesphere

Lernen Sie, wie Sie mehrere Dienste, die unabhängig voneinander vertikal und horizontal skaliert werden können, innerhalb eines einzigen Workspace deployen und runen können. Geeignet für das Hosting ganzer Anwendungslandschaften.

Monitoring & Alerting

Monitoring & Alerting

Erfahren Sie, wie Sie auf das in Codesphere integrierte Ressourcen Monitoring zugreifen und die Betriebszeit Ihrer Anwendungen überprüfen können.

Pfadbasiertes Routing

Pfadbasiertes Routing

Erfahren Sie, wie Sie mehrere unabhängige Anwendungen mit einer einzigen Domäne verbinden, indem Sie verschiedene Pfade mit unterschiedlichen Workspaces verknüpfen