Next: Nastavenie, Up: Návod na zadávanie balíkov [Contents][Index]
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:
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.
Toto pole obsahuje popis pôvodu zdrojového kódu. Záznam origin
obsahuje tieto polia:
url-fetch
pre stiahnutie prostredníctvom HTTP/FTP, ale poznáme
aj iné spôsoby, ako napr. git-fetch
pre Git repozitáre.
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é.
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
.
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).
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.
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.
Použitie HTTPS prepojenie, ak je dostupné.
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]