howto

Comprobar una base de datos oracle desde nagios

Comprobar una base de datos oracle desde nagios

[toc]

Introducción

Nagios es un sistema de monitorización de equipos y servicios. Si usamos este software de monitorización y tenemos un servidor de base de datos Oracle, podemos monitorizarla a través de un plugin que se encarga de esto.

Para hacer esto necesitaremos tener instalado un Nagios y el comando sqlplus. Si no tenémos este último tendremos que bajárnoslo de la web de Oracle http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html y e instalarlo /programas/instantclient_11_2.

Instalación

Lo primero será descargamos el plugin que se comunicará con Oracle de esta web: http://labs.consol.de/nagios/check_oracle_health, lo descomprimimos, lo compilamos y lo ponemos en la carpeta /usr/lib/nagios/plugins/check_oracle_health:

>> wget wget http://labs.consol.de/wp-content/uploads/2011/09/check_oracle_health-1.7.3.tar.gz
>> tar -zxvf check_oracle_health-1.7.3.tar.gz
>> cd check_oracle_health-1.7.3
>> ./configure
>> make
>> cd plugins-scripts/check_oracle_health /usr/lib/nagios/plugins/

El plugin nos permite comprobar una multitud de parámetros y cual queremos comprobar se lo indicamos en el parámetro --mode (Una lista de todas cosas que podemos comprobar la podéis encontrar en la web del plugin: http://labs.consol.de/nagios/check_oracle_health/). En nuestro caso, solo queremos comprobar que el servidor de base de datos de Oracle esta vivo. Para ello nos bastará con el modo tnsping.

En la carpeta /etc/nagios-plugins/config creamos un fichero de nombre oracle.cfg en el que definiremos los comandos de Nagios para comprobar el Oracle. El fichero tendrá el siguiente contenido (cuidado con la ruta de instalación de sqlplus que indicamos en la variable ORACLE_HOME, porque si lo tenéis instalado en otra ruta tendréis que cambiarlo):

# Comprobamos el estado del oracle
define command{
    command_name check_oracle_instant
    command_line $USER1$/check_oracle_health --user $ARG3$ --password $ARG4$ --method sqlplus --connect '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$HOSTADDRESS$)(PORT=$ARG1$))(CONNECT_DATA=(SID=$ARG2$)))' --mode tnsping --environment ORACLE_HOME=/programas/instantclient_11_2
}

Uso

Una vez que ya tenemos instalado el plugin que nos permite comprobar una base de datos Oracle, ya podemos definir un servicio de Nagios para comprobarlo:

define service{
        host_name               YOUR_SERVER
        service_description     ORACLE: check_login_health
        check_command           check_oracle_instant!1521!SID!USERNAME!PASSWORD
        max_check_attempts	5
	check_interval		5
	retry_interval		3
	check_period		24x7
	notification_interval	30
	notification_period	24x7
	notification_options	w,c,r
	contact_groups		USER
}

Por último, reiniciamos nagios para que coja la nueva configuración:

>> sudo /etc/init.d/nagios3 restart

Y ya podemos ver el estado del servicio en nuestro Nagios.

Instalar el servidor Apache Httpd de 64 bits en Windows

Apache httpd de 64 bits

Introducción

Apache no provee una versión para windows de 64 bits, pero como el código es libre cualquiera puede bajárselo y compilarlo para 64 bits. Pero esto implica un esfuerzo que a muchos nos echa para atrás. Por suerte hay comunidades por internet que hacen este paso y nos ofrecen la descarga de los binarios. Una de ellas es la web The Apache Haus, otra es Apache Lounge.

Instalación

Lo primero que tenemos que hacer es bajarnos el apache de 64 bits de su página de descarga http://www.apachehaus.com/cgi-bin/download.plx. Una vez lo hemos descargado solo tenemos que descomprimirlo en la carpeta donde lo queramos tener. Una vez hecho esto, solo nos queda instalarlo como servicio con el siguiente comando:

>> cd CARPETA_APACHE\bin
>> httpd.exe -k install

Ya lo podemos empezar a usar.

Desinstalación

Para desinstalarlo solo tenemos que deshacer los pasos que hemos seguido en la parte de la instalación. Primero desinstalamos el servicio:

>> cd CARPETA_APACHE\bin
>> httpd.exe -k uninstall

Y por último borramos la carpeta que descomprimimos.

Problemas

Librería MSVCR100.dll

Puede darse el caso de que cuando arranquemos el apache, nos aparezca una ventana con el mensaje de error "Error al iniciar la aplicación porque no se encontró MSVCR100.dll. La reinstalación de la aplicación puede solucionar el problema".

Solución

Para solucionar esto tendremos que instalar el componente "Microsoft Visual C++ 2010 Redistributable Package" de Windows. Lo podemos descargar de los siguientes enlaces:

temas: 

Borrado de archivos de forma segura

Borrado de archivos de forma segura

Introducción

En ocasiones en el ordenador tenemos archivos con información delicada (facturas, dni escaneados, contratos, ...) y no pensamos que aunque los borremos, cualquiera que tenga acceso al mismo ordenador puede recuperarlos. Esto es posible porque cuando se borra un fichero, no se escribe encima del contenido del fichero, sino que lo que se hace es quitarlo de la lista de archivos, dejando el contenido de él dentro del espacio libre del disco duro. De esta manera si un programa empieza a leer los datos del espacio libre puede encontrar la información que nosotros creemos que habíamos eliminado.

Por suerte hoy en día existen programas que intentan impedir esto. Lo que suelen hacer es escribir encima del contenido del fichero a borrar datos aleatorios varias veces para asegurarse que ya nadie lo podrá recuperar.

Linux

En linux disponemos de varias herramientas para esto. Yo os voy a enseñar a usar una de estas herramientas de borrado seguro, que aunque solo esta en consola es la que más me ha convencido. Se llama secure-delete.

Lo primero que tendremos que hacer es instalar el paquete de nombre secure-delete desde nuestro gestor de paquetes favoritos o ejecutando el siguiente comando:

>> sudo apt-get install secure-delete

Una vez lo tenemos instalado, para borrar de forma segura un fichero de nombre ejemplo.txt, tendremos que ejecutar el siguiente comando:

>> srm ejemplo.txt

Si por el contrario en vez de borrar un fichero, queremos borrar de forma segura todo lo que tenemos en una carpeta de nombre micarpeta, tendremos que ejecutar el siguiente comando:

 >> srm -r micarpeta

 

temas: 

Configurar el chat de facebook en el cliente de mensajería pidgin

Configurar el chat de facebook en pidgin

Hoy en día proliferan los servicios de chats en las redes sociales. Pero no me digáis que es dificil enterarte de cuando te estan hablando, si estas haciendo otras cosas en el ordenador. En el caso del chat de Facebook, gracias a que usa un estandar, podemos configurar el cliente de mensajería Pidgin para usarlo a través de él.

Aunque en este artículo nos centramos en el cliente Pidgin, puedes configurar el chat de Facebook en otros clientes de mensajería (En esta url nos explican los datos necesarios: http://www.facebook.com/sitetour/chat.php). Ahora vamos a lo que nos interesa.

Para configurar el chat de Facebook en el cliente de mensajería de escritorio Pidgin tendremos que abrirlo, vamos al menú Cuentas y le damos a Gestionar cuentas. Nos aparecerá una ventana para introducir los datos de configuración:

  • Protocolo: XMPP
  • Nombre de usuario: (tu nombre de usuario en facebook, no confundir con el email con que te logueas ...)
  • Dominio: chat.facebook.com
  • Recurso: Pidgin

Ahora le damos a la pestaña Avanzadas y rellenamos estos otros datos:

  • Puerto de conexión: 5222
  • Servidor de conexión: chat.facebook.com

Cuando ya tengamos todos estos datos rellenados, le damos al botón Añadir y entonces nos pedirá la contraseña, la ponemos y ya nos aparecerán nuestros contactos que estén conectados en ese momento.

temas: 

Crear bugs en bugzilla a partir de un email

Crear bugs en bugzilla a partir de un email

Introducción

Bugzilla ofrece la posibilidad de poder crear bugs a partir de emails que recibe a través de un ejecutable python que tiene email_in.pl. El email tiene que tener un formato especifico para que bugzilla lo entienda y pueda crear el bug correctamente.

Configuración

Requisitos

Lo primero que tenemos que comprobar es si tenemos todos los módulos de perl necesarios para que funcione. Para comprobarlo tendremos que ejecutar el siguiente comando:

>> ./checksetup.pl --check-modules

Los módulos de perl que he detectado que necesita son los siguientes (si me dejo alguno me lo decís y lo añado)

  • Email-Reply
  • Class-C3
  • Email-MIME-Attachment-Stripper

Si os falta alguno tendreis que instalarlos ya sea con el instalador de perl o si existen los paquetes de estos módulos en el repositorio de vuestra distribución de linux, hacerlo desde ahí.

También necesitaremos un servidor de correo electrónico para que reciba los emails que luego redirigirá a bugzilla. (En esta guía no vamos a entrar a explicar como montar un servidor de correo electrónico, por lo que damos por hecho que ya tenéis un servidor de correo electrónico instalado en la misma máquina que el bugzilla)

Configurar el servidor de email

Para conectar el servidor de correo electrónico con el bugzilla tenemos que redirigir los emails a una cuenta que elijamos (por ejemplo: bug-submit@TU_DOMINIO.COM) al ejecutable de bugzilla que tratará estos emails.

Para ello, en el archivo /etc/aliases añadimos la siguiente línea que indica que los emails recibidos por la cuenta bug-submit@TU_DOMINIO.COM se los envíe al ejecutable email_in.pl de bugzilla para que cree el bug:

# Test para crear un bug desde email en bugzilla
bug-submit: "|/PATH_A_TU_BUGZILLA/email_in.pl -vvv 2>/var/log/bugzilla_emailin.log"

Configurar Bugzilla

Entramos en la Administración de bugzilla, luego le damos a Parámetros y ahora le damos a la sección Correo electrónico (http://yesa.cps.unizar.es/bugzilla4/editparams.cgi?section=mta) y en el campo mailfrom ponemos bug-submit@TU_DOMINIO.COM. Le damos al botón Guardar Cambios y ya esta.

Funcionamiento

Lo primero es simular que recibimos un email pasándole un fichero que describe un email por la entrada al ejecutable que lee los emails de bugzilla.

Guardamos en un fichero (por ejemplo emailTest.txt) un ejemplo de email (acordaros de cambiar en email de destino bug-submit@TU_DOMINIO.COM por la dirección en la que escuche bugzilla, el email del que lo envía USUARIO@SU_DOMINIO.COM por una que corresponda a una cuenta del bugzilla y por último cambiar el producto y componente por uno de vuestro bugzilla donde queráis crear el bug):

Delivered-To:  bug-submit@TU_DOMINIO.COM
Received: by 10.68.47.230 with SMTP id g6cs99712pbn;
        Mon, 4 Jul 2011 02:12:03 -0700 (PDT)
Received: by 10.227.162.129 with SMTP id v1mr3783487wbx.63.1309770722829;
        Mon, 04 Jul 2011 02:12:02 -0700 (PDT)
Return-Path: <USUARIO@SU_DOMINIO.COM>
Received: from isuela.unizar.es (isuela.unizar.es [155.210.1.53])
        by mx.google.com with ESMTPS id ek19si11909570wbb.69.2011.07.04.02.12.02
        (version=TLSv1/SSLv3 cipher=OTHER);
        Mon, 04 Jul 2011 02:12:02 -0700 (PDT)
Received-SPF: pass (google.com: domain of USUARIO@SU_DOMINIO.COM designates 155.210.1.53 as permitted sender) client-ip=155.210.1.53;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of USUARIO@SU_DOMINIO.COM designates 155.210.1.53 as permitted sender) smtp.mail=USUARIO@SU_DOMINIO.COM
Received: from queiles.unizar.es (hordedb.unizar.es [155.210.1.33])
    by isuela.unizar.es (8.13.8/8.13.8/Debian-3) with SMTP id p649BxVm017299
    for bug-submit@TU_DOMINIO.COM; Mon, 4 Jul 2011 11:11:59 +0200
Received: from huecha.unizar.es (huecha.unizar.es [155.210.1.51])
    by queiles.unizar.es (8.13.8/8.13.8/Debian-3) with ESMTP id p649C1tH025070
    (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
    for <bug-submit@TU_DOMINIO.COM>; Mon, 4 Jul 2011 11:12:01 +0200
Received: from [155.210.155.156] (filemonpi2.cps.unizar.es [155.210.155.152])
    (authenticated bits=0)
    by huecha.unizar.es (8.13.8/8.13.8/Debian-3) with ESMTP id p649BurT031554;
    Mon, 4 Jul 2011 11:11:59 +0200
Message-ID: <4E1183DB.8050204@unizar.es>
Date: Mon, 04 Jul 2011 11:11:55 +0200
From: =?ISO-8859-1?Q?M=AA_Jos=E9_P=E9rez?= <USUARIO@SU_DOMINIO.COM>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; es-ES; rv:1.9.2.18) Gecko/20110616 Thunderbird/3.1.11
MIME-Version: 1.0
To: =?ISO-8859-1?Q?bugzilla <bug-submit@TU_DOMINIO.COM>
Subject: Prueba
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-Mail-Scanned: Criba 2.0 + Clamd & Bogofilter

@product TU_PRODUCTO
@component TU_COMPONENTE
@summary Prueba de bug
@version unspecified
@op_sys Linux
@platform PC

Descripcion del bug

Se lo pasamos al ejecutable de bugzilla que se encarga de reciir los emails para crear los bugs:

>> ./email_in.pl < emailTest.txt

Si todo ha funcionado se habrá creado el bug en el bugzilla a partir del email.

Ahora lo siguiente será probar que enviando un email desde una dirección de email que corresponda con una cuenta del bugzilla. Si sigue funcionando ya tenemos todo hecho.

Para saber como se llaman los campos que tenemos que poner en el email para crear el bug con los datos que queramos podemos mirar la documentación en esta url: http://www.bugzilla.org/docs/4.0/en/html/api/Bugzilla/WebService/Bug.htm...

Errores

Error Can't locate Email/Reply.pm

Al ejecutar el programa que lee los emails que recibe bugzilla, obtenemos el siguiente error:

>> ./email_in.pl --help
Can't locate Email/Reply.pm
...

Solución

El problema esta en que falta el módulo Email-Reply de perl. Para instalarlo tendremos que instalar el paquete de nombre perl-Email-Reply a través de nuestro gestor de paquetes favorito o ejecutando el siguiente comando:

>> sudo yum install perl-Email-Reply

Error Can't locate Algorithm/C3.pm

Al ejecutar el programa que lee los emails que recibe bugzilla, obtenemos el siguiente error:

>> ./email_in.pl --help
Can't locate Algorithm/C3.pm in @INC (@INC contains: . lib/i386-linux-thread-multi lib /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8) at lib/Class/C3.pm line 25.
BEGIN failed--compilation aborted at lib/Class/C3.pm line 29.
Compilation failed in require at lib/MRO/Compat.pm line 27.
BEGIN failed--compilation aborted at lib/MRO/Compat.pm line 44.
Compilation failed in require at lib/Email/Abstract.pm line 7.
BEGIN failed--compilation aborted at lib/Email/Abstract.pm line 7.
Compilation failed in require at lib/Email/Reply.pm line 4.
BEGIN failed--compilation aborted at lib/Email/Reply.pm line 4.
Compilation failed in require at ./email_in.pl line 39.
BEGIN failed--compilation aborted at ./email_in.pl line 39.
...

Solución

El problema esta en que falta el módulo Class-C3 de perl. Para instalarlo tendremos que instalar el paquete de nombre perl-Class-C3 a través de nuestro gestor de paquetes favorito o ejecutando el siguiente comando:

>> yum install perl-Class-C3

Error Can't locate Email/MIME/Attachment/Stripper.pm

Al ejecutar el programa que lee los emails que recibe bugzilla, obtenemos el siguiente error:

>> ./email_in.pl --help
Can't locate Email/MIME/Attachment/Stripper.pm in @INC
...

Solución

El problema esta en que falta el módulo Email-MIME-Attachment-Stripper de perl. Para instalarlo tendremos que instalar el paquete de nombre perl-Email-MIME-Attachment-Stripper a través de nuestro gestor de paquetes favorito o ejecutando el siguiente comando:

>> yum install perl-Email-MIME-Attachment-Stripper

Error Service unavailable

Al enviar un email a la dirección que lee bugzilla, nos muestra el siguiente error en el log:

>> tail -100 /var/log/maillog
...
Jul  6 09:35:33 ia3 smrsh: uid 8: attempt to use "email_in.pl -vvv" (stat failed)
Jul  6 09:35:33 ia3 sendmail[15394]: p667ZX5R015393: to="|/var/www/bugzilla/email_in.pl -vvv", ctladdr=<bug-submit@dominio.com> (8/0), delay=00:00:00, xdelay=00:00:00, mailer=prog, pri=30703, dsn=5.0.0, stat=Service unavailable
Jul  6 09:35:33 ia3 sendmail[15394]: p667ZX5R015393: p667ZX5R015394: DSN: Service unavailable
...

Solución

Este problema puede deberse a que el email se envía desde una cuenta de email que no pertenece a ninguna cuenta del bugzilla. Por lo que tendremos que enviar el email con una dirección email que corresponda a una cuenta de bugzilla.

Instalación y configuración de mldonkey

Mldonkey

Introducción

En esta guía voy a describir como instalar y configurar el servidor de descarga multired llamado Mldonkey.

Instalación

Instalación del servidor

El programa se encuentra en los repositorios oficiales de Ubuntu. Así que para instalarlo solo tenemos que instalar el paquete de nombre mldonkey-server desde nuestro gestor de paquetes favorito o ejecutar el siguiente comando:

>> sudo apt-get install mldonkey-server

Y con eso ya lo tenemos instalado.

Instalación del cliente

Para conectarnos al servidor existen varios clientes. El que más me gusta se llama Sancho. Para instalar el cliente, tendremos que ir a su web y descargarlo.

Configuración

Configuración recomendada

En cuanto a la configuración recomendada, yo os aconsejaría hacer lo siguiente:

Cambiar los puertos de descarga

Al ser un cliente multired, tendremos que ser conscientes que utiliza puertos diferentes para conectarse a cada una de las redes que tengamos activadas. Y estos puertos los tenemos que tener abiertos en nuestro router para que la descarga sea óptima, por lo tanto o tendremos que poner unos puertos qeu tengamos abiertos en el router para nuestro ordenador o tendremos que abrir los puertos que selecciono mldonkey al instalarlo. Los puertos para cada red los encontraremos en:

  • Edonkey: En el archivo /var/lib/mldonkey/donkey.ini en el parámetro port.
  • Bittorrent: En el archivo /var/lib/mldonkey/bittorrent.ini en el parámetro client_port.
  • DirectConnect: En el archivo /var/lib/mldonkey/directconnect.ini en el parámetro client_port.

Desactivar la actualización automática de servidores

Deshabilitar que la lista de servidores se actualice automáticamente. Esto es recomendable, ya que hay muchos servidores que solo tienen fakes para dificultar la descarga de lo que queremos. Para ello tendremos que desactivar estas opciones:

  • ED2K-update_server_list_client : Esta opción añade automáticamente servidores que tienen otros usuarios.
  • ED2K-update_server_list_server : Esta opción añade automáticamente servidores que nos dicen los servidores a los que nos conectamos.

Actualizar la lista de servidores

Antes de empezar, tenemos que estar seguros que se esta ejecutando el servidor y de que este activada la opción update_server_list_server_met. Entonces nos conectamos a la consola del programa por medio de telnet:

>> telnet 127.0.0.1 4000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Welcome to MLDonkey 3.0.1
Welcome on mldonkey command-line
 
Use ? for help
 
>

Una vez conectados ya podemos ejecutar comandos. El comando que carga los servidores que contiene un archivo server.met se llama servers y se le pasa de argumento la localización en la máquina de este archivo:

> servers /home/intropedro/server.met
158 servers found, 12 new ones inserted

Problemas

update_server_list_server_met is disabled

Al ejecutar el comando para añadir los servidores de un archivo server.met, puede que nos aparezca el siguiente error:

> servers server.met
ED2K-update_server_list_server_met is disabled, ignoring...
Solución

Este error se debe a que no tenemos activada la opción update_server_list_server_met. Para activarla podemos ...

Unable to connect to remote host

Al intentar conectarnos a la consola de mldonkey, nos puede aparecer el siguiente mensaje de error:

>> telnet 127.0.0.1 4000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Solución

Esto es porque el programa no se esta ejecutando. Para ello tendremos que encenderlo con el siguiente comando:

>> sudo /etc/init.d/mldonkey-server start

Cargar diccionarios de Babylon en Stardict

Stardict

Introducción

Stardict es un programa que te permite acceder a diccionarios que cargas en él. Lo que me gusta de él es que puedes tenerlo ejecutándose en segundo plano y al seleccionar un texto en cualquier aplicación, te aparecerá un pop-up con el contenido de esa palabra en los diccionarios. Por lo que si tienes un diccionario de Inglés a Español puedes usarlo de traductor.

El problema que tiene es que los diccionarios no vienen con el programa y tienes que buscar algo por internet que pueda usarlo el programa. Esta guía se concentra en facilitar esta tarea.

Instalación

Primero vamos a instalar el programa. Este se encuentra en los repositorios de ubuntu. Por lo tanto solo tendremos que instalar el paquete de nombre stardict-gnome desde nuestro gestor de paquetes preferido o sino ejecutar el siguiente comando desde la consola:

>> sudo apt-get install stardict-gnome

Una vez tenemos instalado el programa, vamos a cargar varios diccionarios en él. Los diccionarios nos los bajaremos de internet y para convertirlos en un formato que pueda usar stardict tendremos que instalar además otro programa. Así que desde nuestro gestor de paquetes preferido instalamos el paquete de nombre stardict-tools o ejecutamos el siguiente comando:

>> sudo apt-get install stardict-tools

Lo siguiente es conseguir por internet los diccionarios que queramos usar. Una de las páginas que proporciona diccionarios gratuitos que nos van a servir es Babylon. Entonces buscamos y descargamos los diccionarios que queramos de la web de Babylon (http://www.babylon.com/free-dictionaries/) (en mi caso me voy a poner uno de Español a Inglés y otro de Inglés a español)

Cuando terminen de descargarse los diccionarios que queremos usar, empezamos el proceso haciendo los siguientes pasos:

  • Abrimos el programa de conversión de formatos  de diccionarios ejecutando el siguiente comando desde una consola:

>> stardict-editor

  • Comprobamos que estamos en la ventana Compile.
  • Le damos al botón Browse...
  • Seleccionamos uno de los archivos de extensión bgl.
  • Cambiamos la selección a BGL file.
  • Le damos al botón Build.
  • Si todo ha ido bien, nos pondrá: Done.
  • Este proceso nos habrá generado un fichero del mismo nombre pero con extensión babylon.
  • Entonces le volvemos a dar al botón Browse...
  • Seleccionamos el fichero de extensión babylon.
  • Cambiamos la selección a Babylon file.
  • Le volvemos a dar al botón Build.
  • Si todo ha ido bien, al final nos pondrá: Done!.
  • Y veremos que nos ha generado unos ficheros de extensión idx, ifo, syn y dz.
  • Por último cerramos el programa.

Repetimos estos pasos con cada diccionario que queramos cargar.

Una vez que tengamos todos los archivos generados (idx, ifo, syn y dz), los copiamos a la carpeta /usr/share/stardict/dic/. Por último abrimos el programa y ya veremos los diccionarios en las preferencias.

Renombrar las fotos añadiendole la fecha exif al principio en linux

Fotos ordenadas por fecha

Introducción

Muchas veces tenemos fotografías del mismo día pero tomadas con diferentes cámaras de fotos. Cada una le da a las imágenes usa nombres diferentes, por lo que para ordenarlas cronológicamente no es nada fácil. Por suerte, la mayoría  de las cámaras almacena en las fotos datos como la fecha y hora que tenía la cámara cuando fue tomada (se llaman datos exif). Gracias a esto, podemos extraer estos datos y usarlos para renombrar las fotografías. Así podremos ordenarlas cronológicamente.

Para ello necesitamos tener primero instalado el programa exif (con algunas fotos no me funcionaba y lo tube que hacer con libimage-exiftool-perl). Si no lo tenemos, solo hay que instalar el paquete llamado exif (o libimage-exiftool-perl) a través de nuestro gestor de paquetes preferido o con el siguiente comando:

>> sudo apt-get install exif

 

>> sudo apt-get install libimage-exiftool-perl

Añadir la fecha al nombre de las fotos

Para añadir la fecha al comienzo del nombre del fichero tendremos que ejecutar uno de los dos siguientes comandos:

>> for i in *.jpg; do dst=$(exif -t 0x9003 -m "$i" ) && dst_esc=$(echo $dst | sed 's/ /_/g' | sed 's/:/-/g' ) && mv "$i" "$dst_esc $i" ; done

 

>> for i in *.jpg; do dst=$(exiftool -T -createdate "$i" ) && dst_esc=$(echo $dst | sed 's/ /_/g' | sed 's/:/-/g' ) && mv "$i" "$dst_esc $i" ; done

Explicación de cada parte del comando:

  • Para hacer solo esto con las fotos que tienen de extensión .jpg pondremos lo siguiente (si nuestras fotos tienen otra extensión cambiaremos esta) : <span>for</span> i in *<span>.jpg</span>; do
  • Extraemos de la imagen la fecha en la que se tomó:
>> exif -t 0x9003 -m  DSC00024.JPG
2006:10:13 03:17:3

 

>> exiftool -T -createdate DSC00024.JPG
2006:10:13 03:17:3
  • Como no me gustan los espacios en los nombres de los archivos, lo cambio por _ con el siguiente comando:  sed &#39;s/ /_/g&#39;
  • Como no me gustan los : en los nombres de los archivos los cambio por - con el siguiente comando:  sed &#39;s/:/-/g&#39;

Quitar la fecha del nombre de las fotos

Para quitar la fecha que hemos añadido en el anterior paso solo tenemos que eliminar los primeros 19 caracteres del nombre que corresponden con la fecha (YYYY:MM:DD-HH:MM:SS). Esto lo haremos con el siguiente comando:

>> for i in ????-??-??_??-??-??*; do oldname=$(echo "$i" | sed 's/...................\(.*\)/\1/' ) && mv "$i" "$oldname" ; done

Explicación de cada parte del comando:

  • Solo queremos renombrar los archivos que tienen la fecha. Estos los conseguimos con lo siguiente: for i in ????-??-??_??-??-??*; do

Editar los datos Exif de las fotos

Puede ser que cuando hicieramos las fotos, la fecha de la cámara estuviera mal puesta. Para modificar la fecha y hora de los datos exif de las fotos, podemos utilizar el comando exiv2. Si no lo tenemos instalado, solo tenemos que instalar el paquete exiv2 desde nuestro gestor de paquetes preferidos o ejecutando el siguiente comando:

>> sudo apt-get install exiv2

Una vez ya lo tenemos instalado podemos empezar a modificar los datos exif. A continuación tenéis unos ejemplos de uso:

  • Sumar 3 años:
>> exiv2 -Y 3 *.JPG
  • Sumar 2 meses:
>> exiv2 -O 2 *.JPG
  • Sumar 5 días:
>> exiv2 -D 5 *.JPG
  • Sumar 3 horas:
>> exiv2 -a 03:00:00 *.JPG
  • Sumar 10 minutos:
>> exiv2 -a 00:10:00 *.JPG
  • Sumar 27 segundos:
>> exiv2 -a 00:00:27 *.JPG

(si queremos restar en vez de sumar, solo tendremos que poner números negativos)

Usar el dwr remótamente

usar dwr remotamente

Usar el dwr remótamente

Direct Web Remoting (dwr) es una librería que proporciona una API que permite realizar llamadas remotas a objetos Java del servidor desde código JavaScript cliente a través de Ajax.

La forma más comun es tener la parte del servidor y del cliente en la misma máquina, pero puede darse el caso en el que queramos tener la página cliente en otra máquina y acceder al drw remótamente. Esto no funciona por defecto y para que funcione, tendremos que hacer lo siguiente.

En la parte javascript tendremos que ejecutar estas dos órdenes antes de llamar a cualquier función de cualquier clase java publicada con el dwr (observar que la segunda orden tendremos que ejecutarla por cada clase java que utilicemos):

dwr.engine.setRpcType(dwr.engine.ScriptTag);
MyClass._path = 'http://MYDOMAIN.COM/dwr';

Y en el fichero web.xml del servlet DwrServlet hay que poner a true los parámetros allowScriptTagRemoting y allowGetForSafariButMakeForgeryEasier:

<init-param>
    <param-name>allowScriptTagRemoting</param-name>
    <param-value>true</param-value>
</init-param>
<init-param>
    <param-name>allowGetForSafariButMakeForgeryEasier</param-name>
    <param-value>true</param-value>
</init-param>

Un ejemplo sencillo de la parte cliente de una clase java de nombre MyClass con una función de nombre myFunction publicada en un dwr que esta en la url http://DOMAIN1.COM/dwr sería el siguiente:

<html>
<head>
    <script type='text/javascript' src='http://MYDOMAIN1.COM/dwr/interface/MyClass.js'></script>
    <script type='text/javascript' src='http://MYDOMAIN1.COM/dwr/engine.js'></script>
</head>
<body>
    <script type="text/javascript">
        dwr.engine.setRpcType(dwr.engine.ScriptTag);
        MyClass._path = 'http://MYDOMAIN1.COM/dwr';
    
        MyClass.myFunction('parameter1',alert);
    </script>
</body>
</html>

Errores

Error 404 Not Found

Cuando se hace la llamada a una función de una clase java que esta publicada con el dwr (por ejemplo para una clase de nombre MyClass y una función myFunctión se llamaría a /dwr/call/plaincall/MyClass.myFunction.dwr), da un error http 404 Not Found.

Solución

El problema está en que cuando el dwr llama a la función de la clase, la llamada ajax la ejecuta como si el dwr estuviera en el mismo dominio que la aplicación cliente. Y como el dwr no esta en esa máquina, da ese error. Para que la llamada se haga con el dominio en el que esta el dwr (por ejemplo http://MYDOMAIN1.COM/dwr), tendremos que añadir en la aplicación cliente el siguiente código javascript antés de llamar a la función que queramos:

MyClass._path = 'http://MYDOMAIN.COM/dwr';

Error No data received from server

La petición ajax que se llama al ejecutar una función de una clase java publicada en el dwr, devuelve el estado http de exito 200. Pero no devuelve nada.

http://MYDOMAIN1.COM/dwr/call/plaincall/MyClass.myFunction.dwr No data received from server

Solución

El problema esta en que no hemos ejecutado el siguiente código javacript en la parte del cliente. Por lo que para solucionarlo tendremos que añadirlo a la parte cliente:

dwr.engine.setRpcType(dwr.engine.ScriptTag);

Error allowScriptTagRemoting is false

Cuando se hace la llamada a una función de una clase java que esta publicada con el dwr, nos aparece un error javascript que dice lo siguiente:

uncaught exception: allowScriptTagRemoting is false.

y en el log del servidor donde esta el dwr aparece la siguiente línea:

15:06:38,824 DEBUG DebuggingPrintWriter:43 - out(18): throw 'allowScriptTagRemoting is false.';

Solución

Tenemos que poner a true el parámetro allowScriptTagRemoting del servlet DwrServlet. Para ello tendremos que editar el fichero web.xml y añadir el siguiente parámetro para ese servlet:

<init-param>
    <param-name>allowScriptTagRemoting</param-name>
    <param-value>true</param-value>
</init-param>

Error Get is disallowed

Al llamar a una función de una clase java publicada en el dwr, nos da el siguiente error javascript:

engine.js (línea 1310) Error: java.lang.SecurityException, GET Disalowed

y en el log del servlet aparece el siguiente error:

15:16:34,238 ERROR Batch:75 - GET is disallowed because it makes request forgery easier. See http://getahead.org/dwr/security/allowGetForSafariButMakeForgeryEasier for more details.

Solución

Tenemos que poner a true el parámetro allowGetForSafariButMakeForgeryEasier del servlet DwrServlet. Para ello tendremos que editar el fichero web.xml y añadir el siguiente parámetro para el servlet indicado:

<init-param>
           <param-name>allowGetForSafariButMakeForgeryEasier</param-name>
           <param-value>true</param-value>
</init-param>
temas: 

Migración de una instalación de mldonkey

Migración de una instalación de mldonkey

En este artículo os voy a explicar como podéis migrar la configuración de una instalación del servidor de mldonkey de una máquina a otra diferente (ya sea por un cambio de máquina, por formatear, etc) y así no perder la configuración para que los demás usuarios nos sigan identificando como el mismo con los puntos conseguidos.

Lo primero de todo es parar el servicio por si se esta ejecutando:

>> sudo /etc/init.d/mldonkey-server stop

Una vez parado, vamos ha hacer una copia de seguridad de los archivos que vamos a sustituir:

>> sudo tar -zcvf mldonkey.tar.gz /var/lib/mldonkey

Ahora podemos reemplazar los ficheros actuales por los de la otra instalación que estamos migrando. Como ejemplo considero que tengo la carpeta de la antigua instalación del servidor mldonkey en /mnt/var/lib/mldonkey. Lo que hay que hacer es: borrar la configuración nueva, copiar la antigua configuración y poner al usuario mldonkey de propietario de estos archivos:

>> cd /var/lib/mldonkey
>> sudo rm -R .
>> sudo cp -R /mnt/var/lib/mldonkey/* .
>> sudo chown mldonkey:mldonkey -R .

Una vez que tenemos la antigua configuración, tenemos que actualizar un parámetro de ella (el uid del usuario mldonkey). Para saber el uid del usuario mldonkey en la máquina en la que esta instalado el servidor, debemos ejecutar el siguiente comando (como podéis ver el uid del usuario mldonkey es 115):

>> more /etc/passwd | grep mldonkey
...
mldonkey:x:115:123::/var/lib/mldonkey:/bin/false
...

Una vez tenemos el uid del usuario mldonkey, tendremos que ir al archivo /var/lib/mldonkey/downloads.ini y buscar la línea en la que se indica este parámetro y le ponemos el actual:

run_as_useruid = 132

Ya tenemos el servidor mldonkey listo y lo podemos volver a arrancar:

>> sudo /etc/init.d/mldonkey-server start