Nächste: , Vorige: , Nach oben: Zubehör   [Inhalt][Index]


9.5 guix import aufrufen

Der Befehl guix import ist für Leute hilfreich, die ein Paket gerne mit so wenig Arbeit wie möglich zur Distribution hinzufügen würden – ein legitimer Anspruch. Der Befehl kennt ein paar Sammlungen, aus denen mit ihm Paketmetadaten „importiert“ werden können. Das Ergebnis ist eine Paketdefinition oder eine Vorlage dafür in dem uns bekannten Format (siehe Pakete definieren).

Die allgemeine Syntax lautet:

guix import [Globale-Optionen…] Importer Paket [Optionen…]

Der Importer gibt die Quelle an, aus der Paketmetadaten importiert werden, und die Optionen geben eine Paketbezeichnung und andere vom Importer abhängige Daten an. guix import verfügt selbst über folgende Globale-Optionen:

--insert=Datei
-i Datei

Die vom Importer erzeugten Paketdefinitionen in die angegebene Datei schreiben, entweder in alphabetischer Reihenfolge unter bestehenden Paketdefinitionen oder andernfalls am Dateiende.

Manche Importer setzen voraus, dass der Befehl gpgv ausgeführt werden kann. Sie funktionieren nur, wenn GnuPG installiert und im $PATH enthalten ist; falls nötig können Sie guix install gnupg ausführen.

Derzeit sind folgende „Importer“ verfügbar:

gnu

Metadaten für das angegebene GNU-Paket importieren. Damit wird eine Vorlage für die neueste Version dieses GNU-Pakets zur Verfügung gestellt, einschließlich der Prüfsumme seines Quellcode-Tarballs, seiner kanonischen Zusammenfassung und seiner Beschreibung.

Zusätzliche Informationen wie Paketabhängigkeiten und seine Lizenz müssen noch manuell ermittelt werden.

Zum Beispiel liefert der folgende Befehl eine Paketdefinition für GNU Hello:

guix import gnu hello

Speziell für diesen Importer stehen noch folgende Befehlszeilenoptionen zur Verfügung:

--key-download=Richtlinie

Die Richtlinie zum Umgang mit fehlenden OpenPGP-Schlüsseln beim Verifizieren der Paketsignatur (auch „Beglaubigung“ genannt) festlegen, wie bei guix refresh. Siehe --key-download.

pypi

Metadaten aus dem Python Package Index importieren. Informationen stammen aus der JSON-formatierten Beschreibung, die unter pypi.python.org verfügbar ist, und enthalten meistens alle relevanten Informationen einschließlich der Abhängigkeiten des Pakets. Für maximale Effizienz wird empfohlen, das Hilfsprogramm unzip zu installieren, damit der Importer „Python Wheels“ entpacken und daraus Daten beziehen kann.

Der folgende Befehl importiert Metadaten für die neueste Version des Python-Pakets namens itsdangerous:

guix import pypi itsdangerous

Sie können auch um eine bestimmte Version bitten:

guix import pypi itsdangerous@1.1.0
--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

gem

Metadaten von RubyGems importieren. Informationen kommen aus der JSON-formatierten Beschreibung, die auf rubygems.org verfügbar ist, und enthält die relevantesten Informationen einschließlich der Laufzeitabhängigkeiten. Dies hat aber auch Schattenseiten – die Metadaten unterscheiden nicht zwischen Zusammenfassungen und Beschreibungen, daher wird dieselbe Zeichenkette für beides eingesetzt. Zudem fehlen Informationen zu nicht in Ruby geschriebenen Abhängigkeiten, die benötigt werden, um native Erweiterungen zu in Ruby geschriebenem Code zu erstellen. Diese herauszufinden bleibt dem Paketentwickler überlassen.

Der folgende Befehl importiert Metadaten aus dem Ruby-Paket rails.

guix import gem rails

Sie können auch um eine bestimmte Version bitten:

guix import gem rails@7.0.4
--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

minetest

Importiert Metadaten aus der ContentDB. Informationen werden aus den JSON-formatierten Metadaten genommen, die über die Programmierschnittstelle („API“) von ContentDB angeboten werden, und enthalten die relevantesten Informationen wie zum Beispiel Abhängigkeiten. Allerdings passt das Ergebnis nicht ganz. Lizenzinformationen sind oft unvollständig. Der Commit-Hash fehlt manchmal. Die importierten Beschreibungen sind in Markdown formatiert, aber Guix braucht stattdessen Texinfo-Auszeichnungen. Texturpakete und Teilspiele werden nicht unterstützt.

Der folgende Befehl importiert Metadaten für die Mesecons-Mod von Jeija:

guix import minetest Jeija/mesecons

Man muss den Autorennamen nicht angeben:

