Wie installiere ich Syslinux / Extlinux in eine Disk-Image-Datei, ohne Root-Rechte zu benötigen

13

Ich habe eine eigens entwickelte Linux-Distribution erstellt und kann die gesamte Disk-Image-Datei als Benutzer ohne Rootberechtigung erstellen, mit einer Ausnahme: Installation des Bootloaders. Ich verwende syslinux (eigentlich extlinux), und um es zu installieren, muss ich die Boot-Partition, die root / sudo-Rechte erfordert, per Loopback einhängen. Die Befehle werden von einem Makefile ausgeführt, und die Variablennamen sollten klar angeben, durch was sie ersetzt werden sollen.

sudo losetup -o $(BOOT_FS_PARTITION_OFFSET) $(LOOP_DEVICE) $(IMAGE_FILE_NAME)
sudo mount $(LOOP_DEVICE) $(LOOP_MOUNT_POINT)
sudo $(EXTLINUX) -S $(DISK_SECTORS) -H $(DISK_HEADS) -i $(LOOP_MOUNT_POINT)
sudo umount $(LOOP_MOUNT_POINT)
sudo losetup -d $(LOOP_DEVICE)

Gibt es eine Möglichkeit, Syslinux oder Extlinux in die Disk-Image-Datei zu schreiben, ohne Root-Rechte zu benötigen?

Patrick
quelle
Fragen Sie sich, ob es möglich ist, all diese Befehle ohne root auszuführen? Oder nur den Befehl extlinux?
BenjiWiebe
@BenjiWiebe Wenn es einen anderen Weg gibt, sind alle erforderlichen Befehle erforderlich, aber meines Wissens benötigen Sie ein bereitgestelltes Dateisystem, um extlinux auszuführen, und extlinux muss auf diese Weise mit Root-Berechtigungen ausgeführt werden.

Antworten:

8

Dies ist möglich für syslinux:

syslinux ~/floppy.ima

Das syslinuxInstallationsprogramm enthält genügend Magie, um auf einem nicht gemounteten Dateisystem ausgeführt zu werden. (Tatsächlich wurde es dafür entwickelt.) Das extlinuxInstallationsprogramm erwartet jedoch, dass es auf einem bereitgestellten Dateisystem ausgeführt wird.

Es ist mit ziemlicher Sicherheit möglich, das extlinuxInstallationsprogramm in einen Teil, der die Dateien kopiert (so etwas wie mtools für FAT , was selten ist, aber zu existieren scheint , obwohl man sie einfach direkt integrieren kann genext2fs), und einen Teil, der den Bootsektor installiert ( Ich könnte das zusammenschustern.

Ich habe so etwas wie dies für GRUB 2, die zwischen dem MBR und der ersten Partition, für in den Raum installiert Grml ; Dies war tatsächlich einfacher, da GRUB im Gegensatz zu SYSLINUX nicht so viel vom Bootsektor benötigt. Dies hängt im Wesentlichen von Ihren allgemeinen Anforderungen ab. Wenn der obige Teil über SYSLINUX Ihnen nicht hilft, kontaktieren Sie mich, damit wir etwas ausarbeiten können.

Mirabilos
quelle
Vielen Dank für diese Info. Ich verwende genext2fs, daher klingt Ihr Vorschlag nach der besten Option. Geht es einfach darum, den Extlinux-Code in den MBR zu schreiben und die Dateien in die fs zu kopieren, oder müssen die Dateien in bestimmten Blöcken innerhalb der fs abgelegt werden?
Ich habe EXTLINUX noch nicht im Detail betrachtet (werde dies tun und dann diesen Kommentar löschen, aber gib mir ein bisschen Zeit), aber für SYSLINUX, LILO, GRUB und andere Bootloader ist es normalerweise so, dass der Code in den PBR kopiert wird (Partitionsstartdatensatz, Vulgo-Bootsektor, nicht MBR), und dann wird der Code bearbeitet, um die Position der Datei fest zu codieren (daher wird ein Installationsprogramm benötigt). Ich werde etwas für Sie zusammenschustern.
Mirabilos
@Patrick Ich habe etwas Diskussionsbedarf, ich habe einen Chat
mirabilos
Können Sie mich mit grub auf Ihre Implementierung hinweisen? Ich habe derzeit grub-install, aber es erfordert immer noch die Boot-Partition gemountet werden.
Kopieren
@copy wird auf diese Weise in OpenADK verwendet, das eine noch flexiblere Image-Generierung als Grml aufweist (für das nur ein ISO 9660-Dateisystem erstellt werden muss). Vielleicht hilft das? Wenn nicht, nehmen Sie direkt mit mir Kontakt auf. - Edit: oh warte, nein, core.imgGeneration ... lass mal sehen ... hier nach dem grub-mkimageAnruf suchen . Dies hängt stark von der Zielumgebung ab (im Grunde genommen, welche Module benötigt werden, um die anderen dynamisch zu laden; GRUB 1 war viel einfacher).
Mirabilos
5

Wenn Sie eine Zeile hinzufügen, in der /etc/fstabFolgendes gesagt wird:

/dev/loop0      /mnt                                    ext4    defaults,user   0 0

Sie können dann /dev/loop0als normaler Benutzer die Bereitstellung aufheben / aufheben .

Und wenn Sie chown youruser:youruser <MOUNTPOINT> <LOOPDEVICE>dann tun extlinux, losetupkönnen mkfs, usw. als getan werden youruser.

BenjiWiebe
quelle
Ich möchte, dass dies Teil eines generischen Erstellungsprozesses ist, und der Speicherort der Abbilddatei und des Bereitstellungspunkts kann von Benutzer zu Benutzer unterschiedlich sein. Ich würde es vorziehen, die fstab nicht für jeden Benutzer zu bearbeiten.
@Patrick Editing fstab ist global.
BenjiWiebe
Aber losetup bleibt nur root, nein?
bmargulies
@bmargulies Nicht, wenn das Loop-Gerät chowned oder chmoded wurde, damit der Benutzer Zugriff darauf hat ... oder zumindest auf Fedora können Sie den Benutzer einfach der diskGruppe hinzufügen . (Oder erstellen Sie eine loopGruppe und verwenden Sie diese ...)
BenjiWiebe