JOSEDU – WEB

Un ratito tranquilo…

  • Author: josedu
  • Published: May 20th, 2009
  • Category: linux
  • Comments: 1

Comandos básicos mercurial

Tags: ,

Los comandos  más básicos posibles para hacer una revisión sencilla, sería utilizar los siguientes comandos:

hg status (vemos el estado actual, aqui podemos hacer hg add o hg del para quitar o poner los archivos que queremos en la revisión)

hg commit (reflejamos nuestra revisión al repositorio local nuestro)

Ahora podemos subir los cambios de nuestro repositorio local a otro repositorio remoto, por ejemplo:

hg push ssh://usuario@dominio.com//ruta/al/repositorio/

Yo utilizo el método por ssh, pero se puede también por http.

Con esto tendríamos actualizado el repositorio, pero no el directorio de trabajo, para esto tendríamos que hacer un

hg update

Si queremos comprobar en que versión nos encontramos, en cada repositorio podemos ejecutar:
hg tip

Si por el contrario quisieramos obtener de un repositorio remoto los últimos cambios, sería el comando hg pull (el contrario al push, logicamente). Evidentemente para actualizar posteriormente el directorio de trabajo, habría que ejecutar hg update

SSH server para Windows

TAGS: None

Cuando te acostumbras a la potencia de alguna herramienta, no poder disponer de ella te limita. Una de ellas es el SSH herramienta imprescindible para cualquier administrador. Pero no esta en windows y hasta dia hoy no habia encontrado ninguna libre, pero leyendo en mundo geek me he topado con FreeSSHd server para windows que lo permite administrar remotamente, desde una consola de linux o con putty desde windows. Permite el intercambio de archivos a traves del protocolo sFTP y tunneling.
Ademas esto nos permite realizar control remoto via shh/tunneling de clientes vnc, asi asegurando nuestra conexion.

Otro Script de Backup para PostgreSQL

Tags:

Todos sabemos lo importante que son las copias de seguridad y sobre todo que se hagan bien. Quiera un script que me permitiera olvidarme de las copias pasara lo que pasara en el servidor de PostgreSQL, que me copiara todas la bases de datos automaticamente, pero independientemente cada una, porque no solo es importante tener copias de seguridad sino tener controlada y facilitar la tarea de restaurar que se deberia de entrenar hasta dominarse a la perfeccion, es bueno no dudar ante momentos de presión y nunca dejarse llevar por lo nervios o la presión y hacer las cosas previo plan y analisis, para no cometer error y de paso ahorrar tiempo. Tener duplicadas la copias en 2 ubicaciones diferentes y tener un numero suficiente porque en caso de que la ley de murphy se ponga en marcha, nosotros la machaquemos de con un sonreir, de tengo la cosas bien hechas. Bueno este script le falta mejorar el log y que mande emails y la forma de borrar remotamente las copias que es un desperdicio de ancho de banda, pero bueno funciona… pero bueno eso sera en un futuro… Ahi va:

#!/bin/bash
#=============================================================================================
# Script Backup Databases PostgreSQL - Tomeu Roig
# =============================================================================================

# Procedimiento de Copia de Seguridad de Servidor de Postgres

## BEGIN CONFIG ##
BACKUP_DIR="/var/backups/db/"
USER=usuario postgres
FECHA=$(date +%d-%m-%Y)
FECHA_BORRADO=$(date +%d-%m-%Y --date='10 days ago')
## END CONFIG ##

if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
fi
#Leemos todas la bases de datos existente en Postgres, para despues realizar la copia una  a una
POSTGRE_DBS=$(psql -U $USER -l | awk '(NR > 2) && (/[a-zA-Z0-9]+[ ]+[|]/) && ( $0 !~ /template[0-9]/) { print $1 }');
#Realizamos la copia de seguridad de cada una de ellas y las guardamos en un directorio de backups
for DB in $POSTGRE_DBS ; do
echo "* Backuping PostgreSQL data from $DB@$HOST ..."
pg_dump -U $USER -Z 5 -D  -f $BACKUP_DIR$DB-$FECHA.gz $DB
#Borramos las copias con una antiguedad mayor a 10 dias
rm $BACKUP_DIR$DB-$FECHA_BORRADO.gz
echo "finalizada $DB ..."
done
# Las empaquetamos y las copiamos en otro servidor de respaldo.
# Una vez realizado borramos el empaquetado.
cd /var/backups/db
echo "...empaquetamos las DBs del $FECHA..."
tar czvf dbs-$FECHA.tar.gz *-$FECHA.gz

echo "... enviamos una copia a un sitio distinto...y borramos el fichero local empaquetado"
ncftpput -DD -u usercopias -p password 192.168.0.xx /Backups/DBPostgres/ dbs-$FECHA.tar.gz