guix import minetest mesecons
--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

cpan

Importiert Metadaten von MetaCPAN. Informationen werden aus den JSON-formatierten Metadaten genommen, die über die Programmierschnittstelle („API“) von MetaCPAN angeboten werden, und enthalten die relevantesten Informationen wie zum Beispiel Modulabhängigkeiten. Lizenzinformationen sollten genau nachgeprüft werden. Wenn Perl im Store verfügbar ist, wird das Werkzeug corelist benutzt, um Kernmodule in der Abhängigkeitsliste wegzulassen.

Folgender Befehl importiert Metadaten für das Perl-Modul Acme::Boolean:

guix import cpan Acme::Boolean
cran

Metadaten aus dem CRAN importieren, der zentralen Sammlung für die statistische und grafische Umgebung GNU R.

Informationen werden aus der Datei namens DESCRIPTION des Pakets extrahiert.

Der folgende Befehl importiert Metadaten für das Cairo-R-Paket:

guix import cran Cairo

Sie können auch um eine bestimmte Version bitten:

guix import cran rasterVis@0.50.3

Wird zudem --recursive angegeben, wird der Importer den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für all die Pakete erzeugen, die noch nicht Teil von Guix sind.

Wird --style=specification angegeben, wird der Importer Paketdefinitionen erzeugen, deren Eingaben als Paketspezifikationen statt als Referenzen auf Paketvariable vorliegen. Das ist nützlich, wenn die erzeugten Paketdefinitionen in bestehende, nutzereigene Module eingefügt werden, weil dann die Liste der benutzten Paketmodule nicht angepasst werden muss. Die Vorgabe ist --style=variable.

Wird --prefix=license: angegeben, stellt der Importer jedem für eine Lizenz stehenden Atom das Präfix license: voran, damit (guix licenses) mit diesem Präfix importiert werden kann.

Wird --archive=bioconductor angegeben, werden Metadaten vom Bioconductor importiert, einer Sammlung von R-Paketen zur Analyse und zum Verständnis von großen Mengen genetischer Daten in der Bioinformatik.

Informationen werden aus der Datei namens DESCRIPTION im Archiv des Pakets extrahiert.

Der folgende Befehl importiert Metadaten für das R-Paket GenomicRanges:

guix import cran --archive=bioconductor GenomicRanges

Schließlich können Sie auch solche R-Pakete importieren, die noch nicht auf CRAN oder im Bioconductor veröffentlicht wurden, solange sie in einem Git-Repository stehen. Benutzen Sie --archive=git gefolgt von der URL des Git-Repositorys.

guix import cran --archive=git https://github.com/immunogenomics/harmony
texlive

Informationen über TeX-Pakete, die Teil der TeX-Live-Distribution sind, aus der Datenbank von TeX Live importieren.

Paketinformationen werden der Paketdatenbank von TeX Live entnommen. Bei ihr handelt es sich um eine reine Textdatei, die im texlive-scripts-Paket enthalten ist. Der Quellcode wird von unter Umständen mehreren Stellen im SVN-Repository des TeX-Live-Projekts heruntergeladen. Beachten Sie, dass deswegen SVN installiert und in $PATH zu finden sein muss; führen Sie dazu gegebenenfalls guix install subversion aus.

Der folgende Befehl importiert Metadaten für das TeX-Paket fontspec:

guix import texlive fontspec

Zu den zusätzlichen Optionen gehören:

--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

json

Paketmetadaten aus einer lokalen JSON-Datei importieren. Betrachten Sie folgende Beispiel-Paketdefinition im JSON-Format:

{
  "name": "hello",
  "version": "2.10",
  "source": "mirror://gnu/hello/hello-2.10.tar.gz",
  "build-system": "gnu",
  "home-page": "https://www.gnu.org/software/hello/",
  "synopsis": "Hello, GNU world: An example GNU package",
  "description": "GNU Hello prints a greeting.",
  "license": "GPL-3.0+",
  "native-inputs": ["gettext"]
}

Die Felder sind genauso benannt wie bei einem <package>-Verbundstyp (siehe Pakete definieren). Referenzen zu anderen Paketen stehen darin als JSON-Liste von mit Anführungszeichen quotierten Zeichenketten wie guile oder guile@2.0.

Der Importer unterstützt auch eine ausdrücklichere Definition der Quelldateien mit den üblichen Feldern eines <origin>-Verbunds:

{
  …
  "source": {
    "method": "url-fetch",
    "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
    "sha256": {
      "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
    }
  }
  …
}

Der folgende Befehl liest Metadaten aus der JSON-Datei hello.json und gibt einen Paketausdruck aus:

guix import json hello.json
hackage

