Nächste: „image-type“-Referenz, Vorige: image
-Referenz, Nach oben: Systemabbilder erstellen [Inhalt][Index]
Sagen wir, Sie möchten ein MBR-formatiertes Abbild mit drei verschiedenen Partitionen erzeugen:
%simple-os
als Betriebssystem liegt.
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.
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.
Genau wie efi-disk-image
, aber die EFI-Partition ist auf 32 Bit
ausgelegt.
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.
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]