Expect es genial para algunas actividades, pero en ocasiones se requiere que sea interactivo. Ejemplo:
#!/usr/bin/expect -f
#
set force_conservative 0 ;# set to 1 to force conservative mode
if {$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}
set timeout 100
spawn ssh -l user1 [lindex $argv 0]
match_max 1000
for {} 1 {} {
expect timeout {
send_user "Problema de comunicacion \r"
exit
} "(yes/no)?" {
send "yes\r"
} "password:" {
send "mypassword\r"
break
}
}
expect -exact "\]$ "
send -- "Modo interactivo. Teclea 'salir' para continuar\n"
interact "salir" return
expect -exact "\]$ "
send -- "exit\r"
expect eof
jueves, 20 de diciembre de 2007
lunes, 10 de diciembre de 2007
Tips & Trick sobre Perl
Instalar un modulo:
perl -MCPAN -e 'install Apache::Test'
Leer el contenido de un archivo
open FH1, "./nombre.arch" || die " Error al abrir archivo ";
while( < FH1 >){
chomp;
.
.
.
}
close FH1;
Crear un hash de hash apartir del contenido de un archivo
%arreglo=();
open FH, "archivo" || die " Error al abrir archivo ";
while () {
chomp;
if ( ! /^#/ ) {
($campo, $valor)=split(/:/,$_,-1);
if ( $campo =~ /FS/ ) {
$llave=$valor;
}
$arreglo{$llave}{$campo}=$valor;
}
}
close FH;
Imprimir el contenido de hash de hash
foreach $llave ( keys %arreglo ){
foreach $elemento ( keys %{$arreglo{$llave}} ){
print "$elemento = $arreglo{$llave}{$elemento} \n";
}
}
imprimir un elemento de un arreglo de manera aletoria
#!/usr/bin/perl
@array=("1","tres","4","cinco");
print $array[int ( rand(0+@array))];
llamar a system
if (($pid=fork()) == 0 ){
@args = ("/ruta/comando","arg1","arg2");
system(@args) == 0 or die "system @args failed: $?";
exit;
}
wait;
perl -MCPAN -e 'install Apache::Test'
Leer el contenido de un archivo
open FH1, "./nombre.arch" || die " Error al abrir archivo ";
while( < FH1 >){
chomp;
.
.
.
}
close FH1;
Crear un hash de hash apartir del contenido de un archivo
%arreglo=();
open FH, "archivo" || die " Error al abrir archivo ";
while (
chomp;
if ( ! /^#/ ) {
($campo, $valor)=split(/:/,$_,-1);
if ( $campo =~ /FS/ ) {
$llave=$valor;
}
$arreglo{$llave}{$campo}=$valor;
}
}
close FH;
Imprimir el contenido de hash de hash
foreach $llave ( keys %arreglo ){
foreach $elemento ( keys %{$arreglo{$llave}} ){
print "$elemento = $arreglo{$llave}{$elemento} \n";
}
}
imprimir un elemento de un arreglo de manera aletoria
#!/usr/bin/perl
@array=("1","tres","4","cinco");
print $array[int ( rand(0+@array))];
llamar a system
if (($pid=fork()) == 0 ){
@args = ("/ruta/comando","arg1","arg2");
system(@args) == 0 or die "system @args failed: $?";
exit;
}
wait;
miércoles, 5 de diciembre de 2007
QUALSTAR TLS-6460 con Bacula
Estos fueron de manera general los pasos para instalar Bacula en un sistema Debian Lenny con un robot de cintas QUALSTAR TLS-6460.
A manera de introduccion, el sistema de respaldos de Bacula tiene 4 grandes componentes:
= Director: cerebro de todos los componentes.
= Storage daemon: demonio encargado del manejo de los dispositivos de almacenamiento (a disco, a cinta, a archivos).
= File daemon: encargado de la realización del respaldo de los archivos. Este componente es tambien conocido como el cliente.
= Console: consola de administracion.
Nota: En esta configuracion el director, el storage daemon y la consola estan en el mismo servidor. Esta guia no esta excenta de errores y/o mejoras, usela bajo su responsabilidad.
1) Instalacion de driver para fibrechanel.
2) Identificacion de los dispositivos de cinta. Esto lo puede hacer mediante el comando mtx. Las cintas normalmente estan ligadas a /dev/st0 y /dev/nst0; son el mismo dispositivo con la diferencia que el primero rebobina la cinta después de cada uso y en el caso del segundo no. Ejemplos:
mtx -f /dev/sg0 status -----> la libreria completa
mt -f /dev/st0 status -----> el status del primer driver
3) Instalacion de Mysql
apt-get install mysql-common mysql-server
4) Instalacion de Bacula
apt-get install bacula-director-mysql bacula-sd bacula-fd
5) Configuracion del Storage Daemon (/etc/bacula/bacula-sd.conf):
- Asignar el password correcto en la definicion de Director y monitor.
- Esta es mi definicion de device
Device {
Name = Drive-1 #
Drive Index = 0
Media Type = SDLT 600
Archive Device = /dev/st0
}
Note que esta definicion variara dependiendo de la cantidad de drivers que tenga el robot o incluso del robot que se trate.
6) Configuracion del Director:
- Elimine en la definicion de director la linea DirAddress
- Igualar la definicion de Storage del archivo de configuracion del Director con la definicion en el Strorage Daemon. Ejemplo:
Storage {
Name = Drive-1
# Do not use "localhost" here
Address = miserver # N.B. Use a fully qualified name here
SDPort = 9103
Password = "XXXXXXXXXXXXXXXXXXX" # password for FileDaemon
Device = Drive-1
Media Type = SDLT 600
}
- En la definicion de console, asignar el password correcto.
- Este es opcional. Definicion de Pool. Defini un pool para cada drive, y un pool para historicos, con la finalidad de que sea mas facil la administracion de cintas. Aqui parte de esa configuracion:
Pool {
Name = Grupo1
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Label Format = Grupo1a_
}
Pool {
Name = Grupo2
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 730 days # two year
Label Format = Grupo2a_
}
Pool {
Name = Historico
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 1825 # 5 years
Label Format = Historico_
}
7) Reiniciar al Director y al Storage Daemon
/etc/init.d/bacula-director start
/etc/init.d/bacula-sd start
8) Debera instalar algun cliente a respaldar, definir dicho cliente en la configuracion del Director.
9) La consola (bconsole) puede ayudarle a administrar los jobs de respaldo.
A manera de introduccion, el sistema de respaldos de Bacula tiene 4 grandes componentes:
= Director: cerebro de todos los componentes.
= Storage daemon: demonio encargado del manejo de los dispositivos de almacenamiento (a disco, a cinta, a archivos).
= File daemon: encargado de la realización del respaldo de los archivos. Este componente es tambien conocido como el cliente.
= Console: consola de administracion.
Nota: En esta configuracion el director, el storage daemon y la consola estan en el mismo servidor. Esta guia no esta excenta de errores y/o mejoras, usela bajo su responsabilidad.
1) Instalacion de driver para fibrechanel.
2) Identificacion de los dispositivos de cinta. Esto lo puede hacer mediante el comando mtx. Las cintas normalmente estan ligadas a /dev/st0 y /dev/nst0; son el mismo dispositivo con la diferencia que el primero rebobina la cinta después de cada uso y en el caso del segundo no. Ejemplos:
mtx -f /dev/sg0 status -----> la libreria completa
mt -f /dev/st0 status -----> el status del primer driver
3) Instalacion de Mysql
apt-get install mysql-common mysql-server
4) Instalacion de Bacula
apt-get install bacula-director-mysql bacula-sd bacula-fd
5) Configuracion del Storage Daemon (/etc/bacula/bacula-sd.conf):
- Asignar el password correcto en la definicion de Director y monitor.
- Esta es mi definicion de device
Device {
Name = Drive-1 #
Drive Index = 0
Media Type = SDLT 600
Archive Device = /dev/st0
}
Note que esta definicion variara dependiendo de la cantidad de drivers que tenga el robot o incluso del robot que se trate.
6) Configuracion del Director:
- Elimine en la definicion de director la linea DirAddress
- Igualar la definicion de Storage del archivo de configuracion del Director con la definicion en el Strorage Daemon. Ejemplo:
Storage {
Name = Drive-1
# Do not use "localhost" here
Address = miserver # N.B. Use a fully qualified name here
SDPort = 9103
Password = "XXXXXXXXXXXXXXXXXXX" # password for FileDaemon
Device = Drive-1
Media Type = SDLT 600
}
- En la definicion de console, asignar el password correcto.
- Este es opcional. Definicion de Pool. Defini un pool para cada drive, y un pool para historicos, con la finalidad de que sea mas facil la administracion de cintas. Aqui parte de esa configuracion:
Pool {
Name = Grupo1
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Label Format = Grupo1a_
}
Pool {
Name = Grupo2
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 730 days # two year
Label Format = Grupo2a_
}
Pool {
Name = Historico
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 1825 # 5 years
Label Format = Historico_
}
7) Reiniciar al Director y al Storage Daemon
/etc/init.d/bacula-director start
/etc/init.d/bacula-sd start
8) Debera instalar algun cliente a respaldar, definir dicho cliente en la configuracion del Director.
9) La consola (bconsole) puede ayudarle a administrar los jobs de respaldo.
Suscribirse a:
Entradas (Atom)