Necessitava de algo para gerar meus arquivos de kick start para instalar as máquinas virtuais do Xen diferente do disponibilizado pela distribuição, procurei algo prático na net e não encontrei, por isso desenvolvi em php um gerador , ainda é simples, falta fazer com que pegue a lista de arquivos gerados (para não ficar perdido no servidor) , aumentar as opções de parâmetros do kick start... mas para mim neste instante onde estou fazendo muita instalação de VMs é suficiente ... deixo aqui para quem precisar ... é só copiar abaixo da linha pontilhada ...
------------------------------------------------------------------------------------------------------
<?php
/*
* Gerador de arquivo kick start p/ instalação de Vms da Xen
* Criado por Jose Edson Moreno Jr < jemorenojr@ig.com.br >
* V 0.1 - 17/03/2008
*
*/
$ping = '/bin/ping';
// Diretorio relativo onde irão ficar os arquivos gerados
$dir_files = "files";
// URL de instalação
$url_fonte = "http://< servidor onde contem os arquivos de instalacao >/rhas51/" ;
// Senha que sera aplicado ao root (usar aspas simples para limitar a senha)
$senha_root = '$1$vd0kAVa5$FNusNrVU54bo2SBC2GV2A';
// Volume logico onde montara a VM
$dev_vm = "/dev/Vol";
// Dispositivo de rede utilizado na VM
$device = "eth0";
// Template para criar o arquivo ks
$ks="# Kickstart - Gerado por geraks.php em " . date("l d \of F Y H:i:s");
$ks= $ks . "\ninstall\nurl --url $url_fonte\n\n# debugging\n";
$ks= $ks . "#interactive\nlang en_US.UTF-8\nkeyboard br-abnt2\n\n";
$ks= $ks . "# Network information\n";
$ks1= "# Reboot after installation\nreboot\nrootpw --iscrypted $senha_root/\n";
$ks1= $ks1 . "firewall --disable\nauthconfig --enableshadow --enablemd5\nselinux --disable\n";
$ks1= $ks1 . "timezone --utc America/Sao_Paulo\n\n# Particionamento\nbootloader --location=mbr --driveorder=xvda\n";
$ks1= $ks1 . "clearpart --linux\npart / --fstype ext3 --size=100 --grow\npart swap --size=3000 --asprimary";
$ks1= $ks1 . "\n%packages\n@admin-tools\n@base\n@core\n@development-libs\n@development-tools\n";
$ks1= $ks1 . "@editors\n@system-tools\n@text-internet\npostfix\n\n%post\nrpm -e nss_ldap.i386\n";
$ks1= $ks1 . "rpm -e sendmail\nmkdir /iG\necho \"alias vi=vim\" > > /etc/profile\n";
$ks1= $ks1 . "echo \"set bg=dark\" > > /etc/vimrc\n";
$ip_erro=0;
$gateway_erro=0;
$mask_erro=0;
$dns_erro=0;
$app_erro=0;
$numero_erro=0;
$memoria_erro=0;
$bridge_erro=0;
$nome_vm_erro=0;
$virtual=0;
$ip="";
$gateway="";
$mask="255.255.255.0";
$dns="200.204.0.104";
$localizacao="spo";
$so="l";
$app="";
$tipoapp="a";
$numero="0";
$memoria="128";
$nome_vm="";
$bridge="xenbr0";
$Autoriza = "0" ;
function testa_ip($ip) {
global $ping;
/* Retornos possiveis
0 - ip ok e existe na rede
1 - ip ok e nao existe na rede
2 - ip inválido
*/
$ret_ip = 0;
// Testa a válidade do ip
if (($longip = ip2long($ip)) !== false) {
// Testa se o ip existe na rede
system ( "$ping -c 1 $ip > /dev/null 2 > /dev/null",$ret_ip);
return $ret_ip;
} else {
return 2;
}
}
function testa_mask ($mask)
{
/* Testa a mascara convertendo para binario e verificando a seguencia de
* bits, para uma mascara correta não pode se ter no digitos mais significativos
* sequencia de bits alternando
*/
$mask_bin = decbin (ip2long ( $mask ));
$pos = strlen ($mask_bin) - 1;
$erro = 0;
if (( $pos == 31 ) || ( $pos == 0 )) {
$flag_bit = 0;
while ( $pos > -1 ) {
if ( $mask_bin[$pos] == 1 ) {
$flag_bit = 1;
}
if (( $mask_bin[$pos] == 0 ) && ( $flag_bit == 1)) {
$erro = 1;
}
$pos = $pos - 1;
}
} else {
$erro = 1;
}
return $erro;
}
print ( '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
< html lang="pt-BR" >
< head >
< title >Gerador de kickstart para instalar VMs< /title >
< meta name="GENERATOR" content="Quanta Plus" >
< meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
< /head >
< body >
< /body >
');
if ( $_POST ) {
// verifica as variaveis do POST
if ($_POST['ip'] == "") {
$ip_erro = 3;
} else {
$ip=$_POST['ip'];
$ip_erro = testa_ip ( $ip );
if ( $ip_erro == 0 ) {
$ip_erro = 1;
} else if ( $ip_erro == 1 ) {
$ip_erro = 0;
}
}
if ($_POST['gateway'] == "") {
$gateway_erro = 3;
} else {
$gateway=$_POST['gateway'];
$gateway_erro = testa_ip ( $gateway );
}
if ($_POST['mask'] == "") {
$mask_erro = 3;
} else {
$mask=$_POST['mask'];
$mask_erro = testa_mask ( $mask );
}
if ($_POST['dns'] == "") {
$dns_erro = 3;
} else {
$dns_erro = 0;
$dns=$_POST['dns'];
$dns_erro = testa_ip ( $dns );
}
if ($_POST['app'] == "") {
$app_erro = 1;
} else {
$app_erro = 0;
$app=$_POST['app'];
}
$localizacao=$_POST['localizacao'];
$so=$_POST['SO'];
$tipoapp=$_POST['Tipo_App'];
if ($_POST['numero'] == "") {
$numero_erro = 1;
} else {
$numero_erro = 0;
$numero = $_POST['numero'];
}
if ($_POST['memoria'] == "") {
$memoria_erro = 1;
} else {
$memoria_erro = 0;
$memoria = $_POST['memoria'];
if ( $memoria < 128 ) {
$memoria_erro = 2;
}
}
if ($_POST['bridge'] == "") {
$bridge_erro = 1;
} else {
$bridge_erro = 0;
$bridge = $_POST['bridge'];
}
if ($_POST['nome_vm'] == "") {
$nome_vm_erro = 1;
} else {
$nome_vm_erro = 0;
$nome_vm = $_POST['nome_vm'];
}
if (isset ($_POST['Autoriza'])) {
$Autoriza = 1;
}
// Verifica de houve algum erro , havendo não gera arquivo
$erro = $ip_erro + $gateway_erro + $mask_erro + $dns_erro + $app_erro + $numero_erro + $memoria_erro + $bridge_erro + $nome_vm_erro;
if (( $erro == 0) || ( $Autoriza == 1 )){
$host = $app. "-" . $localizacao . "-" . $so . $tipoapp ."-v" . $numero;
$file = realpath ("./") . "/" . $dir_files . "/" . $host . ".cfg";
$fileo = fopen("$file","wr") or exit("Unable to open $file !");
$dados = $ks . "network --bootproto=static --device=$device --gateway=";
$dados = $dados . "$gateway --ip=$ip --nameserver=$dns --netmask=$mask --hostname=$host --onboot=on\n";
$dados = $dados . $ks1;
if (! fwrite($fileo,$dados)){ exit("Unable to write $file !"); }
fclose($fileo);
print ('
< div align="center" >
< h2 >< strong >Arquivo gerado com sucesso !< /strong >< /h2 >
< p >Execute no servidor Xen o comando:< /p >
< table align="center" >
< tbody >
< tr >
< td >
< p align="left" >< h3 >
/usr/sbin/virt-install --name=');
print ("$nome_vm \< br >\n");
print ("--file=$dev_vm/$nome_vm --ram=$memoria --network=bridge:$bridge \< br >\n");
print ("--vnc --paravirt --location=$url_fonte \< br >\n");
print ("-x ks=http://" . $_SERVER['SERVER_NAME'] . dirname($_SERVER['PHP_SELF']) . "/files/" . $host . ".cfg< br >\n" );
print ('
< /h3 >
< /p >
< /td >
< /tr >
< /tbody >
< /table >
< /div >
< /html >
');
} else {
preenchimento() ;
}
} else {
preenchimento() ;
}
function preenchimento ()
{
global $ip_erro, $gateway_erro, $mask_erro, $dns_erro, $app_erro, $numero_erro, $memoria_erro, $bridge_erro;
global $nome_vm_erro, $ip, $gateway, $mask, $dns, $app, $numero, $memoria, $nome_vm, $bridge, $virtual;
global $so, $localizacao, $tipoapp ;
print ('
< table align="center" >< FORM method="POST" >
< tbody >
< tr >
< th align="left" >IP< /th >
< td >< input type="text" name="ip" title="IP da máquina virtual" align="left"');
print (" value = \"$ip\" >\n");
if ( $ip_erro != 0 ) {
print (" < br >\n < div align=\"center\" style=\"color : #ff0404; text-align : center;\" >\n");
if ( $ip_erro == 1 ) {
print ("< strong >IP já existe< /strong >\n");
}
if ( $ip_erro == 2 ) {
print ("< strong >IP inválido< /strong >\n");
}
if ( $ip_erro == 3 ) {
print ("< strong >Preenchimento obrigátorio< /strong >\n");
}
print ("< /div >\n");
}
print ('
< /td >
< /tr >
< tr >
< th align="left" >Mask< /th >
< td >< input type="text" name="mask" title="Máscara do IP da máquina virtual" align="left"');
print (" value = \"$mask\" >\n");
if ( $mask_erro != 0 ) {
print (" < br >\n < div align=\"center\" style=\"color : #ff0404; text-align : center;\" >\n");
if ( $mask_erro == 1 ) {
print ("< strong >Mascara inválida< /strong >\n");
}
if ( $mask_erro == 3 ) {
print ("< strong >Preenchimento obrigátorio< /strong >\n");
}
print ("< /div >\n");
}
print ('
< /td >
< /tr >
< tr >
< th align="left" >Gateway< /th >
< td >< input type="text" title="Gateway do IP da máquina virtual" name="gateway"');
print (" value = \"$gateway\" >\n");
if ( $gateway_erro != 0 ) {
print (" < br >\n < div align=\"center\" style=\"color : #ff0404; text-align : center;\" >\n");
if ( $gateway_erro == 1 ) {
print ("< strong >Gateway não responde< /strong >\n");
}
if ( $gateway_erro == 2 ) {
print ("< strong >IP Gateway inválido< /strong >\n");
}
if ( $gateway_erro == 3 ) {
print ("< strong >Preenchimento obrigátorio< /strong >\n");
}
print ("< /div >\n");
}
print ('
< /td >
< /tr >
< tr >
< th align="left" >DNS Server< /th >
< td >< input type="text" name="dns" title="Servidor primário de DNS da máquina virtual" align="left"');
print (" value = \"$dns\" >\n");
if ( $dns_erro != 0 ) {
print (" < br >\n < div align=\"center\" style=\"color : #ff0404; text-align : center;\" >\n");
if ( $dns_erro == 1 ) {
print ("< strong >DNS não responde< /strong >\n");
}
if ( $dns_erro == 2 ) {
print ("< strong >IP DNS inválido< /strong >\n");
}
if ( $dns_erro == 3 ) {
print ("< strong >Preenchimento obrigátorio< /strong >\n");
}
print ("< /div >\n");
}
print ('
< /td >
< /tr >
< tr >
< th rowspan="5" align="left" bgcolor="Silver" >Hostname< /th >
< td bgcolor="Silver" >< input type="text" name="app" title="Nome do aplicativo que será parte do hostname da máquina virtual" align="left" ');
print (" value = \"$app\" >\n");
if ( $app_erro == 1 ) {
print (" < br >\n < div align=\"center\" style=\"color : #ff0404; text-align : center;\" >\n");
print ("< strong >Preenchimento obrigátorio< /strong >\n");
print ("< /div >\n");
}
print ('
< /td >
< tr >
< td bgcolor="Silver" >
< SELECT title="Nome do local de hospedagem que será parte do hostname da máquina virtual" name="localizacao" >
< option value="spo" ');
if ( $localizacao == 'spo' ) {
print (" selected=\"selected\" ");
}
print (' >Sao Paulo - SPO< /option >
< option value="poa"');
if ( $localizacao == 'poa' ) {
print (" selected=\"selected\" ");
}
print (' >Porte Alegre - POA< /option >
< option value="brb"');
if ( $localizacao == 'brb' ) {
print (" selected=\"selected\" ");
}
print (' >Brasília - BRB< /option >
< /SELECT >
< /td >
< /tr >
< tr >
< td bgcolor="Silver" >
< SELECT name="SO" title="Nome do S.O. que será parte do hostname da máquina virtual" >
< option value="l" ');
if ( $so == 'l' ) {
print (" selected=\"selected\" ");
}
print (' >Linux< /option >
< option value="w"');
if ( $so == 'w' ) {
print (" selected=\"selected\" ");
}
print (' >Windows< /option >
< option value="s"');
if ( $so == 's' ) {
print (" selected=\"selected\" ");
}
print (' >Solaris< /option >
< /SELECT >
< /td >
< /tr >
< TR >
< td bgcolor="Silver" >
< SELECT name="Tipo_App" title="Nome do tipo de aplicativo que será parte do hostname da máquina virtual" >
< option value="a" ');
if ( $tipoapp == 'a' ) {
print (" selected=\"selected\" ");
}
print (' >Aplicação< /option >
< option value="d"');
if ( $tipoapp == 'd' ) {
print (" selected=\"selected\" ");
}
print (' >Database< /option >
< option value="x"');
if ( $tipoapp == 'x' ) {
print (" selected=\"selected\" ");
}
print (' >Xen< /option >
< option value="v"');
if ( $tipoapp == 'v' ) {
print (" selected=\"selected\" ");
}
print (' >Vmware< /option >
< /SELECT >
< /td >
< /tr >
< tr >
< td align="left" bgcolor="Silver" >Número da Maquina
< input type="text" name="numero" title="Número de identificacao que será parte do hostname da máquina virtual" size="3" ');
print (" value = \"$numero\" >\n");
if ( $numero_erro == 1 ) {
print (" < br >\n < div align=\"center\" style=\"color : #ff0404; text-align : center;\" >\n");
print ("< strong >Preenchimento obrigátorio< /strong >\n");
print ("< /div >\n");
}
print ('
< /td >
< /tr >
< tr >
< th align="left" >Nome da VM< /th >
< td align="left" >< input type="text" title="Nome da VM na máquina XEN, será o nome do arquivo" name="nome_vm" ');
print (" value = \"$nome_vm\" >\n");
if ( $nome_vm_erro != 0 ){
print (" < br >\n < div align=\"center\" style=\"color : #ff0404; text-align : center;\" >\n");
print ("< strong >Preenchimento obrigátorio< /strong >\n");
print ("< /div >\n");
}
print ('
< /td >
< /tr >
< tr >
< th align="left" >Memória da VM (Mb)< /th >
< td align="left" >< input type="text" title="Quantidade de memória alocada pela VM na máquina XEN" name="memoria" size="4" ');
print (" value = \"$memoria\" >\n");
if ( $memoria_erro != 0 ){
print (" < br >\n < div align=\"center\" style=\"color : #ff0404; text-align : center;\" >\n");
if ( $memoria_erro == 1 ) {
print ("< strong >Preenchimento obrigátorio< /strong >\n");
} else {
print ("< strong >Valor tem que ser superior a 128 Mb< /strong >\n");
}
print ("< /div >\n");
}
print ('
< /td >
< /tr >
< tr >
< th align="left" >Bridge no Xen< /th >
< td align="left" > < input type="text" title="Nome da bridge na máquina XEN, que será alocada a VM" name="bridge" ');
print (" value = \"$bridge\" >\n");
if ( $bridge_erro == 1 ) {
print (" < br >\n < div align=\"center\" style=\"color : #ff0404; text-align : center;\" >\n");
print ("< strong >Preenchimento obrigátorio< /strong >\n");
print ("< /div >\n");
}
print ('
< /td >
< /tr >
< TR >< TD >< /TD >< /TR >
< tr >
< th colspan="2" align="center" >< INPUT type="submit" name="Gera" value="Gera Arquivo" >< /th >
< /tr >
< /tbody >
< /FORM >
< /table >' );
if (( $gateway_erro == 1 ) || ( $dns_erro == 1 )) {
print ('
< table align="center" >< FORM method="POST" name="Autoriza" >
< tbody > .
< tr >
< th colspan="2" align="center" >');
if ( $gateway_erro == 1 ) {
print (" < BR >\n < div align=\"center\" style=\"color : #ff0404; text-align : center;\" >\n");
print ("< strong >Nao foi possível checar Gateway, possivelmente problema com a rede< /strong >\n");
print ("< /div >\n");
}
if ( $dns_erro == 1 ) {
print (" < BR >\n < div align=\"center\" style=\"color : #ff0404; text-align : center;\" >\n");
print ("< strong >Nao foi possivel checar DNS, possivelmente problema com a rede< /strong >\n");
print ("< /div >\n");
}
print ('< input type="hidden" name="ip" value = "' . $ip . "\" >\n");
print ('< input type="hidden" name="mask" value = "' . $mask . "\" >\n");
print ('< input type="hidden" name="gateway" value = "' . $gateway . "\" >\n");
print ('< input type="hidden" name="dns" value = "' . $dns . "\" >\n");
print ('< input type="hidden" name="app" value = "' . $app . "\" >\n");
print ('< input type="hidden" name="localizacao" value = "' . $localizacao . "\" >\n");
print ('< input type="hidden" name="SO" value = "' . $so . "\" >\n");
print ('< input type="hidden" name="Tipo_App" value = "' . $tipoapp . "\" >\n");
print ('< input type="hidden" name="numero" value = "' . $numero . "\" >\n");
print ('< input type="hidden" name="nome_vm" value = "' . $nome_vm . "\" >\n");
print ('< input type="hidden" name="memoria" value = "' . $memoria . "\" >\n");
print ('< input type="hidden" name="bridge" value = "' . $bridge . "\" >\n");
print ('
< INPUT type="hidden" name="Autoriza" value="1" >
< INPUT type="submit" name="Gera" value="Assumirei o erro e prosseguirei" >< /th >
< /tr > .
< /tbody >
< /FORM >
< /table > ');
}
print ('
< /html >
');
}
? >
quarta-feira, 19 de março de 2008
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário