/etc/resolv.conf en Linux

Uno de los clientes para los que trabajo, usa directorio activo para los servicios de impresión y logon de red, en los escritorios, y Linux para los servidores de bases de datos y aplicaciones. Estos funcionan como clientes de los DNS del directorio activo, y así los tenemos configurados en /etc/resolv.conf. Esto funciona perfectmente.

El problema aparece cuando se nos cae alguno o todos los servidores DNS: Todo empieza a funcionar muuuyy lentoooo en Linux. Esto es así, porque la mayoría de los servicios de red de un linux, lanzan contínuamente búsquedas al DNS para resolver las direcciones IP de los equipos que inician conexiones de red.

Cuando los servidores DNS están caídos, Linux no se da cuenta, y lanza una consulta secuencial a todas las IPs de /etc/resolv.conf: Empieza por el primero que encuentra, espera a que expire el timeout (el valor por defecto es 5 segundos), y lanza la misma consulta al siguiente, y vuelve a esperar el timeout, y así sucesivamente hasta que obtenga una respuesta o hayamos llegado a la última IP del fichero /etc/resolv.conf. Paralelamente se van haciendo reintentos (hasta 3). En resumen, si sólo tuviéramos una dirección IP en /etc/resolv.conf, y esa IP estuviera caída, cada operación de red que hiciéramos en el servidor Linux, tardaría como poco 15 segundos.
Podemos configurar este timeout a 1 , y el número de reintentos a 1, para que en vez de 15 segundos, tarde 1 segundo, añadiendo a /etc/resolv.conf la siguiente línea:

options timeout:1 attempts:1
Según nos comentaron en RedHat, esta configuración no podremos comprobarla con los comandos nslookup, ni dig, pero si aplica sobre servicios de red como SSHD o Apache.
La foto la he sacado del album de Giant Ginkgo en flickr

Bar El Guapo

Hoy es el día que es, y dejaré una entrada a propósito de ello. Muchos fines de semana, tengo la grandísima oportunidad (para los tiempos que corren), de hacer algún extra en el Bar El Guapo (tampoco va a ser todo estar con el ordenador!). Curiosamente este fín de semana hemos descubierto que aparecemos en YouTube, nos lo dijo un cliente. Flipante...

Un video de un cliente, donde grabó a otros clientes discutiendo en la barra. Es una pena que no se oiga bien, lo bueno sería tener lo subtítulos, pero se puden pillar algunas frases.

Indagando, me he podido enterar de que tras una considerable ingesta de almuerzo, y seguramente no despreciable cantidad de alcohol en diferentes formatos (vino, cerveza, whisky-ses y demás), los protagonistas acabaron discutiendo sobre quién era capaz de correr más y más rápido con sus bicicletas, evocando (me imagino) tiempos mejores.



El vídeo es una muestra representativa, de los discusiones metafísicas en las que muchas veces vemos inmersos a nuestros maravillosos clientes.

Ajuste de cuentas


Aprovecho este post número 70 del año, para repasar cuántos de los propósitos que me plantee a principios de año, he alcanzado.

  1. Todavía no he cambiado la plantilla de este blog, aunque al menos he avanzado algo: Tengo un logo, y tengo más o menos, el estilo, colores, lo que quiero y lo que no quiero, y como lo quiero, pero no tengo el tiempo de hacerlo, o de escribirlo para subcontratarlo. Se podría decir que esto está a medio.
  2. El blog aún está en 30000 visitas. He administrado servidores Apache que recibían esta carga en unas pocas horas. Me da vergüenza hasta de pensarlo. Quizás debería comprarle un ordenador a mi madre, y pedirle que visite el blog :P. El ratio de visitas mensuales tiene como valor medio 1500, mientras que el año pasado este valor no llegaba a 800. Una ruina. No conseguido.
  3. He conseguido llegar a los 70 post anuales, aunque un poco in extremis, y levantando dudas: Hubo quien la tarde de nochebuena me recordó que no lo conseguiría. Como le dije, tenía las entradas preparadas y me había reservado estos días de Navidad para publicarlos. No estoy muy satifescho con esto porque el objetivo real, era obligarme y acostumbrarme a publicar regularmente a lo largo del mes, y al final las cosas del día a día, me han podido.
  4. Un poco parecido ocurre con las series en inglés. Es cierto que he visto Heroes, Cómo conocí a vuestra madre, V, varias películas y varias conferencias, pero ... no he conseguido obligarme a sacar tiempo de forma regular para esto, ni toda la cantidad que debería haber visto. Yo diría que esto no está ni a la mitad.
  5. La migración a 64bits creo que ha sido un éxito, no sólo en casa con la informática de consumo sino también en servidores. Cada vez más. Es cierto que he sufrido ciertos problemas de incompatibilidad, con Flash y algún otro. Conseguido.
  6. El uso de Fedora, Ubuntu y MacOSX a final de año, ha quedado de la siguiente forma:
    • A principios de año lo intenté con MacOSX, y fracasé... no me acostumbro. Lo sigo teniendo instalado, pero no puedo, es como usar un Linux mal instalado y a medio configurar, me siento muy raro con él y muy torpe, pero reconozco que es una maravilla, cuando se le compara con un escritorio Windows, que parece prehistórico.
    • No me deshice del viejo portátil, y al final le instalé Ubuntu (ni siquiera Windows). Lo uso para la parte más lúdica de mi vida en Internet, cuando estoy por casa, o lo que yo llamo "haciendo el vago". Ubuntu 9.X es un maravilla.
    • En el portatil nuevo, terminé usando Fedora en exclusividad, y es el que uso para trabajar. Como plataforma de trabajo, me viene fenomenal, ya que casi todos los servidores con los que trabajo, son RedHat en el fondo, aunque reconozco que en los últimos meses del año, han aumentado los servidores Debian / Ubuntu.Cuando estoy en casa, procuro no encender Fedora (el portátil del trabajo), sólo Ubuntu (ocio).
  7. Aún no he conseguido terminar el postgrado, aunque sí me he quitado todas las asignaturas que me quedaban colgando. Todavía me falta la tesis que irá en torno a la gestión de identidad digital federada. Ya me vale, cuando vaya a terminar esto, está todo obsoleto. Se podría decir que este propósito está a medio conseguir.
  8. Finalmente migré la zona DNS de casa cuando monté el nuevo servidor Code. Objetivo conseguido.
  9. Y de ITIL sólo me he leído unos cuantos PowerPoints más y unos cuantos extensos documentos. Objetivo sin conseguir.

