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.

Etiquetadas las fotos del viaje a Canarias


Por fín he sacado tiempo para etiquetar las fotos de mi viaje a Canarias y subirlas al album de casa. Como siempre, las fotos están hechas con la cámara del móvil y son de una calidad bastante pobre. pero prefiero ir ligero de equipaje a tener que parecer el inspector gadget cargado de cámara, portátil, netbook (que aún no tengo), el móvil, el reproductor de música y demás cacharros que nos han digitalizado la vida. Cuando cambie de móvil intentaré que tenga una cámara mejor ... o no :).

Monitorizar servidores Apache con Cacti

Continuando con la serie de posts dedicados a Cacti, en este post veremos cómo podemos monitorizar servidores Web Apache con ayuda de Cacti. Para ello, nos basaremos en el post http://forums.cacti.net/about9861.html.

  1. Descargar el fichero ws_apachestats.pl.gz, descomprimirlo y copiar el script ws_apachestats.pl al directorio los scrips, de nuestro servidor cacti.
    scp ws_apachestats.pl  root@SERVIDOR_CACTI:/var/www/cacti/scripts/
  2. Ahora, descargar el fichero cacti087b_host_template_webserver_-_apache.xml. Abrir la consola de Cacti como administrador, e importarla (Import Templates)
  3. Cconectarnos al servidor Apache que queremos monitorizar, y asegurarnos de que tenemos descomentada la sección server-status, y que permitimos a nuestro servidor Cacti acceder al recurso.
     ExtendedStatus On
    <Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 192.168.
    </Location>
    Cuando lo configuremos, tendremos que reiniciar el servicio Apache. Podremos comprobar que está accesible, accediendo a http://Servidor/server-status. Tendremos que ver una pagina
Una vez lo hayamos hecho, ir a un servidor que ya tengamos dado de alta (y si no, dar de alta un nuevo Device). Luego, ya en la página de edición del dispositivo, dentro de la sección Associated Graph Templates, elegir WebServer - Apache Statistics - Bytes / Request en el apartado Add Graph Template. Luego pulsar el botón Add. Repetir el proceso para WebServer - Apache Statistics - CPU Load, WebServer - Apache Statistics - kBits / s, WebServer - Apache Statistics - Thread Details, WebServer - Apache Statistics - Thread Details (%) y WebServer - Apache Statistics - Thread Scoreboard.

Cuando lo hayamos hecho, hacer click en Create Graphs for this Host, y luego marcar todas las gráficas que hemos seleccionado, y luego el botón Create. Esperar unos minutos a que se recopilen valores y se pinte la gráfica.

La foto la he sacado del album de Medicinehorse7 en flickr

Monitorizando servidores Linux con Cacti

