Kickstart:通过CGI或PHP脚本提供dynamickickstart图像?

我想Kickstart几个RHEL6 / SL6服务器。 但是,其中一些服务器是不同的,我不想为每个类的服务器创build一个新的ks.cfg文件。

有没有什么办法可以从模板上dynamic生成Kickstart文件?

例如,如果我将这样的一行添加到内核:

APPEND ks=http://192.168.1.100/cgi-bin/ks.cgi ip=dhcp 

然后脚本ks.cgi可以确定这是什么主机(通过MAC地址),并打印出适合该主机的Kickstart选项。 我可以select通过传递参数到脚本来覆盖一些选项,如下所示:

 APPEND ks=http://192.168.1.100/cgi-bin/ks.cgi?NODETYPE=production&IP=192.168.2.80 

在我们启动服务器之后,我们在这个系统上激活Cfengine / Puppet并使用我们最喜欢的configurationpipe理产品来pipe理系统。

我们正在尝试使用xCAT,但这样做太麻烦了。 我已经看过了补鞋匠 ,但我不确定这是否。

更新:

在O'Reilly的书中讨论了自己的解决scheme: 使用Kickstart和Yumpipe理基于RPM的系统,第3章。自定义你的Kickstart安装>dynamicks.cfg ,它反映了这个线程中的一些注释:

实现这样一个工具已经超出了这个捷径的范围,但我可以通过高层次的devise。 任何这样的解决scheme将混合数据存储(改变的东西)与模板解决scheme(不改变的东西)。 数据存储将保存每台机器的数据,例如IP地址和主机名。 你还需要一个唯一的标识符,也许是主机名,这样你可以拿起一台机器的数据。 数据存储可以是平面文件,XML数据或关系数据库,例如PostgreSQL或MySQL。

反过来,为了调用系统,您将一个机器的唯一标识符作为URLparameter passing。 例如:

boot:linux ks = http://your.kickstart.server/gen_config?host-server25

在这个例子中,CGI(或servlet,或其他)为机器server25生成一个ks.cfg。

但是,哦,在哪里,是ks.cgi的代码?

既然你已经在使用傀儡,你还可以看看福尔曼先进的kickstart模板。

工头使用ruby模板,允许灵活的kickstart模板 。

我有一个简单的专有解决scheme,我使用PHP作为模板语言,而kickstart文件是由本地服务器上的PHP脚本实时生成的。

如果你知道如何编写kickstart文件,创build这样的事情的过程是非常简单的(如果你想学习如何,请参阅这个红帽文档 ):

  1. 创build你的基本kickstart文件(有一些你希望“templatize”的参数的默认值)。
  2. 将kickstart保存到您的networking服务器上的一个扩展名为.php的文件中。 我使用-kickstart.php
  3. 在kickstart文件中添加PHP代码以读取URL参数并设置正确的数据,然后将步骤1中的默认值replace为PHPvariables的输出

例如,replace

 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 

将所有参数指定为path元素。 为此,我为Apache网页服务器创build了一个.htaccess文件,如下所示:

 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 

Cobbler支持kickstartconfiguration文件 ,但是kickstart在PHP中运行得非常好,所以你可以在你的ks=...行中传递参数。 你可能最终自己写脚本。