我在 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-target
chroot 到目标的命令,运行给定的命令,然后退出并返回到安装环境。因此:
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;