#!/usr/bin/perl
# Este script configura Linux tras pasar el programa ImageCast
require '/imagecast/dirip.pm';
# Lo primero es preguntar por la Sala
while ( ($sala !~ /^(\d{1,2})$/) || ($sala < 1 ) || ($sala > 10 ) )
{
$sala = &salas;
}
# Lo segundo es preguntar por la IP
while ($dir_ip = &prompt)
{
if ( ($dir_ip =~ /^(\d{1,3})$/) && ($dir_ip > 0 ) && ($dir_ip < 100 ) )
{
# Ahora miro si está en la lista de mis IPs
if ( defined $ipes{$dir_ip} )
{
system "$borra_pan";
print "\n\n\n Configurando $ipes{$dir_ip}.sala$sala.cc (192.168.$sala.$dir_ip)";
&hostname($ipes{$dir_ip},$sala);
&ifcfg_eth0($sala,$dir_ip);
&yp($sala);
&network($ipes{$dir_ip},$sala);
&hosts($ipes{$dir_ip},$dir_ip,$sala);
&fstab($sala);
&printcap($sala);
&sshd($dir_ip,$sala);
&xntpd($sala);
&lilo($sala);
&resolv($sala);
print "\n Generando claves para SSH \n";
system "/bin/hostname $ipes{$dir_ip}.sala$sala.cc";
system "/bin/rm -f /etc/ssh/ssh_host_key";
system "/usr/bin/ssh-keygen -b 1024 -f /etc/ssh/ssh_host_key -N ''";
&msdos($dir_ip);
exit 0;
}
else
{
system "$borra_pan";
print "\n\n\n La direccion IP 192.168.$sala.$dir_ip no corresponde a las Salas existentes. \n";
print "\n\n Pulsa Retorno \n\n";
$respuesta = ;
system "$borra_pan";
}
}
else
{
system "$borra_pan";
print STDOUT "\n\n\n ¡Lo siento, debe introducir un numero entre 1 y 99! \n\n";
}
}
# Pantalla para introducir la sala
sub salas
{
local($respuesta) = "";
while ($respuesta eq "")
{
system "$borra_pan";
print "\n\n Programa para configurar Linux tras ImageCast \n";
print "\n Dime la sala donde estás [1-10]: ";
chop($respuesta = );
}
return($respuesta);
}
# Pantalla para introducir la IP
sub prompt
{
local($respuesta) = "";
while ($respuesta eq "")
{
print "\n Dime el último número de la IP [1-99]: ";
chop($respuesta = );
}
return($respuesta);
}
# Cambia el nombre en el fichero /etc/HOSTNAME
sub hostname
{
local($maquina, $sala) = @_;
open(FICHERO,"$dirfich/modelo/HOSTNAME") or die "No se pudo abrir $dirfich/modelo/HOSTNAME";
open(ARCHIVO,">$fich_hostname") or die "No se pudo crear $fich_hostname";
while ($linea = )
{
if ($linea =~ /modelo/ )
{
$linea =~ s/modelo/$maquina/g;
}
if ($linea =~ /x/ )
{
$linea =~ s/x/$sala/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_hostname";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo/HOSTNAME";
print "\n Modificado fichero $fich_hostname ($maquina.sala$sala.cc)";
}
# Cambia la IP en el fichero /etc/sysconfig/network-scripts/ifcfg-eth0
sub ifcfg_eth0
{
local($sala, $ip_dir) = @_;
open(FICHERO,"$dirfich/modelo/ifcfg-eth0") or die "No se pudo abrir $dirfich/modelo/ifcfg-eth0";
open(ARCHIVO,">$fich_ifcfg_eth0") or die "No se pudo crear $fich_ifcfg_eth0";
while ($linea = )
{
if ($linea =~ /x/ )
{
$linea =~ s/x/$sala/g;
}
if ($linea =~ /50/ )
{
$linea =~ s/50/$ip_dir/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_ifcfg_eth0";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo/ifcfg-eth0";
print "\n Modificado fichero $fich_ifcfg_eth0";
}
# Cambia IP servidor NIS en el fichero /etc/yp.conf
sub yp
{
local($sala) = @_;
open(FICHERO,"$dirfich/modelo/yp.conf") or die "No se pudo abrir $dirfich/modelo/yp.conf";
open(ARCHIVO,">$fich_yp") or die "No se pudo crear $fich_yp";
while ($linea = )
{
if ($linea =~ /^ypserver/)
{
$linea =~ s/x/$sala/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_yp";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo/yp.conf";
print "\n Modificado fichero $fich_yp";
}
# Cambia dominio NIS y el nombre en el fichero /etc/sysconfig/network
sub network
{
local($maquina, $sala) = @_;
open(FICHERO,"$dirfich/modelo/network") or die "No se pudo abrir $dirfich/modelo/network";
open(ARCHIVO,">$fich_network") or die "No se pudo crear $fich_network";
while ($linea = )
{
if ($linea =~ /modelo/ )
{
$linea =~ s/modelo/$maquina/g;
}
if ($linea =~ /x/)
{
$linea =~ s/x/$sala/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_network";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo/network";
print "\n Modificado fichero $fich_network";
}
# Cambia nombre e IP en el fichero /etc/hosts
sub hosts
{
local($maquina,$ip_dir,$sala) = @_;
open(FICHERO,"$dirfich/modelo/hosts") or die "No se pudo abrir $dirfich/modelo/hosts";
open(ARCHIVO,">$fich_hosts") or die "No se pudo crear $fich_hosts";
while ($linea = )
{
if ($linea =~ /50/ )
{
$linea =~ s/50/$ip_dir/g;
}
if ($linea =~ /modelo/ )
{
$linea =~ s/modelo/$maquina/g;
}
if ($linea =~ /q/ )
{
$linea =~ s/q/$sala/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_hosts";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo/hosts";
print "\n Modificado fichero $fich_hosts";
}
# Cambia nombre servidor NFS en el fichero /etc/fstab
sub fstab
{
local($sala) = @_;
open(FICHERO,"$dirfich/modelo/fstab") or die "No se pudo abrir $dirfich/modelo/fstab";
open(ARCHIVO,">$fich_fstab") or die "No se pudo crear $fich_fstab";
while ($linea = )
{
if ($linea =~ /q/ )
{
$linea =~ s/q/$sala/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_fstab";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo/fstab";
print "\n Modificado fichero $fich_fstab";
}
# Cambia IP de la impresora en red en el fichero /etc/printcap
sub printcap
{
local($sala) = @_;
open(FICHERO,"$dirfich/modelo/printcap") or die "No se pudo abrir $dirfich/modelo/printcap";
open(ARCHIVO,">$fich_printcap") or die "No se pudo crear $fich_printcap";
while ($linea = )
{
if ($linea =~ /sala/)
{
$linea =~ s/sala/$sala/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_printcap";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo/printcap";
print "\n Modificado fichero $fich_printcap";
}
# Cambia la IP en el fichero /etc/ssh/sshd_config
sub sshd
{
local($dir_ip, $sala) = @_;
open(FICHERO,"$dirfich/modelo/sshd_config") or die "No se pudo abrir $dirfich/modelo/sshd_config";
open(ARCHIVO,">$fich_sshd") or die "No se pudo crear $fich_sshd";
while ($linea = )
{
if ($linea =~ /ListenAddress/ )
{
$linea =~ s/sala/$sala/g;
$linea =~ s/modelo/$dir_ip/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_sshd";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo/sshd_config";
print "\n Modificado fichero $fich_sshd";
}
# Cambia el servidor de sincronización horaria
sub xntpd
{
local($sala) = @_;
open(FICHERO,"$dirfich/modelo/xntpd") or die "No se pudo abrir $dirfich/modelo/xntpd";
open(ARCHIVO,">$fich_xntpd") or die "No se pudo crear $fich_xntpd";
while ($linea = )
{
if ($linea =~ /ntpdate/)
{
$linea =~ s/sala/$sala/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_xntpd";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo/xntpd";
print "\n Modificado fichero $fich_xntpd";
}
# Cambia la clave en /etc/lilo.conf
sub lilo
{
local($sala) = @_;
open(FICHERO,"$dirfich/modelo/lilo.conf") or die "No se pudo abrir $dirfich/modelo/lilo.conf";
open(ARCHIVO,">$fich_lilo") or die "No se pudo crear $fich_lilo";
while ($linea = )
{
if ($linea =~ /sala/)
{
$linea =~ s/sala/$sala/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_lilo";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo/lilo.conf";
system "/bin/chmod 600 /etc/lilo.conf";
system "cd /etc ; /sbin/lilo";
print "\n Modificado fichero $fich_lilo";
}
# Cambia resolución en /etc/resolv.conf
sub resolv
{
local($sala) = @_;
open(FICHERO,"$dirfich/modelo/resolv.conf") or die "No se pudo abrir $dirfich/modelo/resolv.conf";
open(ARCHIVO,">$fich_resolv") or die "No se pudo crear $fich_resolv";
while ($linea = )
{
if ($linea =~ /x/)
{
$linea =~ s/x/$sala/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_resolv";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo/resolv.conf";
print "\n Modificado fichero $fich_resolv";
}
# Parte DOS
sub msdos
{
local($numero) = @_;
system "/bin/mount -t msdos /dev/hda4 /mnt";
open(FICHERO,"$dirfich/modelo.msdos/system.ini") or die "No se pudo abrir $dirfich/modelo.msdos/system.ini";
open(ARCHIVO,">$fich_system") or die "No se pudo crear $fich_system";
while ($linea = )
{
if ($linea =~ /ComputerName/)
{
$linea =~ s/50/$numero/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_system";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo.msdos/system.ini";
print "\n Modificado fichero C:\\WINDOWS\\SYSTEM.INI";
open(FICHERO,"$dirfich/modelo.msdos/protocol.ini") or die "No se pudo abrir $dirfich/modelo.msdos/protocol.ini";
open(ARCHIVO,">$fich_protocol") or die "No se pudo crear $fich_protocol";
while ($linea = )
{
if ($linea =~ /IPAddress0/)
{
$linea =~ s/50/$numero/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_protocol";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo.msdos/protocol.ini";
print "\n Modificado fichero C:\\WINDOWS\\PROTOCOL.INI";
open(FICHERO,"$dirfich/modelo.msdos/tcputils.ini") or die "No se pudo abrir $dirfich/modelo.msdos/tcputils.ini";
open(ARCHIVO,">$fich_tcputils") or die "No se pudo crear $fich_tcputils";
while ($linea = )
{
if ($linea =~ /hostname/)
{
$linea =~ s/50/$numero/g;
}
print ARCHIVO $linea;
}
close(ARCHIVO) or die "No se pudo cerrar $fich_tcputils";
close(FICHERO) or die "No se pudo cerrar $dirfich/modelo.msdos/tcputils.ini";
print "\n Modificado fichero C:\\WINDOWS\\TCPUTILS.INI \n";
system "/bin/umount /mnt";
}