Next: , Up: Návod na zadávanie balíkov   [Contents][Index]


2.1.1 Balík „Vitaj svet“

Oddiel „Zadávanie balíkov“ v príručke obsahuje základy tvorby balíkov s Guixom (see Defining Packages in GNU Guix Reference Manual). V nasledovnom oddieli si tieto základy z časti pripomenieme.

GNU Hello je šablóna projektu, ktorá slúži ako základný príklad zadávania balíkov. Využíva zostavovací systém GNU (./configure && make && make install). Guix už obsahuje zadanie príslušného balíka, ktoré predstavuje vhodný odrazový bod. Môžete si zadanie balíka prezrieť zadaním guix edit hello do príkazového riadku. Pozrime sa ako toto zadania balíka vyzerá:

(define-public hello
  (package
    (name "hello")
    (version "2.10")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/hello/hello-" version
                                  ".tar.gz"))
              (sha256
               (base32
                "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
    (build-system gnu-build-system)
    (synopsis "Hello, GNU world: An example GNU package")
    (description
     "GNU Hello prints the message \"Hello, world!\" and then exits.  It
serves as an example of standard GNU coding practices.  As such, it supports
command-line arguments, multiple languages, and so on.")
    (home-page "https://www.gnu.org/software/hello/")
    (license gpl3+)))

Ako môžete vidieť, tá najobsiahlejšia časť je dosť jednoduchá. Ale prejdime si spoločne jednotlivé polia:

name

Názov projektu. Podľa všeobecných zvyklostí ho zapisujeme malými písmenami, bez podčiarkovníkov a s použitím pomlčiek na oddelenie jednotlivých slov.

source

Toto pole obsahuje popis pôvodu zdrojového kódu. Záznam origin obsahuje tieto polia:

  1. Spôsob, v tomto prípade url-fetch pre stiahnutie prostredníctvom HTTP/FTP, ale poznáme aj iné spôsoby, ako napr. git-fetch pre Git repozitáre.
  2. Prepojenie (URI), čo obyčajne predstavuje nejaké umiestnenie https:// pre url-fetch. V tomto prípade zvláštne „mirror://gnu“ odkazuje na súbor dobre známych umiestnení, ktoré môžu byť všetky použité na získanie zdrojového kódu ak by niektoré z nich nebolo dostupné.
  3. Kontrolný súčet sha256 požadovaného súboru. Je dôležitý pre zaistenie celistvosti zdroja. Všimnite si, že Guix pracuje z base32 reťazcami, čo vysvetľuje použitie funkcie base32.
build-system

Práve tu má príležitosť zažiariť sila všeobecnosti jazyka Scheme: v tomto prípade, gnu-build-system je zovšeobecnenie známych príkazov shellu ./configure && make && make install. Medzi ďalšie zostavovacie systémy patrí trivial-build-system, ktorý nerobí nič a necháva na programátorovi, aby zadal všetky potrebné kroky zostavenia, python-build-system, emacs-build-system a mnohé ďalšie (see Build Systems in GNU Guix Reference Manual).

synopsis

Toto by mal byť súhrnný popis toho, na čo balík slúži. Pri mnohých balíkoch je vhodné použiť slogan zo stránky príslušného projektu.

description

Podobne ako v prípade súhrnného popisu je vhodné použiť popis projektu z jeho domovskej stránky. Všimnite si, že Guix používa značkovanie Texinfo.

home-page

Použitie HTTPS prepojenie, ak je dostupné.

license

Viď guix/licenses.scm v zdrojovom kóde projektu pre zoznam všetkých dostupných licencií.

Nastal čas na zostavenie nášho prvého balíka! Zatiaľ nič zvláštne: spoľahneme sa jednoducho na kópiu vyššie uvedeného zadania my-hello.

Tak ako pri rituálnom „Ahoj svet“, ktorý sa vyučuje pri väčšine programovacích jazykov, toto bude ten „najručnejší“ spôsob zadávania balíka, ktorý použijete. Neskôr si ukážeme dokonalejší postup, no zatiaľ sa vyberieme tou najjednoduchšou cestou.

Uložte nasledujúci obsah do súboru s názvom my-hello.scm.

(use-modules (guix packages)
             (guix download)
             (guix build-system gnu)
             (guix licenses))

(package
  (name "my-hello")
  (version "2.10")
  (source (origin
            (method url-fetch)
            (uri (string-append "mirror://gnu/hello/hello-" version
                                ".tar.gz"))
            (sha256
             (base32
              "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
  (build-system gnu-build-system)
  (synopsis "Hello, Guix world: An example custom Guix package")
  (description
   "GNU Hello prints the message \"Hello, world!\" and then exits.  It
serves as an example of standard GNU coding practices.  As such, it supports
command-line arguments, multiple languages, and so on.")
  (home-page "https://www.gnu.org/software/hello/")
  (license gpl3+))

Dodatočné príkazy si vysvetlíme o chvíľu.

Neváhajte a vyskúšajte si, čo sa stane ak zmeníte hodnoty niektorých polí. Ak zmeníte zdroj balíka, budete musieť aktualizovať aj kontrolný súčet. Guix nezostaví nič ak daný kontrolný súčet neodpovedá kontrolnému súčtu zdrojového kódu. Pre získanie správneho kontrolného súčtu potrebujeme stiahnuť zdroj, vypočítať kontrolný súčet sha256 a previesť ho do base32.

Našťastie, Guix to môže urobiť za nás; všetko čo budeme potrebovať je prepojenie (URI) zdroja:

$ guix download mirror://gnu/hello/hello-2.10.tar.gz

Starting download of /tmp/guix-file.JLYgL7
From https://ftpmirror.gnu.org/gnu/hello/hello-2.10.tar.gz...
following redirection to `https://mirror.ibcp.fr/pub/gnu/hello/hello-2.10.tar.gz'...
 …10.tar.gz  709KiB                                 2.5MiB/s 00:00 [##################] 100.0%
/gnu/store/hbdalsf5lpf01x4dcknwx6xbn6n5km6k-hello-2.10.tar.gz
0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i

V tomto konkrétnom prípade nám výstup hovorí, aké zrkadlo bolo vybraté. Ak výsledok tohto príkazu nie je rovnaký ako v predchádzajúcom úryvku, aktualizujte vaše zadanie my-hello podľa potreby.

Všimnite si, že archívy GNU balíkov sú poskytované spolu s OpenPGP podpisom, takže by ste si jednoznačne mali overiť podpis tohto archívu pomocou „gpg“ predtým než budete pokračovať:

$ guix download mirror://gnu/hello/hello-2.10.tar.gz.sig

Starting download of /tmp/guix-file.03tFfb
From https://ftpmirror.gnu.org/gnu/hello/hello-2.10.tar.gz.sig...
following redirection to `https://ftp.igh.cnrs.fr/pub/gnu/hello/hello-2.10.tar.gz.sig'...
 ….tar.gz.sig  819B                                                                                                                       1.2MiB/s 00:00 [##################] 100.0%
/gnu/store/rzs8wba9ka7grrmgcpfyxvs58mly0sx6-hello-2.10.tar.gz.sig
0q0v86n3y38z17rl146gdakw9xc4mcscpk8dscs412j22glrv9jf
$ gpg --verify /gnu/store/rzs8wba9ka7grrmgcpfyxvs58mly0sx6-hello-2.10.tar.gz.sig /gnu/store/hbdalsf5lpf01x4dcknwx6xbn6n5km6k-hello-2.10.tar.gz
gpg: Podpis vytvorený Ne 16. november 2014, 13:08:37 CET
gpg:                pomocou RSA kľúča A9553245FDE9B739
gpg: Dobrý podpis od "Sami Kerola <kerolasa@iki.fi>" neznáme
gpg:                 alias "Sami Kerola (http://www.iki.fi/kerolasa/) <kerolasa@iki.fi>" neznáme
gpg: VAROVANIE: Tento kľúč nie certifikovaný dôveryhodným podpisom!
gpg:          Nič nenaznačuje tomu, že tento podpis patrí vlastníkovi kľúča.
Primárny fingerprint kľúča: 8ED3 96E3 7E38 D471 A005  30D3 A955 3245 FDE9 B739

Potom môžete spokojne spustiť

$ guix package --install-from-file=my-hello.scm

Teraz by ste už mali mať my-hello vo vašom profile!

$ guix package --list-installed=my-hello
my-hello	2.10	out
/gnu/store/f1db2mfm8syb8qvc357c53slbvf1g9m9-my-hello-2.10

Dostali sme sa tak ďaleko ako sa dalo bez znalosti Scheme. Predtým než prejdeme k zložitejším balíkom si dáme rýchlokurz jazyka Scheme. Na začiatok odporúčame see Zrýchlené školenie jazyka Scheme.


Next: Nastavenie, Up: Návod na zadávanie balíkov   [Contents][Index]