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


7.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 Importer 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.

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 das Python-Paket namens itsdangerous:

guix import pypi itsdangerous
--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
--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

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 --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

Metadaten aus CTAN, dem umfassenden TeX-Archivnetzwerk, herunterladen, was für TeX-Pakete benutzt wird, die Teil der TeX-Live-Distribution sind.

Informationen über das Paket werden über die von CTAN angebotene XML-Programmierschnittstelle bezogen, wohingegen der Quellcode aus dem SVN-Repository des TeX-Live-Projekts heruntergeladen wird. Das wird so gemacht, weil CTAN keine versionierten Archive vorhält.

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

guix import texlive fontspec

Wenn --archive=VERZEICHNIS angegeben wird, wird der Quellcode nicht aus dem Unterverzeichnis latex des texmf-dist/source-Baums im SVN-Repository von TeX Live heruntergeladen, sondern aus dem angegebenen Schwesterverzeichnis im selben Wurzelverzeichnis.

Der folgende Befehl importiert Metadaten für das Paket ifxetex aus CTAN und lädt die Quelldateien aus dem Verzeichnis texmf/source/generic:

guix import texlive --archive=generic ifxetex
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
nix

Metadaten aus einer lokalen Kopie des Quellcodes der Nixpkgs-Distribution importieren18. Paketdefinitionen in Nixpkgs werden typischerweise in einer Mischung aus der Sprache von Nix und aus Bash-Code geschrieben. Dieser Befehl wird nur die abstrakte Paketstruktur, die in der Nix-Sprache geschrieben ist, importieren. Dazu gehören normalerweise alle grundlegenden Felder einer Paketdefinition.

Beim Importieren eines GNU-Pakets werden Zusammenfassung und Beschreibung stattdessen durch deren kanonische Variante bei GNU ersetzt.

Normalerweise würden Sie zunächst dies ausführen:

export NIX_REMOTE=daemon

damit nix-instantiate nicht versucht, die Nix-Datenbank zu öffnen.

Zum Beispiel importiert der Befehl unten die Paketdefinition von LibreOffice (genauer gesagt importiert er die Definition des an das Attribut libreoffice auf oberster Ebene gebundenen Pakets):

guix import nix ~/path/to/nixpkgs libreoffice
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 HTTP-Haskell-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 package signatures in The GNU Emacs Manual).

  • - 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 importieren crates.io, 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.

opam

Metadaten aus der Paketsammlung OPAM der OCaml-Gemeinde importieren.

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).


Fußnoten

(18)

Dazu wird der Befehl nix-instantiate von Nix verwendet.


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