lunes, 23 de noviembre de 2009

Eliminar la advertencia evento id: 9554, descripción “Unable to update Mailbox SD in the DS. Mailbox


Para resolver el problema de multiples Advertencias id: 9554, generadas por una falla en la configuración de seguridad un usuario/mailbox, sencillamente tenemos que seguir los pasos que MS nos recomienda aquí .

El evento exportado tiene las siguientes caracteristicas:

Date:      
Time:     
Source:   MSExchangeIS

Type:     Warning 
Event ID: 9554
User:     N/A
Computer: 

Description:
Unable to update Mailbox SD in the DS. Mailbox GUID:
f911a4c2-42de-42c1-8d97-abef7766063c. Error Code 0x80040102 

Para resolver este problema, se deben restaurar los permisos originales del buzón afectado, o activar la casilla “Permitir que los permisos heredables del primario se propaguen a este objeto” en la ficha Seguridad de la cuenta de usuario cuyo buzón causa este problema. Para obtener dicho usuario se deben seguir los siguientes pasos:
 
Localizar el buzón que causa este problema
 
En la mayoría de los casos es común desconocer el buzón que causas este error ya que el mensaje en el log de aplicación de MS Windows no es muy detallado que digamos. En este caso, hay que utilizar la herramienta de administración de Active Directory (Ldp.exe) para poder encontrar al buzón en cuestión.


  1. En primer lugar se debe convertir el GUID de 32 caracteres de la descripción del Id. de suceso 9554 en un valor msExchMailbox. Por ejemplo, f911a4c2-42de-42c1-8d97-abef7766063c.
    Las claves GUID obtenida se detallan a continuación:

(msExchMailboxGUID=\c2\a4\11\f9\de\42\c1\42\8d\97\ab\ef\77\66\06\3c)



  1. Los caracteres de la primera sección del GUID (en el caso del ejemplo, f911a4c2), en dos porciones de caracteres separados por el carácter de barra invertida, en orden invertido. Por ejemplo: \c2\A4\11\F9.



  2. Para los caracteres de la segunda sección del GUID (en este caso, 42de) se realiza la misma operación (partiendo en dos porciones de caracteres separados por caracteres de barra invertida, en orden inverso). Según este ejemplo quedaría: \de\42.
  3. Los caracteres de la tercera sección del GUID (42c1) también se tratan de la misma manera, quedando el valor: \c1\42.
  4. A diferencia de las secciones anteriores, en la cuarta y quinta sección del GUID (8d97 y abef7766063c respectivamente), hay que agregar la barras invertida cada dos caracteres pero sin invertir el orden de los originales: \8d\97 y \ab\ef\77\66\06\3c en cada uno de los casos.
  5. Concatenar cada una de las partes y agregarles al principio el valor msExchMailbox encerrado entre parentesis para lograr una cadena como la que se describe a continuación:
  6. Ahora que se tiene formado el string de busqueda debemos utilizar la herramienta de administración de Active Directory (Ldp.exe).
  7. En el menú Conexión, hacer click en Conectar (Connect en ingles).
  8. En el cuadro Servidor, escribir el nombre del controlador de dominio (DC) y hacer click en Aceptar.
  9. En el menú Conexión, hacer click en Enlazar (o bind si esta en ingles).
  10. Escribir un nombre de usuario, contraseña y dominio de un usuario con permisos para ver la raíz del árbol del Active Directory y, a continuación, haga click en Aceptar.
  11. En el menú Ver, haga click en Árbol (tree en ingles).
  12. Deja en blanco el cuadro BaseDN y, a continuación, hacer click en Aceptar.
  13. Expandir el dominio (por ejemplo, DC = ejemplo, DC = com), y hacer click en el contenedor de usuarios, y, a continuación, haga click en Buscar.
  14. Pegar el string de búsqueda msExchMailboxGUID , incluyendo los paréntensis, en la sección filtro del cuadro de búsqueda (sustituyrndo el filtro existente).
  15. Hacer clic en subárbol (subtree) y, a continuación, en Ejecutar.
  16. La información del buzón y el propietario del buzón se devuelven de la siguiente manera:
-----------
***Searching...
ldap_search_s(ld, "OU=pepe,DC=pepe,DC=com", 2,
"
(msExchMailboxGUID=\c2\a4\11\f9\de\42\c1\42\8d\97\ab\ef\77\66\06\3c)",
attrList,  0, &msg)
Getting 1 entries:
Dn: CN=Juan Perez,OU=fulano
Bouchard,DC=pepe,DC=comcanonicalName:
name:  Juan Perez;
objectClass (4): top; person; organizationalPerson; user;



