如何将 partman 分区配方文件添加到 Ubuntu preseed 的“di 环境”中

如何将 partman 分区配方文件添加到 Ubuntu preseed 的“di 环境”中

Ubuntu 预置文档指定可以将单独的分区配方作为预置文件的值传递:

# Or provide a recipe of your own...
# If you have a way to get a recipe file into the d-i environment, you can
# just point at it.
#d-i partman-auto/expert_recipe_file string /hd-media/recipe

我已经使用“内联”配置方法获得了一个自定义分区方案,其中整个配方是单个反斜杠转义的行。但是,recipe当文件保存为单独的文件时,我似乎无法让安装程序找到它。从 ISO 启动时出现错误:

无法对选定的磁盘进行分区

Ubuntu 文档中将配方文件放入 di 环境? 我具体该怎么做?

这是安装程序的环境还是目标?/hd-media/在上面的例子中,是否假定它存在于 ISO 或其他地方?如果不是,我具体应该将配方文件放在哪里,以便安装程序可以找到它,而不是将整个内容内联?


更多背景信息:我正在通过以下方式创建“重新制作的” ISO:

  • 下载库存 Ubuntu ISO
  • 以只读方式挂载
  • 将挂载点复制到临时目标
  • 修改临时目录中的 isolinux/txt.cfg 等文件
  • 重新打包mkisofs

我有一个自定义.seed文件/preseed/ubuntu-custom.seed,其中包含

d-i     partman-auto/method                         string  lvm
d-i     partman/default_filesystem                  string  ext4
d-i     partman-auto/choose_recipe                  select  boot-root
d-i     partman-auto/expert_recipe                  string  /hd-media/recipe

并执行:

cp -LTf "${DIR}/ubuntu-server-unattended.seed" preseed/ubuntu-server-unattended.seed
if [[ ! -d hd-media ]]; then
    mkdir hd-media
fi
cp -LTf "${DIR}/recipe" hd-media/recipe

我的猜测是这是错误的,因为它最终出现在目标上,而不是“di 安装程序环境”,不管它到底是什么意思。

例如,将模板文件从源代码控制复制到用于存放新 ISO 内容的临时目录中。

我知道问题是不是与菜谱本身一起使用,因为它在“单线版本”中运行良好,例如

d-i     partman-auto/expert_recipe                  string  \
    boot-root ::                                            \
        500 1000 1000 ext2                                  \
            $primary{ }                                     \
            $bootable{ }                                    \
            method{ format }                                \
            format{ }                                       \
            use_filesystem{ }                               \
            filesystem{ ext2 }                              \
            label{ boot }                                   \
            mountpoint{ /boot }                             \
        .                                                   \
        4000 8000 8000 $default_filesystem                  \
            $lvmok{ }                                       \
            lv_name{ RootVol }                              \
            method{ format }                                \
            format{ }                                       \
            use_filesystem{ }                               \
            mountpoint{ / }                                 \
            $default_filesystem{ }                          \
            options/defaults{ defaults }                    \
            options/discard{ discard }                      \
            options/iversion{ iversion }                    \
        .                                                   \

(以上为节选版本。)

在单独的配方文件过程中,我只需将其转移到recipe并删除反斜杠即可。

答案1

配方文件应该在安装程序环境中,不是在目标中。要将文件添加到安装程序环境中,我有时会使用包含以下内容的预置文件

d-i partman/early_command string \
  wget -O /run/my_recipe http://someserver/path/to/recipe ;

d-i partman-auto/expert_recipe_file string /run/my_recipe

如果您将配方文件添加到自定义 ISO 并从中启动,那么我希望 ISO 上的文件可以在安装程序环境中使用基本路径访问/cdrom。我基于本文档部分展示访问不同安装介质上的文件的示例。

- if you're booting a remastered CD or image:
  preseed/file=/cdrom/preseed.cfg
...
- if you're installing from USB media (put the preconfiguration file in the
  toplevel directory of the USB stick):
  preseed/file=/hd-media/preseed.cfg

还可以使用 VT2 直接检查安装程序环境。Alt-F2如果您有控制台访问权限,请使用它来打开它并Alt-F1返回到主安装程序 UI。这对于解决诸如查找文件路径之类的问题很有用。

请注意,Ubuntu 安装程序各有不同。根据您的进度,您似乎正在使用支持预置的安装程序。

  • Ubuntu 桌面安装程序 ( ubiquity) 支持预安装,但需要进行一些自定义
  • Ubuntu Live Server 安装程序 ( subiquity)不是使用 preseed 并启动20.04提供其自己的autoinstall功能
  • Ubuntu Legacy Server Installer ( debian-installer/ d-i) 支持预置,但不会为之后的版本创建20.04

相关内容