Siguiendo con la serie de entradas que hablan de Cacti, en este post veremos cómo podemos monitorizar un servidor Linux remoto, mediante Cacti con ayuda de snmp. Para ello, nos basaremos en la discusión http://forums.cacti.net/about11634.html que además de Linux, nos permitirá monitorizar servidores Solaris y HPUX.

  1. Lo primero será descargarnos el archivo cacti_templates-1.3.tar.gz con las plantillas. Acabado, lo descomprimiremos:
    tar -xzvf cacti-templates-1.3.tar.gz
  2. En nuestra consola de Cacti como administrador, hacer click en la opción de menú: Import Templates. Luego, hacer click en el botón examinar y buscar en el directorio local donde descomprimimos el fichero cacti-templates-1.3.tar.gz, para seleccionar el archivo cacti_templates/cacti_host_template__linux_host_ucdnetsnmp-1.3.xml y luego pulsar el botón Save.
  3. En la pantalla Import Results, pulsar el botón Save del final de la ventana.
  4. Ahora, del post http://forums.cacti.net/post-156897.html descargaremos el archivo tcp_stats.zip que nos permitirá monitorizar el estado de las conexiones TCP/IP del equipo. Descomprimir el archivo ejecutando:
    unzip tcp_stats.zip 
  5. De nuevo, ir a la consola de Cacti como administrador y en la opción Import Templates, importar la plantilla: tcp_stats/cacti_graph_template_snmp_-_zing_tcp_stats.xml.
  6. Ahora, nos conectaremos como root al equipo que queramos monitorizar y tendremos que instalar el servicio SNMP.
    • En Debian, ejecutaremos:
      apt-get install snmpd libsnmp10 snmp
      Luego modificaremos el fichero /etc/snmp/snmpd.conf para aplicar las siguientes diferencias:
      61,62c61,62
      < com2sec paranoid default public
      < #com2sec readonly default public
      ---
      > #com2sec paranoid default public
      > com2sec readonly default public
      109,110c109,113
      < syslocation Unknown (configure /etc/snmp/snmpd.local.conf)
      < syscontact Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)
      ---
      > ## syslocation Unknown (configure /etc/snmp/snmpd.local.conf)
      > ## syscontact Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)
      > syslocation CASA
      > syscontact Ignacio <mi_email@gmail.com>
      >
      144c147
      < #proc mountd
      ---
      > proc mountd
      150c153
      < #proc sendmail 10 1
      ---
      > proc sendmail 10 1
      259c262
      < #disk / 10000
      ---
      > disk / 10000
      288c291
      < #load 12 14 14
      ---
      > load 20 14 14
      Además, editaremos el fichero /etc/default/snmpd, y cambiaremos la 127.0.0.1 por 0.0.0.0 en las opciones SNMPDOPTS
    • En RHEL5, ejecutaremos:
      yum install net-snmp net-snmp-utils 
      Luego modificaremos el fichero /etc/snmp/snmpd.conf para aplicar las siguientes diferencias:
      41c41,43
      < com2sec notConfigUser default public
      ---
      > com2sec local localhost public
      > com2sec mynetwork 192.168.0.0/16 public
      >
      47,48c49,55
      < group notConfigGroup v1 notConfigUser
      < group notConfigGroup v2c notConfigUser
      ---
      > group MyRWGroup v1 local
      > group MyRWGroup v2c local
      > group MyRWGroup usm local
      > group MyROGroup v1 mynetwork
      > group MyROGroup v2c mynetwork
      > group MyROGroup usm mynetwork
      >
      55,56c62
      < view systemview included .1.3.6.1.2.1.1
      < view systemview included .1.3.6.1.2.1.25.1.1
      ---
      > view all included .1 80
      62c68,70
      < access notConfigGroup "" any noauth exact systemview none none
      ---
      > access MyROGroup "" any noauth exact all none none
      > access MyRWGroup "" any noauth exact all all none
      >
      162,163c170,171
      < syslocation Unknown (edit /etc/snmp/snmpd.conf)
      < syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
      ---
      > syslocation CASA
      > syscontact Ignacio <mi_email@gmail.com>
      197c205
      < #proc mountd
      ---
      > proc mountd
      203c211
      < #proc sendmail 10 1
      ---
      > proc sendmail 10 1
      313c321
      < #disk / 10000
      ---
      > disk / 10000
      342c350
      < #load 12 14 14
      ---
      > load 20 14 14

De los paquetes que descargamos de internet tendremos que copiar al servidor linux que queramos monitorizar los scripts, y cambiarle los permisos:
scp tcp_stats/netstat.py  root@SERVIDOR:/usr/local/bin/
scp tcp_stats/netstat root@SERVIDOR:/etc/cron.d/

ssh root@SERVIDOR chmod 755 /usr/local/bin/netstat.py

Una vez hecho, editaremos el fichero /etc/snmp/snmpd.conf del servidor que queremos monitorizar y añadiremos el siguiente bloque al final del archivo:
# Monitorizar estado de las conexiones TCP/IP
pass .1.3.6.1.3.2 /usr/bin/python /usr/local/bin/netstat.py

Cuando terminemos, reiniciaremos el servicio snmpd: /etc/init.d/snmpd restart. Luego iremos a la consola de Cacti y crearemos una plantilla para servidores Linux, siguiendo los siguientes pasos:
  1. En la consola como Administrador, seleccionar en el panel izquierdo, Host Templates. Cuando refresque la ventana derecha, hacer click en Add.
  2. Cambiará el marco derecho. Escribir en el campo Name, el nombre que queramos tenga la plantilla, por ejemplo PLANTILLA_Servidor_Linux, y luego hacer click en el botón Create.
  3. Al hacerlo, se actualizará la pantalla y nos aparecerán dos nuevas secciones: Dentro de la sección Associated Graph Templates, en Add Graph Template seleccionaremos la opción SNMP - Zing TCP Stats y luego pulsaremos el botón Add. Repetiremos esto para las opciones: ucd 00 CPU Linux, ucd 01 Load Average, ucd 11 Swap, ucd 12 Detailled Memory y ucd 20 Processes .
  4. Luego en la sección Associated Data Queries, en el cuadro de selección Add Data Query, seleccionar ucd 00 Lan y luego pulsar el botón Add.
  5. Cuando hayamos terminado, pulsar el botón Save.

