如何在没有root权限的情况下在映像文件上安装grub?

时间:2016-06-27 09:06:36

标签: boot grub grub2

我正在做一个需要生成vm映像文件的项目,然后将其用作qemu可启动磁盘映像。以前,我们的产品就像一个改进的Linux系统,制作成USB安装驱动器,然后启动并安装到裸机上。但现在我们想要摆脱硬件并在虚拟机中运行它,这就是我们需要图像文件的原因。

不是使用现有的USB驱动器在qemu中安装系统然后关闭虚拟机并获取图像,我们被要求直接制作一个开箱即用的图像文件,并跳过所有启动和安装在真机或虚拟机上,但仍然可以获得已安装的映像,这样我们就可以提供此映像,人们可以将此映像作为即用型虚拟机映像加载。

但在所有程序中,我不能使用任何需要root权限的命令!不要问为什么,对我们的项目有一大堆限制,我不能使用root权限,没有sudo,没有su,只有普通用户可以做的任何事情....

我已经实现的部分是使用最新版本的mke2fs -d命令将文件夹和文件树填充到此图像文件的不同分区中,如下所示

假设图像启动后,我们有这些文件夹结构

$ ls /
$ bin dev boot  home lib32   mnt  proc  run srv  tmp var  boot  data   etc  lib lib64  opt  root  sbin  sys  usr  

某些文件夹由不同的分区挂载

从图像中提取单个分区

dd if=image of=partitionN skip=offset_of_partition_N count=size_of_partition_N bs=512 conv=sparse

将文件夹填充到分区

mke2fs -d root_dir/etc partitionN

将分区放回图像

dd if=partitionN of=image seek=offset_of_partition_N count=size_of_partition_N bs=512 conv=sparse,notrunc

我们将映像中的第一个分区作为启动分区,其中包含' boot'文件夹,一旦启动就会挂载在/ boot下。

此启动分区是EFI兼容分区(实际上似乎是FAT32格式),因为我们的项目需要这样。

BUT 在将所有分区成功填充到映像中之后,我找不到为此可引导映像安装grub的方法。 这是使该图像可启动所需的最重要的步骤

我在网上找到的所有解决方案都建议循环安装映像的启动分区,这是我无法做到的,因为没有root权限我无法循环挂载映像。

那么任何人都知道如何做到这一点吗?

我试着理解grub如何将原始值写入mbr,以及如何从mbr中的值中找到stage1和stage2,以及如何在stage2的第一个扇区结束时找出扇区列表,但是& #39;太疯狂了,我最终没能得到这个技巧。

0 个答案:

没有答案