Vorige: , Nach oben: Pakete definieren   [Inhalt][Index]


8.2.2 origin-Referenz

In diesem Abschnitt werden Paketursprünge — englisch Origins — beschrieben. Eine origin-Deklaration legt Daten fest, die „produziert“ werden müssen — normalerweise heißt das heruntergeladen. Die Hash-Prüfsumme von deren Inhalt muss dabei im Voraus bekannt sein. Ursprünge werden in erster Linie benutzt, um den Quellcode von Paketen zu repräsentieren (siehe Pakete definieren). Aus diesem Grund können Sie mit der origin-Form Patches angeben, die auf den ursprünglichen Quellcode angewandt werden sollen, oder auch Schnipsel von Code, der Veränderungen daran vornimmt.

Datentyp: origin

Mit diesem Datentyp wird ein Ursprung, von dem Quellcode geladen werden kann, beschrieben.

uri

Ein Objekt, was die URI des Quellcodes enthält. Der Objekttyp hängt von der Methode ab (siehe unten). Zum Beispiel sind, wenn die url-fetch-Methode aus (guix download) benutzt wird, die gültigen Werte für uri: eine URL dargestellt als Zeichenkette oder eine Liste solcher URLs.

method

A monadic procedure that handles the given URI. The procedure must accept at least three arguments: the value of the uri field and the hash algorithm and hash value specified by the hash field. It must return a store item or a derivation in the store monad (siehe Die Store-Monade); most methods return a fixed-output derivation (siehe Ableitungen).

Zu den häufig benutzten Methoden gehören url-fetch, das Daten von einer URL lädt, und git-fetch, das Daten aus einem Git-Repository lädt (siehe unten).

sha256

Ein Byte-Vektor mit dem SHA-256-Hash des Quellcodes. Seine Funktion ist dieselbe wie das Angeben eines content-hash-SHA256-Objekts im weiter unten beschriebenen hash-Feld.

hash

Das content-hash-Objekt des Quellcodes. Siehe unten für eine Erklärung, wie Sie content-hash benutzen.

Diese Informationen liefert Ihnen der Befehl guix download (siehe Aufruf von guix download) oder guix hash (siehe Aufruf von guix hash).