De 9 objetivos, he conseguido 5 y medio... y creo que esto es un poco desastroso :(. A pesar de ello, gracias a todos los que habeis perdido un minuto leyendo algo de lo que he colgao aquí.

La foto la he sacado de espejo-ludico.blogspot.com vía google images.

Premoniciones sobre OpenSource


Estos días de descanso entre la familia, he aprovechado para ver unas cuantas conferencias TEDTalks. Estas mini-charlas son bastante instructivas: llevan a una persona que controla un montón sobre una determinada cosa, y la ponen a explicarse durante 15 a 25 minutos, y hablar de esto que sabe. Yo empecé con Ken Robinson says schools kill creativity, la cual os recomiendo encarecidamente que veais, y si el idioma del audio es un problema, usar los subtítulos. Si la experiencia os parece interesante, podeis revisar todas las charlas que hay publicadas en este Excell-Doc, y en el documento os cuenta un poco sobre lo que habla, la duración y os deja el enlace rápido.

Después de haberlas visto, hay una cosa que me ha llamado muchísimo la atención y es que casi sin proponérmelo, he visto varias charlas sobre OpenSource pero aplicadas a otras disciplinas como arquitectura o biología, y todo ello me ha animado a escribir este pequeño rollo que os voy a contar.

Cuando tenía que explicar el concepto de OpenSource a los chavales, siempre me gustó usar aquello que dice: Si yo tengo una manzana y tu tíenes otra manzana, y yo te doy mi manzana y tú me dás la tuya, cada uno seguimos teniendo una manzana; pero si tú tienes una idea, y yo tengo otra idea, y yo te cuento la mía y tú la tuya, al final tenemos dos ideas cada uno, y esto lo podemos sintetizar en que el conocimiento siempre suma, nunca resta: Esto es OpenSource, hacer que el conocimiento siempre sume .

Esta definición pura e ideal aplicada al software, nos conduce inexorablemente al software libre, que no tiene nada que ver con software gratis. En la facultad de informática nos cuentan una película didáctica de que escribir un programa es como hacer una receta de cocina, que luego se pueda seguir a pies juntillas, y hacer un plato de comida. Cuando alguien quiere ganar dinero con recetas de cocina monta un restaurante, y justo ahí deberíamos leer el post que escribí en Mayo: Conversaciones con Jenny.

De nuevo, esta definición la podemos aplicar en la arquitectura, por ejemplo. En síntesis, OpenSource aplicado a la arquitectura permitiría aprovechar las técnicas y diseños de construcción usadas en china, y en otros lugares del planeta y mejorar así la resistencia de las construcciones ante huracanes; o estudiar algunas de las construcciones de Africa, para mejorar la resistencia a temperaturas extremas.

Esto mismo, podríamos aplicarlo a otras disciplinas de conocimiento y estudio. Y eso es lo que me ha llamado la atención de las charlas TED, que eso ya se está haciendo. ¿Qué está pasando entonces? ¿Que vá a pasar con el OpenSource?
Creo que lo que está pasando, sencillamente es que estamos sufriendo un cambio de fase en la evolución del OpenSource. Pasamos de la fase de las herramientas, a la fase de los contenidos.

  • La fase de las herramientas, se ha caracterizado porque en ella se han establecido los modelos (de negocio, de desarrollo, de trabajo) para poder desarrollar las herramientas (software libre, wikipedia, opendocument, etc) que hicieran posible la segunda fase.
  • La fase de los contenidos, se caracterizará por la compartición del conocimiento y de las técnicas: Arquitectura OpenSource, Enseñanza OpenSource, etc. Pensar por un momento, en la cantidad de material educativo y contenidos que hay publicados en papel. Pensar el gasto que ello supone, no solo económico, sino forestal: En cualquier caso no es sostenible. Pensar en que podemos digitalizar todo esto y servirlo con estas herramientas OpenSource: ¿no estaríamos abartando los costes? ¿no sería más sostenible para el planeta?, ¿no podríamos llegar a mayor cantidad de alumnos?...

Y ... ¿cuando será este cambio de fase un hecho tangible?. Pienso que este salto lo daremos cuando la industria de los derechos de propiedad intelectual, se resigne a la extinción: Nos venden que compartir es un delito, que es malo, que es lo peor, y nos criminalizan por ello. Están perdiendo el tiempo, y en vez de buscar modelos de negocio viables, esperan que los gobiernos elaboren un gran plan de regulación que les permita seguir explotando (y exprimiendo) los mismos modelos de negocio que han usado hasta ahora. Ya hay modelos que empiezan a funcionar, véase si no, los ejemplos de iTunes y Spotify.
Ale, ahí queda eso.

La foto la he sacado del album de cl a ra en flickr

Monitorizar servidores OpenLDAP desde Cacti

Dentro de la serie de entradas dedicadas a cacti, no podíamos dejar de ver la monitorización de nuestros servidores OpenLDAP desde Cacti, lo cual puede reportarnos estadísticas y gráficas de los tiempos de respuesta, y número de consultas que estamos atendiendo, y hacernos una idea de la calidad de servicio LDAP que estamos ofreciendo.

El problema con el que me he encontrado es que los scripts para Cacti que había en Internet para monitorizar servidores OpenLDAP, ya no están tan accesibles como siempre, y la mayoría de los links aparecen rotos. El enlace que parece funcionar la mayoría del tiempo es https://ltb-project.org/svn/cacti-plugins/trunk/.
Para poder monitorizar OpenLDAP desde cacti tendremos que:

  1. Descargar los scripts ldap_response_time.pl y openldap_operations.pl, y copiar en el directorio /var/www/cacti/scripts/ de nuestro servidor Cacti. Luego ejecutar como root los siguientes comandos:
    yum install perl-LDAP
    chmod 755 /var/www/cacti/scripts/openldap*pl
  2. Ahora, ir al servidor OpenLDAP que queremos monitorizar. Editar el fichero de configuración /etc/openldap/slapd.conf, y en la zona en la que se declaran la base de datos de Ldap, añadir
    database monitor 
    Luego reiniciaremos el servicio:
    /etc/init.d/ldap restart
    Desde el servidor de Cacti, lanzar una prueba de conexión:
    /var/www/cacti/scripts/openldap_operations.pl \
    -h SERVIDOR_LDAP \
    -D "cn=CUENTA_DE_ACCESO_A_LDAP" \
    -W CONTRASEÑA_DE_ACCESO
  3. De nuevo en la consola de Cacti como usuario Administrador, importaremos las plantillas cacti_graph_template_openldap_initiated_operations.xml y cacti_graph_template_openldap_response_time.xml, que nos deberíamos haber descargado de internet.
  4. Ahora sólo nos queda añadir las gráficas OpenLDAP - intiated operation y OpenLDAP - response time a nuestro servidor LDAP o a nuestras plantillas, y esperar unos minutos.

La foto la he sacado del album de eschipul en flickr

NDOUtils: Addon para Nagios

Nagios Data Out (NDO) es un addon oficial de Nagios que permite exportar todos los sucesos y la configuración de una o más instancias de Nagios a una base de datos MySQL, y por supuesto, sin que dejen de escribirse en los ficheros status.dat y retention.dat, y tampoco sin obligarnos a renunciar a tener toda la configuración de Nagios en nuestros ficheros de texto plano, como lo hemos hecho toda la vida.

¿Y para qué necesitaríamos esto entonces?, ¿qué utilidad tiene esto? ... la gran ventaja de configurar NDOUtils en nuestro servidor Nagios, es que nos permitirá integrarlo con otras herramientas como NagVis (usar diagramas de red y vincular alertas), php4nagios (estadísticas para Nagios), o nagiosbp (Nagios Business Process AddOns), que ampliarán las funcionalidades de nuestro Nagios.

Para instalarlo y configurarlo, lo primero que hago es hacer una copia de seguridad de toda las instalación de Nagios, y luego realizo los siguientes pasos:

  1. Preparar el sistema para poder compilar y ejecutar este programa
    yum install mysql-devel perl-DBD-MySQ
  2. Descargar el software de NDOUtils y descomprimirlo...
    cd /opt/software

    export URL="http://downloads.sourceforge.net/project/nagios"
    export URL="$URL/ndoutils-1.x/ndoutils-1-4b8/ndoutils-1.4b8.tar.gz"

    cd /opt
    tar -xzvf software/ndoutils-1.4b8.tar.gz
  3. Compilar el programa
    cd /opt/ndoutils-1.4b8

    export LD_LIBRARY_PATH="/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH"
    export LD_LIBRARY_PATH="/usr/lib/mysql:/lib:$LD_LIBRARY_PATH"

    ./configure --prefix=/usr/local/nagios \
    --enable-mysql \
    --with-mysql-lib=/usr/lib/mysql
    make
  4. Instalar los ejecutables y la configuración de ejemplo de NDO mediante...
    cp -f src/file2sock \
    src/log2ndo \
    src/ndo2db-* \
    src/ndomod-* \
    src/sockdebug \
    /usr/local/nagios/bin/

    /bin/cp -p config/ndo2db.cfg /usr/local/nagios/etc/ndo2db.cfg
    /bin/cp -p config/ndomod.cfg /usr/local/nagios/etc/ndomod.cfg
    ...y dependiendo de la versión de Nagios que tengamos instalado copiaremos un ejecutable u otro. En mi caso uso la versión 3.
    /bin/cp -f src/ndomod-3x.o /usr/local/nagios/bin/ndomod.o
    /bin/cp -f src/ndo2db-3x /usr/local/nagios/bin/ndo2db
  5. Ahora en el servidor MySQL tendremos que crear el usuario y la base de datos donde NDO escribirá las tablas y todos estos datos que provienen de Nagios. En mi caso crearé la base de datos nagios_ndo, el usuario nagios con contraseña nagios.pwd:
    create database nagios_ndo;

    CREATE USER nagios@IP_SERVIDOR_NAGIOS
    IDENTIFIED BY 'nagios.pwd';

    GRANT USAGE ON *.* TO nagios@IP_SERVIDOR_NAGIOS
    IDENTIFIED BY 'nagios.pwd'
    WITH MAX_QUERIES_PER_HOUR 0
    MAX_CONNECTIONS_PER_HOUR 0
    MAX_UPDATES_PER_HOUR 0
    MAX_USER_CONNECTIONS 0;

    GRANT ALL PRIVILEGES
    ON nagios_ndo.*
    TO nagios@IP_SERVIDOR_NAGIOS
    WITH GRANT OPTION ;

    flush privileges;
  6. Crear las tablas y el modelo de datos, en la base de datos:
    cd /opt/ndoutils-1.4b8/db
    ./installdb -u nagios \
    -p 'nagios.pwd' \
    -h IP_SERVIDOR_MYSQL \
    -d nagios_ndo
  7. Ahora cambiar la configuracion de NDO en /usr/local/nagios/etc/ndo2db.cfg, para aplicar los siguientes cambios:
    # Evitar problemas con otros plugins NRPE y NSCA
    tcp_port=5663

    # Indicar la IP de nuestro servidor de MySQL
    db_host=IP_SERVIDOR_MYSQL

    # Credenciales de BBDD
    db_name=nagios_ndo
    db_user=nagios
    db_pass=nagios.pwd

    # Mantener los eventos durante 2 semanas
    max_timedevents_age=20160
  8. Ahora cambiar la configuracion de Nagios (/usr/local/nagios/etc/nagios.cfg) para decirle que debe usar el Broker de eventos:
    broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg
  9. Editar el fichero de configuracion del broker NDO para configurar el puerto que debe escuchar. Esto es editar el fichero /usr/local/nagios/etc/ndomod.cfg y configurar:
    tcp_port=5663
  10. Crear el script de arranque del servicio, a partir del que nos propone la distribución:
    /bin/cp -f /opt/ndoutils-1.4b8/daemon-init /etc/init.d/ndo2db
    chmod a+x /etc/init.d/ndo2db
    chkconfig ndo2db on

Para terminar, reiniciar todos los servicios y comprobar que las tablas empiezan a rellenarse de datos.
/etc/init.d/ndo2db stop
/etc/init.d/ndo2db start
/etc/init.d/nagios restart


Recuperar un bakup de Oracle hecho con RMAN

Esto también lo tengo que buscar a menudo :( ... ¿qué sentido tendría si sabemos hacer un backup y luego no sabemos recuperarlo. En esta entrada anotaré el procedimiento que sigo para recuperar bases de datos Oracle con RMAN.
Se supone que tenemos un backup físico realizado con RMAN en el directorio /opt/backups_oracle/backupset, y que el catálogo local lo tenemos inicializado y configurado. También supondremos que tenemos una copia del pfile de la base de datos a recuperar en /opt/backups_oracle/backupset/bbdd_init.ora y que sabemos el DBID de la bbdd de la que hemos hecho la copia.

  1. Conectarnos al servidor donde queremos recuperar el backup como usuario Oracle, y desde RMAN detener la BBDD y establecer el nuevo DBID
    su - oracle
    $ORACLE_HOME/bin/rman target / nocatalog

    RMAN> shutdown abort;
    RMAN> set dbid 815531541;
  2. Montar la BBDD usando el pfile del backup...
    RMAN> startup nomount \     
    pfile='/opt/backups_oracle/backupset/bbdd_init.ora' ;
  3. Recuperar los controlfiles desde el Backup que tenemos, y volver a parar la instancia
    RMAN> restore controlfile from \
    '/opt/backups_oracle/backupset/controlfiles/BD_c-XXXXXXXXXx.ctl.bck';

    RMAN> shutdown immediate;
  4. Ahora montar desde los controlfiles recuperados...
    RMAN> startup nomount  \
    pfile='/opt/backups_oracle/backupset/bbdd_init.ora' ;

    RMAN> alter database mount;
  5. Mirar si tenemos backups para recuperar... es muy importante que nos fijemos en el SCN que tienen todos los tablespaces...
    RMAN> list backup; 
  6. Recuperar la BBDD y abrirla reseteando logs..
    RMAN> run {
    set until scn XXXXX--SCN--XXXXX ;
    restore database;
    recover database; }

    RMAN> alter database open resetlogs;
    RMAN> exit;

Cómo configurar Oracle en modo archivelog

En una BBDD Oracle contínuamente se están escribiendo las instrucciones que ejecutamos (hasta el commit) con nuestras modificaciones en lo que se conoce como RedoLog, como si se tratase de un cuaderno de bitácora. Estos son unos tablespaces especiales que habitualmente poseen redundancia y se suelen configurar en al menos tres grupos de estos: El que se usa actualmente donde oracle escribe el actual RedoLog, el que estábamos usando antes de usar el actual (y que cuando se cambia, conserva una pequeña actividad residual hasta que se ha completado el cambio) y el que usaremos cuando llenemos el actual (sin uso hasta ese momento). Podemos forzar este cambio, ejecutando:

alter system switch logfile;
La idea de estos Redolog, es que si partimos de una base de datos recién instalada y tenemos todos los ficheros RedoLog hasta el día actual, podríamos ir aplicando los cambios escritos en estos redologs hacia adelante, y podriamos dejarla como estaba la BBDD en una fecha y hora determinadas. En vez de usar una BBDD recién instalada, podemos usar una copia física (donde la BBDD está en estado consistente), y aplicar ficheros de redolog hacia adelante, pudiendo recuperar hasta justo antes de algún fatídico cambio.
El problema que tiene esta teoría, es que Oracle va reutilizando los ficheros DBFs que forman los RedoLog de manera cíclica, y sólo tenemos los tres últimos RedoLogs. El modo ArchiveLog le dice a Oracle que antes de reciclar un DBF de un RedoLog, deje una copia del fichero en otro directorio, y así podremos guardar más allá de los tres últimos. Además, tener la BBDD en este modo configurada, nos permitirá poder hacer backups físicos con RMAN sin parar el servicio de Oracle... todo un lujo.
Para configurar este modo en Oracle 9.2 (al menos) realizaremos los siguientes pasos:
  1. Crear los directorios para almacenar los archiveLogs.
    mkdir -p  /opt/backups_oracle/archivelogs \      
    /opt/backups_oracle/backupset/controlfiles

    chown oracle.dba -R /opt/backups_oracle
  2. Conectarse como DBA a la base de datos...
    su - oracle
    sqlplus /nolog

    SQL> connect /as sysdba;
  3. Parar la base de datos, y después montarla
    shutdown immediate;
    startup mount;
  4. Decirle a la bbdd donde debe dejar los Redolog reciclados, configurar la BBDD en modo archivelog, y abrir la bbdd...
    alter system set \
    log_archive_dest='/opt/backups_oracle/archivelogs' \
    scope=both;

    alter database archivelog;
    alter database open;
  5. Guardar la configuración en el SPFile
    alter system set log_archive_start=true scope=spfile;
  6. Comprobar que ya tenemos la BBDD configurada, ejecutando:
    select log_mode from v$database;
    show parameter log_archive;
  7. Reiniciar la Base de datos, para que arranque ya con este modo, y empiece a rotar al directorio que hemos configurado...
    shutdown immediate;
    startup;

Forzar la rotación de redolog, un par de veces para comprobar que se están guardando nuevos ficheros en el directorio: /opt/backups_oracle/archivelogs/

alter system switch logfile;
alter system switch logfile;

Monitorizar nuestro servidor MySQL desde Cacti


Siguiendo con la serie de posts dedicados a cacti, en este os contaré cómo podemos monitorizar un servidor MySQL con Cacti, lo cual nos puede venir bien para detectar cuellos de botella y mal funcionamientos.
Esta configuración está bastante bien explicada en http://code.google.com/p/mysql-cacti-templates/, pero os la resumo en unas pocas líneas:

  1. Descargar las plantillas de GoogleCode, http://mysql-cacti-templates.googlecode.com/files/mysql-cacti-templates-1.1.1.tar.gz
  2. Importar la plantilla cacti_host_template_x_db_server_ht_0.8.6i.xml en Cacti como Administrador, y copiar el script ss_get_mysql_stats.php al directorio /var/www/cacti/scripts/ del servidor.
  3. Crear en MySQL un usuario cactimon, con contraseña cactipwdmon, al gusto, que será el que usaremos desde cacti para monitorizar el servidor de base de datos.
    GRANT PROCESS ON *.* TO \
    cactimon@'SERVIDOR_CACTI' \
    IDENTIFIED by 'cactipwdmon';

    GRANT SUPER ON *.* TO \
    cactimon@'SERVIDOR_CACTI' \
    IDENTIFIED BY 'cactipwdmon';

    flush privileges;
  4. Ahora en Cacti desde la consola del administrador, Console->DataTemplates, buscar todas las gráficas que sean: X MySQL lo_que_sea, y en todas ellas editar y marcar en Custom Data, el username y el password, y fijar: Username=cactimon y Password=cactipwdmon
Ya podremos dar de alta un nuevo dispositivo de tipo MySQL Server para que empiece a pintarnos gráficas.
La foto la he sacado del album de groovehouse en flickr

Monitorizar Microsoft SQLServer desde Nagios


A menudo, en nuestra infraestructura IT, no sólo tenemos servidores de base de datos corriendo en el supereficiente Linux, si no que tenemos que vérnoslas con servidores Microsoft Windows ejecutando SQLServer.
Los administradores de Nagios podemos monitorizar si SQLServer está funcionando o no, y podemos conectarnos, siguiendo los siguientes pasos:

  1. Conectarnos como root al servidor de Nagios. Luego descargar el plugin que ha desarrollado la gente de Consulting & Solutions
    cd /opt/software

    URL="http://www.consol.de/fileadmin/opensource"
    URL="$URL/Nagios/check_mssql_health-1.5.1.tar.gz"

    wget $URL
  2. Después, debemos instalar el paquete perl-DBD-Sybase. Es posible que encontremos alguna versión en RPM que nos pueda servir para nuestro sistema operativo en http://dag.wieers.com/rpm/packages/perl-DBD-Sybase/. Luego instarlarlo ejecutando:
    yum install freetds perl-DBD-Sybase
  3. Compilar e instalar el plugin que ha desarrollado la gente de Consulting & Solutions.
    cd /opt
    tar -xzvf /opt/software/check_mssql_health-1.5.1.tar.gz

    ./configure --prefix=/usr/local/nagios
    make
    make install
Ya podemos realizar la prueba de conectar a SQLServer, para lo que necesitaremos una cuenta de acceso de base de datos:
/usr/local/nagios/libexec/check_mssql_health \
--hostname=SERVIDOR_SQLSERVER \
--username=LOGIN_SQLSERVER \
--password=PASSWD_SQLSERVER \
--mode=connection-time
Este comando implementa otros modificadores que nos permitirán comprobar otros indicadores de SQLServer.

Google Reader

Google Reader es una herramienta muy útil de Google, que conocí gracias a Puche, y que he recomendado un motón de veces a la gente, en especial a mi hermano Pepe y mi hijo Jose Miguel... pero no consigo que lo usen ni obligándolos :(


GoogleReader es una simple herramienta de sindicación de noticias XML (RSS, OPML, etc), y como cualquier otra, tiene la gran ventaja de que ahorramos un montón de tiempo para ponernos al día de lo que pasa en aquellos blogs y sites que nos interesa seguir a diario: No tenemos que ir uno a uno, visitándolos, esperando que cargue la publicidad, y que al final nos despista y desconcentra. Al ser online, nos permite que podemos consultar nuestros feeds desde cualquier equipo conectado a la red, y al tratarse de Google, nos hace sugerencias de qué otros feeds pueden interesarnos, viendo el contenido de los que ya estamos suscritos. Como añadido, podemos compartir aquellas noticias de los feeds a los que estamos suscritos, para que les aparezca también a nuestros contactos de GMAIL, de forma que podemos ver aquellos que otros de nuestros contactos considera interesante, y así abrirnos nuevas espectativas. Una caña. Resulta muy, muy útil. Lo uso a diario desde hace un montón de tiempo.
Pero no todo son ventajas: Para mi gusto, creo que deberían revisar:
  • Las listas tardan unos segundos en cargar (a tramos) y se nota pesado
  • Cuando llevo dos o tres días sin leer mi reader, la aplicación me estresa: Me dice que tengo pendientes ¡400 mensajes! .. y eso me estresa ... deberían darse cuenta que dedico unos 15 a 30 minutos a leer el reader, y lo habitual es que lea de 50 a 90 post. Lo que supere eso, prefiero casi ni saberlo.
  • ¿Para qué nos colocan dos opciones Share? ¿Para qué sirve Like?

A pesar de esto, os recomiendo encarecidamente que lo useis si quereis ahorrar tiempo a diario.

Backups de Oracle con RMAN


Siempre tengo que buscar esto por Internet. La foto que he seleccionado para la ocasión, evoca la necesidad de tener buenos backups.

RMAN (Recovery Manager) es la herramienta de Oracle para poder hacer backups físicos de nuestra BBDD. Un backup físico, es a fín de cuentas, como copiar los ficheros DBFs que forman los TableSpaces de nuestra BBDD a un lugar seguro (de ahí, lo de copia de seguridad), pero claro, si lo hiciéramos con el comando COPY del sistema operativo, el estado de la copia de seguridad sería inconsistente, porque no todos los DBFs estarían sincronizados con los cambios en nuestra BBDD a la misma hora, por lo tanto, lo mejor es hacer esta copia con la base de datos parada.
Claro que no todas las bases de datos se pueden parar, para hacerles backup, por lo que para poder hacer un backup físico con Oracle arriba, necesitamos que la base de datos esté configurada en modo ArchiveLog. En ese caso, podremos hacer backup físico en caliente (que se dice).
Para ilustrar el procedimiento, vamos a lanzar un backup físico al directorio /opt/backups_oracle/backupset/, por lo que, lo primero será crear el directorio donde dejaremos la copia.

mkdir -p /opt/backups_oracle/backupset/controlfiles
chown -R oracle.oinstall /opt/backups_oracle

Nos convertimos en usuario oracle, y lanzamos RMAN usando el catálogo local (esto son los ControlFiles de la propia BBDD).
su - oracle
$ORACLE_HOME/bin/rman target / nocatalog

Ya en la consola de RMAN ejecutaremos los siguientes comandos:
RMAN>

-- Mostrar nuestr política de backup
SHOW RETENTION POLICY;

-- Configurar: solo conservaremos dos backups físicos
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

-- Hacer copia también de los controlFiles.
CONFIGURE CONTROLFILE AUTOBACKUP ON;

-- Decirle el directorio donde dejar los backups de estos
-- controlfiles...
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK \
TO '/opt/backups_oracle/backupset/controlfiles/BBDD_%F.ctl.bck';

-- Decirle que el dispositivo por defecto sera el disco
CONFIGURE DEFAULT DEVICE TYPE TO DISK;


-- Decirle el directorio donde dejar la copia de los Datafiles
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT \
'/opt/backups_oracle/backupset/%T__%d_%p_%s.bck';

-- No limitar el tamaño de la copia
CONFIGURE MAXSETSIZE TO UNLIMITED;

-- salir :)
RMAN> exit;

Con estos comandos estamos configurando nuestra política de backup, donde lo más significativo es que le decimos el directorio donde debe dejar los backups y que como máximo conservaremos dos copias físicas. Esto se guardará en los controlfiles de la BBDD, ya que no estamos usando un catálogo global. Esto es importante porque significa que tenemos que guardar copia de los controlfiles junto al backup de Oracle.
Una vez configurada nuestra política de copia, podremos lanzar el backup de Oracle ejecutando...
RMAN>

-- Hacer backup de los Datafiles
BACKUP DATABASE;

-- Borrar los archivelogs, obsoletos
BACKUP ARCHIVELOG ALL DELETE INPUT;

-- Hacer copia extra de los controlfiles
COPY CURRENT CONTROLFILE TO \
'/opt/backups_oracle/backupset/controlfiles/control%u.copia';

-- Borrar las copias obsoletas (según RETENTION POLICY REDUNDANCY)
DELETE NOPROMPT OBSOLETE;

-- salir :)
RMAN> exit;

Además, sería bueno conservar junto al backup el BDID de la BBDD...
su - oracle
sqlplus /nolog

SQLPLUS> connect /as sysdba;

SQLPLUS> select DBID from v$database;

... y una copia del SPFILE que usa la BBDD para arrancar (que podemos copiar usando el comando COPY del sistema Operativo)
su - oracle
sqlplus /nolog

SQLPLUS> connect /as sysdba;

SQLPLUS> show parameter pfile;

La foto la he sacado del album de godog en flickr

Configurar PHP para conectar a Oracle

En algunas ocasiones nos encontramos que la base de datos a la que tenemos que conectar desde PHP es Oracle en vez de MySQL, y el problema suele ser que no el yum install php-oracle o apt-get install php-oracle no nos funciona.
¿Qué podemos hacer? ... os cuento lo que yo hago:

  1. Lo primero que debemos hacer es descargar los RPMs del InstantClient de Oracle en /opt/software/oracle. Nos servirán oracle-instantclient11.1-basic-11.1.0.7.0-1.i386.rpm y oracle-instantclient11.1-devel-11.1.0.7.0-1.i386.rpm. Luego los instalaremos ejecutando:
    rpm -ivh /opt/software/oracle/oracle-instantclient11.1-*
  2. Añadir al entorno las variables que necesita Oracle para ejecutarse. Para ello, añadir las siguientes lineas al fichero /etc/profile:
    export ORACLE_HOME=/usr/lib/oracle/11.1/client
    export NLS_LANG=spanish_spain.WE8ISO8859P15
    export TNS_ADMIN=$ORACLE_HOME/network/admin
    export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/:/lib:$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
    export PATH=$PATH:$ORACLE_HOME/bin
    Sería recomendable cerrar sesión y volverla abrir para que se carguen estas variables en nuestro entorno.
  3. Lo siguiente será copiar un fichero tnsnames.ora al directorio $ORACLE_HOME/network/admin desde otro servidor de aplicaciones, en el que ya nos funcione la conexión a la BBDD de Oracle.
  4. Para instalar las librerías de Oracle, lo haremos mediante PECL, que es algo así como el CPAN para Perl, pero para PHP.
    yum install php-pear php-devel

    pecl install oci8
    Cuando nos pregunte, decirle que autodetecte la instalacion. Cuando instalamos lo hacemos desde los RPM lo hace automaticamente. Al terminar de compilar e instalar nos habrá dejado la libreria en /usr/lib/php/modules/. Ahora deberíamos incluirla en /etc/php.ini añadiendo la siguiente línea dentro de la sección de Dynamic Extensions, entorno a línea número 620:
    extension=oci8.so
  5. Reiniciar el servicio de Apache, para que PHP cargue las librerías de Oracle...
    /etc/init.d/httpd restart
  6. Crear un fichero /var/www/html/infophp.php con el siguiente contenido:
    <?php
    phpinfo();
    ?>
    Abrir la URL desde un navegador http://MISERVIDOR/infophp.php, para comprobar las variables de entorno y que PHP ha cargado la librería oci8.
  7. Cuando hayamos comprobado, que ya tenemos el PHP configurado para poder conectar a Oracle, podremos crear nuestra primera página:
    <?php

    # Inicializar la conexión a Oracle
    $conn = oci_connect('XXLOGINXX', 'XXCONTRASEÑAXX', 'XXSIDXX');

    # Preparar la Query
    $query = 'select table_name from user_tables';

    # Conectar realmente y lanzar la consulta...
    $stid = oci_parse($conn, $query);
    oci_execute($stid, OCI_DEFAULT);

    # Lanzar la consulta
    while ($row = oci_fetch_array($stid, OCI_ASSOC)) {

    # Recuperar las filas de la consulta
    foreach ($row as $item) {
    echo $item." ";
    }
    echo "<br>\n";
    }

    # Cerrar la conexión con Oracle
    oci_free_statement($stid);
    oci_close($conn);

Cuando reiniciemos el servidor seguramente nos habrá dejado de funcionar. Es importante añadir al script /etc/init.d/apache, después del bloque de comentarios inicial la línea:
. /etc/profile
Esto pasa porque el cliente Oracle necesita estas variables definidas en el entorno, y cuando se reinicia el servidor, el proceso init, no incializa este entorno y ejecuta estos ficheros. Al añadirlo al demonio de arranque de Apache, nos aseguramos que Apache las tenga inicializadas cuando init lo llame durante el inicio del servidor.

La foto la he sacado del album de CalEvans en flickr

Feliz navidad y próspero año nuevo



Felíz navidad a todos y próspero año nuevo. Mis mejores deseos para el año que viene haga que se cumplen vuestros sueños.

La imagen la he sacado de http://www.funny-potato.com/blog/category/christmas, vía google images.

Plugin aggregate para Cacti

Una vez se tiene instalada la arquitectura de plugins para nuestro Cacti, podremos empezar a instalar nuevos plugins. Entre los plugins disponibles nos encontramos con el plugin aggregate, que nos permitirá crear nuevas gráficas de agregados a partir de otras ya existentes: Yo, por ejemplo, suelo usarlo para aglutinar en una única gráfica, el consumos de RAM y CPU de todas las máquinas virtuales de un mismo servidor ESX.

En la misma página del plugin, el autor ha publicado un manual en PDF muy completo de cómo instalarlo y usarlo, pero básicamente esto consistirá en: descargarnos la última versión, descomprimir el tgz en la carpeta /var/www/cacti/plugins y añadir el nombre de la carpeta al array php de los plugins, en el fichero /var/www/cacti/include/global.php. Luego debemos asegurarnos de activarlo desde la interfaz web del administrador de Cacti.

La foto la he sacado del album de Hipopótominha en flickr

Actualizar Cacti a 0.8.7e y añadirle plugins


Cacti es un proyecto vivo, en el que contínuamente encontramos nuevas actualizaciones y plugins. Las actualizaciones nos permiten mantener actualizados los script que componen la distribución, pero si sustituimos nuestra versión por una versión superior, corremos el riesgo de perder los cambios que hayamos realizado en los scripts, y las plantillas que hubiéramos importado, por lo que es importante actualizar en vez de reinstalar.
Además podemos encontrar numerosos plugins, que añaden nuevas funcionalidades a nuestra consola. De entre todos encuentro muy útil el Agregate, que nos permite crear gráficas de agregados a partir de otras gráficas, y es bastante útil para comparar métricas de diferentes servidores, expresados en la misma magnitud. El plugin Monitor, no os lo recomiendo: yo me he encontrado con problemas al dar de alta nuevos dispositivos, teniendo habilitado este plugin.
En este post, os contaré como mantener actualizada nuestra versión de Cacti. Para ello, seguiremos la siguiente secuencia de pasos:

  1. Hacer un backup de la instalación que tenemos de nuestro cacti, para garantizar que podemos volver atrás.
    cd /var/www
    cp -R cacti cacti_backup_`date '+%Y%m%d'`
    También sería recomendable hacer un backup con mysqldump de la BBDD del servidor MySQL donde almacenamos los datos para Cacti.
  2. Descargar los plugins y las actualizaciones que queremos instalar, a un directorio local de nuestro servidor, supondremo que en el home
    cd
    mkdir update_cacti
    cd update_cacti

    wget http://www.cacti.net/downloads/cacti-0.8.7e.tar.gz

    export U="http://mirror.cactiusers.org/downloads/plugins"
    wget $U/cacti-plugin-0.8.7e-PA-v2.5.zip

    wget http://cactiusers.org/downloads/boost.tar.gz
    wget http://cactiusers.org/downloads/ntop.tar.gz
    wget http://cactiusers.org/downloads/settings.tar.gz
    wget http://cactiusers.org/downloads/thold.tar.gz
    wget http://cactiusers.org/downloads/tools.tar.gz
    wget http://cactiusers.org/downloads/update.tar.gz
  3. Preparar la actualización de nuestra distribución desde el directorio temporal que usamos para las descargas
    cd ~/update_cacti

    tar -xzvf cacti-0.8.7e.tar.gz
    mv cacti-0.8.7e/ cacti
    mkdir parche
    cd parche/

    unzip ../cacti-plugin-0.8.7e-PA-v2.5.zip
    cd ../cacti
    patch -p1 -N < ../parche/cacti-plugin-0.8.7e-PA-v2.5.diff

    cd plugins
    tar -xzvf ../../boost-2.4.tar.gz
    tar -xzvf ../../ntop-0.1.tar.gz
    tar -xzvf ../../settings-0.5.tar.gz
    tar -xzvf ../../thold-0.4.1.tar.gz
    tar -xzvf ../../tools-0.3.tar.gz
    tar -xzvf ../../update-0.4.tar.gz
  4. Instalar la version actualizada con plugins, sobrescribiendo nuestra instalación:
    cd ~/update_cacti/parche/cacti

    /bin/cp -Rf * /var/www/cacti/

    cp /var/www/cacti_backup_`date '+%Y%m%d'`/include/config.php \
    /var/www/cacti/include/config.php
    Ahora, editar el fichero /var/www/cacti/include/global.php, y añadir:
    $plugins = array(
    "boost",
    "ntop",
    "settings",
    "thold",
    "tools",
    "update"
    );

    $config['url_path'] = '/cacti/';
  5. Ahora, actualizar el modelo de la base de datos,
    cd ~/update_cacti/parche

    mysql -u cactiuser --password=SECRET -h SERVIDORBBDD \
    cacti < pa.sql
  6. Abrir el cacti en nuestro navegador como administrador, y seguir el asistente para completar la actualización. Cuando hayamos terminado, accederemos a User Management->Admin->Realm Permissions y marcaremos Plugin Management y el resto de plugins que queremos poder utilizar.

La foto la he sacado del album de cobalt123 en flickr

Ideas para optimizar MySQL

Cuando trabajamos con programas OpenSource es muy probable que terminemos usando MySQL 5.0, y cuando lo hacemos durante varios meses, también es muy probable que acabemos administrándolo, e intentando mejorar el redimiento. Para conseguirlo, os propongo tres posibles mejoras:

  1. La primera, es que usemos ext4 o xfs como sistema de archivos para /var/lib/mysql. Estos sistemas de archivos consiguen más velocidad y rendimiento que ext3.
  2. La segunda, consiste en usar un fichero por cada tabla innodb, para lo cual habrá que añadir la siguiente línea a la sección [mysqld] en /etc/mysql/my.cnf,
    innodb_file_per_table
    Esto evitará que el fichero /var/lib/mysql/ibdata1 crezca sin límite, alamcenando en él todos los datos de nuestra BBDD y siendo este fichero cuello de botella para el acceso a disco. Si este fichero se dañara perderíamos todas las bases de datos. Con esta optimización, lo que hacemos es que cada tabla MYSQL tenga su propio fichero bajo su correspondiente subdirectorio en /var/lib/mysql.Después de aplicar este cambio y reiniciar el servicio, tendremos que exportar e importar cada una de las base de datos que tuviéramos configuradas.
  3. La tercera consiste en aplicar algunas mejoras en la configuración, que encontramos en la comparativa http://developer.cybozu.co.jp/kazuho/2009/12/comparing-innod.html?lang=en, dentro de la sección tunning del fichero /etc/mysql/my.cnf:
    innodb_buffer_pool_size = 2048M
    innodb_log_file_size = 64M
    innodb_flush_method=O_DIRECT
    innodb_flush_log_at_trx_commit=2
    key_buffer_size=64M
    myisam_sort_buffer_size=32M

La foto la he sacado del album de Nanaki en flickr

El comando "bar"


Esta tarde, Antonio Rubio me ha mostrado la utilidad del comando bar, cuando estamos esperando a que termine un proceso largo como una copia vía scp o un simple dd: Es muy simple, basta con añadirlo a nuestro pipe..

cd /
tar cvpf - bin lib root sbin usr \
| bar \
| ssh root@192.168.1.2 "cd / && tar xvpf - "

Al hacerlo, veremos una pequeña barra de progreso, que al menos nos permitirá saber si la tarea sigue ejecutándose o no. Muy útil.
La foto la he sacado del album de Odalaigh en flickr

Debian Lenny DM-Multipath en IBM DS4700


Hoy he tenido la ocasión de configurar DeviceMapper Multipath en Debian Lenny para un cliente, que usaba almacenamiento de IBM, en concreto una DS4700. En el equipo, teníamos conectada una tarjeta Emulex y sólamente le hemos presentado una LUN de 100Gb para poder almacenar los ficheros de una base de datos MySQL 5.0.
Los pasos que he seguido para configurar multipath han sido los siguientes:

  1. Lo primero será instalar multipath:
    apt-get install multipath-tools
  2. Crear el fichero /etc/multipath.conf, inicial.
    defaults {
    user_friendly_names yes
    }

    devnode_blacklist {
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    devnode "^hd[a-z][[0-9]*]"
    devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
    }

    devices {
    device {
    vendor "IBM*"
    product "1814*"
    getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n"
    prio_callout "/sbin/mpath_prio_rdac /dev/%n"
    features "0"
    hardware_handler "1 rdac"
    path_grouping_policy group_by_prio
    failback immediate
    rr_weight uniform
    no_path_retry queue
    rr_min_io 1000
    path_checker rdac
    }
    }

    multipaths {
    multipath {
    wwid 3600a0b80001185dc0000306b4ae66c33
    alias sataext
    }
    }
  3. Refrescar la información sobre los caminos ...
    /etc/init.d/multipath-tools restart
    multipath -F
    multipath -v2
    ...y fijarnos en la salida, para localizar el ID de la LUN
    create: mpath2 (3600a0b80001185dc000033f64b26e485)  IBM     ,1814      FASt
    [size=100G][features=0][hwhandler=1 rdac]
    \_ round-robin 0 [prio=3][undef]
    \_ 1:0:0:0 sdb 8:16 [undef][ready]
    \_ round-robin 0 [prio=0][undef]
    \_ 1:0:1:0 sdc 8:32 [undef][ghost]
    libdevmapper: libdm-common.c(312): Created /dev/mapper/mpath
  4. Con el ID de la LUN, editaremos el fichero /etc/multipath.conf, y sustituiremos el wwid que teníamos en la sección multipaths. Recargar la información del almacenamiento:
    /etc/init.d/multipath-tools restart
    multipath -F
    multipath -v2
    multipath -ll
    ...y comprobar la salida...
    sataext (3600a0b80001185dc000033f64b26e485) dm-4 IBM     ,1814      FASt
    [size=100G][features=1 queue_if_no_path][hwhandler=1 rdac]
    \_ round-robin 0 [prio=3][active]
    \_ 1:0:0:0 sdb 8:16 [active][ready]
    \_ round-robin 0 [prio=0][enabled]
    \_ 1:0:1:0 sdc 8:32 [active][ghost]

Ahora ya podremos crear particiones en la LUN ejecutando fdisk /dev/sataext, crear volúmenes LVM, darles formato, etc...
La foto la he sacado del album de tophost en flickr

Recuperar la contraseña del root en mysql

Alguna vez me he encontrado con algún servidor de base de datos, del que no tenía la contraseña de root, y siempre termino buscando por internet. Aprovecho esta entrada para comentaros una forma de solucionarlo. El síntoma es que al ejecutar el comando mysql como root, nos encontramos con el siguiente error:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  1. Lo primero será parar el servicio de mysql
    /etc/init.d/mysqld stop
  2. Ahora arrancaremos el servicios, saltándonos la tabla de privilegios, mediante:
    /usr/bin/mysqld_safe --user=mysql --skip-grant-tables
  3. Ahora desde otra consola, nos conectaremos a mysql y podremos cambiar la clave del root.
    mysql> use mysql;
    mysql> update user set password=password('secreto') where user='root';
    mysql> exit;
  4. Reiniciar el servicio, y ya podremos conectar.
    /etc/init.d/mysqld restart 
La foto la he sacado del album de Travelling Pooh en flickr

Port-mirroring en switches 3COM


Port-mirroring es una configuración que podemos establecer en un switch, con el fin de que este envíe una copia de todos los paquetes que pasan por uno o más puertos (mirroring-port) a otro puerto concreto que llamamos monitor-port o, a otro switch. Esto es muy útil cuando necesitamos monitorizar el tráfico de red o detectar intrusiones en nuestra red. Dependiendo del fabricante podremos encontrarnos que,

  • En Cisco el port-mirroring se suele llamar como Switched Port Analyzer (SPAN)
  • Mientras en 3COM el port-mirroring se denomina Roving Analysis Port (RAP)
Antes de configurar nada, siempre deberíamos identificar los puertos del switch que queremos sniffar, mirroring-ports, (ejemplo: puertos del firewall, puertos donde están los servidores, etc... ) y el puerto al que queremos dirigir todo el tráfico y donde tendremos sniffer (monitor-port). Además sería recomendable identificar estos puertos o bocas del switch, en formato ID_EN_STACK/_FRONTAL_TRASERO/PUERTO. Una vez los tenemos identificados seguiremos la siguiente secuencia de pasos:
  1. Conectarse como admin al switch por telnet desde HyperTerminal de Windows
  2. Desactivar Spanning-Tree en la boca del switch que configuraremos como monitor-port (donde conectaremos el sniffer)
    sys
    interface GigabitEthernet 2/0/15
    stp disable
    q
    save
  3. Configurar el grupo de mirroring y el puerto que se encargará del sniffing:
    mirroring­group 1 local
    mirroring­group 1 monitor­port GigabitEthernet 2/0/15
  4. Agregar al grupo de mirroring los puertos que queremos monitorizar, los mirroring-ports (una linea por cada boca de la que queremos ver el tráfico):
    mirroring­group 1 mirroring­port GigabitEthernet 1/0/17 both 
  5. Guardar los cambios:
    q
    save
  6. Comprobar el resultado:
    display mirroring­group all
La foto la he sacado del album de philcampbell en flickr.

Hacer que nuestro Linux conozca las VLANes de nuestro switch


Hace unas semanas estuve en un cliente trabajando con switches y Port-Mirroring para monitorizar tráfico de red desde un servidor Linux. La teoría es sencilla: Configurar un monitor-port en nuestro switch y configurar las bocas del switch que queremos monitorizar como mirroring-port al grupo de mirror.
El problema nos aparece cuando tenemos varias VLANes en nuestro switch y la electrónica sólo nos permite un monitor-port activo al mismo tiempo. ¿Qué se puede hacer en este caso? ... podemos usar un equipo Linux, conectado al switch en la boca configurada como monitor-port y además, configurar este puerto como trunk-port, con STP deshabilitado, y propagar por él las VLANes que nos interese monitorizar.
Con esto, la electrónica enviará a la tarjeta de red de nuestro equipo todos los paquetes que lleguen a cualquiera de las bocas del switch configuradas como mirroring-port, sólo que si hacemos un tcpdump, probablemente sólo veamos el tráfico que se corresponde a la VLAN por defecto, o en su defecto la nº1. Para ver el tráfico de otras VLANes necesitaremos:

  1. Instalar el paquete VLAN (en Debian).
    apt­get install vlan
  2. Configurar las VLANes a las que queremos tener acceso...
    vconfig add eth1 1
    vconfig add eth1 5
    ...si ahora ejecutamos el comando ip a, comprobaremos como nos ha creado una nueva interfaz de red.
  3. Configurar una dirección IP editando el fichero /etc/networtk/interfaces y añadiendo las siguientes líneas:
    auto  vlan5
    iface vlan5 inet static
    address 192.168.4.101
    netmask 255.255.255.0
    vlan_raw_device eth1
Esto es una gran comodidad cuando no podemos tener todas las tarjetas de red que necesitamos en nuestro Linux, y tenemos que montar un router, o un firewall... una maravilla, sí señor.
La foto la he sacado del album de ivanx en flickr

Monitorizar servidores Tomcat con Cacti

Retomando la serie de posts dedicados a Cacti, en esta ocasión contaremos cómo podemos monitorizar servidores Tomcat con ayuda de Cacti. Para ello, nos basaremos en el post http://forums.cacti.net/about19744.html.
Antes de empezar a trabajar con Cacti, nos interesará saber si tenemos correctamente configurado nuestro servidor Apache Tomcat. Para ello accederemos con un navegador a la dirección http://IP_TOMCAT:PUERTO/manager/status?XML=true, donde IP_TOMCAT será la dirección IP de nuestro servidor tomcat, y PUERTO será el puerto de escucha del Connector-HTTP: en mi caso yo usé http://code.casa.tecnoquia.com:9080/manager/status?XML=true. Para ello, también será necesario tener desplegado el contexto manager que viene con la distribución del Tomcat. Cuando nos pregunte un Login y Password no estará pidiendo el nombre de un usuario y su contraseña que tenga el rol manager. Esto, como sabrás, viene configurado por defecto en el server.xml de tu tomcat (habitualmente se guardan tomcat-users.xml) dentro del Realm UserDatabase. Una vez consigas autenticarte, deberías podeer ver una pantall con una salida similar a la siguiente:
Lo más importante será que nos fijemos en los nombres de nuestros conectores, y de ellos, aquellos que queremos monitorizar.

En mi ejemplo se puede ver que tengo dos conectores: uno llamado jk-9009 con 8 conexiones en el momento de la captura y otro llamado http-9080 que recoge la conexión que hice desde mi navegador. Para ilustrar el ejemplo, usaré el conector jk-9009, que además es el que recibe las conexiones vía ModJK desde el Apache que hace de proxy inverso transparente.
Una vez ya sabemos el puerto, ip, usuario, contraseña y el nombre del conector que queremos monitorizar podemos empezar con Cacti.
  1. Descargar el fichero TomcatStats-0.1.zip, descomprimirlo. Copiar el script tomcatstats.pl al directorio los scrips, de nuestro servidor cacti y darle permisos de ejecución.
    scp tomcatstats.pl root@SERVIDOR_CACTI:/var/www/cacti/scripts/
    ssh root@SERVIDOR_CACTI chmod 755 /var/www/cacti/scripts/tomcatstats.pl
  2. Ahora nos conectaremos a nuestro servidor CACTI, e intentaremos lanzar la consulta que más tarde hará Cacti para dibujar las gráficas. Esto nos permitirá saber las librerías de perl que nos faltan por instalar al equipo. Una vez conectados ejecutar el comando...
    perl /var/www/cacti/scripts/tomcatstats.pl \
    IP_TOMCAT:PUERTO \
    USUARIO_CON_ROL_MANAGER \
    CONTRASEÑA_USUARIO \
    NOMBRE_CONECTOR
    Deberas obtener algo similar a lo siguiente, en una sóla línea.
    jvm_memory_free:28303544 jvm_memory_max:830013440 jvm_memory_total:55246848
    connector_max_time:183042 connector_error_count:0 connector_bytes_sent:83477881
    connector_processing_time:624695 connector_request_count:378
    connector_bytes_received:0 connector_current_thread_count:12
    connector_min_spare_threads:4 connector_max_threads:200
    connector_max_spare_threads:50 connector_current_threads_busy:9
    Si no lo obtienes, será porque te falta alguna librería de Perl. Al ejecutar el comando te dirá qué librería no encuentra. Busca el error en Google y es posible qe alguien le haya pasado algo similar y te de alguna pista. Hasta que no consigas ver la línea similar a la que te indico, no es necesario que sigas configurando porque no se dibujarán las gráficas. Por si si te srive de algo, yo algunas veces necesito instalar los paquetes perl-XML-Simple:
    yum -y install perl-XML-Simple perl-XML-Simple.noarch
  3. Una vez nos funcione el comando en la consola del servidor Cacti, accederemos como Administrador a la consola Web de Cacti y acceder a Console->Import/Export->Import Templates y cargar el fichero: cacti_host_template_tomcat_server.xml, que obtuvimos al descomprimir TomcatStats-0.1.zip. Luego pulsar el botón Save

Con esto tendremos lo básico para poder monitorizar tomcats, pero el autor de la plantilla no tuvo en cuenta que podríamos tener diferentes tomcats en la misma máquina y en diferentes puertos, usando diferentes nombres de conector, diferentes usuarios, etc. Vamos a modificar la plantilla para parametrizar todas estas variables. Para hacerlo:
  1. Ir a Console->Collection Methods->Data Input Methods y pulsar en la parte derecha en TomcatStatus.
  2. En el campo Input String, se le dice a Cacti que comando debe ejecutar para leer los datos con los que luego poder realizar la gráfica. Debemos cambiar los siguientes campos: "8444" por <tcpport> "admin" por tomcatadmin "passwords" por cocacola "http-8080" por <conname> * Pulsar el boton SAVE
    • 8444 por <TcpPort>
    • admin por <UserManager>
    • passwords por <Password>
    • http-8080 por <ConnectorName>
    Cuando lo hayamos hecho pulsar el botón Save.
  3. Nos devolverá a la pantalla anterior, con el mensaje Save Successful.. Volver hacer click en TomcatStatus
  4. En Input Fields hay que pulsar Add. En Field [Input], en el combobox elegir <TcpPort> y en Friendly Name escribir Puerto, Regular Expression -> escribir \d+ . Luego pulsar el botón Create...
  5. Volver a Input Fields y pulsar Add. En Field [Input], en el combobox elegir <UserManager> y en Friendly Name escribir Usuario. En Regular Expression escribir \S+ . Luego pulsar el botón Create...
  6. De nuevo en Input Fields, pulsar Add. En Field [Input], en el combobox elegir <Password> y en Friendly Name escribir Contraseña. En Regular Expression escribir \S+ . Luego pulsar el botón Create...
  7. Otra vez en Input Fields, pulsar Add. En Field [Input], en el combobox elegir <ConnectorName> y en Friendly Name escribir NombreConector. En Regular Expression escribir \S+ . Luego pulsar el botón Create...
  8. Pulsar el botón Save.
  9. Ahora, en la consola de Cacti, acceder a Console->Templates->Data Templates, y luego seleccionar Tomcat Status. En la parte de abajo de la página, dentro de la sección Custom Data, marcar las casillas hostname, Puerto, Usuario, Contraseña y NombreConector. Cuando lo hayamos hecho pulsar el botón Save, que está muy a la derecha de la página (tendremos que usar la barra de desaplazamiento horizontal). Con esta acción, permitimos poder personalizar estas variables, cuando incluyamos las gráficas para algún Host.

La importación del XML, nos creó una plantilla de Host llamada TomcatServer con las cuatro gráficas. La usaremos porque en el mismo servidor Linux/Windows podríamos tener diferentes Tomcats configurados ejecutándose en diferentes puertos. Así, en vez de dar de alta las cuatro gráficas para un servidor (Linux/Windows), podríamos crear un nuevo Device que tuviera sólo estas cuatro gráficas, y estaríamos dando de alta un Tomcat: Cacti no tiene problema en que se repitan las direcciones IP, siempre que no se repitan los nombres de dispositivo. Me he encontrado clientes que tienen servidores Tomcat dedicados a una sóla aplicación, y que ejecutan varios de estos en el mismo servidor.
Ya sólo nos queda dar de alta una nueva aplicación o tomcat:
  1. Ir a Console->Devices->Add
  2. En la ventana que nos aparecerá rellenar los siguientes campos:
    • Description: app-NOMBRE_APLICACION-SERVIDOR
    • Hostname: Escribir la dirección IP del servidor.
    • Host Template: Seleccionar Tomcat Server
    • Downed Device Detection: Seleccionar Ping or SNMP
    Pulsar en el botón Create. Cambiará la página y nos dirá Save Successful.. Haremos click en Create Graphs for this Host.
  3. Cambiará la página. Ahora nos aparecerán las 4 gráficas de la plantilla: Create: Tomcat - Connection Rate, Create: Tomcat - Heap Statistics, Create: Tomcat - Thread Statistics y Create: Tomcat - Throughput.Marcar las casillas de verificación de cada fila y luego el botón Create.
  4. Ahora llega la hora de darle valor a las variables que hemos estado configurando para sean parametrizables. Lo bueno es que podremos monitorizar los tomcats que queramos y cómo queramos (puerto, usuario, conector, etc). Lo malo es que cada vez que demos de alta un nuevo Tomcat tendremos que rellenar estos campos cuatro veces, aunque podremos hacerlo copiando y pegando.Para completar estos campos necesitaremos saber los datos del tomcat que queremos monitorizar, y que averguamos al principio del post, cuando accedimos a http://IP_TOMCAT:PUERTO/manager/status?XML=true.
    • Hostname: escribir la dirección IP del servidor Tomcat
    • Puerto: Escribir el puerto en el que escucha HTTP ese Tomcat para poder llamar a la URL http://IP_TOMCAT:PUERTO/manager/status?XML=true.
    • Usuario: Escribir el login del usuario con el Rol Manager que puede acceder http://IP_TOMCAT:PUERTO/manager/status?XML=true
    • Contraseña: escribir la password de acceso para ese usuario.
    • NombreConector: escribir el nombre del conector que queremos monitorizar. En mi ejemplo usaré jk-9009.
    Esto debemos hacerlo para las cuatro gráficas: Copiando y pegando podemos ir bastante rápido. Cuando terminemos pulsar el botón Create.
  5. Ahora crearemos la entrada en el árbol de gráficas. Vamos a Graph Trees y desplegamos el árbol. Luego en Tree Items pinchamos en (Add) de Produccion->Aplicaciones_Java, o la rama que nos interese.
  6. Cambiar Tree Item Type y seleccionar Host. Luego buscar en Host el device que acabamos de crear y pinchar en el botón Create para guardar los cambios.
Después de esperar algunos minutos, podremos empezar a ver el resultado. Si por lo que sea alguna de las gráficas no se dibujara, deberíamos entrar en modo debug de la gráfica y ver cuál es la causa. Yo tuve este problema con las gráficas Connection Rate y Heap Statistics y según del depurador se debía a invalid y-grid. Fui a Console-<Templates-<Graph Templates de cada una y eliminé el valor que venía establecido por defecto, dejando el campo vacío. Alfonso, perdona por el retraso. Espero que os sirva.
La foto la he sacado del album de Katey Nicosia en flickr

El plan cósmico

Os dejo con un vídeo de Sixto Paz que me ha recomendado mi propio hijo, y del que le hablaron el otro día en clase de Ciencias Naturales (¿?). Me extrañé bastante cuando me lo dijo y le comenté que por qué no decía a la profesora que se limitara a enseñarles el conocimiento científico contrastado y reconocido, y dejaba este tipo de textos y material para que cada uno en casa lo consultara a modo de ampliación.

No estoy en contra de usar material trasversal en las clases de ciencias, pero me preocupa que en clase no se explique ni se dedique el suficiente tiempo a la teoría de la evolución de las especies, las leyes de Mendel, o el principio de incertidumbre de Heisenberg, y al final los chavales salgan con la convicción de todo se debe a un complot extraterrestre, que fomente aún más en ellos su insensibilidad hacia el planeta y el sentido de la irresponsabilidad de sus actos. Esto puede ser muy acertado en clase de filosofía, pero no en la de ciencias.

Por otro lado me alegré que cada vez más gente sepa de estas creencias, que yo descubrí casi por casualidad hace varios años. El vídeo describe de forma resumida la historia de Urantia, que es el nombre originario de nuestro planeta dentro del plan cósmico. Podéis conocer la historia completa en el Libro de Urantia, donde se narra la historia del Universo, de nuestro planeta, y del origen del hombre como experimento genético extraterrestre. Yo os recomendaría que primero vierais el vídeo (son 50minutos) a modo de introducción, luego os leyerais el Acerca del Libro de Urantia , y después fuerais curioseando entre los capítulos del libro. Es muy entretenido e ingenioso en algunos capítulos.



Recordar que la ciencia ayuda a saber lo que va a pasar, pero nunca nos explica el por qué, la razón de que sucedan, ni el objetivo. El método científico comienza con la observación, y es capaz de predecir lo que pasará viendo que suceden los antecedentes, pero nunca se detiene en el por qué suceden estos, y cuando se pregunta la razón, se nos dice que son los consecuentes de unos antecedentes previos, y así sucesivamente hasta el límite de la observación.

casa.tecnoquia.com

Esta semana sabíamos que Google Street View ya tiene digitalizada casi toda España. He buscado la casa que se ha hecho mi querida y adorada mujer, y que con tanto esfuerzo estamos pagando, y ya está visible.

Ver mapa más grande

Tomcat y autenticación LDAP

Cuando disponemos de un LDAP es habitual querer centralizar la autenticación de nuestros servicios en el directorio. Uno de los servicios que podríamos configurar es la autenticación de los administradores de nuestro Tomcat, para evitar que alguien pudiera replegarnos una aplicación, usando las cuentas que trae por defecto. Para hacerlo, tendríamos que comentar la configuración de UserDatabase

<!--
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
debug="0" resourceName="UserDatabase"/>
-->

y añadir la configuración para que busque en OpenLDAP, en la sección de REALMs:
<Realm    className="org.apache.catalina.realm.JNDIRealm" debug="99"
resourceName="UserDatabase"

connectionName="cn=nssproxy,ou=edu,o=carm,c=es"
connectionPassword="**SECRET**"
connectionURL="ldap://openldap.edu.carm.es:389"

userBase="ou=usuarios,ou=edu,o=carm,c=es"
userSubtree="true"
userSearch="(cn={0})"

userRoleName="memberOf"
roleBase="ou=grupos,ou=edu,o=carm,c=es"
roleName="cn"
roleSubtree="true"
roleSearch="(member={0})"
/>

Luego tendremos que crear los grupos admin manager en nuestro LDAP, bajo la rama indicada por roleBase, y añadirles los usuarios (instancicar el atributo configurado por el filtro roleSearch) que queremos puedan administrar nuestros servidores tomcats. Además, el propio usuario también deberá almcenar la pertencia a estos grupos, instanciando el atributo configurado en userRoleName.
Después de aplicar estos cambios tendremos que reiniciar nuestro servidor Tomcat y tener disponible el contexto Manager.
La foto la he sacado del album de iirraa en flickr

Búsqueda en árboles LDAP mediante URL

Cuando usamos un directorio LDAP, a menudo necesitamos lanzar búsquedas de objetos en todos el árbol, pero no siempre tenemos a mano nuestro cliente LDAP favorito. Entre las numerosas funcionalidades de Microsoft Internet Explorer encontramos las posibilidad de poder lanzar búsquedas a un directorio LDAP especificando una URL:

ldap://IP_DEL_SERVIDOR:PUERTO/Raiz_de_busqueda?Atributos_a_recuperar?SCOPE?FILTRO

Para lanzar un par de búsquedas en profundidad podríamos usar, las siguientes URLs:
ldap://openldap.edu.carm.es/ou=usuarios,ou=edu,o=carm,c=es?*?sub?cn=ibm*

ldap://openldap.edu.carm.es/ou=padres,ou=edu,o=carm,c=es?*?sub?dni=34123123*

El incoveniente que encuentro es que Internet Explorer nos mostrará en la libreta de direcciones la primera entrada que recupere de la búsqueda. Para poder ver todas las entradas resultantes de la búsqueda, tendríamos que configurar nuestro servidor LDAP en la libreta de direcciones del equipo (Inicio->Programas->Accesorios->Libreta de direcciones). Si usamos los schemas LDAP apropiados en nuestro servidor, podremos configurar también nuestro cliente LDAP en Thunderbird y Evolution, y lanzar búsquedas al árbol como parte de nuestros contactos.
Si estamos usando como servidor, OpenLDAP, posiblemente nos interese permitir acceso anónimo para consulta, aunque sólo a los atributos que se mostrarán en la libreta de direcciones. Para conseguirlo podremos añadir las siguientes ACLs al principio de la lista, en el fichero de configuración /etc/openldap/slapd.conf.
# Libreta de direcciones
access to dn.subtree="ou=edu,o=carm,c=es" attrs=userPassword,homeDirectory,memberOf
by dn="cn=admin,ou=edu,o=carm,c=es" read
by dn="cn=nss,ou=edu,o=carm,c=es" read
by self read
by anonymous auth
access to dn.subtree="ou=edu,o=carm,c=es"
by * read

La foto la he sacado del album de Property#1 en flickr

RHEL5u4 DM-Multipath en HP EVA 3000 (activo/pasivo)

El pasado Lunes, me buscaron para configurar Device-Mapper Multipath de Oracle Unbreakable Linux 5 update 4, en dos blades HP BL460c conectados con doble fibra a una HP EVA 3000, con una versión Activo/Pasivo de firmware en las contraladoras, imposible de actualizar de momento. Había que configurarlos para poder instalar Oracle 10gR2.
Antes de empezar lo primero que hice fue visitar la web de HP y buscar la cadena device mapper multipath. Luego revisé algunos documentos y realicé algunas pruebas. Ninguna de las pruebas que hice funcionó, por lo que terminé optando por intentarlo por mi cuenta con ayuda de la página man. Así el fichero /etc/multipath.conf que qued fue el siguiente:

devnode_blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z][[0-9]*]"
devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}

