lunes, marzo 02, 2009

Hacer un script para un Backup en un equipo remoto

Esta práctica me la han pedido ya varías personas y pensaba que estaba colgada aquí y me he dado cuenta de que no, así que la voy a colgar por si alguien la necesita.. Consiste en realizar el backup de unos directorios concretos y mandarlo a un equipo remoto:

##Script de David Delgado santos
#!/bin/bash
##Antes de empezar a realizar toda las operaciones, tenemos que ubicarnos en el directorio donse se va a realizar las operaciones
cd /media/hda4/backup
##luego empezamos a declarar las variables necesarias, la primera varible declarada aquí es una variable que coja la fecha y le de un formato bonito
fecha=$(date +%d-%B-%Y)
##esta variable lo que hace es ponerle nombre al fichero, con el nombre de la máquina y la fecha de cuando se ha creado
nombre=`hostname`_$fecha.tar.bz2
##esta variable calcula el tamaño que pesa el directorio etc en kb
etc=`du -s /etc/ | awk '{print $1}'`
##esta variable calcula el tamaño que pesa el directorio home en kb
home=`du -s /home/ | awk '{print $1}'`
##esta variable calcula el tamaño que pesa el directorio var/lib en kb
varlib=`du -s /var/lib/ | awk '{print $1}'`
##esta variable calcula el tamaño que pesa el directorio var/log en kb
varlog=`du -s /var/log/ | awk '{print $1}'`
##calcula el espacio libre donde se va almacenar la copia de seguridad
espacio_libre=`df |grep hda4| awk '{print $4}'`
##realiza la operación para ver si hay espacio
realizarcopia=`expr $etc + $home + $varlib + $varlog - $espacio_libre`
##si el espacio libre es mayor que 0 se realizará la copia
if [ $realizarcopia -lt 0 ]; then
##comprime los directorios, que hemos decididos que deben hacer una copia de seguridad, con el nombre que hemos creado
tar cjf $nombre /etc /var/lib /var/log /home
##cuando se acaba de hacer la copia mostrará un mensaje diciendo que se ha realizado la comprimición.
echo "Se ha hecho con exito la copia de seguridad"
##ahora mira el espacio disponible en talut, la máquina donde se va almacenar la copia de respaldo
espaciotalut=$(ssh copia@192.168.1.51 df |grep sda3| awk '{print $4}')
##mira el tamaño que ha ocupado la copia local
tamano=`du $nombre | awk '{print $1}'`
##compara el tamaño del backup con el espacio disponible, si hay espacios disponible realizará la transferencia
if [ $tamano -lt $espaciotalut ]; then
##antes de mandar el backup, le mira el valor md5sum para comprobar que se haya pasado correctamente
valor=$(md5sum $nombre | awk '{print $1}')
##manda el backup a la otra máquina con el nombre
scp $nombre copia@192.168.1.51:$nombre
##cuando se haya echo muestra un mensaje diciendo que se ha realizado la copia
echo "Se ha pasado la copia de seguridad a talut"
##ahora mira el valor md5sum del backup de la máquina de talut 
valorexterior=$(ssh copia@192.168.1.51 md5sum $nombre | awk '{print $1}')
##si es el mismo del que hay en la máquina local mostrará un mensaje diciendo que se ha realizado la copia correctamente y se acaba el proceso del backup
if [ $valor = $valorexterior ]; then
echo "Se ha pasado la copia de seguridad correctamente"
else
##si no es el mismo mostrará un mensaje y se volverá a enviar
echo "No se ha podido pasar la copia de seguridad correctamente, se intentará de nuevo"
##creamos una varible contador que cuente las veces que se intenta mandar, por si en realidad hay problemas en la red y no se quede en un bucle infinito transferiendo el archivo
contador=0
##realizará el envio hasta que contador sea 3 que tres o los valores de md5sun sea iguales en la dos máquinas
while [  $probar != $valorexterior -o $contador -lt 3 ]; do
##mira el valor en la otra máquina
##realiza otra ves el envio del backup
scp $nombre copia@192.168.1.51:$nombre
##mira en valor en la máquina de talut de nuevo
valorexterior=$(ssh copia@192.168.1.51 md5sum $nombre | awk '{print $1}')
##incrementa el contador
   contador=`expr $contador + 1`
   done