Ahora, añadiremos propiamente el servidor, iendo en el menú de la izquierda en la pestaña Console a Devices. Luego, en la parte derecha hacer click en Add. Rellenaremos los siguientes campos:
  • En Description, pondremos el nombre del servidor.
  • En Hostname, pondremos la dirección IP del servidor.
  • Y en Host Template, buscaremos y seleccionaremos la plantilla que acabamos de crear: PLANTILLA_Servidor_Linux.

Cuando hayamos terminado, pulsar el botón Create. Si en ese momento nos aparece un mensaje en rojo, indicándonos: Error: Passwords do not match, please retype., será porque tendremos en SNMP Version, la Versión3, el campo SNMP Password (v3) relleno. Borrar este campo y volver a crear el host. Cuando lo hayamos conseguido, nos cambiará la pantalla y tendremos que pulsar en Create Graphs for this Host.
Marcaremos todas las gráficas. Para la sección LAN, cambiaremos Select a graph type, y elegiremos In/Out Bytes. Marcaremos las interfaces de red de las que queremos tener gráficas, y pulsaremos el botón Create.

Por último, sólo nos quedará ubicar el nuevo servidor en el árbol. Para ello, vaya a Console->Graph Trees, y cuando refresque la parte derecha, haga click en el árbol donde quiera añadir el dispositivo. Si quiere añadir una rama al árbol (Equipos Linux, por ejemplo) pulse en Add. Escriba el nombre de Title y pulse Create. De nuevo en la ventana del árbol, pulse en (Add) junto a la rama recién creada. Luego en Tree Item Type, seleccione Host, y en el Host busque el equipo que acaba de crear. Cuando lo haya hecho, pulse el botón Create, y espere unos minutos a que se recopilen los datos, y empiece a dibujar gráficas.
La foto la he sacado del album de scatterkeir en flickr

Tener dos instancias OpenLDAP en el mismo servidor RHEL5