Metadaten aus Hackage, dem zentralen Paketarchiv der Haskell-Gemeinde, importieren. Informationen werden aus Cabal-Dateien ausgelesen. Darin sind alle relevanten Informationen einschließlich der Paketabhängigkeiten enthalten.

Speziell für diesen Importer stehen noch folgende Befehlszeilenoptionen zur Verfügung:

--stdin
-s

Eine Cabal-Datei von der Standardeingabe lesen.

--no-test-dependencies
-t

Keine Abhängigkeiten übernehmen, die nur von Testkatalogen benötigt werden.

--cabal-environment=Aliste
-e Aliste

Aliste muss eine assoziative Liste der Scheme-Programmiersprache sein, die die Umgebung definiert, in der bedingte Ausdrücke von Cabal ausgewertet werden. Dabei werden folgende Schlüssel akzeptiert: os, arch, impl und eine Zeichenkette, die dem Namen einer Option (einer „Flag“) entspricht. Der mit einer „Flag“ assoziierte Wert muss entweder das Symbol true oder false sein. Der anderen Schlüsseln zugeordnete Wert muss mit der Definition des Cabal-Dateiformats konform sein. Der vorgegebene Wert zu den Schlüsseln os, arch and impl ist jeweils ‘linux’, ‘x86_64’ bzw. ‘ghc’.

--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

Der folgende Befehl importiert Metadaten für die neuste Version des Haskell-„HTTP“-Pakets, ohne Testabhängigkeiten zu übernehmen und bei Übergabe von false als Wert der Flag ‘network-uri’:

guix import hackage -t -e "'((\"network-uri\" . false))" HTTP

Eine ganz bestimmte Paketversion kann optional ausgewählt werden, indem man nach dem Paketnamen anschließend ein At-Zeichen und eine Versionsnummer angibt wie in folgendem Beispiel:

guix import hackage mtl@2.1.3.1
stackage

Der stackage-Importer ist ein Wrapper um den hackage-Importer. Er nimmt einen Paketnamen und schaut dafür die Paketversion nach, die Teil einer Stackage-Veröffentlichung mit Langzeitunterstützung (englisch „Long-Term Support“, kurz LTS) ist, deren Metadaten er dann mit dem hackage-Importer bezieht. Beachten Sie, dass es Ihre Aufgabe ist, eine LTS-Veröffentlichung auszuwählen, die mit dem von Guix benutzten GHC-Compiler kompatibel ist.

Speziell für diesen Importer stehen noch folgende Befehlszeilenoptionen zur Verfügung:

--no-test-dependencies
-t

Keine Abhängigkeiten übernehmen, die nur von Testkatalogen benötigt werden.

--lts-version=Version
-l Version

Version ist die gewünschte Version der LTS-Veröffentlichung. Wird keine angegeben, wird die neueste benutzt.

--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

Der folgende Befehl importiert Metadaten für dasjenige Haskell-„HTTP“-Paket, das in der LTS-Stackage-Veröffentlichung mit Version 7.18 vorkommt:

guix import stackage --lts-version=7.18 HTTP
elpa

Metadaten aus der Paketsammlung „Emacs Lisp Package Archive“ (ELPA) importieren (siehe Packages in The GNU Emacs Manual).

Speziell für diesen Importer stehen noch folgende Befehlszeilenoptionen zur Verfügung:

--archive=Repo
-a Repo

Mit Repo wird die Archiv-Sammlung (ein „Repository“) bezeichnet, von dem die Informationen bezogen werden sollen. Derzeit sind die unterstützten Repositorys und ihre Bezeichnungen folgende:

  • - GNU, bezeichnet mit gnu. Dies ist die Vorgabe.

    Pakete aus elpa.gnu.org wurden mit einem der Schlüssel im GnuPG-Schlüsselbund in share/emacs/25.1/etc/package-keyring.gpg (oder einem ähnlichen Pfad) des emacs-Pakets signiert (siehe ELPA-Paketsignaturen in The GNU Emacs Manual).

  • - NonGNU, bezeichnet mit nongnu.
  • - MELPA-Stable, bezeichnet mit melpa-stable.
  • - MELPA, bezeichnet mit melpa.
--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

crate

Metadaten aus der Paketsammlung crates.io für Rust crates.io importieren, wie Sie in diesem Beispiel sehen:

guix import crate blake2-rfc

Mit dem Crate-Importer können Sie auch eine Version als Zeichenkette angeben:

guix import crate constant-time-eq@0.1.0

Zu den zusätzlichen Optionen gehören:

--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

--recursive-dev-dependencies

Wenn Sie --recursive-dev-dependencies angeben, werden zudem auch die „dev-dependencies“ (Development Dependencies) von rekursiv importierten Paketen benutzt und importiert.

--allow-yanked

