使用自定义 initramfs 和来自存储库服务器的 cdrom 自动安装 Ubuntu 20.04

使用自定义 initramfs 和来自存储库服务器的 cdrom 自动安装 Ubuntu 20.04

我想自动安装 Ubuntu 20.04

我正在虚拟机(vmware)上创建一个具有修改后的 initramfs(包含一些我稍后需要的文件)的可启动分区。

该分区安装在另一台服务器上,因此我通过这种方式复制到该分区。

我在存储库服务器上有 Ubuntu 20.04 的解压 iso。

当我重新启动机器时,我希望执行可启动分区中的内核/initramfs,然后安装 Ubuntu 20.04 并从存储库服务器中获取数据。

引导加载程序(grub)配置设置如下:

 kernel vmlinuz autoinstall ds=nocloud;s=/cdrom/nocloud
 initrd initrd custom-init

在 custom-init 中我有自动安装配置。

虚拟机重新启动并开始安装,但一段时间后触发 42 错误,未找到 cdrom。

答案1

这可能就是您正在尝试做的事情的一个例子。

为自定义 initrd 文件创建目录结构。

mkdir custom-init
cd custom-init
mkdir autoinstall
mkdir -p conf/conf.d

创建自动安装配置文件。您将需要使用完整的user-data文件。这只是一个基本示例。

cat <<EOF > autoinstall/meta-data 
instance-id: focal-autoinstall
EOF
cat <<EOF > autoinstall/user-data
#cloud-config
autoinstall:
  version: 1
EOF

创建脚本以将autoinstall目录复制到/run。安装介质中的 initrd 将在启动安装程序之前更改根文件系统(下位性)。安装程序无法访问 initrd 根文件系统,但/run更改根文件系统后分区仍然存在。将 initrd 中捆绑的文件放入 中,即可让安装程序使用这些文件/run。这个脚本是一个非常笨拙的解决方案,但我费了好大劲才找到另一种方法从自定义 initrd 运行脚本。

cat <<EOF > conf/conf.d/autoinstall.conf
echo 'cp -r /autoinstall /run/' >> /scripts/init-top/ORDER
EOF

创建自定义的 initrd。

find . | cpio --create --format='newc' | gzip > ../custom.gz

我使用以下命令通过 PXE 启动 Grub 进行了测试menuentry。我发现我必须/custom.gz 第一的在 initrd 文件列表中。

menuentry "Focal Live Installer - automated" --id=install_focal_live_unattended {
    echo "Loading Kernel..."
    linux /vmlinuz "ds=nocloud;s=file://run/autoinstall/" ip=dhcp url=http://${pxe_default_server}/tftp/ubuntu-20.04.4-live-server-amd64.iso autoinstall cloud-config-url=/dev/null root=/dev/ram0 ---
    echo "Loading Ram Disk..."
    initrd /custom.gz /initrd
}

我使用 Ubuntu 20.04.4 安装程序对此进行了测试。

相关内容