我已经构建了一个自制的 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 权限?
答案1
这对于以下情况是可能的syslinux
:
syslinux ~/floppy.ima
安装syslinux
程序包含足够的魔力,可以在未安装的文件系统上运行。 (事实上,它就是为了做到这一点而设计的。)extlinux
不过,安装程序希望在已安装的文件系统上运行。
几乎可以肯定,可以将extlinux
安装程序分成复制文件的部分(类似于 FAT 的 mtools,即稀有的但似乎存在,尽管可以直接将它们与genext2fs
) 和安装引导扇区的部分集成(我也许可以将其拼凑在一起)。
我对 GRUB 2 做了类似的操作,它安装到 MBR 和第一个分区之间的空间中,用于格米尔;这实际上更容易做到,因为 GRUB 与 SYSLINUX 不同,不需要引导扇区那么多。这基本上取决于您更广泛的要求。如果以上有关 SYSLINUX 的部分对您没有帮助,请与我联系,以便我们可以解决问题。
答案2
如果你添加一行/etc/fstab
这样的话:
/dev/loop0 /mnt ext4 defaults,user 0 0
然后您可以/dev/loop0
作为普通用户安装/卸载。
如果你chown youruser:youruser <MOUNTPOINT> <LOOPDEVICE>
这样做extlinux
,那么losetup
,,mkfs
等等可以完成youruser
。