Cambiar los permisos de buzón
  1. Iniciar el complemento ADSIEDIT en el controlador de dominio.
  2. Hacer click en el usuario cuyos permisos desea cambiar y, a continuación, en Propiedades.
  3. En la ficha Seguridad, opciones avanzadas, click en la casilla de verificación “Permitir que los permisos heredables del primario se propaguen a este objeto” (o Allow inheritable permissions from parent to propagate to this object en ingles) y, a continuación, Aceptar.


    NOTA: No seleccione esta casilla de verificación para los administradores




martes, 17 de noviembre de 2009

Unir (merge) varios PDFs en uno solo

gs permite unir varios documentos pdf en uno solo y a su vez definir algunos parametros en el archivo de salida como ser el formato de papel a utilizar.

Primero instalar el gs (fácil desde Ubuntu)

pablo@vserver2:/home/pablo# apt-get install gs

y después ejecutar desde una consola

pablo@vserver2:/home/pablo# gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=salida.pdf archivo1.pdf archivo2.pdf archivo3.pdf

martes, 20 de octubre de 2009

Instalación y uso de GnuPG

GPG o GNU Privacy Guard es una herramienta para cifrado y firmas digitales, que viene a ser un reemplazo del PGP (Pretty Good Privacy) pero con la principal diferencia que es software libre licenciado bajo la GPL. GPG utiliza el estándar del IETF denominado OpenPGP.


GPG cifra los mensajes usando pares de claves individuales asimétricas generadas por los usuarios. Las claves públicas pueden ser compartidas con otros usuarios de muchas maneras, un ejemplo de ello es depositándolas en los servidores de claves. Siempre deben ser compartidas cuidadosamente para prevenir falsas identidades por la corrupción de las claves públicas. También es posible añadir una firma digital criptográfica a un mensaje, de esta manera la totalidad del mensaje y el remitente pueden ser verificados en caso de que se desconfíe de una correspondencia en particular.
GPG no usa algoritmos de software que están restringidos por patentes, entre estos se encuentra el algoritmo de cifrado IDEA que está presente en PGP casi desde sus inicios. En su lugar usa una serie de algoritmos no patentados como ElGamal, CAST5, Triple DES (3DES), AES y Blowfish. También es posible usar IDEA en GPG descargando un plugin extra, sin embargo este puede requerir una licencia para usuarios de algunos países en donde esté patentada IDEA.
GPG es un software de cifrado híbrido que usa una combinación convencional de criptografía de claves simétricas para la rapidez y criptografía de claves públicas para el fácil compartimiento de claves seguras, típicamente usando recipientes de claves públicas para cifrar una sesión de clave que es usada una vez. Este modo de operación es parte del estándar OpenPGP y ha sido parte del PGP desde su primera versión.

Generación de claves:

root@vserver1:/home/pablo# gpg ­­gen­key

root@vserver1:/home/pablo# gpg ­­list­keys 
/root/.gnupg/pubring.gpg
pub   1024D/5EBA0715 2009­08­11 

uid                  userGnuPg (Usuario encriptor con gnuPg)
sub   4096g/84D2F2AA 2009­08­11
root@vserver1:/home/pablo# gpg ­­list­secret­keys 

/root/.gnupg/secring.gpg
sec   1024D/5EBA0715 2009­08­11
uid                  userGnuPg (Usuario encriptor con gnuPg)
ssb   4096g/84D2F2AA 2009­08­11
­­­­­­­­­­­­­­­­­­­­­­­­ ­­­­­­­­­­­­­­­­­­­­­­­­

Exportación de clave privada (necesaria solo para desencriptar)

root@vserver1:/home/pablo# gpg ­­armor ­­output clavePrivada.gpg ­­export­secret­key
5EBA0715
root@vserver1:/home/pablo# cat clavePrivada.gpg
­­­­­BEGIN PGP PRIVATE KEY BLOCK­­­­­
Version: GnuPG v1.4.6 (GNU/Linux)
lQG7BEqBmb4RBADhnFGe/uhT6Nmam83IBiNGuJ3Tok2VrvsAGc5mUN+UeZxDiNZV
...
...
...
WoJvQtiFnVCf1QCeKHzcjYh17/xXFUC4+ypNU4bNn9M=
=cVdQ
­­­­­END PGP PRIVATE KEY BLOCK­­­­­


Exportación de clave pública e importación en server2


root@vserver1:/home/pablo# gpg ­­armor ­­output clavePublica.gpg ­­export 5EBA0715
root@vserver1:/home/pablo# scp clavePublica.gpg pablo@vserver2:/home/pablo
root@vserver1:/home/pablo# cat clavePublica.gpg
­­­­­BEGIN PGP PUBLIC KEY BLOCK­­­­­
Version: GnuPG v1.4.6 (GNU/Linux)
mQGiBEqBmb4RBADhnFGe/uhT6Nmam83IBiNGuJ3Tok2VrvsAGc5mUN+UeZxDiNZV
...
...
...
v7oDzlYFuELVYxG7BXBopXybAJ4/ju7RNn9cq2p1yMP+DoFkllu4vQ==
=f3oi
­­­­­END PGP PUBLIC KEY BLOCK­­­­­

