JOSEDU – WEB

Un ratito tranquilo…

Script bash comprobación tiempo respuesta DNS.

TAGS: None

Después de unos problemillas que hemos tenido en el trabajo con los dns internos, decidí hacer una prueba para medir su tiempo de respuesta y por tanto comprobar que estaban funcionando correctamente.

No es un script que este demasiado currado, pero a nosotros nos valió estos días para hacer comprobaciones:


#!/bin/bash
COMANDO="/usr/bin/nslookup $1";
urls[0]="www.nasa.gov";
urls[1]="www.google.es";
urls[2]="www.example.com";
urls[3]="www.yahoo.es";
urls[4]="barrapunto.com";
i=1
while [ $i -le 1000 ]
do
t=$RANDOM%5;
echo -n "Probando contra ${urls[$t]}....";
COMANDO="/usr/bin/nslookup ${urls[$t]} $1";
START=$(date +%s);
$COMANDO > /dev/null 2>&1;
END=$(date +%s);
DIFF=$(( $END - $START ))
echo "Resolver ${urls[$t]} con el DNS $1 tarda $DIFF segundos";
((i++))
sleep 0.5;
done

Nota:
No se porque no me indentar el código. Sorry.

Video restaurando Aula con DRBL (Multicast)

Tags: , , ,

Vídeo casero que tomé el año pasado en una de mis primeras restauraciones con DRBL con multicast del aula del colegio.

Se restauraron 17 ordenadores. La imagen era de un Windows XP de unos 4 gigas comprimidad (11 descomprimida). Tardo en transferir toda la imagen por multicast unos 4 minutos, para posteriormente reiniciar los ordenadores y mediante el DRBL-WINROLL , realizar el consiguiente reincio para cambiarles el SID y el nombre de la máquina, y ya estar operativos. Total de la operación unos 10-15 minutos.

Mensajería instantanea en consola

Tags: , ,

La mensajería instantanea es una de las utilidades que siempre estamos acostumbrados a utilizar con interfaz gráfica. Pero el otro día se me ocurrió hacer pruebas con algun cliente de mensajería instantanea para consola. El programa elegido fue centerim.

Centerim es un cliente de mensajería multiprotocolo, el cual soporta: msn, jabber, icq, irc, etc. Soporta también el envío de urls y envío de sms. El programa, como tal, pues bueno, interfaz basada en ncurses, y bastante fácil de manejar y configurar. Pero el motivo de la instalación no era solo probar el cliente de mensajeria para chatear, sino para cosas más interesantes, como envío mensajes del sistema a mis cuentas de chat para recibir algún mensaje urgente.

Lo que en principio parece algo fácil, ya que el en el man de centerim tenemos un ejemplo de como enviar mensajes desde linea de comandos, la cosa se complica, cuando los mensajes que enviamos desde línea de comandos se quedan en cola de mensajes ya que no se envían si el programa no está en marcha. Veamos un ejemplo de como enviar un mensaje, y después abordaremos el tema de dejar el programa en marcha.

Ejemplo:

$ echo “hola” | centerim -s msg -p jab -t cuenta_destino

la sintaxis es clara:

-s msg (que enviamos un msg)

-p jab (protocolo q utilizamos, en esta caso jabber)

-t cuenta_destino (a quien lo queremos enviar)

Vale, ahora viene el problema, de que si queremos que nos lleguen los mensajes, el centerim, debe estar en marcha. Lo primero que se me ocurrió, es poner a centerim en background y lanzado con nohup, para poder abandonar la consola. La cosa no funcionó, en el momento que centerim pasa a background, se detiene la ejecución, y no acepta nada.

Así que me acordé de mi viejo amigo el comando : screen. Para el que no lo conozca, screen te permite abrir terminales virtuales dentro de la propia terminal, las cuales se pueden abandonar con los programas en ejecución. Los parámetros de screen que nos interesan serían: “-d -m”, los cuales inician el screen en background, por lo tanto si ejecutamos:

$ screen -d -m -q -t “chat” centerim-utf8

tendremos el centerim funcionando y en background como queríamos.

Ahora ya tenemos una via más de comunicación a agregar a nuestros scripts aparte del tradicional mail.

Jugando con los videos

Tags: , , ,

Recientemente he adquirido una cámara de video para llevar encima de la moto, y debido a sus caracteristicas, me he visto forzado a hacer uso de los programas de transformación de video para cambiar el tamaño y la calidad del video y asi rebajar el peso de estos. La camarita en cuestión aunque es pequeña, es matona, y tiene la “pega” de guardar los videos en un formato de compresión pobre, MJPEG a un tamaño de 512×384. Esto produce hace que un video de 56 min ocupe la nada despreciable tamaño de 2 Gigas.

Así que me he tenido que poner manos a la obra, y hacer uso de dos programas de consola (donde se ponga la consola que se quite lo demás), mencoder y ffmpeg. No voy a entrar en detalle de como instalar estos programas en linux, en ubuntu y derivadas de debian, no es más complicado que apt-get install y el nombre de los programas, y como mucho agregar alguna librería opcional.

Primeramente decir, que nunca me había visto ante la tesitura de hacer este tipo de transformaciones salvo algún video para meter al móvil, pero nada que mo obligara el uso continuado de estos programas. Es por esto, que los ejemplos que aquí pongo son por ahora muy básicos (aunque efectivos), pero no dudeis que les voy a sacar miga haciendo scripts más complejos para hacer automatizaciones y proceso de colas de videos. Dicho esto, manos a la obra.

