我在 http 服务器上使用 CentOS 6 netinstall ISO 和一些 kickstart 文件。当 ISO 启动时,我按下 TAB 并输入启动选项asknetwork ks=http://<ip-address>/path/to/kickstart.ks
。
我的 kickstart 文件没有参数network
,所以它应该会提示。当我省略它时,asknetwork
它会尝试使用 DHCP。asknetwork
它只会提示输入 IP 信息。
不幸的是,anaconda 一心想自动发现主机名,最终只能对 IP 进行反向 DNS 查找,或者localhost.localdomain
什么也没找到。
有没有办法让 anaconda 提示输入主机名,或者通过自定义启动选项预先输入主机名?
CentOS 5 中曾经有这个network --bootproto=query
功能,但是在 CentOS 6 中不再起作用。
答案1
我直接在 kickstart 文件中设置了主机名。
如果您尝试重复使用相同的模板,您可以发挥创意,使用一些 PHP 将某些内容传递给安装程序。Kickstart 文件是 http,因此您可以执行以下操作:
ks=http://repo.brazzers.com/ks/kickstart.php?hostname=kitty
...在哪里猫咪--hostname=
是 kickstart 文件中填充参数的变量
或者更好的方法是使用更强大的配置框架,例如皮匠。
答案2
我更喜欢使用 bash 的这种方法:
%include /tmp/network.txt
%pre
#!/bin/sh
exec < /dev/tty3 > /dev/tty3 2>&1
chvt 3
hn=""
while [ "$hn" == "" ]; do
clear
echo " *** Please enter the following details: *** "
echo
read -p "Hostname: " hn
done
clear
chvt 1
echo "network --device eth0 --bootproto static --noipv6 --hostname ${hn}" > /tmp/network.txt
答案3
我尝试使用 virt-install 来实现这一点,并找到了一篇博客文章,其中有一个很好的解决方案。该解决方案使用在启动时传递给内核的 /proc/cmdlines,使用预 kickstart 部分提取主机名,并写入临时文件,然后将其包含在主 kickstart 部分中。
http://monzell.com/post/15547967527/automatically-set-the-hostname-during-kickstart
该博客是关于在 KVM 中启动虚拟机的。但我看不出这在任何其他可以轻松传递内核启动参数的启动场景中不起作用的原因。