root@vserver2:/home/pablo# gpg ­­import clavePublica.gpg
root@vserver2:/home/pablo# gpg ­­list­keys
/root/.gnupg/pubring.gpg

pub   1024D/5EBA0715 2009­08­11
uid                  userGnuPg (Usuario encriptor con gnuPg)

sub   4096g/84D2F2AA 2009­08­11
­­­­­­­­­­­­­­­­­­­­­­­­
Para el borrado de las claves privadas  y públicas se utilizan respectivamente los siguientes comandos


root@vserver1:/home/pablo# gpg ­­delete­secret­key 5EBA0715
root@vserver1:/home/pablo# gpg ­­delete­key 5EBA0715


Encripción de archivo "fileToCrypt.tar" con clave pública en server2


root@vserver2:/home/pablo# gpg ­­armor ­­recipient userGnuPg ­­encrypt
­­output fileCrypt.tar.gpg fileToCrypt.tar


Comprobación de que no se puede desencritar sin la clave privada

root@vserver2:/home/pablo# gpg ­­decrypt fileCrypt.tar.gpg
gpg: encrypted with 4096­bit ELG­E key, ID 84D2F2AA, created 2009­08­11
      "userGnuPg (Usuario encriptor con gnuPg)
"
gpg: decryption failed: secret key not available


Importación de clave privada y desencripción del archivo

root@vserver2:/home/pablo# gpg ­­import clavePrivada.gpg
gpg: key 5EBA0715: secret key imported
gpg: key 5EBA0715: "userGnuPg (Usuario encriptor con gnuPg)
" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1
gpg:       secret keys read: 1
gpg:   secret keys imported: 1
root@vserver2:/home/pablo# gpg ­­list­secret­keys
/root/.gnupg/secring.gpg

sec   1024D/5EBA0715 2009­08­11
uid                  userGnuPg (Usuario encriptor con gnuPg)

ssb   4096g/84D2F2AA 2009­08­11
root@vserver2:/home/pablo# gpg ­­decrypt fileCrypt.tar.gpg > fileDecrypt.tar
gpg: encrypted with 4096­bit ELG­E key, ID 84D2F2AA, created 2009­08­11
      "userGnuPg (Usuario encriptor con gnuPg)
"
root@vserver2:/home/pablo# md5sum fileToCrypt.tar
ddaf3a2242d02b99932d2433f947c5e4  fileToCrypt.tar
root@vserver2:/home/pablo# md5sum fileDecrypt.tar
ddaf3a2242d02b99932d2433f947c5e4  fileDecrypt.tar
­­­­­­­­­­­­­­­­­­­­­­­­

Versión de GnuPg para MS Windows

Existe una versión para MS Windows llamada GnuPg4Win que se puede descargar  de http://www.gpg4win.org/ e instalar el ejecutable con los parametros por default. Con el comando gpg2.exe se pueden utilizar los mismos parametros que con el gpg de linux.

jueves, 1 de octubre de 2009

Utilizar JCAP para formularios de mail

Aunque JCAP (Validación Javascript) no está recomendado para datos altamente sensibles, es una secuencia de comandos de nivel avanzado que puede ser fácilmente integrado en las diversas formas de experimentación y pueden ser un comienzo para otros usos que podría tener un valor mayor seguridad.

Para instalar JCAP (Validación Javascript) hay que descargar y descomprimir el archivo zip JCAP que contiene todos los archivos necesarios. Obtener JCAP (jcap.zip) - 737 kb. Después de descomprimir los archivos en el directorio deseado en el servidor, cambie el valor de la variable imgdir (en el Javscript JCAP) al directorio donde fueron descomprimidas las imágenes Captcha en el servidor. A continuación, cambie el valor de la variable jfldid (en el Javscript JCAP) al nombre del campo del formulario (uword es el nombre por defecto) y cambiar el valor de la variable "jfldsz" al tamaño deseado del campo.

Ejemplo de formulario html





Ejemplo de envío de mail desde php



 


Fuente: http://www.archreality.com/jcap/

lunes, 21 de septiembre de 2009

Crear un blog personal con Blogger (APB)

Creación de una cuenta de Gmail (Si ya tenes una cuenta, salta hasta esta parte).

Para crear una cuenta en gmail se debe acceder al siguiete link y completaar algunos datos básicos:

http://mail.google.com/mail/signup

El nombre de registro será lo que preceda al dominio (@gmai.com). Para verificar que esa cuenta no exista aún disponemos de un boton "Comprobar la disponibilidad". Además de la contraseña podemos incluir una pregunta de seguridad por si la memoria nos falla y un mail alternativo donde nos enviarán una nueva en ese caso.

Para acceder a la cuenta solo debemos ingresar a http://gmail.com