echo "... borramos la antigua copia de mas de 10 dias del ftp..."
ncftpget -C -DD -u usercopias -p password 192.168.0.xx /Backups/DBPostgres/dbs-$FECHA_BORRADO.tar.gz borrar

echo "...borramos la copia local. FIN"
rm borrar

Aula con DRBL-WINROLL

Tags: , ,

Una de las tareas que he tenido quer realizar para el mantenimiento del aula del cole para que funcione con un servidor DRBL es preparar los equipos con Microsoft Windows para que una vez restauradas las imagenes de los equipos con el modo clonezilla puedan renombrarse los equipos con un patrón determinado e integrarse en un grupo de trabajo, o renovar el SID.

Afortunadamente, con DRBL, tenemos una extensión en particular para los equipos que funcionan con Microsoft Windows, se llama DRBL-WINROLL. Lo podemos encontrar aquí.

La instalación no tiene mayor complicación si seguimos la guía de instalación.

La única observación que podría hacer es que si hemos elegido la instalación en español, los comandos para interactuar desde el server a los clientes winroll mediante ssh, el usuario es administrador y no administrator que tendría por defecto. En mi caso esto me ha producido problemas, porque los comandos que tiene el DRBL, para por ejemplo apagar los ordenadores, intentan lanzar el comando con administrator y da error.  Creo que existe un fichero de configuración para cambiar el usuario que buscar por defecto el DRBL-SERVER (vamos sería lo lógico), pero yo he creado un pequeñito script, para apagar los ordenadores. Este es el script:


#!/bin/bash
#SCRIPT PARA EL APAGADO DEL AULA CON CLIENTES WINROLL
ARCHIVO_CON_IPS='/etc/drbl/IP_HOST_TABLE';


#######
LISTA=$(cat $ARCHIVO_CON_IPS | awk '{print $1;}' | grep 192);


for i in $LISTA; do
echo "Apagando ..." $i;
ssh administrador@$i "shutdown /t 1 /s /f /c \"Apagando equipo\"" &


done

  • Author: josedu
  • Published: May 7th, 2009
  • Category: linux
  • Comments: 3

script de bash para generar galería de fotos web

TAGS: None

Un simple script de bash, que genera las imagenes redimensionadas (normal,miniatura) del origen de un directorio, y genera el XML correspondienta para la galería flash que dispongo que utiliza dicho XML.

Hago uso para comprimir las imagenes del comando convert, una de las funciones que vienen con Imagemagick. El resto no es más que bash scripting.


#!/bin/bash
#Este script se utiliza para la generación de un album de fotos
#Version 0.44
#
#
# * $1 --> Ruta Directorio Origen Fotos
# * $2 --> Titulo Album
# * $3 --> Descripcion Album
# * $4 --> Fichero XML


TituloAlbum=$2;


DescripcionAlbum=$3;
FicheroXML=$4;


RutaDirectorioFotosOrigen=$1;
RutaDirectorioAlbumDestino=".";


RutaDirectorioAlbum=$RutaDirectorioAlbumDestino/$TituloAlbum;
RutaDirectorioAlbumSlides=$RutaDirectorioAlbum/slides/;
RutaDirectorioAlbumThumbs=$RutaDirectorioAlbum/thumbs/;


# Borramos el directorio si previamente se habia creado
rm -rf $RutaDirectorioAlbum;


# Creamos los directorios destino
mkdir $RutaDirectorioAlbum;
mkdir $RutaDirectorioAlbumSlides;
mkdir $RutaDirectorioAlbumThumbs;


# Creamos el inicio del xml
salida="\n\n";
salida=$salida"\n";


imagenes=$(find "$RutaDirectorioFotosOrigen" -iname "*.jpg" -printf "%f\n");


for i in $imagenes; do
printf "Procesando : "$i;
convert "$RutaDirectorioFotosOrigen/$i" -resize 180x180 "$RutaDirectorioAlbumThumbs/$i";
printf "...generado thumbnail...";
convert "$RutaDirectorioFotosOrigen/$i" -resize 640x640 "$RutaDirectorioAlbumSlides/$i";
printf "...generado slide...";
salida=$salida"\n";
printf "...generado XML...";
printf "....OK\n";
done
salida=$salida"\n\n";


#Volcamos el XML a un fichero


if [ -z $FicheroXML ]; then
echo "N0 existe argumento de fichero XML. Agregando a album.xml";
echo -e $salida >> album.xml;
else
echo "SI Existe argumento de fichero XML. Agregando a "$FicheroXML;
echo -e $salida >> $FicheroXML;
fi
echo "Proceso finalizado !!!";