file-name (Vorgabe: #f)

Der Dateiname, unter dem der Quellcode abgespeichert werden soll. Wenn er auf #f steht, wird ein vernünftiger Name automatisch gewählt. Falls der Quellcode von einer URL geladen wird, wird der Dateiname aus der URL genommen. Wenn der Quellcode von einem Versionskontrollsystem bezogen wird, empfiehlt es sich, den Dateinamen ausdrücklich anzugeben, weil dann keine sprechende Benennung automatisch gefunden werden kann.

patches (Vorgabe: '())

Eine Liste von Dateinamen, Ursprüngen oder dateiähnlichen Objekten (siehe dateiartige Objekte) mit Patches, welche auf den Quellcode anzuwenden sind.

Die Liste von Patches kann nicht von Parametern der Erstellung abhängen. Insbesondere kann sie nicht vom Wert von %current-system oder %current-target-system abḧängen.

snippet (Vorgabe: #f)

Ein im Quellcode-Verzeichnis auszuführender G-Ausdruck (siehe G-Ausdrücke) oder S-Ausdruck. Hiermit kann der Quellcode bequem modifiziert werden, manchmal ist dies bequemer als mit einem Patch.

patch-flags (Vorgabe: '("-p1"))

Eine Liste der Befehlszeilenoptionen, die dem patch-Befehl übergeben werden sollen.

patch-inputs (Vorgabe: #f)

Eingabepakete oder -ableitungen für den Patch-Prozess. Bei #f werden die üblichen Patcheingaben wie GNU Patch bereitgestellt.

modules (Vorgabe: '())

Eine Liste von Guile-Modulen, die während des Patch-Prozesses und während der Ausführung des snippet-Felds geladen sein sollen.

patch-guile (Vorgabe: #f)

Welches Guile-Paket für den Patch-Prozess benutzt werden soll. Bei #f wird ein vernünftiger Vorgabewert angenommen.

Datentyp: content-hash Wert [Algorithmus]

Erzeugt ein Inhaltshash-Objekt für den gegebenen Algorithmus und benutzt dabei den Wert als dessen Hashwert. Wenn kein Algorithmus angegeben wird, wird sha256 angenommen.

Als Wert kann ein Zeichenketten-Literal, was base32-dekodiert wird, oder ein Byte-Vektor angegeben werden.

Folgende Formen sind äquivalent:

(content-hash "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj")
(content-hash "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"
              sha256)
(content-hash (base32
               "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"))
(content-hash (base64 "kkb+RPaP7uyMZmu4eXPVkM4BN8yhRd8BTHLslb6f/Rc=")
              sha256)

Als interne Implementierung wird für content-hash derzeit ein Makro benutzt. Es überprüft, wenn möglich, zum Zeitpunkt der Makroumschreibung, ob die Angaben in Ordnung sind, z.B. ob der Wert die richtige Größe für den angegebenen Algorithmus hat.

Wie wir oben gesehen haben, hängt es von der im method-Feld angegebenen Methode ab, wie die in einem Paketursprung verwiesenen Daten geladen werden. Das Modul (guix download) stellt die am häufigsten benutzte Methode zur Verfügung, nämlich url-fetch, die im Folgenden beschrieben wird.

Scheme-Prozedur: url-fetch URL Hash-Algo Hash [name] [#:executable? #f] Liefert eine Ableitung mit fester Ausgabe, die

Daten von der URL lädt (einer Zeichenkette oder Liste von Zeichenketten für alternativ mögliche URLs). Es wird erwartet, dass die Daten Hash als Prüfsumme haben, gemäß dem Algorithmus, der in Hash-Algo (einem Symbol) angegebenen wurde. Nach Vorgabe ergibt sich der Dateiname aus dem Basisnamen der URL; optional kann in name ein anderslautender Name festgelegt werden. Wenn executable? wahr ist, wird die heruntergeladene Datei als ausführbar markiert.

Wenn eine der URL mit mirror:// beginnt, wird der „Host Part“ an deren Anfang als Name eines Spiegelserver-Schemas aufgefasst, wie es in %mirror-file steht.

Alternativ wird, wenn die URL mit file:// beginnt, der zugehörige Dateiname in den Store eingefügt und zurückgeliefert.

Ebenso ist im Modul (guix git-download) die git-fetch-Methode für Paketursprünge definiert. Sie lädt Daten aus einem Repository des Versionskontrollsystems Git. Der Datentyp git-reference beschreibt dabei das Repository und den daraus zu ladenden Commit.

Scheme-Prozedur: git-fetch Ref Hash-Algo Hash

Liefert eine Ableitung mit fester Ausgabe, die Ref lädt, ein <git-reference>-Objekt. Es wird erwartet, dass die Ausgabe rekursiv die Prüfsumme Hash aufweist (ein „rekursiver Hash“) gemäß dem Typ Hash-Algo (einem Symbol). Als Dateiname wird name verwendet, oder ein generischer Name, falls name #f ist.

Datentyp: git-reference

Dieser Datentyp steht für eine Git-Referenz, die git-fetch laden soll.

url

Die URL des zu klonenden Git-Repositorys.

commit

Diese Zeichenkette gibt entweder den zu ladenden Commit an (eine Zeichenkette aus Hexadezimalzeichen, entweder der vollständige SHA1-Commit oder eine „kurze“ Commit-Zeichenkette, aber wir raten vom Verkürzen ab) oder sie entspricht dem zu ladenden Tag.

recursive? (Vorgabe: #f)

Dieser boolesche Wert gibt an, ob Git-Submodule rekursiv geladen werden sollen.

Im folgenden Beispiel wird der Tag v2.10 des Repositorys für GNU Hello bezeichnet:

(git-reference
  (url "https://git.savannah.gnu.org/git/hello.git")
  (commit "v2.10"))

Das ist äquivalent zu folgender Referenz, wo der Commit ausdrücklich benannt wird:

(git-reference
  (url "https://git.savannah.gnu.org/git/hello.git")
  (commit "dc7dc56a00e48fe6f231a58f6537139fe2908fb9"))

For Mercurial repositories, the module (guix hg-download) defines the hg-fetch origin method and hg-reference data type for support of the Mercurial version control system.

Scheme Procedure: hg-fetch ref hash-algo hash [name] Return a fixed-output derivation that fetches ref, a

<hg-reference> object. The output is expected to have recursive hash hash of type hash-algo (a symbol). Use name as the file name, or a generic name if #false.


Vorige: , Nach oben: Pakete definieren   [Inhalt][Index]