A partir de ahora esta cuenta es la que nos representa en todas las aplicaciones que google nos provee. Un resúmen de ellas son:
- Gmail (Servicio de mail)
- Calendar (Calendario on-line)
- Picasa (Almacenamiento de imagenes y fotos)
- Blogger (blogs personales)
- Adsense (Sistema de publicidad paga)

Ahora si vamos a explorar Blogger y como crear un primer blog sobre algún tema que nos interese.

El link para acceder a Blogger es https://www.blogger.com/start y ahí mismo se nos pedirá un usuario y password para acceder al servicio.



La primera vez que generamos un blog con nuestro usuario nos pide definir un nombre para firmar los post que escribiremos luego y aceptar (cuando no) los terminos y condiciones de Blogger.



Ahora le ponemos un nombre al Blog (en este caso "El blog de Pepe") y una dirección que lo represente, y que quedará definida como direccionxx.blogspot.com (esta última deberá estar disponible).



Una vez que validamos la disponibilidad del dominio podemos elegir una plantilla con el diseño que predominará sobre el blog (esto se puede cambiar luego si no nos gusta como queda).



Listo!, blog creado (pero vacio).




La pantalla siguiente nos lleva a crear una entrada en el mismo. Luego de definir el título solo nos resta empezar a escribir al mejor estilo MS Word. Con botones para elegir el tipo de fuente, tamaño, negrita, italica, color de texto, insertar links, centrado de texto, viñetas, corrector ortográfico, insertar imágenes, insertar videos de youtube y eliminar el formato del texto.


Con "Vista Previa" tenemos un panorama de como va quedando el post que estamos escribiendo. Hay que acordarse de clickear en "Guardar Ahora" cada cierto tiempo para no perder lo que escribimos si nos pasa algo.



Una vez finalizado presionamos "Publicar Entrada" para que el post se publique en nuestro blog.



Para ver como queda la entrada solo debemos seguir el link de "Ver Blog". Si hacemos click en "en una ventana nueva" podemos seguir editando el blog y en otra ventana ver como queda el mismo.



Remarquemos una de las cuatro solapas que tenemos en la parte superior. El de "Creación de entradas" retorna tres sub-menus ("Nueva entrada", "Editar entradas" y "Moderación de comentarios"). Ya sabemos lo que hace "Nueva entrada", "Editar entradas" nos retorna una pantalla para administrar todos los post que fuimos generando durante el ciclo de vida de nuestro blog



Y desde "Moderación de comentarios" podemos administrar los textos que neustros lectores dejen.


Recordemos que para acceder al blog de modo "Editor" debemos ingresar a http://www.blogger.com/home con nuestro usuario y password.
Para ver el blog generado entramos a http://pablosarubbi.blogspot.com/

Suerte en su primer blog y no duden en consultar por este medio.

Próximamente, como añadir publicidades para hacer que el blog genere ingresos.

martes, 15 de septiembre de 2009

Monitoreo de actualizaciones (apt) con Nagios


Esta vez vamos a engordar nuestro sistema de monitoreo para poder chequear en una sola vista si a los servidores linux que administramos les hace falta algún upgrade. Para ello Nagios nos brinda el comando check_apt (/usr/lib/nagios/plugins/check_apt) el cual responde un OK si es sistema está al día o un Warning si le hace falta realizar un upgrade.

root@serverNagios:~# /usr/lib/nagios/plugins/check_apt
APT WARNING: 9 packages available for upgrade (0 critical updates).
root@serverNagios:~#

Para utilizarlo solo se debe agregar en el archivo de configuración del nagios (/etc/nagios3/conf.d/server0102.cfg) las líneas siguientes:

define service{
use generic-service
host_name serverNagios
service_description APT
check_command check_apt
notification_period 24x7
}

Hasta ahora la parte fácil. El tema es que esta verificación se realiza de manera local, o sea que estamos chequeando si hace falta instalar alguna actualización solo en el servidor de Nagios. Como nuestra intensión es hacer este chequeo simultaneamente en todos los servidores linux debemos hacer que este comando (el check_apt) se ejecute en cada uno de los host, y para que esto sea lo mas seguro posible lo vamos a configurar mediante otro comando disponible en la instalación del Nagios, el check_by_ssh.

Lo primero que haremos es generar un juego de claves para conectarnos por ssh al host sin la necesidad de escribir una contraseña. Ya que el metodo es exactamente el mismo que utilizamos para la instalación del Backuppc no vamos a repetir el mismo. Lo que si vamos a hacer es recomendar un repaso por dicho post.

Además de la generación del usuario para conexión de ssh y el agregado de la clave en el archivo authorized_key es necesario instalar las nagios-plugins mediante el ya conocido comando apt-get

root@serverHost:~# apt-get install nagios-plugins


Para probar el uso del comando check_apt vía check_by_ssh podemos ejecutar:

