preseed/late_command ubuntu 服务器 15.04

preseed/late_command ubuntu 服务器 15.04

我在 ubuntu 15.04 amd64 服务器安装(cmd 行安装)时遇到 preseed/late_command 问题

d-i preseed/late_command string in-target wget http://url

返回退出代码 1,并且该文件不在文件系统中。以下命令也会失败(创建脚本以便稍后下载此文件):

d-i preseed/late_command string echo "wget http://url"> /target/home/username/getscript.sh

而这个(只是作为测试)也失败了:

d-i preseed/late_command string apt-get install -y htop

有任何想法吗?

提前致谢!

蒂姆

答案1

在 Ubuntu 16.04 中我遇到了类似的问题,经过调查发现 wget 没有安装,所以我将它添加到了预置模板中

d-i pkgsel/include string ... wget

答案2

我的猜测是,您尝试检索的 URL 被重定向到 https://,并且链中的至少一个证书在安装环境中不受信任。安装环境与目标环境不同;安装环境是您在启动期间指向的临时内核和 initrd,而目标环境是实际安装的内核和文件系统。

在运行 preseed/late_command 时,目标环境被挂载在 /mnt/target 上,要在那里运行命令,您需要通过 chroot 进入该环境chroot /mnt/target。完成此操作后,您运行的所有命令都将影响目标环境,而不是安装环境。现在,关键是 debconf 为您提供了in-targetchroot 到目标的命令,运行给定的命令,然后退出并返回到安装环境。因此:

d-i preseed/late_command string apt-get install -y htop

尝试在安装环境(而不是“完成”的目标环境)中安装 htop,而:

d-i preseed/late_command string in-target apt-get install -y htop

尝试在完成的目标环境中安装 htop。

因此,现在我们安装到了正确的位置,但证书可能仍然不受信任,在这种情况下,您可以使用更多in-target命令修复信任问题,然后执行wget或将警告抛到最后并禁用 wget 的信任检查,如下所示:

d-i preseed/late_command string in-target wget -O /tmp/post-install.sh "https://foo.bar/postinstall.sh" --no-check-certificate; in-target chmod +x /tmp/post-install.sh; in-target /bin/bash /tmp/post-install.sh;

相关内容