script básico para hacer copia de seguridad de una base de datos en postgres local y remotamente

TAGS: None

#!/bin/bash
export RSYNC_RSH=”ssh -o Compression=yes”;
DESTINOLOCAL=”/backups/db/”
DESTINOREMOTO=”/backups/db/ordenador-de-pepito/”
#borramos los ficheros mas viejos que 30 dias del ordenador local.

find $DESTINOLOCAL -mtime +30 -exec rm {} \;

PGPASSWORD=”Passworddelabasededatos”;
export PGPASSWORD;

#ponemos un nombre basado en la fecha
fecha=`date ‘+%d’-'%m’-'%Y’__’%H’`
NOMBRE=”db-$fecha.bz2″
#Hacemos el dump de la base de datos y a su vez, la comprimimos
pg_dump -U usuario_db basededatosacopiar | bzip2 > $DESTINOLOCAL/$NOMBRE

#Aqui tenemos dos maneras de subirlo al servidor remoto:
# – con un rsync: simplemente sincroniza las carpetas, para mi más seguro. Más cómodo para el mantenimiento de las carpetas
# – con un scp (lo he dejado comentado), lanzariamos el find en remoto, o hariamos un script en la propia máquina remota
#        scp  $DESTINOLOCAL/$NOMBRE usuario@servidorRemoto:$DESTINOREMOTO
#        ssh – usuario@servidorremoto “find /home/josedu -mtime 30″

rsync -vauHLX –numeric-ids $DESTINOLOCAL usuario@servidorRemoto:$DESTINOREMOTO

De como utilizar el comando find …

TAGS: None

El comando find, es un comando muy potente de búsqueda desde linea de comandos, pero esta potencia a su vez se torna en su contra por la multitud de opciones y parámetros que nos encontramos. Aqui unos ejemplos que me han servido a mi para realizar varias tareas del día a día.

Ejemplo1:
Buscar los archivos temporales (o de respaldo), que me ha generado el editor de textos. Dos maneras diferentes

Comando : 

1: find . -name ._* -type f -print
2: find . -iregex “^.*\/\._.*$”

Ahora haciendo uso de tuberias y xargs seriamos capaz de borrar estos ficheros que ha encontrado

Comando:

1. find . -name ._* -type f -print | xargs rm -f
2. find . -iregex “^.*\/\._.*$” | xargs rm -f

Explicación : 
Busca en el directorio actual, los archivos de la forma “._nombrearchivo.ext”. Luego hemos hecho el uso de tuberias y xargs, para realizar la acción de borrado de dichos ficheros.

Ejemplo2:
Queremos buscar archivos con cierta/s extensiones en una o varias ubicaciones.

Tenemos dos maneras de hacerlo, con nuestras queridas a la vez que odiadas expresiones regulares, o con parámetros propios del find

Comando:
find /ubicacion/1 /ubicacion/2  -iregex “.*\(wmv\|avi\|mpg\|mkv\)$”
find /ubicacion/1 /ubicacion/2  -iname ‘*.avi’ -o -iname ‘*.mpg’ -o -iname ‘*.wmv’ -o -iname ‘*.mkv’

Nos devolveria alto tal que asi

/ubicacion/1/archivo124.mpg
/ubicacion/1/directorio3/archivo344.avi
/ubicacion/2/archivo12.mpg
/ubicacion/2/directorio7/archivo45.mkv

Ahora otra vez, si queremos lucirnos y aprovechar la potencia de los parámetros y de las tuberias, podriamos genernos una lista numerada con el nombre de los archivos encontrados. Explicado por pasos sería :

 - agregamos parámetro  -printf  ‘%f\n’ Esto devolveria algo tal que asi:

archivo124.mpg
archivo344.avi
archivo12.mpg
archivo45.mkv

 - Ahora hacemos uso de tuberia y usamos el awk de la siguiente manera : | awk ‘{print FNR “\t” $0}’. Esto nos imprime la lista numerada (FNR), tabulación (“\t”), y el nombre del fichero ($0). Devolvería el siguiente resultado

1         archivo124.mpg
2         archivo344.avi
3         archivo12.mpg
4         archivo45.mkv

- Ya si queremos rizar el rizo, y no queremos mostrar las extensiones, y mostrar solo el nombre del fichero, podriamos cambiar la anterior tubería, por esta otra:  | awk ‘{gsub(/\.(avi|mpg|wmv|mkv)$/,” “);print FNR “\t” $0}’  .Resultando:

1         archivo124
2         archivo344
3         archivo12
4         archivo45

 

© 2009 JOSEDU – WEB. All Rights Reserved.

This blog is powered by Wordpress and Magatheme by Bryan Helmig.