root@serverNagios:~# /usr/lib/nagios/plugins/check_by_ssh -H serverHost -l userSsh -i clave_rsa -C /usr/lib/nagios/plugins/check_apt

APT OK: 0 packages available for upgrade (0 critical updates).


Para realizar este chequeo de forma remota tenemos que generar un nuevo comando (generalmente almacenados es /etc/nagios-plugins/ ) y para hacer las cosas ordenadas convendría editar el plugin apt.conf de esa carpeta.

# 'check_apt_by_ssh' command definition power by pablo
define command{
command_name check_apt_by_ssh
command_line /usr/lib/nagios/plugins/check_by_ssh -H $HOSTADDRESS$ -l userSsh -i /var/run/nagios3/.ssh/id_rsa -C /usr/lib/nagios/plugins/check_apt
}

y ahora sí, agregamos las líneas correspondientes al archivo de configuración del host de Nagios.

define service{
use generic-service
host_name serverHost
service_description APT
check_command check_apt_by_ssh
notification_period never
}

y listo, despues de reinicias el Nagios tenemos los servicios de APT monitoreados en nuestro sistema.

domingo, 10 de mayo de 2009

Reproducir musica en un Airport Express desde Ubuntu

Luego de buscar un dispositivo que tenga la misma funcionalidad que el Airport Express pero sin una manzanita en su logo (por filosofías incompatibles con mi sistema operativo), terminé resignado a instalar este aparatito de Apple y dispuesto a darle batalla con mi Ubuntu 9.04.
El primer paso luego de la instalación es verificar si funciona, y el camino mas corto para ello era sin lugar a duda instalar el soft original en una máquina VMWare con XP.
Las caracteristicas del Airport sobrepasan la reproducción de música vía mi tarjeta wireless, ya que entre otras cosas se puede compartir una impresora por el puerto usb, con algunas restricciones también un disco usb externo, se puede configurar el mismo para hacer de cliente de nuestro AP wireless, ampliar la misma o crear una nueva dejando al airport como AP.
Ahora, después de configurarlo para que se integre con mi red (WPA2) sin problemas, y reproducir algun que otro mp3 desde el iTunes, se veía venir lo peor. Que todo ese sonido lo genere una aplicación Ubuntera. Para ello nos vamos a apoyar en una aplicación desarrollada por Jon Lech Johansen (más conocido como DVD Jon) a partir de ingeniería inversa, luego de analizar el streaming de Audio del Airport Express.
Dicha aplicación se llama Raop Play y para poder compilarlo necesitamos tener instalados algunos paquetes en nuestro Linux. Para ello, desde una consola ejecutamos:

[pablo@laptop]# sudo apt-get install gcc g++ libssl-dev libssl0.9.8 libfltk1.1 libfltk1.1-dev libglib2.0-0 libglib2.0-dev libsamplerate0 libsamplerate0-dev libid3tag0 libid3tag0-dev

Para poder reproducir todos los formatos debemos tener instalado también:

[pablo@laptop]# sudo apt-get install mpg321 ogg123 faad flac

Los fuentes del Raop Play se pueden descargar de: http://raop-play.sourceforge.net/

Luego de descomprimir el .tar.gz nos ubicamos en su carpeta y ejecutamos el siguiente comando:

[pablo@laptop]# ./configure

[pablo@laptop]# make

[pablo@laptop]# sudo make install


Cuando hacemos el ./configure nos fijamos en los mensajes que se van mostrando, por si hay algún error que sepamos qué nos falta o qué tenemos que hacer. En mi caso descubrí que no tenía el compilador de C++ instalado, ya que no lo encontraba en la compilación.

Bueno, ya podemos hacer streaming de audio por línea de comandos, pero nuestro objetivo es poder configurar un cliente de música, como Amarok, para hacer el streaming. Si queremos ver que todo funciona podemos comprobarlo en el terminal, siempre y cuando el Airport Express esté conectado correctamente a la red:

[pablo@laptop]# aexcl_play --aexip "la-IP-de-nuestro-Airport-Express" "directorio-de-musica"

Esto nos abrirá un pequeño interfaz gráfico para manejar la música que estamos reproduciendo a través del Airport.

Sin mas complicaciones brotó de los parlantes el sonido esperado.

Suerte!

Fuente: http://raop-play.sourceforge.net/

domingo, 26 de abril de 2009

Problemas con Vmware workstation y Ubuntu jaunty 9.04

Despues de migrar mi sistema la ejecucion del vmWare Workstatio se demoro unos minutos por la siguiente falla (según syslog):

vmwarvmwaree-modconfi[8010]: segfault at 0

Lo que se resolvió inmediatamente ejecutando las siguientes dos lineas:

sudo mv /usr/lib/vmware/modules/binary /usr/lib/vmware/modules/binary.old
sudo vmware-modconfig --console --install-all