defaults {
udev_dir /dev
polling_interval 5
selector "round-robin 0"
path_grouping_policy failover
getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
prio_callout "/bin/true"
path_checker tur
rr_min_io 1000
rr_weight uniform
failback immediate
no_path_retry 6
user_friendly_names yes
}
devices {
device {
vendor "HP*"
product "HSV100*"
path_grouping_policy group_by_prio

getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
path_selector "round-robin 0"
path_checker hp_sw
prio_callout "/sbin/mpath_prio_hp_sw /dev/%n"

rr_weight uniform
rr_min_io 100
failback immediate
no_path_retry 6
}
}
multipaths {
multipath {
wwid 3600508b4001014f60000d00000120000
alias ocr
}
multipath {
wwid 3600508b4001014f60000d00000190000
alias database
}
multipath {
wwid 3600508b4001014f60000d00000200000
alias fra
}
}

Luego, para aplicar los cambios ejecutaremos:
multipath -F
multipath -v 2
multipath -ll
/etc/init.d/multipathd restart
multipath -ll

La foto la he sacado del album de Will Fuller en flickr

Renombrar pseudo-dispositivos de PowerPath

A veces nos puede interesar renombrar los pseudo-dispositivos que nos crea PowerPath. Esto se puede hacer con ayuda del comando emcpadm -s ORIGEN -t DESTINO:

