我想快速启动几十台 RHEL6/SL6 服务器。但是,其中一些服务器不同,我不想为每类服务器创建一个新的 ks.cfg 文件。
有没有什么方法可以从模板动态地生成 Kickstart 文件?
例如,如果我将这样的一行附加到内核:
APPEND ks=http://192.168.1.100/cgi-bin/ks.cgi ip=dhcp
然后脚本 ks.cgi 可以确定这是哪个主机(通过 MAC 地址),并打印出适合该主机的 Kickstart 选项。我可以选择通过向脚本传递参数来覆盖某些选项,如下所示:
APPEND ks=http://192.168.1.100/cgi-bin/ks.cgi?NODETYPE=production&IP=192.168.2.80
启动服务器后,我们在该系统上激活 Cfengine/Puppet,并使用我们最喜欢的配置管理产品管理系统。
我们正在尝试猫但事实证明这太麻烦了。我研究过皮匠,但我不确定它是否能做到这一点。
更新:
O'Reilly 书中讨论了一种自行解决的解决方案:使用 Kickstart 和 Yum 管理基于 RPM 的系统,第 3 章自定义您的 Kickstart 安装 > 动态 ks.cfg,这与该帖子中的一些评论相呼应:
实现这样的工具超出了本 Short Cut 的范围,但我可以介绍一下高级设计。任何这样的解决方案都会将数据存储(变化的内容)与模板解决方案(不变的内容)混合在一起。数据存储将保存每台机器的数据,例如 IP 地址和主机名。您还需要一个唯一标识符,可能是主机名,以便您可以获取给定机器的数据。数据存储可以是平面文件、XML 数据或关系数据库,例如 PostgreSQL 或 MySQL。
反过来,要调用该系统,您需要将机器的唯一标识符作为 URL 参数传递。例如:
启动:linux ks=http://your.kickstart.server/gen_config?host-server25
在这个例子中,CGI(或 servlet,或其他)为机器 server25 生成一个 ks.cfg。
但是 ks.cgi 的代码在哪里呢?
答案1
由于您已经在使用 Puppet,您还可以查看领班用于高级 kickstart 模板。
Foreman 使用 ruby 模板,允许灵活kickstart 模板。
答案2
我部署了一个简单的专有解决方案,其中我使用 PHP 作为模板语言,并且 kickstart 文件由本地服务器上的 PHP 脚本动态生成。
如果你知道如何编写 kickstart 文件,那么创建这样一个东西的过程非常简单(请参阅此Red Hat 文档如果你想了解如何操作:
- 创建基本的 kickstart 文件(其中包含一些您希望“模板化”的参数的默认值)。
- 将 kickstart 保存到 Web 服务器上带有 .php 扩展名的文件中。我使用 -kickstart.php
- 在 kickstart 文件中添加 PHP 代码以读取 URL 参数并设置正确的数据,然后用 PHP 变量的输出替换步骤 1 中的默认值
例如,替换
network --device eth0 --bootproto dhcp --hostname SOME_STATIC_HOSTNAME
和
network --device eth0 --bootproto dhcp --hostname <?php echo $hostname;?>
基本上就是这样。
我希望有漂亮的 URL,因此引导加载程序会显示类似以下内容的内容:
linux ksdevice=eth0 ks=http://myserver/kickstart/rhel6/networkname/servername/ks.cfg
所有参数均指定为路径元素。为此,我.htaccess
为 Apache Web 服务器创建了一个文件,如下所示:
RewriteEngine On
RewriteBase /kickstart
RewriteRule kickstart/(.*) /company-kickstart.php/$1
然后 PHP 脚本执行以下操作:
<?php
list($empty,$os,$envtype,$hostname,$notimportant) =
explode("/",$_SERVER['PATH_INFO']);
header("Content-Type: text/plain"); # important, otherwise kickstart fails
?>
# Kickstart file automatically generated by my script.
#version=<?php echo $os;?>
install
url --url=http://my.local.mirror/<?php echo $os;?>/os/x86_64
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto dhcp --hostname <?php echo $hostname;?>
# ... rest of kickstart parameters
答案3
Cobbler 支持 kickstart 配置文件,但 kickstart 与 PHP 配合得很好,因此您可以在行中传递参数ks=...
。您可能最终会自己编写脚本。