Saludos!

viernes, 3 de abril de 2009

Utilizar los datos de sesión de Joomla en una aplicación propia

Les dejo un "extracto" del código para acceder a los datos del usuario logueado en nuestro Joomla. Muy bueno para que, por ejemplo, puedan acceder a nuestra aplicación externa solo usuarios logueados al CMS.

miAplicacion.php

define( '_VALID_MOS', 1 );

require_once( '../configuration.php' );
require_once( '../includes/joomla.php' );

$mainframe = new mosMainFrame( $database, $option, '.' );
$mainframe->initSession();
$my=$mainframe->getUser();

//$my->gid = 0 ==> the user is not logged in
//$my->gid = 1 ==> the user is a registered user
//$my->gid = 2 ==> the user is a special user

echo "Estado de logon: " .$my->gid;
echo "Id de usuario: " .$my->id ;
echo "Nombre de Usuario: " . $my->username ;
echo "Tipo de Usuario: " . $my->usertype;
echo "E-mail: " . $my->email ;
echo "Parametros: " . $my->params ;
echo "Nombre: " . $my->name ;
echo "Bloqueado?:" . $my->block;
echo "Fecha de Registro: " . $my->registerDate;
echo "Fecha de última Visita: " . $my->lastvisitDate;

?>


lunes, 23 de marzo de 2009

Solución al problema de memory_limit en phpSyslog-ng (con actualización del cache de servidores)

Luego de tener corriendo el Syslog-Ng en nuestros servidores, quise realizar un "Reload Search Cache" y me retornó un mensaje de:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /usr/share/syslog-ng/includes/common_funcs.php on line 203

Lo primero que intenté fué modificar el valor por default de memory_limit en el php.ini agrandando este mismo hasta 1Gb, cuando imaginé que la solución tendría que venir por otro lado. Al parecer existe un bug en el código fuente del phpSyslog-ng en el archivo common_funcs.php por suerte de fácil solución:

Debemos reemplazar la línea 199


$sql = "SELECT program FROM ".$table." WHERE program RLIKE
'^[a-zA-Z]+[a-zA-Z0-9/()._\-]+$'";

por:

$sql = "SELECT DISTINCT program FROM ".$table."
WHERE LENGTH(program)<80>

luego de correr la actualización se pudo recargar el cache de servidores.


"The search cache has been updated."



jueves, 19 de marzo de 2009

Reemplazar una cadena de texto en varios archivos al mismo tiempo

Esta está mejor que la anterior, ayudados del perl (Write-only language), reemplazamos una cadena de texto (en este caso stringOld por stringNew) y generamos una copia del archivo original con la extensión .save.

[pablo@laptop]# perl -e "s/stringOld/stringNew/g;" -pi.save $(find ./* -type f)

Suerte!

Cambiar codificación de caracteres de multiples archivos con Linux

Dejo un pequeño script bash para reemplazar la codificación de caracteres de múltiples archivos si contamos con una distribución Linux como herramienta.


[pablo@laptop]# mcedit ./iso2Utf.sh

#! /bin/bash
for archivos in "$@"
do
recode iso8859-15...UTF-8 ./$archivos
done

[pablo@laptop]# chmod +x ./iso2Utf.sh
[pablo@laptop]# ./iso2Utf.sh ./*.txt


$@ es el parámetro ingresado por teclado
recode es la aplicación para "recodificar" cada archivo

También se puede usar iconv pero éste trabaja sobre una copia por lo que habría que generar un temporal y luego copiarlo pisando el original.

miércoles, 18 de marzo de 2009

Anular espera de descarga en megaupload

Paso a paso como evitar esos 50 segundos de espera luego del captcha para la descarga vía megaupload.

1.- Primero debemos ingresar los códigos del captcha.


2.- Una vez que empieza el conteo seleccionamos en el menú del Firefox:


3.- Ver -> Estilo de la página -> Sin estilo

4.- Ahora sí, sin el cronómetro molestando le damos al boton de Descarga Normal:


Bingo!

viernes, 13 de marzo de 2009

Problemas con Soporte Técnico de HP/Compaq por falla de fábrica en notebook

Hace meses, unos seis, mi notebook Compaq Presario de la serie V3000 (una 3818LA para ser mas exacto) empezó a tener problemas en el arranque. Exactamente lo que le pasaba era que no encendia la primera vez que le daba al botón de power y quedaba colgado en un estado intermedio que me dejaba las luces del power, volumen, reset y mute encendidas pero el resto de la máquina sin reaccionar. La apagaba (manteniendo el botón de power unos segundos), la encendia nuevamente y ahí si arrancaba. Este procedimiento funcionaba siempre y cuando la notebook esté enchufada. Con la bateria se quedaba colgada en todos los casos. Importante es recalcar que esta falla se presentó unas semanas después del año de compra, por ende, en teoría había perdido la garantia.