emcpadm renamepseudo -s emcpowerw -t emcpowerx

emcpadm renamepseudo -s emcpowerq -t emcpowerw
emcpadm renamepseudo -s emcpowerr -t emcpowerq
emcpadm renamepseudo -s emcpowero -t emcpowera

emcpadm renamepseudo -s emcpowern -t emcpowero
emcpadm renamepseudo -s emcpowerm -t emcpowern
emcpadm renamepseudo -s emcpowera -t emcpowerm

La foto la he sacado del cwol.com vía google images.

ITER volcano

Os dejo con un vídeo que se ha "currao" un compañero del grupo de investigación al que pertenece mi hermano Pepe (el astrofísico-vulcanólogo), en el cual aparece en primer lugar: el trabajador de campo. Me gusta mucho como ha quedado el montaje, la música y las fotos, que muestran algunos de los episodios por lo que tienen que pasar de nuestros investigadores. Que lo disfruteis.

Tecnoquia: Mi proyecto personal

Algunos de los que leeis este blog, quizás no sepais qué significa la palabra Tecnoquia. La palabra tecnoquia la inventó Juanjo Vidal y la tenía apuntada en una lista de nombres candidatos para posibles proyectos o empresas. Según me contó Raúl Sánchez, solían llevar un registro de los nombres chulos que se les ocurrían estando trabajando o de copas, para cuando los necesitaran para algún proyecto. Siempre me pareció una muy buena idea romántica y respetuosa con el futuro que nos ha de venir, ya que el nombre con el que bautizamos las cosas es determinante: Si no te engancha desde el principio nunca puede funcionar, e incluso enganchando, no es garantía de que vaya a llegar abien, pero eso ea es de otra historia, y no toca hoy.
Así que Raúl me animó a que le escribiera a Juanjo y que me regalara alguno de ellos. Estuve semanas intentándolo por mi cuenta, buscando palabros que me sonaran bien y me engancharan, en diferentes idiomas. A parte de sonarme bien, tenían que tener el dominio libre, y tener pocas entradas en google, cuando buscáramos la palabra. Al final, seguí el consejo de Raúl. y le pedí alguno de los nombres que tenía reservados Juanjo. De todos los nombres que me envió, finalmente me convenció tecnoquia. Estas fueron sus palabras:

Jugando con el griego... me invento un palabro. teknos- y -quía, o lo que es lo mismo técnica/arte y poder. De ahí sacamos palabras como monar-quía (poder de uno), oligar-quía (poder de unos pocos), y en nuestro caso poder de la técnica. El .com está libre de momento.

La explicación me convenció, pero lo importante era que el nombre cumplía todos mis requisitos: me quedé con ella. Todo esto ocurrió durante las semanas que dejaba mi trabajo en la administración pública como funcionario y empezaba la locura de trabajar como profesional autónomo, y lanzarme al río contra corriente: así que la palabra me ha acompañado desde entonces y, dado que en blog voy anontando apuntes técnicos sobre mi trabajo como ingeniero de servicios basados en software libre, y tonterías de mi vida personal, porque no termino de acostumbrarme a usar facebook o twitter, la asocio ya a mi proyecto personal.

Este año me había propuesto entre otras cosas, ir cambiando el aspecto del blog. Llevo casi dos años recopilando información de esto me gusta, esto no, este color, este logo, como este blog, esta fuente, esta estructura, este no se qué... un rollo que no termino de cuajar... y como he aprendido durante este tiempo y yo mismo recomiendo a mis clientes: No hay que saber ni aprender hacer todo, basta con subcontratar a la persona que sepa hacerlo. Después de perder varios días de mis vacaciones a ratos intentándolo con InkScape, usando a mi sobrino Fran a ver si me daba ideas nuevas, etc... tuve que subcontratar, y como hoy día todo se subcontrata a Asia, mientras que preparamos y acondicionamos África, eso hice yo: encargarle este trabajo a LutFi Sahid un diseñador de indonesia que finalmente me cobró 150$ USD vía PayPal. Bueno, pues este el resultado del que quedé muy satifecho.


