In diesem Tutorial wird erläutert, wie Paketverwaltungsvorgänge wie das Installieren, Entfernen, Aktualisieren und Aktualisieren von Paketen mit dem Nix-Paketmanager durchgeführt werden. Wenn Sie den Nix-Paketmanager noch nicht installiert haben, lesen Sie unsere vorherige Anleitung „Nix – Ein leistungsstarker Paketmanager für Linux und Unix“ . Wie Sie vielleicht bereits wissen, müssen Sie kein Root- oder Sudo-Benutzer sein, um alle Paketverwaltungsoperationen mit Nix durchzuführen.
Erste Schritte mit Nix Package Manager
Nix hat viele Befehle. Der Hauptbefehl für die Paketverwaltung ist nix-env . Dieser Befehl wird zum Auflisten, Installieren, Aktualisieren, Zurücksetzen, Entfernen und Abfragen von Paketen verwendet. Sehen wir uns einige Befehle mit Beispielen an.
Nix-Kanäle aktualisieren
Ein Nix-Kanal ist nur eine URL, die auf einen Ort verweist, der eine Reihe von Nix-Ausdrücken und ein Manifest enthält. Standardmäßig Nixpkgs Der Kanal wird automatisch zu Ihrer Liste der „abonnierten“ Kanäle hinzugefügt, wenn Sie Nix installieren.
Führen Sie den folgenden Befehl aus, um über den Nix-Kanal auf dem Laufenden zu bleiben:
$ nix-channel --update
Beispielausgabe:
downloading Nix expressions from ‘https://d3g5gsiof5omrk.cloudfront.net/nixpkgs/nixpkgs-17.09pre108299.ec9a23332f/nixexprs.tar.xz’... downloading ‘https://d3g5gsiof5omrk.cloudfront.net/nixpkgs/nixpkgs-17.09pre108299.ec9a23332f/nixexprs.tar.xz’... [8335/8656 KiB, 206.5 KiB/s] unpacking channels...
Sie können Ihrem System wie unten gezeigt auch manuell einen Kanal hinzufügen.
$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
Vergessen Sie nach dem Abonnieren (Hinzufügen) eines Kanals nicht, den Kanal zu aktualisieren, um die neuesten verfügbaren Nix-Ausdrücke mit dem Befehl zu erhalten:
$ nix-channel --update
Um einen Kanal zu entfernen, führen Sie einfach Folgendes aus:
$ nix-channel --remove nixpkgs
Verfügbare Pakete suchen/abfragen
Um die Liste der verfügbaren Pakete im abonnierten Kanal anzuzeigen, führen Sie Folgendes aus:
$ nix-env -qa
Beispielausgabe des obigen Befehls wäre:
2048-in-terminal-2015-01-15 2bwm-0.2 389-ds-base-1.3.5.15 3dpong-0.5 4store-1.1.6 8086tiny-1.25 90secondportraits-1.01b 915resolution-0.5.3 9pfs a2jmidid-8 a2ps-4.14 a52dec-0.7.4p4 aacgain-1.9.0 aacskeys-0.4.0e aalib-1.4rc5 abc-verifier-20160818 abcde-2.7.2 abcl-1.4.0 [...]
Hier gibt "-q" die Abfrageoperation an. "-a" zeigt alle verfügbaren (d. h. installierbaren) Pakete an.
Sie können ein bestimmtes Paket wie unten gezeigt abfragen.
$ nix-env -qa chromium
Ausgabe:
chromium-58.0.3029.110
Sie können auch den folgenden Befehl verwenden, um nach einem bestimmten Paket zu suchen.
$ nix-env -qaP | grep python3-3
Beispielausgabe:
nixpkgs.python33 python3-3.3.6 nixpkgs.python33Full python3-3.3.6 nixpkgs.python34 python3-3.4.6 nixpkgs.python34Full python3-3.4.6 nixpkgs.python35 python3-3.5.3 nixpkgs.python35Full python3-3.5.3 nixpkgs.python3Full python3-3.6.1 nixpkgs.python36Full python3-3.6.1 nixpkgs.python3 python3-3.6.1
Um alle installierten Pakete aufzulisten, führen Sie einfach Folgendes aus:
$ nix-env -q
Es ist auch möglich, den Status des verfügbaren Pakets anzuzeigen. Sehen Sie sich das folgende Beispiel an.
$ nix-env -qas gcc
Beispielausgabe:
IPS gcc-5.4.0
Hier zeigt "I" an, dass das angegebene Paket installiert ist, "P" gibt an, dass das Paket auf unserem System vorhanden ist, und "S" zeigt an, ob es einen sogenannten Ersatz gibt für das Paket.
Sie können Pakete mit regulären Ausdrücken abfragen/auflisten. Hier sind einige Beispiele für reguläre Ausdrücke.
Chrom
Stimmt mit dem Paketnamen chromium und einer beliebigen Version überein.
Chrom-58,0
Entspricht dem Paketnamen Chromium und Version 58.0.
Beispiel:
$ nix-env -qa chromium-58.0
gtk\\+
Stimmt mit dem Paketnamen gtk+ überein . Das +-Zeichen muss mit einem Backslash maskiert werden, damit es nicht als Quantor interpretiert wird, und der Backslash muss wiederum mit einem weiteren Backslash maskiert werden, damit die Shell es weitergibt.
.\*
Stimmt mit jedem Paketnamen überein. Dies ist die Standardeinstellung für die meisten Befehle.
'.*zip.*'
Entspricht jedem Paketnamen, der die Zeichenfolge zip enthält . Beachten Sie die Punkte:'*zip*' funktioniert nicht, da in einem regulären Ausdruck das Zeichen * als Quantifizierer interpretiert wird.
'.*(firefox|chrom).*'
Entspricht jedem Paketnamen, der die Zeichenfolgen firefox enthält oder Chrom .
Pakete installieren
Wie ich im vorherigen Tutorial erwähnt habe, werden alle Pakete im Nix Store gespeichert , normalerweise das Verzeichnis /nix/store .
Um ein Paket zu installieren, führen Sie einfach Folgendes aus:
$ nix-env --install gcc
Oder,
$ nix-env -i gcc
Der obige Befehl installiert das neueste verfügbare gcc-Paket.
Beispielausgabe des obigen Befehls wäre:
installing ‘gcc-5.4.0’ download-from-binary-cache.pl: still waiting for ‘https://cache.nixos.org/zx0i63k1qswsfjj3kxhwk1vqa9i5ys8i.narinfo’ after 5 seconds... download-from-binary-cache.pl: still waiting for ‘https://cache.nixos.org/dyj2k6ch35r1ips4vr97md2i0yvl4r5c.narinfo’ after 5 seconds... download-from-binary-cache.pl: still waiting for ‘https://cache.nixos.org/g25gnfmd8i392ahiip9nwfv80szqbkcs.narinfo’ after 5 seconds... these paths will be fetched (38.94 MiB download, 150.45 MiB unpacked): /nix/store/7n45x3waczv1smsdkax2dy4j2zhbfk82-glibc-2.25-bin /nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0 /nix/store/f05gsfcilsczwic8aga0cgl0sygbw5lc-zlib-1.2.11 /nix/store/f111ij1fc83965m48bf2zqgiaq88fqv5-glibc-2.25 /nix/store/g25gnfmd8i392ahiip9nwfv80szqbkcs-gcc-5.4.0-man /nix/store/n5k6yqf81jp4qbay2czaqciimhxikcq8-linux-headers-4.4.10 /nix/store/vrr9maj9lqj2xwndlx3kh07vhnc111i2-glibc-2.25-dev /nix/store/xfrkm34sk0a13ha9bpki61l2k5g1v8dh-gcc-5.4.0-lib /nix/store/zx0i63k1qswsfjj3kxhwk1vqa9i5ys8i-gcc-5.4.0-info fetching path ‘/nix/store/zx0i63k1qswsfjj3kxhwk1vqa9i5ys8i-gcc-5.4.0-info’... [...] fetching path ‘/nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0’... *** Downloading ‘https://cache.nixos.org/nar/00y98z7i8a1a8d3nkv4dbbfbwwvznccbvmjdhaay0gqc0gfgb020.nar.xz’ to ‘/nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0’... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 29.5M 100 29.5M 0 0 373k 0 0:01:21 0:01:21 --:--:-- 365k building path(s) ‘/nix/store/nxx0bfg3n685fl0l3m2gbjqannh0wb9i-user-environment’ created 78 symlinks in user environment
Lassen Sie uns mit dem Befehl prüfen, ob gcc installiert ist oder nicht:
$ gcc -v
Beispielausgabe:
Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0/libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: Thread model: posix gcc version 5.4.0 (GCC)
Wie Sie in der obigen Ausgabe bemerkt haben, befindet sich gcc in einem Unterverzeichnis namens "dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0" unter /nix/store . Hier nennen wir dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0 als eindeutige Kennung. Dieses Unterverzeichnis enthält alle erforderlichen Abhängigkeiten und Bibliotheken des gcc-Pakets.
Pakete ohne Installation testen
Eine weitere bemerkenswerte Funktion des Nix-Paketmanagers ist, dass Sie ein Paket testen können, ohne es auf Ihrem System zu installieren. In der folgenden Anleitung erfahren Sie, wie Sie ein Paket testen, ohne es zu installieren.
- Wie man ein Paket testet, ohne es unter Linux zu installieren
Upgrade von Paketen
Um ein Paket auf die nächste verfügbare Version zu aktualisieren, führen Sie einfach Folgendes aus:
$ nix-env --upgrade vim
Oder einfach:
$ nix-env -u vim
Der obige Befehl aktualisiert nur vim Paket, wenn es eine „neuere“ Version gibt.
Außerdem können Sie alle installierten Pakete auf einmal aktualisieren, indem Sie den folgenden Befehl ausführen:
$ nix-env -u
Rollback-Pakete
Sie haben ein Paket installiert, aber es ist nicht nützlich oder funktioniert nicht richtig. Sie benötigen die niedrigere Version desselben Pakets. Was wirst du tun? Einfach. Setzen Sie einfach mit dem folgenden Befehl auf die vorherige funktionierende Version zurück:
$ nix-env --rollback
Pakete deinstallieren
Führen Sie zum Deinstallieren eines Pakets Folgendes aus:
$ nix-env -e gcc
Der obige Befehl deinstalliert das Paket namens gcc von Ihrem System.
Sie können mehrere Pakete wie unten gezeigt entfernen.
$ nix-env -e gcc vim
Beispielausgabe:
uninstalling ‘vim-8.0.0442’ uninstalling ‘gcc-5.4.0’ building path(s) ‘/nix/store/mxpikbq3l08379h8ik8mrj3fcw6mh6y4-user-environment’ created 6 symlinks in user environment
Unbenutzte Pakete entfernen
Wenn ein Paket deinstalliert wird, wird es nicht aus Nix Store (d. h. /nix/store/-Verzeichnis) entfernt. Nur die Symlinks werden aus Ihrem Profil entfernt.
Um deinstallierte Pakete tatsächlich zu entfernen, führen Sie Folgendes aus:
$ nix-collect-garbage -d
Beispielausgabe:
finding garbage collector roots... deleting garbage... deleting ‘/nix/store/s4jr4dc9gghldr3xza23rw0gm9kp21kl-nix-prefetch-scripts.drv’ deleting ‘/nix/store/km2gyzlvs9vkrr52wxfyhinv4r52ksrj-nix-prefetch-bzr.drv’ deleting ‘/nix/store/7mi73sdc1p349vmpb5nyxsrv8ayk5hly-bazaar-2.7.0.drv’ [...] deleting ‘/nix/store/8ckmcs9hx1qm0yxdnv892vrvx49zm1sq-setup-hook-2.0.sh’ deleting ‘/nix/store/trash’ deleting unused links... note: currently hard linking saves -0.00 MiB 1447 store paths deleted, 12.65 MiB freed
Sie sollten diesen Befehl regelmäßig ausführen, um ungenutzte Pakete von Ihrem System zu entfernen.
Und das ist alles für jetzt. Ich hoffe, Sie haben eine Vorstellung von der grundlegenden Verwendung des Nix-Paketmanagers. Was ich hier gerade behandelt habe, reicht aus, um mit dem Nix-Paketmanager zu beginnen. Natürlich gibt es viele Befehle. Weitere Informationen zu Nix-Befehlen finden Sie im offiziellen Nix-Handbuch am Ende dieser Anleitung.
Wenn Sie diesen Leitfaden nützlich finden, teilen Sie ihn bitte in Ihren sozialen, beruflichen Netzwerken und unterstützen Sie OSTechNix. Weitere gute Sachen folgen. Bleiben Sie dran!
Prost!