Booten eines komprimierten Dateisystems von ISO

Booten eines komprimierten Dateisystems von ISO

Ich versuche, ein bootfähiges UEFI-CD-ISO mit einem komprimierten Dateisystem aus einer virtuellen Maschine zu erstellen, die ich mit den benötigten Inhalten bereitgestellt habe.

Erklären:

  1. Ich verwende Packer und eine Kickstart-Datei, um CentOS 7 zu installieren
  2. Ich verwende ein Packer-Provisioning-Skript, um einige Binärdateien zu kompilieren, die ich auf dem Image benötige
  3. Ich folgte den Anweisungen vonHierum ein komprimiertes Dateisystem-Image zu erstellen, nachdem alles, was ich brauche, im Betriebssystem ist:
mkdir -p /mnt/squashfs /squashfs
mount -o bind / /mnt/squashfs

mksquashfs /mnt/squashfs /squashfs/filesystem.squashfs -comp gzip -no-exports -xattrs -noappend -no-recovery -e /mnt/squashfs/squashfs/filesystem.squashfs
find /boot -name 'vmlinuz-*' -type f -exec cp {} /squashfs/vmlinuz \;
find /boot -name 'init*' -type f -exec cp {} /squashfs/initrd.img \;
  1. Danach habe ich einige Skripte vonHierSo erstellen Sie ein ISO:
yum -y install xorriso dosfstools grub2-efi-modules mtools

mkdir -p /iso /iso_src/ /iso_src/live
find /boot -name 'vmlinuz-*' -type f -exec cp {} /iso_src/vmlinuz \;
find /boot -name 'init*' -type f -exec cp {} /iso_src/initrd.img \;
cp /squashfs/filesystem.squashfs /iso_src/live/
touch /iso_src/LINUX_CUSTOM

cat <<'EOF' >grub.cfg

search --set=root --file /LINUX_CUSTOM

insmod all_video

set default="0"
set timeout=30

menuentry "Custom Linux" {
    linux /vmlinuz boot=live toram=filesystem.squashfs quiet nomodeset
    initrd /initrd.img
}
EOF

grub2-mkstandalone \
    --format=x86_64-efi \
    --output=bootx64.efi \
    --locales="" \
    --fonts="" \
    "boot/grub/grub.cfg=grub.cfg"

 (dd if=/dev/zero of=efiboot.img bs=1M count=10 && \
    mkfs.vfat efiboot.img && \
    mmd -i efiboot.img efi efi/boot && \
    mcopy -i efiboot.img ./bootx64.efi ::efi/boot/
)

xorriso \
    -as mkisofs \
    -iso-level 3 \
    -full-iso9660-filenames \
    -volid "LINUX_CUSTOM" \
    -eltorito-alt-boot \
        -e EFI/efiboot.img \
        -no-emul-boot \
    -append_partition 2 0xef efiboot.img \
    -output "/iso/image.iso" \
    -graft-points \
        "/iso_src" \
        /EFI/efiboot.img=efiboot.img

Jetzt versuche ich, diese ISO in VirtualBox mit aktiviertem UEFI zu booten, aber es schlägt fehl mit

Failed to switch root: Specified switch root path '/sysroot' does not seem to be an OS tree

Soweit ich das verstehe, wurde mein Squashfs also nicht gemountet? Ich bin ziemlich neu auf diesem Gebiet, verstehe also alle Schritte nur teilweise und habe das Gefühl, dass ich etwas übersehe, denn das Einzige, was Grub mitteilt, dass mein Dateisystem jetzt aus einer Squashfs-Datei stammen muss, statt aus der Maschine, von der ich das Image erstellt habe (auf der sich ein tatsächliches Blockgerät befand), ist das toramDing.

Kann jemand Hinweise/Beispiele geben, wie man dieses Problem lösen und das System booten kann? Ich habe viel darüber gelesen, dracutkonnte aber nicht verstehen, wie man es in diesem Szenario verwendet? Oder ist das einfach ein Problem mit der Grub-Konfigurationsdatei?

Aktualisieren

Nach einigem Googeln bin ich zu Dracut gewechselt und verwende jetzt in meinem Bereitstellungsskript Dracut, um Initrd wie folgt zu generieren:

dracut -a dmsquash-live -N -m "kernel-modules base" --filesystems "squashfs" /dracut/initrd.dracut.img

und verwenden Sie den folgenden Grub-Boot-Eintrag (das initrd.img hier ist das zuvor erstellte initrd.dracut.img):

menuentry "Custom Linux" {
    linux /vmlinuz root=live:/dev/sr0 rd.live.debug=1
    initrd /initrd.img
}

das scheint weiter zu gehen, scheitert aber mitWarning: /dev/mapper/live-rw does not exist

Aktualisierung 2

Es scheint, dass CentOS 7 mit einem älteren Dracut geliefert wird, der nur den Live-CD-Modus unterstützt (siehe The filesystem structure is traditionally expected to be:unten Booting live images, dem meine Struktur nicht entsprach). Also habe ich mit CentOS 8 neu angefangen, einem neueren Dracut, der mit meiner Struktur umgehen kann, und jetzt ist mein einziges Problem beim Booten, dass ich die /etc/fstabvon der Originalmaschine habe, und ich hoffe, Google hilft mir dabei, das zu lösen:D

Aktualisierung 3

Das einfache Ignorieren /etc/fstabvon „along“ /devund „/proc“ beim Erstellen des Squashfs hat den Trick getan – das endgültige ISO bootet erfolgreich im UEFI-Modus.

verwandte Informationen