Un día de aburrimiento, dando vueltas por la web descubrí que dicha falla se debía a una mal configuración del algoritmo de administración del cooler (que se encuentra en la BIOS) lo que hacia que la laptop caliente mas de lo debido, eso hizo que en las patas del micro (o su zócalo, eso no me quedó claro) se forme una "costra" con el barniz que las protege, lo que hacia que la tensión del micro se "pierda" por esas vías y al no llegar la tensión suficiente (creo que 1,8v) no arrancara la compu.

Las soluciones que HP daba a la comunidad que había adquirido esta tanda de equipos con problemas (que incluia a las Compaq Presario v3000, y tambien a las de la serie v6000 de Compaq, las HP Pavilion dv2000 y las HP Pavilion dv6000) era:
  • Si la compu aún no presentaba problemas de encendido (también podía presentar fallas en la placa de wi-fi), actualizar la BIOS.
  • Si la compu ya tenía estos síntomas, HP extendia la garantia a dos años por reconocer una falla en su fabricación. Entonces te comunicas con el 0800-555-5000 (este número ya está grabado en mi memoria), te la pasan a buscar por la dirección que le digas y en 5 a 7 días hábiles (jejejeje) te la devuelven a tu casa reparadita.
Bueno, eso es lo que hice, llame al 0800, opciones 3-1-1, la llevé yo a HP en la calle Luis M. Campos 1059 donde me atendieron tremendamente bien, un lunes 6 de febrero de 2009 y me garantizaron que la compu la recibiria esa misma semana pero que realmente HP siempre dice que la entregan entre 5 y 7 dias hábiles como me informaron por telefono.

A los 7 días me llamaron para pedir una prórroga de tiempo de cuatro dias mas porque se habian demorado con la espera de un repuesto (tenian que cambiar el mother).

Desde ahí nunca mas me llamaron hasta antes de ayer para que la pase a buscar ya reparada. Hoy es viernes 13 de febrero, o sea que el temita superó ampliamente el mes.

En resumidas cuentas empecé a leer foros donde le daban con un caño al servicio técnico de HP Argentina. Todos coincidian con que te retenian la máquina entre 2 y 3 meses y te la regresaban con la misma falla. Triste, no?

Ni hablar que llamé cada dos días, siempre hablando con unos mexicanos que me atendieron de 10 pero siempre sin recibir info de su estado .

LA SOLUCION!!!!

Uno de esos foros, creo que era el del blog de clarin, publicó el telefono de Dios (o el departamento de calidad de HP).

Serían ellos los que picanearan al soporte de HP Argentina????

La respuesta si es positiva :p

El Viernes pasado me logré comunicar con el Dto. de Calidad, 0800-555-5000, opcion 3-1-7 (ahí estaban escondidos), me asignaron una chica que seguiría mi caso y a los pocos dias me llamaron para arreglar la entrega.

Ahí no termina la historia (lamentablemente). Cuando le estaba reinstalando mi sistema operativo predilecto (Ubuntu) detecte unos 15 pixels muertos (negros) en forma de raya al medio de la pantalla (que obviamente no estaban ahi hace unos meses).

El tema es que hacemos ahora?

Pierdo un mes mas para que lo arreglen?
Lo cubre la garantia?
Como demuestro que todos los pixels estaban vivitos hace un mes?

Llame nuevamente al depto. de calidad y ahorita mismo manitos estoy esperando un llamado de los mexicanos.

Les cuento luego como me fué, pero espero no comprar un equipo de HP en el futuro.

jueves, 5 de marzo de 2009

Centralizando logs con Syslog-ng, Mysql y php-syslog-ng

Syslog-ng es un demonio que corre a la espera de registros de logs, basicamente utilizado para cuando las virtudes del clasico Syslog no alcanzan. Las mejores caracteristicas se describen a continuación:
  • Centralizado de logs en un único servidor
  • Almacenamiento en multiples bases de datos.
  • Disponibilidad de herramientas de análisis con interfaz web (como el phpsyslog-ng)
  • Compatibilidad con sistemas operativos de MS.

A continuación se detalla el procedimiento para la instalación en un servidor Ubuntu Server 8.10 en donde se almacenaran los eventos de varios servidores Linux y Windows en una base de datos Mysql y serán visualizados con la interfaz web que proporciona el phpsyslog-ng.

Para ello es necesario contar con:
  • Syslog-ng [1]
  • Servidor Web Apache [1]
  • Php [1]
  • Base de datos Mysql Server [1]
  • php-syslog-ng [2]
  • NTsyslog-ng [3]

Nota: El php-syslog-ng quedó freezado en sourceforge en la versión 2.9.1.x . Para versiones posteriores (acutalmente la 2.9.8l) descargar el instalador de http://code.google.com/p/php-syslog-ng/

Configuración del syslog-ng:

