我想在安装 Ubuntu 后立即运行一些命令。因此我想到使用预置概念。我提取了我的 iso 并在 preseed 文件夹中将以下行附加到 custom.seed 文件
di preseed/late_command 字符串在目标 mkdir /home/abc
现在我重新打包了iso并使用它安装了ubuntu..但是没有发生任何变化..我在这里做错了什么?
答案1
我不能告诉你这有什么问题,但我可以告诉你我是如何在经过大量的尝试和错误后让我的工作正常工作的。
我的要求是将新文件和替换文件打包到 ISO 中,并在安装后运行脚本。
预置文件:
d-i preseed/late_command string /bin/sh -c "$(cat /setup.sh); exit 0"
毫无疑问,这是一种奇怪的运行脚本的方式,但它确实有效。
安装程序.sh:
# [ hardware/hosting detection, other customizations ]
# set PackageList string
in-target --pass-stdout /bin/sh -c \
"apt-get update &&
apt-get install -y $PackageList &&
apt-get dist-upgrade -y
"
该脚本在重新启动后丢失的安装程序环境中运行。您必须使用该in-target
命令在安装的环境中运行。
此处解压 ISO 的现有流程
initrd 中的打包文件
initrd
是一个文件系统存档,在启动和安装程序运行的环境中扩展。setup.sh
我的例子中的文件需要复制到该存档。
扩张 initrd
档案
cd $ExpandedISO/install
mkdir initrd
cd initrd
gzip -dc ../initrd.gz | cpio -id --no-absolute-filenames
复制新文件进入扩展initrd
目录。
重建 initrd
档案:
# in $ExpandedISO/install/initrd/
find . | cpio -o -H newc | gzip > ../initrd.gz
# expanded dir can now be deleted to not take up space in ISO
rm -rf $ExpandedISO/install/initrd/
此处重新打包 ISO 的现有流程