Kickstart:通过 CGI 或 PHP 脚本提供动态 kickstart 图像?

Kickstart:通过 CGI 或 PHP 脚本提供动态 kickstart 图像?

我想快速启动几十台 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 文档如果你想了解如何操作:

  1. 创建基本的 kickstart 文件(其中包含一些您希望“模板化”的参数的默认值)。
  2. 将 kickstart 保存到 Web 服务器上带有 .php 扩展名的文件中。我使用 -kickstart.php
  3. 在 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=...。您可能最终会自己编写脚本。

相关内容