martes, 4 de marzo de 2008

Sony Vaio VGN-CR160F con Debian lenny/sid

Para actualizar de Etch a Lenny en Sony Vaio VGN-CR160F.

1) apt-get update
2) apt-get dist-upgrade
3) El sistema ya no levanta debido a que no se carga el modulo para el disco duro. Manda como el mensaje de error siguiente:

Begin: Waiting for root filesystem...
Done.
WARNING boot device may be renamed. Try root = /dev/hda3
ALERT! /dev/hda3 does not exist. Dropping to a shell!
Check your root= boot argument (cat /proc/cmdline)
Check for missing modules (cat /proc/modules), or device files (ls /dev)

BusyBox v1.01 (Debian 1:1.01-4) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

/bin/sh: can't access tty; job control turned off
/ #


4) En el shell ejecutar: modprobe ide-disk; modprobe ide-generic; exit
5) Cargando los modulos anteriores el sistema termina de arrancar. Pero es necesario que esos modulos sean cargados siempre:
a) agregar al archivo /etc/initramfs-tools/modules, las lineas ide-generic e ide-disk
b) mkinitramfs -v -o /boot/initrd.img-2.6.22.14 2.6.22.14

6) Reiniciar

Recapitulando:

* video: Es necesario xserver-xorg-video-intel, aunque ya no asi el paquete 915resolution.

* sonido: Paquetes alsa* a versiones 1.0.15-2 o superiores.

* La interfaz Ethernet: Modulo r8169.

* Red inalambrica: Modulo mac80211, iwlwifi-4965

* motioeye: Modulo r5u870-0

jueves, 21 de febrero de 2008

Eliminar de un nombre de archivo la extension..

#!/usr/bin/perl
#
# Eliminar de la cadena de nombre de un archivo
# la extension.
# El argumento es pasado en la linea de comando.
#############


@allwords = split(/\./, $ARGV[0]);
$ext = pop(@allwords);
foreach $item ( @allwords ){
print $item.".";
}
print "\n";

jueves, 17 de enero de 2008

Fecha formato unix a otro formato

#!/usr/bin/perl
#####################################
# Traduce de una fecha formato
# unix a fecha AAMMDDHHMMSS
#
#######################


print " Para salir escriba no \n";
while ( 1 ){
print " Introduce : ";
chomp($ARCH=);
if ( lc($ARCH) =~ /no/){
exit;
}
@timeData = localtime($ARCH);
#print " @timeData \n";
#Seconds,Minutes,Hours,Day,Months,years (since 1900),days( since sunday), Number of days since the start of the yer,Whether or not daylight savings is active
if (($timeData[5]-100)>=0 && ($timeData[5]-100)<=9){
print "0".($timeData[5]-100);
}
else{
print ($timeData[5]-100);
}
if (($timeData[4]+1)>=0 && ($timeData[4]+1)<=9){
print "0".($timeData[4]+1);
}
else{
print ($timeData[4]+1);
}
if (($timeData[3])>=0 && ($timeData[3])<=9){
print "0$timeData[3]";
}
else{
print "$timeData[3]";
}
if ($timeData[2]>=0 && $timeData[2]<=9){
print "0$timeData[2]";
}
else{
print "$timeData[2]";
}
if ($timeData[1]>=0 && $timeData[1]<=9){
print "0$timeData[1]";
}
else{
print "$timeData[1]";
}
if ($timeData[0]>=0 && $timeData[0]<=9){
print "0$timeData[0]";
}
else{
print "$timeData[0]";
}
print "\n";
}


==============

Ejemplo :
Para salir escriba no
Introduce : 1181715026
070613011026
Introduce : no


jueves, 20 de diciembre de 2007

Expect interactivo

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

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;

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.