¿Cómo instalo syslinux / extlinux en un archivo de imagen de disco sin requerir privilegios de root

13

He creado una distribución de Linux propia y puedo crear el archivo de imagen de disco completo como usuario no root con una excepción: instalar el cargador de arranque. Estoy usando syslinux (en realidad, extlinux), y para instalarlo tengo que montar en bucle la partición de arranque, que requiere privilegios de root / sudo. Los comandos se ejecutan desde un archivo MAKE y los nombres de las variables deben indicar claramente con qué reemplazarlos.

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)

¿Hay alguna manera de escribir syslinux o extlinux en el archivo de imagen de disco sin requerir privilegios de root?

Patricio
fuente
¿Te preguntas si es posible hacer todos esos comandos sin root? ¿O solo el comando extlinux?
BenjiWiebe
@BenjiWiebe Si hay otra forma, entonces, sea cual sea el comando requerido, pero según tengo entendido, necesita un sistema de archivos montado para ejecutar extlinux, y luego extlinux debe ejecutarse con privilegios de root cuando se hace de esta manera.

Respuestas:

8

Esto es posible para syslinux:

syslinux ~/floppy.ima

El syslinuxinstalador contiene suficiente magia para ejecutarse en un sistema de archivos desmontado. (De hecho, está diseñado para hacer eso). Sin extlinuxembargo, el instalador espera ejecutarse en un sistema de archivos montado.

Es casi seguro que sea posible dividir el extlinuxinstalador en una parte que copie los archivos ( algo así como mtools para FAT , que es raro pero parece existir , aunque uno podría integrarlos directamente genext2fs), y una parte que instala el sector de arranque ( Podría ser capaz de improvisar esto juntos).

Hice algo como esto para GRUB 2, que se instala en el espacio entre el MBR y la primera partición, para Grml ; En realidad, esto era más fácil de hacer porque GRUB, a diferencia de SYSLINUX, no requiere tanto del sector de arranque. Básicamente depende de sus requisitos más amplios. Si la parte anterior sobre SYSLINUX no lo ayuda, contácteme para que podamos resolver algo.

mirabilos
fuente
Gracias por la información. Estoy usando genext2fs, por lo que su sugerencia suena como la mejor opción. ¿Es simplemente una cuestión de dd'ing el código extlinux en el MBR y copiar los archivos a la fs, o los archivos deben ir en ciertos bloques dentro de la fs?
Todavía no he visto EXTLINUX en detalle (lo haré y luego eliminaré este comentario, pero deme un poco de tiempo), pero para SYSLINUX, LILO, GRUB y otros cargadores de arranque, generalmente es para que el código se copie en el PBR (registro de inicio de partición, sector de inicio de vulgo, no MBR), y luego el código se edita para tener la posición del archivo codificada (de ahí la necesidad de un instalador). Prepararé algo para ti.
mirabilos
@Patrick Tengo alguna necesidad de debatir sobre esto, abrí un chat
mirabilos
¿Me puede indicar su implementación usando grub? Actualmente lo tengo grub-install, pero aún requiere que se monte la partición de arranque.
copiar
@copy así es como se usa en OpenADK, que tiene una generación de imágenes aún más flexible que Grml (que solo necesita crear un sistema de archivos ISO 9660). Quizás eso ayuda? Si no, contáctame directamente. - Editar: oh espera, no, core.imggeneración ... déjame ver ... verifica aquí la grub-mkimagellamada. Esto depende en gran medida del entorno de destino (básicamente, qué módulos son necesarios para cargar los otros dinámicamente; GRUB 1 fue mucho más fácil).
mirabilos
5

Si agrega una línea al /etc/fstabdecir algo como:

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

luego puede montar / desmontar /dev/loop0como usuario normal.

Y si lo hace chown youruser:youruser <MOUNTPOINT> <LOOPDEVICE>a continuación extlinux, losetup, mkfs, etc se puede hacer tan youruser.

BenjiWiebe
fuente
Quiero que esto sea parte de un proceso de construcción genérico, y la ubicación del archivo de imagen y el punto de montaje pueden variar de un usuario a otro. Preferiría no requerir la edición de fstab para cada usuario.
@Patrick Editing fstab es global.
BenjiWiebe
Pero losetup sigue siendo solo raíz, ¿no?
bmargulies
@bmargulies No cuando el dispositivo de bucle ha sido conocido o modificado para que el usuario tenga acceso a él ... o, al menos en Fedora, solo puede agregar el usuario al diskgrupo. (O cree un loopgrupo y
úselo