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

Pat*_*ick 13 not-root-user system-installation syslinux disk-image

我已经构建了一个本土的 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)
Run Code Online (Sandbox Code Playgroud)

有没有办法在不需要root权限的情况下将syslinux或extlinux写入磁盘映像文件?

mir*_*los 8

这是可能的syslinux

syslinux ~/floppy.ima
Run Code Online (Sandbox Code Playgroud)

syslinux安装程序包含足够的魔法要在一个文件系统卸载运行。(事实上​​,它就是为此而设计的。)不过,extlinux安装程序希望在已挂载的文件系统上运行。

几乎肯定可以将extlinux安装程序分成复制文件的部分(类似于用于 FAT 的 mtools,这种情况很少见似乎存在,尽管可以直接将它们与 集成genext2fs),以及安装引导扇区的部分(我也许可以拼凑起来)。

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


Ben*_*ebe 5

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

/dev/loop0      /mnt                                    ext4    defaults,user   0 0
Run Code Online (Sandbox Code Playgroud)

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

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