Suivant: , Précédent: , Monter: Créer des images systèmes   [Table des matières][Index]


16.2 Instancier une image

Imaginons que vous vouliez créer une image MBR avec trois partitions distinctes :

Vous écririez ensuite la définition d’image suivante dans un fichier mon-image.scm par exemple.

(use-modules (gnu)
             (gnu image)
             (gnu tests)
             (gnu system image)
             (guix gexp))

(define Mio (expt 2 20))

(image
 (format 'disk-image)
 (operating-system %simple-os)
 (partitions
  (list
   (partition
    (size (* 40 Mio))
    (offset (* 1024 1024))
    (label "GNU-ESP")
    (file-system "vfat")
    (flags '(esp))
    (initializer (gexp initialize-efi-partition)))
   (partition
    (size (* 50 Mio))
    (label "DATA")
    (file-system "ext4")
    (initializer #~(lambda* (root . rest)
                     (mkdir root)
                     (call-with-output-file
                         (string-append root "/data")
                       (lambda (port)
                         (format port "my-data"))))))
   (partition
    (size 'guess)
    (label root-label)
    (file-system "ext4")
    (flags '(boot))
    (initializer (gexp initialize-root-partition))))))

Remarquez que la première et la troisième partition utilisent les procédure d’initialisation par défaut, respectivement initialize-efi-partition et initialize-root-partition. Initialize-efi-partition installe un chargeur EFI GRUB qui charge le chargeur d’amorçage GRUB situé sur la partition racine. Initialize-root-partition instancie un système complet défini par le système d’exploitation %simple-os.

Vous pouvez maintenant lancer :

guix system image mon-image.scm

pour instancier la définition de l’image. Cela produit une image disque qui a la structure attendue :

$ parted $(guix system image mon-image.scm) print
…
Model:  (file)
Disk /gnu/store/yhylv1bp5b2ypb97pd3bbhz6jk5nbhxw-disk-image: 1714MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  43.0MB  41.9MB  primary  fat16        esp
 2      43.0MB  95.4MB  52.4MB  primary  ext4
 3      95.4MB  1714MB  1619MB  primary  ext4         boot

La taille de la partition boot a été inférée à 1619 Mo pour qu’elle soit assez grande pour héberger le système d’exploitation %simple-os.

Vous pouvez aussi utiliser les définitions d’enregistrements image existantes et hériter d’elles pour simplifier la définition de l’image. Le module (gnu system image) fournit les variables de définition d’image suivantes.

Variable :mbr-disk-image

An MBR disk-image composed of a single ROOT partition. The ROOT partition starts at a 1 MiB offset so that the bootloader can install itself in the post-MBR gap.

Variable :mbr-hybrid-disk-image

An MBR disk-image composed of two partitions: a 64 bits ESP partition and a ROOT boot partition. The ESP partition starts at a 1 MiB offset so that a BIOS compatible bootloader can install itself in the post-MBR gap. The image can be used by x86_64 and i686 machines supporting only legacy BIOS booting. The ESP partition ensures that it can also be used by newer machines relying on UEFI booting, hence the hybrid denomination.

Variable :efi-disk-image

Une image disque MBR composée de deux partitions : une partition ESP 64 bits et une partition racine d’amorçage. Cette image peut être utilisée sur la plupart des machines x86_64 et i686 qui prennent en charge l’amorçage via le BIOS ou l’UEFI.

Variable :efi32-disk-image

Comme efi-disk-image mais avec une partition EFI 32 bits.

Variable :iso9660-image

Une image ISO-9660 composée d’une seule partition amorçable. Cette image peut être utilisée sur la plupart des machine x86_64 et i686.

Variable :docker-image

Une image Docker qui peut être utilisée pour démarrer un conteneur Docker.

En utilisant efi-disk-image nous pouvons simplifier notre précédente déclaration d’image de cette manière :

(use-modules (gnu)
             (gnu image)
             (gnu tests)
             (gnu system image)
             (guix gexp)
             (ice-9 match))

(define Mio (expt 2 20))

(define data
  (partition
   (size (* 50 Mio))
   (label "DATA")
   (file-system "ext4")
   (initializer #~(lambda* (root . rest)
                    (mkdir root)
                    (call-with-output-file
                        (string-append root "/data")
                      (lambda (port)
                        (format port "my-data")))))))

(image
 (inherit efi-disk-image)
 (operating-system %simple-os)
 (partitions
  (match (image-partitions efi-disk-image)
    ((esp root)
     (list esp data root)))))

Cela donnera exactement la même instanciation d’image mas la déclaration de l’image est plus simple.


Suivant: référence de image-type, Précédent: Référence de image, Monter: Créer des images systèmes   [Table des matières][Index]