如何在不要求root特权的情况下将syslinux / extlinux安装到磁盘映像文件


13

我已经建立了自己的Linux发行版,并且可以以非root用户的身份制作完整的磁盘映像文件,但有一个例外-安装引导加载程序。我使用的是syslinux(实际上是extlinux),要安装它,我必须环回安装引导分区,该分区需要root / sudo特权。这些命令是从makefile运行的,并且变量名应清楚指示替换它们的内容。

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)

有没有一种方法可以将syslinux或extlinux写入磁盘映像文件而无需root特权?


您是否想知道是否可以在没有root的情况下执行所有这些命令?还是仅仅是extlinux命令?
BenjiWiebe 2014年

@BenjiWiebe如果有另一种方法,那么需要任何命令,但是据我了解,您需要一个已挂载的文件系统才能运行extlinux,然后以这种方式运行时,extlinux需要以root特权运行。

Answers:


8

这可能适用于syslinux

syslinux ~/floppy.ima

syslinux安装程序包含足够的魔法要在一个文件系统卸载运行。(实际上,它是为此目的而设计的。)extlinux尽管如此,安装程序仍希望在已安装的文件系统上运行。

这几乎是绝对有可能的分裂extlinux安装到部分那份文件(类似的mtools为FAT,这是罕见的,但似乎存在,尽管人们可以只需直接将它们集成genext2fs),并安装启动扇区(部分我也许可以将其拼凑在一起)。

我对GRUB 2做了类似的事情,GRUB 2安装在MBR和第一个分区之间的空间中,对于Grml;这实际上更容易实现,因为GRUB与SYSLINUX不同,不需要引导区那么多的内容。它基本上取决于您的更广泛的要求。如果以上有关SYSLINUX的部分对您没有帮助,请与我联系,以便我们可以解决问题。


多谢告诉我这个消息。我正在使用genext2fs,所以您的建议听起来像是最好的选择。仅仅是将extlinux代码添加到MBR中并将文件复制到fs,还是文件需要进入fs内的某些块中?

我还没有详细研究EXTLINUX(这样做,然后删除此注释,但请给我一点时间),但是对于SYSLINUX,LILO,GRUB和其他引导加载程序,通常是将代码复制到PBR中。 (分区引导记录,vulgo引导扇区,而不是MBR),然后对代码进行编辑以在其中硬编码文件的位置(因此需要安装程序)。我会为你拼凑些东西。
mirabilos

@Patrick我对此有一些讨论的需要,我开始聊天
mirabilos 2014年

您能指出我使用grub的实现吗?我目前有grub-install,但仍然需要安装启动分区。
复制

@copy 是它是如何在OpenADK,它具有更加灵活的图像生成比GRML(只需要创建一个ISO 9660文件系统)使用。也许有帮助吗?如果没有,请直接与我联系。-编辑:哦,等等,不,core.img一代……我看到了…… 在这里查看grub-mkimage电话。这高度依赖于目标环境(基本上,动态加载其他模块需要哪些模块; GRUB 1容易得多)。
mirabilos

5

如果您添加一行,/etc/fstab例如:

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

然后您可以/dev/loop0以普通用户身份进行装载/卸载。

如果你这样做chown youruser:youruser <MOUNTPOINT> <LOOPDEVICE>,然后extlinuxlosetupmkfs,等可以做到youruser


我希望这成为通用构建过程的一部分,并且映像文件和安装点的位置可能因用户而异。我不希望不需要为每个用户编辑fstab。

@Patrick编辑fstab是全局的。
BenjiWiebe 2014年

但是,lostup仍然仅是root用户,不是吗?
bmargulies 2015年

@bmargulies不是在对循环设备进行chown's或chmod's以便用户可以访问它的时候……或者至少在Fedora上,您可以将用户添加到disk组中。(或创建一个loop小组并使用该小组...)
BenjiWiebe 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.