Come posso installare syslinux / extlinux su un file immagine del disco senza richiedere i privilegi di root


13

Ho creato una distribuzione Linux domestica e posso creare il file di immagine del disco completo come utente non root con un'eccezione: l'installazione del caricatore di avvio. Sto usando syslinux (in realtà extlinux), e per installarlo devo montare in loop-back la partizione di avvio, che richiede i privilegi di root / sudo. I comandi vengono eseguiti da un makefile e i nomi delle variabili dovrebbero indicare chiaramente con cosa sostituirli.

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)

Esiste un modo per scrivere syslinux o extlinux nel file immagine del disco senza richiedere i privilegi di root?


Ti stai chiedendo se è possibile eseguire tutti quei comandi senza root? O solo il comando extlinux?
BenjiWiebe,

@BenjiWiebe Se esiste un altro modo, qualunque sia il comando richiesto, ma a quanto ho capito hai bisogno di un file system montato per eseguire extlinux, e quindi extlinux deve funzionare con i privilegi di root quando fatto in questo modo.

Risposte:


8

Questo è possibile per syslinux:

syslinux ~/floppy.ima

Il programma di syslinuxinstallazione contiene abbastanza magia per essere eseguito su un filesystem non montato. (In realtà, è progettato per farlo.) Il programma di extlinuxinstallazione prevede di essere eseguito su un filesystem montato.

È quasi certamente possibile dividere il programma di extlinuxinstallazione in una parte che copia i file ( qualcosa come mtools per FAT , che è raro ma sembra esistere , anche se si potrebbe semplicemente integrarli direttamente con genext2fs), e una parte che installa il bootector ( Potrei essere in grado di mettere insieme questo).

Ho fatto qualcosa del genere per GRUB 2, che si installa nello spazio tra l'MBR e la prima partizione, per Grml ; questo era in realtà più facile da fare perché GRUB, a differenza di SYSLINUX, non richiede molto dal settore di avvio. Dipende sostanzialmente dalle tue esigenze più ampie. Se la parte precedente su SYSLINUX non ti aiuta, contattami, in modo che possiamo risolvere qualcosa.


Grazie per queste informazioni Sto usando genext2fs, quindi il tuo suggerimento sembra l'opzione migliore. Si tratta semplicemente di inserire il codice extlinux nell'MBR e di copiare i file su fs o i file devono andare in certi blocchi all'interno di fs?

Non ho ancora guardato in dettaglio EXTLINUX (lo farà e poi cancellerò questo commento, ma mi concederà un po 'di tempo) ma per SYSLINUX, LILO, GRUB e altri bootloader, di solito è così che il codice viene copiato nel PBR (record di avvio della partizione, vulgo bootsector, non MBR), quindi il codice viene modificato per avere la posizione del file hardcoded in esso (da qui la necessità di un programma di installazione). Metterò insieme qualcosa per te.
mirabilos,

@Patrick Ho bisogno di discutere, ho aperto una chat
mirabilos

Puoi indicarmi la tua implementazione usando grub? Al momento ce l'ho grub-install, ma richiede comunque il montaggio della partizione di avvio.
copia il

@copy questo è come è usato in OpenADK, che ha generazione di immagini ancora più flessibile rispetto Grml (che ha solo bisogno di creare un file system ISO 9660). Forse questo aiuta? In caso contrario, contattami direttamente. - Modifica: oh aspetta, no, core.imggenerazione ... fammi vedere ... controlla qui per la grub-mkimagechiamata. Ciò dipende fortemente dall'ambiente di destinazione (in pratica, quali moduli sono necessari per caricare gli altri in modo dinamico; GRUB 1 era molto più semplice).
mirabilos,

5

Se aggiungi una riga /etc/fstabdicendo qualcosa del tipo:

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

è quindi possibile montare / smontare /dev/loop0come utente normale.

E se lo fai chown youruser:youruser <MOUNTPOINT> <LOOPDEVICE>, allora extlinux, losetup, mkfs, ecc può essere fatto come youruser.


Voglio che questo faccia parte di un processo di generazione generico e la posizione del file immagine e il punto di montaggio possono variare da utente a utente. Preferirei non richiedere la modifica di fstab per ogni utente.

@Patrick La modifica di fstab è globale.
BenjiWiebe,

Ma losetup rimane solo root, no?
bmargulies,

@bmargulies Non quando il dispositivo loop è stato chown o modificato in modo che l'utente abbia accesso ad esso ... o, almeno su Fedora, puoi semplicemente aggiungere l'utente al diskgruppo. (O crea un loopgruppo e
usalo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.