mencoder :

El primer programa que he encontrado googleando, y que ya me ha resuelto el primer problema. Convertir a un codec mas benevolente con el tamaño, digamos Xvid:

mencoder videoEntrada.AVI -ovc xvid -oac mp3lame -xvidencopts bitrate=765 -o videoSalida.avi

Creo que el comando no necesita mucha explicación pero bueno

-ovc xvid : Codec de Video a aplicar
-oac mp3lame: Codec de Audio
-xvidencopt bitrate=765 : Bitrate que aplica al codec (cuanto mayor bitrate mejor calidad pero mas peso. Prometo profundizar en este parámetro que da mucha miga)
-o videoSalida.avi : El nombre del video de salida.

Dependiendo la máquina que tengais y la duración del video, pues evidentemente os tardara más o menos. Por poner un ejemplo en mi máquina (Athlon X2 3800+), un video de 15 min de duración y 500 Mb de peso, ha tardado 9 min en comprimirlo y se ha quedado en 81 Mb.

Seguimos teniendo un fichero bastante gordito, si por ejemplo lo queremos al móvil o al youtube. Lo que más rebaja el peso después del codec, es cambiarle el tamaño del video (para que queremos un video de 500 pixeles para ver en una pantallita de google o en un recuadro de youtube (aparte que el formato de youtube nativo es 320×240). Para cambiar el tamaño he hecho uso del ffmpeg

ffmpeg:

Primeramente decir, que aqui, he tenido problemas, con las librerias que tenía instaladas en ubuntu, porque al parecer para trabajar con xvid, mp4, etc, no las tiene por defecto. Esto lo he solucionado con:

sudo apt-get install libavcodec-unstripped-51

El ffmpeg es una bestia de modificadores que admite, y hay que digerirlo despacito y con cuidado. Quien controle esto, es el puto rey, y también prometo hacer algun ejemplo más avanzadito aprovechando todas las bondades de este programa

Para el cambio de tamaño he usado el siguiente comando:

ffmpeg -i videoentrada.avi -ar 22050 -s 320x240 videosalida.avi
-ar 22050: , vamos cambiamos la calidad del audio. Si vuestro video no tiene audio, no haria falta
-s 320×240: Nueva resolución.

El video anterior, tratado con esta “medicina”, lo ha dejado en unos adorables 33 Mb de peso, que no están nada mal, para un video de 15 min.

Y ahora el remate final. Youtube solo deja subir videos de 10 minutos de duración.¿ Cómo hacemos para cortar el video con estas herramientas ?. Aqui tenemos un ejemplo:

Cortamos final de posicion 10 min:

mencoder -endpos 00:10:00 -ovc copy -oac copy video.avi -o video1.avi

Desde el minuto 10 hasta el final:

mencoder -ss 0:10:00 -oac copy -ovc copy video.avi -o video2.avi

Seguiré produndizando en apasionante mundo, y prometo traer comandos y scripts más trabajados.

Instalacion de un servidor RDP (Terminal Server) en linux

Tags: , , ,

la cuestion era como acceder las Xwindows de un windows sin muchas historias, he incluso utilizando una herramienta ya existente en windows, como por ejemplo el cliente de terminal server.

Pues existe una implementacion del protocolo RDP para un servidor en linux http://xrdp.sourceforge.net y vamos a instalarla en un servidor centos 5.3, nos descargarmos

wget http://downloads.sourceforge.net/sourceforge/xrdp/xrdp-0.4.1.tar.gz?use_mirror=puzzle

y la descomprimimos tar zxvf xrdp-0.4.1.tar.gz .

Antes de hacer make y make install tenemos que añadir los librerias de desarrollo para que nos compile bien son:

yum install openssl-devel.x86_64( nos descarga tb la dependencias)

yum install pam-devel.x86_64

Y despues ya podemos realizar el make y make install.

Solo nos falta lanzar el proceso y ponerlo para que arranque automatico y dar permisos a los usuarios. Vamos alla:

Lanzar el proceso manual:

/usr/local/xrdp/xrdp_control.sh

Ponerlo para que arranque automaticamente (en centos)

cp /usr/local/xrdp/xrdp_control.sh /etc/init.d/xrdp_control

chkconfig –add xrdp_control

chkconfig — level 35 xrdp_control on

service xrdp_control start

Y por ultimo solo nos falta añadir los usuarios al grupo rdusers

usermod -G rdusers troig

(Para root, hay que darle antes permisos para poder entrar en el interfaz grafico y añadirlo al grupo rdusers)
Os dejo una captura.captura_ts_centos1

  • Author:
  • 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

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:
  • 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 … (ACT)

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

 

 —ACTUALIZADO (08-01-2014)

Mi amigo y compañero Hernán me pedía si se hacer una copia solo de los ficheros de imagen (concretamente jpg) de una estructura de ficheros con varias carpetas anidadas y copiarlo en destino con la misma estructura de carpetas. Pues bueno hemos utilizado el comando find para realizar esto, sería tal que así:

find /media/Datos -type d -exec mkdir -p “temporal/{}” \;
Aquí recreamos la estructura de directorios, haciendo una búsqueda de directorios en origen y creándolos en el destino.
find /media/Datos -iname “*.jpg”  -exec cp -v “{}” “temporal{}” \;
#Aquí por fin realizamos la copia de los fichero buscando previamente los que cumplen la condición y ya copiándlos a destino.

 

 

 

© 2009 JOSEDU – WEB. All Rights Reserved.

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

sex porn