OpenLDAP es una implementación Open Source del protocolo Lightweight Directory Access Protocol (LDAP). LDAP es el protocolo de red que nos permite hacer consultas a un directorio (consultas de lectura y escritura, aunque está optimizado para soportar muchísimas lecturas en poco tiempo). Un directorio es una base de datos de objetos organizada jerárquicamente en forma de árbol, y hace tiempo ya que los usamos para guardar objetos que representan recursos de una red: un equipo, una impresora, un concesión del DHCP, un nombre de hosts, una cuenta de correo, un cuenta de usuario con su contraseña y datos personales, etc. Al final resulta muy cómodo y fácil decirle a nuestras aplicaciones y servicios de red, que busquen las cuentas de acceso y las contraseñas en un directorio central, en vez de mantener cada uno su propia gestión de usuario.
OpenLDAP es una implementación que podemos usar en cualquiera de las distribuciones de Linux modernas, además de BSD, HP-UX, AIX, MacOsX, Windows, etc, pero por alguna razón que desconozco, en RHEL5 no resulta nada fácil tener dos instancias de OpenLDAP en distintos puertos en el mismo equipo. ¿Para qué podemos necesitar algo así?: Para tener un maestro y un esclavo en el mismo equipo, garantizando que no hay cortes de red en la replicació o para poder clusterizar en activo-pasivo varias instancias aprovechando la misma infraestructura de cluster de los equipos. Estos han sido los escenarios en los que yo he necesitado tener dos instancias en el mismo equipo, y que voy a contaros como hacer, aunque sea un poco artesanal.
Para ilustrar el procedimiento consideraremos que ya tenemos un maestro que tiene la configuración en /etc/openldap/slapd.conf, la base de datos en /var/lib/ldap y el demonio de arranque y parada en /etc/init.d/ldap. También supondremos que este maestro escucha conexiones en el puerto 389.
Ahora supondremos que queremos levantar una segunda instancia que llamaremos de respaldo en el puerto 3890. Los pasos que tendremos realizar son los siguientes:

  1. Lo primero sera parar el ldap maestro.
    /etc/init.d/ldap stop
  2. Ahora crearemos el usuario que ejecutará la instancia de respaldo:
    useradd ldap-respaldo -c "LDAP User backup" -s /bin/false -d /var/lib/ldap-respaldo
    No es casualidad que el usuario se llame ldap-respaldo: nos será mucho más rápido y rentable añadir el sufijo -respaldo a las ocurrencias de ldap, que sustituir por completo las ocurrencias por otra cadena más apropiada.
  3. Copiar los directorios y ejecutables del usuario ldap al usuario ldap-respaldo.
    cp  /etc/init.d/ldap  /etc/init.d/ldap-respaldo
    cp /usr/sbin/slapd /usr/sbin/slapd-respaldo
    chmod 755 /usr/sbin/slapd-respaldo

    mkdir -m 777 /var/run/openldap-respaldo

    cp /etc/openldap -R /etc/openldap-respaldo
    cp /var/lib/ldap -R /var/lib/ldap-respaldo

    chown -R ldap-respaldo.ldap-respaldo \
    /etc/openldap-respaldo \
    /var/run/openldap-respaldo \
    /var/lib/ldap-respaldo
  4. Editar el fichero de configuracion (/etc/openldap-respaldo/slapd.conf) de la nueva instancia y cambiar las líneas
    pidfile  /var/run/openldap/slapd.pid
    argsfile /var/run/openldap/slapd.args
    directory /var/lib/ldap
    ...por estas otras...
    pidfile  /var/run/openldap-respaldo/slapd.pid
    argsfile /var/run/openldap-respaldo/slapd.args
    directory /var/lib/ldap-respaldo
  5. Por último, tendremos que editar el demonio de arranque y parada del nuevo servicio (/etc/init.d/ldap-respaldo), y aplicar las siguientes diferencias:
    12a13,16
    >
    > # Sufijo...
    > export lsfx="-respaldo"
    >
    29c33
    < slapd=/usr/sbin/slapd
    ---
    > slapd=/usr/sbin/slapd${lsfx}
    94c98
    < user=ldap
    ---
    > user=ldap${lsfx}
    98,99c102,103
    < slaptestflags=
    < for dbdir in `LANG=C egrep '^directory[[:space:]]+[[:print:]]+$' /etc/openldap/slapd.conf | sed s,^directory,,` ; do
    ---
    > slaptestflags=" -f /etc/openldap${lsfx}/slapd.conf "
    > for dbdir in `LANG=C egrep '^directory[[:space:]]+[[:print:]]+$' /etc/openldap${lsfx}/slapd.conf | sed s,^directory,,` ; do
    116,117c120
    < # Unaccessible TLS configuration files.
    < tlsconfigs=`LANG=C egrep '^(TLS_CACERT|TLSCACertificateFile|TLSCertificateFile|TLSCertificateKeyFile)[[:space:]]' /etc/openldap/slapd.conf /etc/openldap/ldap.conf | awk '{print $2}'`
    ---
    > tlsconfigs=`LANG=C egrep '^(TLS_CACERT|TLSCACertificateFile|TLSCertificateFile|TLSCertificateKeyFile)[[:space:]]' /etc/openldap${lsfx}/slapd.conf /etc/openldap${lsfx}/ldap.conf | awk '{print $2}'`
    124,134c127,138
    < if ! action $"Checking configuration files for $prog: " /sbin/runuser -m -s "$slaptest" -- "$user" $slaptestflags; then
    < if /sbin/runuser -m -s "$slaptest" -- "$user" "-u" > /dev/null 2> /dev/null ; then
    < dirs=`LANG=C egrep '^directory[[:space:]]+[[:print:]]+$' /etc/openldap/slapd.conf | awk '{print $2}'`
    < for directory in $dirs ; do
    < if test -r $directory/__db.001 ; then
    < echo -n $"stale lock files may be present in $directory" ; warning ; echo
    < fi
    < done
    < fi
    < exit 1
    < fi
    ---
    >
    > # if ! action $"Checking configuration files for $prog: " /sbin/runuser -m -s "$slaptest" -- "$user" $slaptestflags; then
    > # if /sbin/runuser -m -s "$slaptest" -- "$user" "-u" $slaptestflags > /dev/null 2> /dev/null ; then
    > # dirs=`LANG=C egrep '^directory[[:space:]]+[[:print:]]+$' /etc/openldap${lsfx}/slapd.conf | awk '{print $2}'`
    > # for directory in $dirs ; do
    > # if test -r $directory/__db.001 ; then
    > # echo -n $"stale lock files may be present in $directory" ; warning ; echo
    > # fi
    > # done
    > # fi
    > # exit 1
    > # fi
    140c144
    < user=ldap
    ---
    > user=ldap${lsfx}
    147c151
    < if grep -q ^TLS /etc/openldap/slapd.conf || test x$SLAPD_LDAPS = xyes ; then
    ---
    > if grep -q ^TLS /etc/openldap${lsfx}/slapd.conf || test x$SLAPD_LDAPS = xyes ; then
    152a157,158
    > harg="ldap://0.0.0.0:3890/ "
    > export SLAPD_OPTIONS=" -F /etc/openldap${lsfx} -f /etc/openldap${lsfx}/slapd.conf "
    168c174
    < if grep -q "^replogfile" /etc/openldap/slapd.conf; then
    ---
    > if grep -q "^replogfile" /etc/openldap${lsfx}/slapd.conf; then
    179c185
    < [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ldap
    ---
    > [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ldap${lsfx}
    191c197
    < if grep -q "^replogfile" /etc/openldap/slapd.conf; then
    ---
    > if grep -q "^replogfile" /etc/openldap${lsfx}/slapd.conf; then
    199c205
    < [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ldap /var/run/slapd.args
    ---
    > [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ldap${lsfx} /var/run/slapd${lsfx}.args
    219c225
    < if grep -q "^replogfile" /etc/openldap/slapd.conf ; then
    ---
    > if grep -q "^replogfile" /etc/openldap${lsfx}/slapd.conf ; then
    232c238
    < if [ -f /var/lock/subsys/ldap ] ; then
    ---
    > if [ -f /var/lock/subsys/ldap${lsfx} ] ; then

Ahora ya se puede probar a arrancar los directorios, ejecutando:
/etc/init.d/ldap start
/etc/init.d/ldap-respaldo start
Si ahora ejecutamos ps aux, deberían aparecernos dos entradas para slapd. Si después de esto, necesitáramos crear una tercera instancia, podríamos usar un nuevo sufijo que fuera por ejemplo -tercera, tendríamos que aplicar los 4 primeros pasos cambiando en -respaldo por -tercera, y en el quinto paso, bastaría con hacer una copia de /etc/init.d/ldap-respaldo en /etc/init.d/ldap-tercera y luego editar este último para cambiar la línea 16, y en vez de poner:
export lsfx="-respaldo"
...pusiera el nuevo sufijo...
export lsfx="-tercera"
Bueno aunque sea una solución un poco aventurera, y a mí ha servido. Espero a que vosotros también.
La foto la he sacado del album de vertigogen en flickr

Descomprimir un RPM en Debian

Como ya he comentado alguna vez, en los clientes mantenemos los scripts que desarrollamos bajo el control de versiones, y luego los empaquetamos en ficheros RPM para desplegarlos en los servidores. Esta mañana estaba desplegando un servidor Debian y necesitaba instalar los clientes personalizados que hemos escrito para Nagios en el equipo, y asi que quedara monitorizado. Para hacer esto en Debian podemos ejecutar:

apt-get install rpm alien

mkdir /tmp/unRpm
cd /tmp/unRpm
rpm2cpio /opt/software/tyo-nagios-0.15-5.i386.rpm | cpio -iduv ./*

Luego, manualmente llevamos cada archivo o directorio a su lugar.
La foto la he sacado del album de jmelero en flickr

Instalación de Cacti en RHEL5

Hace ya tiempo estamos usando Cacti para monitorizar en tiempo real las redes, servidores y servicios de algunos de nuestros clientes, y tener reportes gráficos con los que poder tomar tomar decisiones pro-activas y detectar cuellos de botella. Además, al ser software libre, le vamos haciendo hacks, para integrarlo en otras herramientas del cliente como Nagios. Cacti lo podemos probar descargando appliance donde ya viene preconfigurado, el problema es que estos appliances suelen venir instalados con una gentoo capada que nos permite instalar más paquetes con conary, pero la lista de repositorios es limitada, y cuando queremos empezar a sacarle partido a Cacti, no podemos instalar lo que ayuda pide que se necesita, y no podremos monitorizar muchos dispositivos. Para tener una referencia rápida de los dispositivos que podemos monitorizar con cacti, y cómo hacerlo podemos visitar: http://www.debianhelp.co.uk/cactitemplates.htm. Si queremos ver una instalación funcionando podemos visitar https://ciist.ist.utl.pt/cacti/graph_view.php?action=tree: Así podemos echar un vistazo a qué tipo de métricas presta atención otra gente.
Para instalar Cacti en RHEL5, lo primero será descargar los paquetes RPM. Un buen sitio es dag.wieers.com, donde encontraremos un montón más de paquetes que nos pueden venir muy bien instalar desde el RPM en vez de usar el fuente directamente:


Como estos paquetes no son de la distribución oficial, los guardaré en /opt/software. Así, cuando pase tiempo y tenga que volver a instalar el cacti en otro equipo no tengo que pensar: ¿qué versión usé, de dónde descargué los paquetes?: Voy a /opt/software y allí deben estar. Después me planteo si actualizo y pongo una versión más moderna o sigo usando la misma.
Una vez están todos los paquetes descargados, los instalaremos ejecutando:
  1. Instalar las dependencias de la distribución, ejecutando:
    yum -y install net-snmp net-snmp-utils php-mysql php-snmp
  2. Ahora instalar los paquetes que hemos descargado:
    cd /opt/software/cacti
    rpm -ivh cacti-*rpm perl-rrdtool-*rpm \
    python-rrdtool-*.rpm rrdtool-*.rpm rrdutils-*.rpm
  3. Ahora necesitaremos un servidor MySQL. Podemos instalar el que viene con RHEL ejecutando yum -y install mysql-server . Una vez tengamos arrancado el servidor, nos conectaremos como root y crearemos el usuario que usará cacti para conectar a la BBDD:
    create database cacti;
    GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY "pwd4cacti";
    flush privileges;
    Usaremos localhosts cuando Cacti y MySQL estén en la misma máquina. Si no, podremos una segunda línea, sustituyendo localhost por la dirección IP desde se espera que conecte el servidor CACTI.
  4. Volver a la consola del servidor donde hayamos instalado Cacti, y cargar el esquema de Base de Datos, ejecutando:
    mysql -h localhost -u cactiuser --password=pwd4cacti cacti < /var/www/cacti/cacti.sql
  5. Editar el fichero /var/www/cacti/include/config.php, para configurar en las líneas 26 a 31 los parámetros de conexión a la base de datos
  6. Editar /etc/httpd/conf.d/cacti.conf y cambiar en la línea 8 desde qué direcciones IP queremos se puedan conectar los usuarios. Si queremos que esté abierto a nuestras suredes podemos poner allow from 192.168. Luego reiniciar Apache y configurarlo para que se inicie con el sistema.
    /etc/init.d/httpd restart
    chkconfig httpd on
  7. Añadir al crontab del usuario cacti la siguiente línea:
    */5 * * * * php /var/www/html/cacti/poller.php > /dev/null 2>&1

Ya habremos terminado de instalar. Ahora desde un navegador, accederemos a la página de Cacti, poniendo la IP o nombre del equipo seguido de /cacti/. En mi caso yo pongo http://draw.casa.tecnoquia.com/cacti/, y nos aparecerá el asistente de configuración :
  1. En la primera pantalla Cacti Installation Guide, pulsar el botón Next>>
  2. En Please select the type of installation, dejar seleccionada New Install y pulsar el botón Next>>.
  3. Después en Make sure all of these values are correct before continuing deberíamos tenerlo todo en OK. Pulsar el botón Finish.
  4. Nos aparecerá una ventana para que nos autentiquemos. Usaremos como nombre de usuario y contraseña admin.
  5. Ahora nos aparecerá un mensaje *** Forced Password Change *** donde nos obliga a cambiar la contraseña por defecto. Pondremos la que nos interese tenga el administrador de Cacti y pulsaremos el botón Save.

Ahora configuraremos brevemente Cacti, para fijar los valores predeterminados de monitorización y permitir acceso como invitado, que siempre viene bien cuando lo usamos desde otras herramientas.
  • Ir a la pestaña Console, y luego a Settings. En general Snmp version dejaremos seleccionada Versión 1, y pulsaremos el botón Save
  • Luego, en Settings en la pestaña Poller, ir a la opción Downed Host Detection, y seleccionar Ping and SNMP. Pulsar Save.
  • Todavía en Settings, ir a la última pestaña Authentication y en Guest User, seleccionar guest. Pusar el botón Save.
  • Ahora ir seleccionar User Management el panel de la izquierda, dentro de la pestaña general Console. Hacer click en guest y luego marcar la casilla de verificación Enabled y justo debajo, desmarcar la opción User Must Change Password at Next Login. Pulsar Save.

Cerrar la sesión como admin e intentar acceder a la URL http://draw.casa.tecnoquia.com/cacti/graph_view.php?action=tree. No nos debería pedir login ni password.
La foto la he sacado del album de hipopotominha en flickr

VMware Workstation 6.5.2 en Fedora Core 10 64bits

Llevo desde principios de año, muy satisfecho con las alternativas de virtualización que tenemos disponibles para el escritorio en Linux: Sun VirtaulBox y QEmu+KVM. Esta semana tengo que montar un piloto para un cliente y desgraciadamente, he necesitado instalar VMware Worstation en Fedora Core 10 64bits, de la cual, también estoy bastante satisfecho, y ya casi no recuerdo lo mal que lo pasé con las versiones anteriores cuando lo comparaba con Ubuntu.
El problema ha sido, lo mal acostumbrados que nos tiene VMware a los usuarios de Linux, porque hasta hoy, no había tenido problemas para instalar y hacer funcionar ninguna de las versiones de Workstation. Hoy sí: después de instalar VMware-Workstation-6.5.1-126130.x86_64, no hay forma de que funcione. He buscado en los foros, y no he encontrado nada que me funcione bien, no se si por usar los 64bits, por tener módulos de virtualización de otros sistemas o por lo que es, pero nada me ha funcionado.
Al final he detectado que se debía a un problema con la compilación de los módulos que trae VMware, y lo he solucionado de la siguiente forma siendo el usuario root:

  1. Instalar los include del kernel y el compilador, y renombrar la carpeta con los módulos precompilados que trae:
    yum install kernel-headers kernel-devel gcc
    mv /usr/lib/vmware/modules/binary /usr/lib/vmware/modules/binary.old
  2. Descomprimir el código fuente de los módulos de VMware
    cd /usr/lib/vmware/modules/source/
    mkdir `uname -r`
    cd `uname -r`

    for i in ../vmblock.tar ../vmci.tar ../vmmon.tar ../vsock.tar ../vmnet.tar
    do
    tar xvf $i
    done
  3. Compilar los módulos de VMware
    cd /usr/lib/vmware/modules/source/`uname -r`

    for i in vmblock-only vmci-only vmmon-only vsock-only vmnet-only
    do
    cd $i
    make
    cd ..
    done
  4. Instalar en mi sistema los módulos recién compilados ejecutando:
    cd /usr/lib/vmware/modules/source/`uname -r`

    for i in *.o
    do
    k=`basename $i .o`
    /bin/cp $i /lib/modules/`uname -r`/kernel/drivers/misc/$k.ko
    done
    depmod -a
  5. Descargar del kernel los módulos de KVM
    rmmod kvm_intel
    rmmod kvm
    rmmod vsock
    rmmod vmblock
    rmmod vmci
  6. y por último, cargar los módulos de Vmware Workstation que hemos compilado.
    /etc/init.d/vmware stop
    modprobe vmnet
    modprobe vmmon

    insmod /lib/modules/`uname -r`/kernel/drivers/misc/vmci.ko
    insmod /lib/modules/`uname -r`/kernel/drivers/misc/vsock.ko
    insmod /lib/modules/`uname -r`/kernel/drivers/misc/vmblock.ko

Estos dos últimos pasos tengo que ejecutarlos cada vez que quiero usar VMware Workstation, pero tampoco me importa mucho, porque apenas lo uso, excepto para el piloto de este cliente. Pienso seguir usando las VirtualBox y QEmu+KVM, ya que no tenemos soporte de Dom0 para Xen a partir de Fedora Core 7.
Cuando iniciemos VMware, deberíamos ir a Edit->Virtual Network Editor, editar las propiedades y dejar solo las tarjetas fisicas configuradas (evitando las virtualizadas de KVM o VirtualBox), y después arrancar la máquina virtual.
La foto la he sacado del album de nobihaya en flickr.

Impedir que determinados usuarios se conecten por SSH

Cuando necesitemos impedir que determinados usuarios se nos conecten por SSH a nuestro equipo, bastará con que editemos el fichero de configuración de OpenSSH, /etc/ssh/sshd_config y añadamos la línea:

DenyUsers  LOGIN_DE_USUARIO1  LOGIN_DE_USUARIO2

Debemos especificar el login del usuario, no nos servirá usar el UID. Los distintos logins de usuarios los separaremos por espacio. Si el login tiene espacios, tendremos un problema: Podemos hacer una pequeña chapuza definiendo una entrada en /etc/passwd con un login sin espacios y con el mismo UID y esperar tener suerte.
Es posible, que necesitemos limitar el acceso a estos usuarios, pero queramos que pueda conectar sólo desde determinadas direcciones IP (IP1 e IP2). En ese caso añadiremos la línea:
DenyUsers  LOGIN_DE_USUARIO1@*,!IP1,!IP2   LOGIN_DE_USUARIO2

Si tenemos configurado IPv6 en el equipo, entonces tendremos que utilizar:
DenyUsers  LOGIN_DE_USUARIO1@*,!::ffff:IP1,!::ffff:IP2   LOGIN_DE_USUARIO2

Cada vez que modifiquemos el archivo de configuración, tendremos que reiniciar el servicio ejecutando /etc/init.d/sshd restart.
La foto la he sacado del album de nooone en flickr.

Introducción a la observación astronómica

El fin de semana pasado me invitaron a dar en el campamento de Verano donde está mi hijo, en Sigüenza (un lugar de obligada visita), una introducción práctica de observación astronómica para aficionados y gente en general, que no tenemos ni idea, pero que nos quedamos como tontos mirando el cielo, queriendo saber qué estamos viendo en el cielo.
Para la ocasión preparé una especie de guía de como ir identificando constelaciones en el cielo de Verano, y contando un poco la leyenda mitológica griega asociada, (un copy-paste salvaje de la Wikipedia, que yo no tengo ni idea, lo único que he hecho ha sido molestarme en recopilarlas de aquí y de allá) y quizás, si estais de Vacaciones en un sitio rural con poca luz en el hemisferio Norte, os quedais mirando el cielo de estrellas y quereis entreteneros identificando las estrellas, etc ... pues podeis echarle un vistazo al documento que preparé. Si esperais mucho, el PDF ya no sea fiel a lo que veis en el cielo hasta el verano que viene.
El documento lo he compartido en Google Docs, y en el servidor de casa. Si os interesa el tema, podeis ayudaros de Stelleraim un programita de software libre que está muy chulo, es muy facilito y nos puede decir cómo está el cielo cada noche del año. Si además quereis ayudaros con un puntero láser verde de observación astronómica e ir casi dibujando las líneas de las constelaciones en el cielo, os recomiendo http://www.laserlince.com/, un fabricante de Valladolid que te lo envía en 3 días a casa, por 50 euros (50mW).
Como dice mi hermano Pepe (el astrofísico) a quien agradezco desde aquí todo su esfuerzo en que esto saliera bien, todos llevamos un astrónomo dentro, sólo hace falta dejarlo salir. Desde aquí, este es mi homenaje personal a Galileo Galilei y al año internacional de la astronomía. Felicidades.
La imagen la he sacado de Nocheslúcidas, vía GoogleImages.

GCDS 2009 - Día 4: 7 de Julio

Hoy era mi último día en Gran Canaria. Llegamos temprano al auditorio a pesar de la fiesta de KDE de la noche anterior, y entramos tras el café a The Hynerian Empire and beyond, aunque a medio de la charla salí porque estuve leyendo el correo y comprobé que había un problema con una de las BBDD de un cliente. Entramos llevados por la curiosidad que despertó el nombre, sacado de la serie de ciencia ficción FarScape. Entré de nuevo a la sala, cuando la charla había terminado. La siguiente charla Let's make GNOME a collaborative desktop resultó muy interesante, porque Guillaume Desmottes nos explicó cómo podemos convertir Gnome en un escritorio colaborativo, a través de Telepathy, que no es si no, de forma resumida, una API para D-BUS sobre mensajes XMMP y demás protocolos de mensajería instantánea. De esta forma podemos compartir notas de documentos PDFs (mockup, evince), nuestro escritorio (empathy+vino+vinagre), mostrar la cercanía la posición geográfica de nuestros contactos, pooder compartir archivos vía XEP-0214, presencia virtual, bookmarks, multiconferencia (muji), etc. Interesante comprobar como se aplica el concepto de colaboración en las aplicaciones de escritorio.
La última charla a la que asistiría, fue a cargo de Philippe Normand y nos habló sobre Personal Media Networks with Coherence and Telepathy D-Tubes (el ODP): una introducción a DLNA (Digital Living Network Alliance) y UPnP (Universal Plug and Play), para presentar Coherence como una API Python que sirve de DLNA/UPnP y permite exportar ficheros multimedia locales y remotos a otros clientes UPnP. Todo esto se apoya sobre D-Tubes de Telepathy (D-Bus IPC) que soporta flujos de tráfico p2p y stream. Como aplicación práctica de esta tecnología nos mostró MIRABEAU, que ya es capaz de interactuar con PlayStation3, Xbox 360, son Bravia, y algunos más.
Después de esta charla nos fuimos a comer, y luego al puerto de Agaete para coger el Ferry de las 16:00 que me llevara de vuelta a Tenerife.
Como he tardado tanto en terminar de escribir esta entrada, ya de vuelta a mi vida diaria, ha dado tiempo a que en Barrapunto publicaran todas las ponencias y vídeos del congreso, prueba de la excelente organización del evento, y como ya he dicho en este blog, de lo mejor a lo que he tenido oportunidad de asistir: la organización y realización del congreso, ha sido excelente y para sobresaliente alto. Ha sido un lujo poder asistir. Enhorabuena.