Next: , Previous: , Up: Nastavenie systému   [Contents][Index]


3.3 API pre vytváranie obrazov systému Guix

Z dejinného pohľadu je systém Guix sústredený okolo štruktúry operating-system. Táto štruktúra obsahuje rôzne polia počínajúc zadaním zavádzača a jadra až k službám, ktoré sa majú nainštalovať.

Požiadavky na obraz sa môžu značne líšiť v závislosti na cieľovom stroji, čo môže byť obvyklý x86_64 alebo malý jednodoskový počítač ako Pine64. Výrobcovia technického vybavenia presadzujú rôzne formáty obrazov s rôznymi veľkosťami a umiestneniami oddielov.

Na vytváranie obrazov vhodných pre všetky tieto stroje je nevyhnutné ďalšie zovšeobecnenie, čo je cieľom záznamu image. Tento záznam obsahuje všetky potrebné údaje k premene na samostatný obraz, ktorý je možno priamo zaviesť na hocijakom cieľovom stroji.

(define-record-type* <image>
  image make-image
  image?
  (name               image-name ;symbol
                      (default #f))
  (format             image-format) ;symbol
  (target             image-target
                      (default #f))
  (size               image-size  ;size in bytes as integer
                      (default 'guess))
  (operating-system   image-operating-system  ;<operating-system>
                      (default #f))
  (partitions         image-partitions ;list of <partition>
                      (default '()))
  (compression?       image-compression? ;boolean
                      (default #t))
  (volatile-root?     image-volatile-root? ;boolean
                      (default #t))
  (substitutable?     image-substitutable? ;boolean
                      (default #t)))

Tento záznam obsahuje operačný systém na zostavenie. Pole format určuje druh obrazu a medzi jeho platné hodnoty patria efi-raw, qcow2 alebo iso9660. V budúcnosti by sa mohli rozšíriť o docker a ďalšie druhy obrazov.

Na zadávanie obrazov bol spomedzi zdrojových súborov Guixu vyhradený nový priečinok. Zatiaľ sa v ňom nachádzajú štyri súbory:

Pozrime sa na pine64.scm. Obsahuje premennú pine64-barebones-os predstavujúcu najmenšie možné zadanie operačného systému určeného pre dosku Pine A64 LTS.

(define pine64-barebones-os
  (operating-system
   (host-name "vignemale")
   (timezone "Europe/Bratislava")
   (locale "sk_SK.utf8")
   (bootloader (bootloader-configuration
                (bootloader u-boot-pine64-lts-bootloader)
                (targets '("/dev/vda"))))
   (initrd-modules '())
   (kernel linux-libre-arm64-generic)
   (file-systems (cons (file-system
                        (device (file-system-label "moj-korenovy-system"))
                        (mount-point "/")
                        (type "ext4"))
                       %base-file-systems))
   (services (cons (service agetty-service-type
                            (agetty-configuration
                             (extra-options '("-L")) ; bez zisťovania nosného signálu
                             (baud-rate "115200")
                             (term "vt100")
                             (tty "ttyS0")))
                   %base-services))))

Polia kernel a bootloader odkazujú na balíky určené pre túto dosku.

Tesne pod nimi je zadaná aj premenná pine64-image-type.

(define pine64-image-type
  (image-type
   (name 'pine64-raw)
   (constructor (cut image-with-os arm64-disk-image <>))))

Využíva záznam, o ktorom sme ešte nehovorili, a teda image-type, zadaný nasledovne:

(define-record-type* <image-type>
  image-type make-image-type
  image-type?
  (name           image-type-name) ; znak
  (constructor    image-type-constructor)) ; <operating-system> -> <image>

Hlavným účelom tohto záznamu je priradiť názov funkcii pretvárajúcej operating-system na obraz. Aby sme pochopili, prečo je to dôležité, pozrime sa na príkaz vytvárajúci obraz zo súboru nastavení operating-system:

guix system image moj-os.scm

Tento príkaz očakáva nastavenie druhu operating-system, ale ako by sme mali určiť, že chceme obraz pre dosku Pine64? Musíme poskytnúť doplňujúci údaj, image-type, pomocou voľby --image-type alebo -t a to takto:

guix system image --image-type=pine64-raw moj-os.scm

Tento image-type parameter odkazuje na pine64-image-type uvedený vyššie. Na operating-system zadaný v moj-os.scm sa teda použije funkcia (cut image-with-os arm64-disk-image <>) pre vytvorenie obrazu.

Výsledný obraz vyzerá asi takto:

(image
 (format 'disk-image)
 (target "aarch64-linux-gnu")
 (operating-system moj-os)
 (partitions
  (list (partition
         (inherit root-partition)
         (offset root-offset)))))

čo je združenie člena operating-system zadaného v moj-os.scm so záznamom arm64-disk-image.

Stačilo už tohto Scheme šialenstva. Čo toto API prináša používateľom Guixu?

Môžete spustiť:

mathieu@cervin:~$ guix system --list-image-types
Dostupné druhy obrazov sú:

   - unmatched-raw
   - rock64-raw
   - pinebook-pro-raw
   - pine64-raw
   - novena-raw
   - hurd-raw
   - hurd-qcow2
   - qcow2
   - iso9660
   - uncompressed-iso9660
   - tarball
   - efi-raw
   - mbr-raw
   - docker
   - wsl2
   - raw-with-offset
   - efi32-raw

a vytvorením súboru druhu operating-system, založenom na pine64-barebones-os, si môžete váš obraz prispôsobiť v súbore (moj-pine-os.scm) asi takto:

(use-modules (gnu services linux)
             (gnu system images pine64))

(let ((base-os pine64-barebones-os))
  (operating-system
    (inherit base-os)
    (timezone "Europe/Bratislava")
    (services
     (cons
      (service earlyoom-service-type
               (earlyoom-configuration
                (prefer-regexp "icecat|chromium")))
      (operating-system-user-services base-os)))))

spustite:

guix system image --image-type=pine64-raw moj-os.scm

alebo

guix system image --image-type=hurd-raw moj-hurd-os.scm

pre získanie obrazu, ktorý možno zapísať priamo na pevný disk a zaviesť.

Bezo zmeny v moj-hurd-os.scm, volanie:

guix system image --image-type=hurd-qcow2 moj-hurd-os.scm

namiesto toho vytvorí Hurd QEMU obraz.


Next: Používanie bezpečnostných kľúčov, Previous: Prispôsobenie jadra, Up: Nastavenie systému   [Contents][Index]