Hay que modificar el archivo /etc/syslog-ng/syslog-ng.conf agregando la siguiente linea de destino:


destination d_mysql {
pipe("/var/log/mysql.pipe"
template("INSERT INTO logs (host, facility, priority, level, tag, datetime, program, msg) VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n") template-escape(yes));
};


y en las secciones src y log agregar las siguientes líneas:

source net { udp(); };


log { source(net); destination(d_mysql); };

Luego debemos crear un programa, el cual leerá el pipe generado por el syslog-ng (ver destination) y enviará los INSERTs a la base de datos mysql.

en /etc/syslog-ng/syslog2mysql.sh escribimos:


#!/bin/bash

if [ ! -e /var/log/mysql.pipe ]
then
mkfifo /var/log/mysql.pipe
fi
while [ -e /var/log/mysql.pipe ]
do
mysql -u mysqlfeeder --password=miPassWord syslog < /var/log/mysql.pipe >/dev/null
done


Y le damos permiso de ejecución:

chmod +x /etc/syslog-ng/syslog2mysql.sh


Recordar agregar un usuario mysqlfeeder con permiso de INSERT para la base syslog.


Descomprimimos el phpsyslog-ng en /usr/share/syslog-ng y agregamos un vhost en el apache (sino se puede descomprimir en el /var/www y acceder con http://127.0.0.1/)

Dentro de /install tendremos una serie de pantallas que nos iran llevando por la instalación típica.


Instalación del cliente MS Windows:

Sencillamente descargamos el instalados del NTsyslog y lo instalamos en el sistema a monitorear. El servidor se define en la siguiente clave de registro:

[HKEY_LOCAL_MACHINE\SOFTWARE\SaberNet]"Syslog"="IP-Server_Syslog-NG"

Mediante el acceso directo generado se puede ararncar/parar el servicio, y configurar que logs serán enviados a nuestro servidor.


Instalación del cliente Linux

Despues de instalar (apt-get nuevamente) el syslog-ng, solo debemos agregar las siguientes lineas al archivo de configuración:

destination dest_server0102{udp("syslog-ng.midominio.com" port(514));};
log { source(s_all); destination(dest_server0102); };



[1] Instalacion vía el comando apt-get
[2] http://code.google.com/p/php-syslog-ng/
[3] http://ntsyslog.sourceforge.net/

viernes, 13 de febrero de 2009

Monitoreo con Nagios via snmp

Existen varios chequeos que se pueden realizar vía snmp con Nagios (check_snmp), a continuación describo los dos que por ahora estoy usando:

Chequeo remoto de espacio en disco:
Si tenemos la configuración básica implementada del snmpd en el servidor remoto, lo que resta es modificar una línea donde indicaremos el path a verificar y a partir de cuanto espacio libre envía un mensaje de error.

en el archivo /etc/snmp/snmpd.conf hay que agregar la siguiente línea:

disk / 5%

que indica el path (/) y el porcentaje de espacio mínimo libre.

Hay que reiniciar el servici:

pablo@server1:/# /etc/init.d/snmpd restart

Esto se puede verificar mediante el comando snmpwalk de la siguiente manera:

pablo@client1:/# snmpwalk -v 1 -c public ip_server_remoto .1.3.6.1.4.1.2021 | grep dskErrorFlag

UCD-SNMP-MIB::dskErrorFlag.1 = INTEGER: noError(0)

el cual tendría un 1 como salida si el espacio libre es menor al 5%


Para probar el plugin del nagios se puede ejecutar directamente desde la línea de comandos:


root@nagios:/# /usr/lib/nagios/plugins/check_snmp -H server1 -C public -o .1.3.6.1.4.1.2021.9.1.7.1,.1.3.6.1.4.1.2021.9.1.9.1 -w 80:,:80 -c 90:,:90 -u 'kB free (','% used)' -l 'disk space'
disk space OK - 35602364 kB free ( 6 % used) | iso.3.6.1.4.1.2021.9.1.7.1=35602364 iso.3.6.1.4.1.2021.9.1.9.1=6


Para agregarlo a la configuración definitiva, obviamente editamos el .cfg de la máquina a monitorear y agregamos el servicio con los paramentros: Arg1=comunidad
Arg2=disco
Arg3=valorWarning
Arg4=valorWarning
Arg5=valorCritical
Arg6=valorCritical


define service{
use generic-service
host_name server1
service_description Disco1
check_command snmp_disk!public!1!70!70!80!80
notification_period 24x7
}

El próximo valor que chequearemos remotamente es la carga de CPU:

define service{
use generic-service
host_name server1
service_description CPU
check_command snmp_load!public!80!90
notification_period 24x7
}


No olvidemos repasar como configurar el snmpd en los equipos a monitorear

http://pablosarubbi.blogspot.com/2008/12/configuracion-de-snmpd-en-ubuntu.html

Suerte!