##si el contador es igual a 3 mostrará un mensjae de que tiene problemas en la red
if [ $contador -eq 3 ]; then
echo "No se ha podido hacer la copia correctamente, pongase en contacto con el administrador de la red"
fi
fi
else
##si no hay espacio en talut cuando se realiza la comprobación de espacio en la máquina mostrará un mensaje
echo "No hay suficiente espacio en Talut"
fi
else
##si no hay espacio en la máquina local mostrará un mensaje diciendo que no hay espacio
echo "No hay suficiente espacio para hacer la copia de seguridad"
fi



##ahora para automatizar la tarea, introduciremos en el crontab una línea para que ejecute el script 1 vez al día a la 12 de la mañana. Para realizar esta operación que hacerla como superusuario ejecutamos el comando "crontab -e" y añadimos la línea "00 12 * * * sh /root/backup.sh" donde 00 es el minuto, 12 es la hora a la que se va a ejecutar y * * * es el día, mes y año en el que se va a ejecutar, lo dejamos con * para que se ejecute todos los días a la misma hora.

lunes, febrero 23, 2009

Modificar un informe en Abanq 2.3

Hace tiempo que no escribo, es por flojo, no por otra cosa pero bueno. Ahora ando currando en una empresa donde se adquirió Abanq y he tenido que realizar unas modificaciones para un cliente. Las modificaciones eran que en los informes aparecían las descripciones de los artículos, y el cliente quería que si fuera un envase lo que había en el informe apareciera la descripción del envase en vez de la descripción del artículo. Y como encontré muy poca información para realizar esto os voy a dejár el ejemplo de las modificaciones que realicé para el informe de "Albaranes clientes":
En el archivo flfactinfo.qs declaré arriba la funcion que iba a crear:

function desEnvase(nodo:FLDomNode, campo:String):String {
return this.ctx.oficial_desEnvase(nodo, campo);
}

y luego la definí:

function oficial_desEnvase(nodo:FLDomNode, campo:String):String
{

var codEnvase:String = nodo.attributeValue("lineasalbaranescli.codenvase");
var valor:String;
if (codEnvase && codEnvase != "") {
valor = nodo.attributeValue("envases.descripcion");
} else {
valor = nodo.attributeValue("lineasalbaranescli.descripcion");
}
return valor;
}

En el archivo i_albaranescli.qry añadí los siguientes elementos:

empresa,albaranescli,envases

En el  select añadí los siguientes campos:

 lineasalbaranescli.codenvase, envases.codenvase, envases.descripcion,

Y ya en el from pegaré la línea entera para que vea más claro:

empresa,albaranescli INNER JOIN lineasalbaranescli ON albaranescli.idalbaran = lineasalbaranescli.idalbaran  LEFT OUTER JOIN envases ON envases.codenvase = lineasalbaranescli.codenvase  LEFT OUTER JOIN movilote ON movilote.idlineaac = lineasalbaranescli.idlinea LEFT OUTER JOIN lotes ON movilote.codlote = lotes.codlote

Por última hay que modificar el archivo i_albaranescli.kut para modificar el Field de la descripción del artículo que se encuentra en "Cabeceras de listas de artículos" por la siguiente línea:
< calculationtype="6" functionname="flfactinfo.desEnvase" backgroundcolor="'255,255,255'" bordercolor="'0,0,0'" borderstyle="'0'" borderwidth="'1'" commaseparator="'44'" currency="'32'" datatype="'0'" dateformat="'11'" field="'lineasalbaranescli.descripcion'" fontfamily="'Arial" fontitalic="'0'" fontsize="'9'" fontweight="'50'" foregroundcolor="'0,0,0'" halignment="'0'" height="'20'" negvaluecolor="'0,0,0'" precision="'2'" text="'[lineasalbaranescli.descripcion]'" valignment="'1'" width="'287'" wordwrap="'0'" x="'94'" y="'1'"> < / CalculatedField>


