Wie kann ich eine SquashFS-Datei zum Root-Dateisystem machen, wenn Sie einen iPXE-Start durchführen?

4795
Emre Sevinç

Ich habe ein System, das perfekt als iPXE-Boot-Server funktioniert. Jetzt versuche ich, eine SquashFS-Datei als Root-Dateisystem anstelle eines NFS-Dateisystems verwenden zu lassen.

Das aktuelle System verwendet die iPXE-Konfiguration wie folgt (relevante Zeilen sind dargestellt), und es funktioniert einwandfrei:

:retry kernel http://$/installdcos/ubuntu_os/vmlinuz root=/dev/nfs nfsroot=$:/installdcos/ubuntu_os/nfsroot ro ip=dhcp BOOTIF=%(mac)s console=ttyS0,38400n8 console=ttyS1,9600n8 console=tty0 || goto retry initrd http://$/installdcos/ubuntu_os/initrd.gz || goto retry boot || goto retry 

Statt des gebooteten Systems, das /installdcos/ubuntu_os/nfsrootals Root-Dateisystem verwendet wird, möchte ich, dass es ein einzelnes SquashFS als Root-Dateisystem verwendet (das System sollte gemountet und dann als Root-Dateisystem verwendet werden).

Dafür habe ich zuerst eine Datei erstellt ubuntu_os.squashfs, die den Inhalt des nfsrootVerzeichnisses enthält mksquashfs. Dann habe ich diese ubuntu_os.squashfsDatei im /installdcos/ubuntu_os/nfsrootVerzeichnis abgelegt .

In meiner iPXE-Konfiguration möchte ich nun sagen: Holen Sie sich das ubuntu_os.squashfsNetzwerk über das Netzwerk, hängen Sie es als SquashFS-Dateisystem an und verwenden Sie es als Root-Dateisystem (damit Sie NFS nicht erneut aufrufen müssen, um die Befehle aufzurufen, die sich befinden im Root-Dateisystem).

Wenn ich aber die folgende Änderung für die Kernelzeile in der Konfiguration versuche :

kernel http://$/installdcos/ubuntu_os/vmlinuz root=/dev/nfs nfsroot=$:/installdcos/ubuntu_os/nfsroot/ubuntu_os.squashfs ro rootfstype=squashfs ip=dhcp BOOTIF=%(mac)s console=ttyS0,38400n8 console=ttyS1,9600n8 console=tty0 || goto retry 

Wenn Sie einen iPXE-Start von einem Computer aus durchführen, wird der iPXE-Startvorgang gestartet. Nach dem Drucken einiger Zeilen bleibt der folgende Fehler hängen:

 Begin: Retrying nfs mount ... Begin: Running /scripts/nfs-premount ... done. mount: Not a directory done Begin: Retrying nfs mount ... Begin: Running /scripts/nfs-premount ... done. mount: Not a directory done Begin: Retrying nfs mount ... Begin: Running /scripts/nfs-premount ... done. mount: Not a directory done 

Die Fehlermeldung ist unabhängig, /installdcos/ubuntu_os/nfsroot/ubuntu_os.squashfsist kein Verzeichnis.

Welche Art von Parameter- und Wertekombination sollte ich für diese Kernel-Konfigurationszeile schreiben?

Ich habe die Dokumentation wie http://www.tldp.org/HOWTO/BootPrompt-HOWTO-3.html und https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt überprüft, aber Ich konnte nicht herausfinden, welche Zauberbeschwörung ich an den Kernel weitergeben sollte (und der Rest der SquashFS-Boot-Tutorials, die ich gefunden habe, betrachtet den Boot-Vorgang von der Festplatte aus und nicht von PXE oder LiveCD, was nicht genau meinem Fall entspricht).

3

1 Antwort auf die Frage

2
Pat

Um zu verstehen, was los ist, müssen Sie wissen, wie Linux PXE startet.

  1. Der Kernel vmlinuz wird übertragen
  2. Die initrd initrd.gzwird übertragen
  3. Der Kernel installiert initrd und startet sein initSkript

Initrd ist ein ultra-minimales Linux-System, das die minimale Funktionalität für das Herstellen einer Verbindung zu (NFS) oder Abrufen (HTTP / CIFS) des "echten" Betriebssystems (in Ihrem Fall darin enthalten ubuntu_os.squashfs) enthält, das Mounten und schließlich das "chrooting".

Ein PXE-fähiges initSkript ist für die Syntaxanalyse der Kernelvariablen, das Starten der Netzdienste, die Verarbeitung von NFS, HTTP, CIFS usw. verantwortlich. In den meisten Fällen kann ein bestimmter initrd.gzBenutzer nicht alle oben genannten Protokolle verarbeiten. Passen Sie "Ihre" an initrd.gzoder erstellen Sie eine "ergänzende" initrd, die bei Bedarf die fehlenden Funktionen bereitstellt.

In Ihrem Fall ist Ihr initSkript immer noch der Meinung, dass es ein NFS-Verzeichnis und keine Datei einhängen muss. Wenn Sie NFS verwenden möchten, sollten Sie das Verzeichnis einhängen, in dem Sie ubuntu_os.squashfssich befinden, und anschließend die ubuntu_os.squashfsDatei einhängen . Dies bedeutet natürlich das Patchen init(und / oder die zugehörigen Komponenten).

Wenn Sie nichts dagegen haben, ubuntu_os.squashfseine CIFS-Freigabe anzubieten, können Sie sehen, was Serva für PXE macht, wenn Sie Ubuntu-Live-Distributionen starten. Sie sehen dort alle Parameter für das CIFS-Booten (ich bin mit der Serva-Entwicklung verbunden)

dh Ubuntu LTS 14.04 Desktop Live

[PXESERVA_MENU_ENTRY] asset = Ubuntu LTS 14.04 Desktop Live platform = amd64 kernel = /NWA_PXE/$HEAD_DIR$/casper/vmlinuz append = showmounts toram root=/dev/cifs initrd=/NWA_PXE/$HEAD_DIR$/casper/initrd.lz,/NWA_PXE/$HEAD_DIR$/casper/INITRD_N11.GZ boot=casper netboot=cifs nfsroot=//$IP_BSRV$/NWA_PXE_SHARE/$HEAD_DIR$ NFSOPTS=-ouser=serva,pass=avres,ro ip=dhcp ro 
Ich denke, ich muss etwas Ähnliches tun, wie es unter http://adam.younglogic.com/2012/03/shared-nothing-diskless-boot/ beschrieben ist (ich möchte NFS überhaupt nicht, ich will es nur meine squashfs-Datei während des PXE-Startvorgangs abrufen, auf dem gebooteten System einhängen und das System als Root-Dateisystem verwenden) Emre Sevinç vor 9 Jahren 0
Vergiss diesen Link. Wenn Sie eine Ubuntu-Variante starten, sehen Sie einfach die Seite von Serva. Schauen Sie sich die Parameter an, die auf den verschiedenen Ubuntu-Aromen basieren. Die beste Option ist, eine Live-Distribution anzupassen und eigene ubuntu_os.squashfs zu erstellen. Dann können Sie die PXE-Funktionen der Distribution wiederverwenden Pat vor 9 Jahren 0