Para el diseño, como tenía ya mucha información de lo que me gustaba y lo que no, rellené todos los campos del formulario y le envié un correo con los links a los logos que me inspiraban y representaban la combinación tecnica + conocimiento (mejor conocimiento que poder, aunque ya se sabe que la información-conocimiento es poder), que quería para el logo.
Tecnoquia is an invented word, which could be translated as knowledge about technology.
Always thought in a logo appearing brain and chip (or electronic circuit), like this: http://www.freshbrain.org.

Other similar logos could be:
http://eserrano.com/logos/.../geek-brain-logo.gif
http://cbcl.mit.edu/.../brain-logo-2.jpg
http://www.designoutpost.com/forums/attachment.php?...1
http://www.designoutpost.com/forums/attachment.php?...2
http://www.thelogofactory.com/.../EGlogo-contest-brain2.jpg

Pasados un par de días LutFi me envió una primera prueba, que retocamos, pero que prácticamente era el definitivo. Me gustó. La explicación que me dió para el diseño fue la siguiente:
The main concept I use in this design is clean, excel, and modern.
I took brain and loop shape line form as base for design.
Brain is main part of our body, it's looping giving command to our human body parts to work precisely.
It's also symbol of knowledge.
Any brilliant ideas came from our mind (brain). I use rising star to reflect this ideas.

Color I use;
- Light blue which is associated with health, healing, tranquility, understanding, and softness. It is often associated with depth and stability.
- Light Green is the color of nature. It symbolizes growth, harmony, freshness, and fertility.It has strong emotional correspondence with safety. Green has great healing power. It is the most restful color for the human eye; it can improve vision. Green suggests stability and endurance.
- Golden yellow is associated with joy, happiness, intellect, and energy. Iillumination, wisdom, and wealth. Gold symbolizes valuable and high quality.

Bueno, pues ya tengo un logo ... y un nombre. Gracias Juanjo y Raúl. Que sepais que todavía no os he pagado la copa (creo que será un cena) por la palabra que regalasteis.