miércoles, febrero 20, 2008

Examen: Instalar y configurar un servidor Bind9

Se me ha ocurrido publicar mi examen de "IAI", puede que sirva a alguien de ayuda. No sé que nota tendrá este ejercicio en el examen, pero el resultado final es de 7,4 así que no debe esta mal:

Instala y configura bind9 en el dom0 como servidor DNS de la red virtual de trabajo 10.0.1.0/24 cuyo nombre de zona ser´a examen.gonzalonazareno.org, incluyendo un entrado de tipo MX con el FQHN del dom0. Configura tanto el dom0 como wilson para que lo utilicen como servidor DNS
primario.


Después de instalar el bind9 (#aptitude install bind9) hay que editar el archivo
/etc/bind9/named.conf.local y añadirle las siguientes líneas
zone "1.0.10.in-addr.arpa" IN {
type master;
file "/etc/bind/db.10.0.1";
};
zone "examen.gonzalonazareno.org" IN {
type master;
file "/etc/bind/db.examen";
};
y luego creamos los archivos “db.10.0.1” y “db.examen” en el directorio
/etc/bind9”, y escribimos en cada archivo:

db.10.0.1:

$ORIGIN 1.0.10.in-addr.arpa.
$TTL 1D
@ IN SOA rydag.examen.gonzalonazareno.org.
hostmaster.examen.gonzalonazareno.org. (
12 ; serial
28800 ; refresh (8 hours)
14400 ; retry (4 hours)
2419200 ; expire (4 weeks)
86400 ; minimum (1 day)
)
NS rydag.examen.gonzalonazareno.org.
131 PTR rydag.examen.gonzalonazareno.org.
4 PTR wilson.examen.gonzalonazareno.org.

db.examen:

$ORIGIN examen.gonzalonazareno.org.
$TTL 1D
@ IN SOA rydag. hostmaster. (
1 ; serial
8H ; refresh
4H ; retry
4W ; expire
1D ) ; minimum
; name server (NS) and mail exchange (MX)
IN NS rydag
IN MX rydag
localhost IN A 127.0.0.1
rydag IN A 10.0.1.131
wilson IN A 10.0.1.4

Luego recargamos el demonio de bind9 “/etc/init.d/bind9 reload” y añadimos a la
máquina física y virtual, en el archivo “/etc/resolv.conf”, la línea “nameserver
10.0.1.131

*dom0 es la máquina física
*wilson es una máquina virtual
*gonzalonazareno.org es el nombre de dominio de mi instituto
*rydag es el nombre de la máquina física

jueves, febrero 14, 2008

Gonsiwiki: Redireccionar un directorio a otra partición

Mi instituto ha tenido la gran idea de montar una wiki para que los alumnos de los ciclos podamos colgar nuestros, trabajos, proyectos y apuntes. Y puesto que voy a pasar algunos a punte a esa wiki me parece bien que publique aquí algún que otro artículo de curiosidad. Aquí tenéis el primero

Esto sirve para redireccionar un directorio a otra partición para mejor gestión de equipo. Por ejemplo direccionar el directorio /home a otra partición por si se formatea la partición donde esta montado el sistema operativo no se pierda el contendido del directorio /home. Tenemos que todas las operaciones como superusuario del sistema y luego montaremos la partición que deseamos redireccionar el directorio en un directorio

#mount /dev/(partición) /(directorio donde lo montaremos)

Ejemplo:

#mount /dev/sda6 /mnt

Después copiamos el contenido del directorio al directorio montado

#cp -a /(directorio que deseamos redireccionar)/* /(directorio montado)

Ejemplo:

#cp -a /home/* /mnt

Borramos el contendido del directorio para no tener datos duplicados

#rm -fr /(directorio origen)/*

Ejemplo:

#rm -fr /home/*

Luego desmontamos la partición montada

#umount /(directorio donde esta montada)

Ejemplo:

#umount /mnt

Y por último editamos el archivo /etc/fstab añadiendo la línea para la partición que hemos creado

/dev/(partición) /(punto de montaje) (sistema de partición) defaults 1 1

Ejemplo:

/dev/sda6 /home ext3 defaults 1 1

martes, febrero 12, 2008

Wikiproyecto: Libro de los nombres


Llevo varios días intentando poner en pie un wikiproyecto y lo he llamado Libro de los nombres, es muy simple y muy básico, se trata de los nombres, significado, procedencia, onomástica, curiosidades.., de momento he creado varios artículos de prototipo y me queda mucho para refinarlo antes de presentarlo a la cúpula de la wikipedia. Si alguien se anima a participá o aportar una idea nueva que se ponga en contacto conmigo dejando algún comentario aquí o en la wikipedia.

Película: 30 días de oscuridad

Pues el viernes pasado me fui al cine con mis amigos y decidimos ver la película 30 días de oscuridad. Y sinceramente yo quería ver Mostruoso, pero como en mi pandilla funcionamos por democracia decidió la mayoría ir a ver a la primera, mis conclusiones es que la película tiene a muy buenos actores.. (Josh Hartnett, Melissa George..) hasta el factor suspence fue muy bueno, pero me decepcionó enormemente el argumento sobre todo el final. Teniendo un gran escenario y un buen material donde trabajar David Slade y hacer un gran obra de arte se lo cargó por eso le voy a califica con dos 2 porciones de estrella

viernes, febrero 08, 2008

Receta para compilar un kernel

Es la paso a paso de como se debe compilar un kernel definida por mi profesor Alberto Molina:

  1. Obtener el núcleo. La opción sencilla es (puede obtenerse también de www.kernel.org):
    • aptitude install linux-source-2.6.18
    • El resultado es el fichero /usr/src/linux-source-2.6.18.tar.bz2
  2. Crear un directorio para la compilación y descomprimir en él el núcleo:
    • mkdir ~/linux
    • cd ~/linux
    • tar xjf /usr/src/linux-source-2.6.18.tar.bz2
  3. Utilizar el fichero de configuración del núcleo actual como punto de partida. Para ello:
    • cp /boot/config-`uname -r` ~/linux/linux-2.6.18/.config
  4. Configurar el núcleo
    • Etiquetar el nuevo núcleo poniendo un número significativo en la constante EXTRAVERSION que aparece en el fichero Makefile (por ejemplo -10)
    • Configurar el núcleo con una de las siguientes opciones:
      • make menuconfig (necesita las bibliotecas de desarrollo de ncurses)
      • make gconfig (necesita las bibliotecas de desarrollo de gtk)
      • make xconfig (necesita las bibliotecas de desarrollo de qt)
  5. Compilar la parte monolítica, los módulos y generar un paquete debian con todo:
    • make deb-pkg
    • El paquete así generado se almacena en ~/linux
  6. Instalar el nuevo núcleo en el sistema
    • dpkg -i linux-2.6.18-10_2.6.18-10_i686.deb
    • Generar la initrd: mkinitramfs -o /boot/initrd.img-2.6.18-10 2.6.18-10
    • Actualizar GRUB: update-grub
  7. Reiniciar y probar.
  8. En caso de que tengamos o queramos volver a compilar, tendríamos que seguir uno de estos dos caminos:
    • make clean y continuar por el punto 4 (manteniendo el fichero .config previo)
    • make mrproper y continuar por el punto 3 (para empezar de cero).

miércoles, enero 23, 2008

Práctica: Configurar un servidor DNS con bind9 en la red local virtual

  1. Instala y configura bind9 en macartu y crea una zona de resolución local de nombres para macartu, olson, richard y el nombre del dom0.
  2. Configura el resto de clientes de la red local para que utilicen macartu como DNS primario y el propio macartu para que utilice localhost.
Para la configuración del bind9 debemos de añadir las siguientes líneas en el
archivo “/etc/bind/naned.conf.local”:
zone "0.0.10.in-addr.arpa" IN {
type master;
file "/etc/bind/db.10.0.0";
};
zone "wilfredo.gonzalonazareno.org" IN {
type master;
file "/etc/bind/db.wilfredo";
};
Donde se especifica las zonas y la ubicación donde se encuentra definidas cada
zona. Ahora deberemos crear los archivos “db.10.0.0” y “db.wilfredo” donde le
añadiremos la siguiente estructura:
db.10.0.0
$ORIGIN 0.0.10.in-addr.arpa.
$TTL 1D
@ IN SOA macartu.wilfredo.gonzalonazareno.org.
hostmaster.wilfredo.gonzalonazareno.org. (
12 ; serial
28800 ; refresh (8 hours)
14400 ; retry (4 hours)
2419200 ; expire (4 weeks)
86400 ; minimum (1 day)
)
NS macartu.wilfredo.gonzalonazareno.org.
128 PTR rydag.wilfredo.gonzalonazareno.org.
129 PTR rydag.wilfredo.gonzalonazareno.org.
130 PTR rydag.wilfredo.gonzalonazareno.org.
1 PTR macartu.wilfredo.gonzalonazareno.org.
2 PTR richard.wilfredo.gonzalonazareno.org.
3 PTR olson.wilfredo.gonzalonazareno.org.
db.wilfredo
$ORIGIN wilfredo.gonzalonazareno.org.
$TTL 1D
@ IN SOA macartu. hostmaster. (
1 ; serial
8H ; refresh
4H ; retry
4W ; expire
1D ) ; minimum
; name server (NS) and mail exchange (MX)
IN NS macartu
localhost IN A 127.0.0.1
rydag IN A 10.0.0.128
rydag IN A 10.0.0.129
rydag IN A 10.0.0.130
macartu IN A 10.0.0.1
richard IN A 10.0.0.2
olson IN A 10.0.0.3
Cuando se haga creado y configurado los archivos se debe recargar bind con
/etc/init.d/bind9 reload” y problamos que funcione:

Por cada máquina debemos de añadir en el archivo “/etc/resolv.conf” la línea
nameserver 10.0.0.1” en todas las máquinas, menos en la máquina virtual
donde deberemos añadir la línea “nameserver 127.0.0.1

Práctica: Instalar Xen 3.0

La práctica no está bien echa pero bueno tiene un 6 aunque yo valorandola ahora le pondría menos. Aquí está el enunciado:

Instalar un dom0 con paquetes de Debian y un domU con ayuda de las xen-tools. Configurar los modos de red básica bridge y NAT. Subir un documento que muestre los pasos dados y capturas de pantalla de las salidas de ifconfig y route de cada máquina en cada configuración de red.

Para la configuración en modo NAT hay que editar el archivo "/etc/xen/xend-config.sxp" y comentar las siguientes líneas:

#(vif-script vif-bridge)

#(network-script network-bridge)

y descomentamos las líneas:

(network-script network-nat)

(vif-script vif-nat)

Luego de guardar los cambios reiniciamos el demonio (/ect/init.d/xend restart)

y observamos que en la máquina virtual queda de esta forma:

Ahora para configurar Xen en modo bridge tenemos que volver al fichero de configuración (/etc/xen/xend-config.sxp) y comentamos y des comentamos la siguientes líneas:

(vif-script vif-bridge)

(network-script network-bridge)

#(network-script network-nat)

#(vif-script vif-nat)

Después de la máquina virtual debemos configurar el archivo "/ect/network/interface" y le demos que la ip es 192.168.1.73 con la puerta de enlace 192.168.1.1