Nächste: , Vorige: , Nach oben: Systemabbilder erstellen   [Inhalt][Index]


16.2 Abbilder instanziieren

Sagen wir, Sie möchten ein MBR-formatiertes Abbild mit drei verschiedenen Partitionen erzeugen:

Dazu würden Sie zum Beispiel folgende Betriebssystemdefinition in eine Datei my-image.scm schreiben.

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

(define MiB (expt 2 20))

(image
 (format 'disk-image)
 (operating-system %simple-os)
 (partitions
  (list
   (partition
    (size (* 40 MiB))
    (offset (* 1024 1024))
    (label "GNU-ESP")
    (file-system "vfat")
    (flags '(esp))
    (initializer (gexp initialize-efi-partition)))
   (partition
    (size (* 50 MiB))
    (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))))))

Wir merken an, dass für die erste und dritte Partition hier jeweils die allgemeinen Initialisierungsprozeduren initialize-efi-partition und initialize-root-partition verwendet werden. Mit initialize-efi-partition wird ein GRUB-EFI-Lader installiert, um den GRUB-Bootloader von der Wurzelpartition zu starten. Mit initialize-root-partition wird ein vollständiges System instanziiert, entsprechend der Betriebssystemdefinition in %simple-os.

Jetzt können Sie das hier ausführen:

guix system image my-image.scm

und die Abbilddefinition wird instanziiert. Das bedeutet, ein Disk-Image wird erstellt, das die erwartete Struktur hat:

$ parted $(guix system image my-image.scm) print
…
Modell:  (file)
Festplatte /gnu/store/yhylv1bp5b2ypb97pd3bbhz6jk5nbhxw-disk-image: 1714MB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: msdos
Disk-Flags:

Nummer  Anfang  Ende    Größe   Typ      Dateisystem  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

Als Größe der boot-Partition wurde 1619MB ermittelt, damit sie groß genug ist, um das Betriebssystem %simple-os zu beherbergen.

Es ist auch möglich, dass Sie die bestehenden Definitionen für image-Verbundsobjekte verwenden und so image-Verbundsobjekte einfacher definieren können, indem Sie Vererbung benutzen. Im Modul (gnu system image) werden die folgenden image-Variablen definiert.

Scheme-Variable: efi-disk-image

Ein MBR-formatiertes Disk-Image, das aus zwei Partitionen besteht: einer ESP-Partition für 64-Bit und einer bootfähigen Wurzelpartition. Das Abbild ist sowohl für die meisten x86_64- als auch i686-Maschinen geeignet, die über BIOS oder UEFI starten können.

Scheme-Variable: efi32-disk-image

Genau wie efi-disk-image, aber die EFI-Partition ist auf 32 Bit ausgelegt.

Scheme-Variable: iso9660-image

Ein ISO-9660-Abbild, das eine einzelne bootfähige Partition enthält. Dieses Abbild kann ebenso auf den meisten x86_64- und i686-Maschinen benutzt werden.

Scheme-Variable: docker-image

Ein Docker-Abbild, mit dem ein Docker-Container gestartet werden kann.

Mit Hilfe des efi-disk-image können wir unsere vorherige image-Deklaration vereinfachen:

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

(define MiB (expt 2 20))

(define data
  (partition
   (size (* 50 MiB))
   (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)))))

Dadurch kommt genau dieselbe Abbildinstanz zustande, dennoch ist die image-Deklaration so einfacher geworden.


Nächste: „image-type“-Referenz, Vorige: image-Referenz, Nach oben: Systemabbilder erstellen   [Inhalt][Index]