Wenn es keine nicht zurückgenommene („yanked“) Version einer Crate gibt, wird die neueste zurückgenommene benutzt statt abzubrechen.

elm

Metadaten aus der Paketsammlung package.elm-lang.org für Elm importieren, wie Sie in diesem Beispiel sehen:

guix import elm elm-explorations/webgl

Mit dem Elm-Importer können Sie auch eine Version als Zeichenkette angeben:

guix import elm elm-explorations/webgl@1.1.3

Zu den zusätzlichen Optionen gehören:

--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

opam

Metadaten aus der Paketsammlung OPAM der OCaml-Gemeinde importieren.

Zu den zusätzlichen Optionen gehören:

--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

composer

Metadaten aus dem Paketarchiv Composer, das die PHP-Gemeinschaft verwendet, importieren.

guix import composer phpunit/phpunit

Zu den zusätzlichen Optionen gehören:

--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

--repo

Vorgegeben ist, nach Paketen im offiziellen OPAM-Repository zu suchen. Mit dieser Befehlszeilenoption, die mehr als einmal angegeben werden kann, können Sie andere Repositorys hinzufügen, in denen nach Paketen gesucht wird. Als gültige Argumente akzeptiert werden:

  • der Name eines bekannten Repositorys, entweder opam, coq (äquivalent zu coq-released), coq-core-dev, coq-extra-dev oder grew.
  • die URL eines Repository, wie sie der Befehl opam repository add erfordert (zum Beispiel wäre https://opam.ocaml.org die URL, die dem Namen opam oben entspricht).
  • den Pfad zur lokalen Kopie eines Repositorys (ein Verzeichnis mit einem Unterverzeichnis packages/).

Die an diese Befehlszeilenoption übergebenen Repositorys sind in der Reihenfolge Ihrer Präferenz anzugeben. Die zusätzlich angegebenen Repositorys ersetzen nicht das voreingestellte Repository opam; es bleibt immer als letzte Möglichkeit stehen.

Beachten Sie ebenso, dass Versionsnummern mehrerer Repositorys nicht verglichen werden, sondern einfach das Paket aus dem ersten Repository (von links nach rechts), das mindestens eine Version des angeforderten Pakets enthält, genommen wird und die importierte Version der neuesten aus nur diesem Repository entspricht.

go

Metadaten für ein Go-Modul von proxy.golang.org importieren.

guix import go gopkg.in/yaml.v2

Es ist möglich, bei der Paketspezifikation ein Suffix @VERSION anzugeben, um diese bestimmte Version zu importieren.

Zu den zusätzlichen Optionen gehören:

--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

--pin-versions

Wenn Sie diese Option verwenden, behält der Importer genau diese Version der Go-Modul-Abhängigkeiten bei, statt die neuesten verfügbaren Versionen zu benutzen. Das kann hilfreich sein, wenn Sie versuchen, Pakete zu importieren, die für deren Erstellung rekursiv von alten Versionen ihrer selbst abhängen. Wenn Sie diesen Modus nutzen, wird das Symbol für das Paket durch Anhängen der Versionsnummer an seinen Namen gebildet, damit mehrere Versionen desselben Pakets gleichzeitig existieren können.

egg

Metadaten für CHICKEN-Eggs importieren. Die Informationen werden aus den PAKET.egg-Dateien genommen, die im Git-Repository eggs-5-all stehen. Jedoch gibt es dort nicht alle Informationen, die wir brauchen: Ein Feld für die Beschreibung (description) fehlt und die benutzten Lizenzen sind ungenau (oft wird BSD angegeben statt BSD-N).

guix import egg sourcehut

Sie können auch um eine bestimmte Version bitten:

guix import egg arrays@1.0

Zu den zusätzlichen Optionen gehören:

--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

hexpm

Metadaten aus der Paketsammlung hex.pm für Erlang und Elixir hex.pm importieren, wie Sie in diesem Beispiel sehen:

guix import hexpm stun

Der Importer versucht, das richtige Erstellungssystem für das Paket zu erkennen.

Mit dem hexpm-Importer können Sie auch eine Version als Zeichenkette angeben:

guix import hexpm cf@0.3.0

Zu den zusätzlichen Optionen gehören:

--recursive
-r

Den Abhängigkeitsgraphen des angegebenen Pakets beim Anbieter rekursiv durchlaufen und Paketausdrücke für alle solchen Pakete erzeugen, die es in Guix noch nicht gibt.

guix import verfügt über eine modulare Code-Struktur. Mehr Importer für andere Paketformate zu haben, wäre nützlich, und Ihre Hilfe ist hierbei gerne gesehen (siehe Mitwirken).


Nächste: guix refresh aufrufen, Vorige: guix hash aufrufen, Nach oben: Zubehör   [Inhalt][Index]