Software de administración de HP para Proliant en Debian x86_64 (amd64)

Recientemente tuve que instalar las herramientas de administración de HP (que, similar a Solaris, son las únicas autorizadas por el hardware para acceder a sus muy delicados interiores) en un servidor con el sistema operativo Debian (6, en este caso). Las instrucciones para agregar los repositorios están bien descritas en el siguiente link:

http://downloads.linux.hp.com/SDR/

Resulta que al intentar instalar mi primera herramienta (hp-health), me encontré con un problema de dependencias:

hp-health depende de libc6-i686 | lib32gcc1; sin embargo:
El paquete `libc6-i686′ no está instalado.
El paquete `lib32gcc1′ no está instalado.

Independientemente de cuestionar la lógica de solicitar para un paquete de 64b dependencias de 32b (digo… sin comentarios), esto impedía la instalación de los mismos. Apostando a que esto era un error de algún becario de HP, decidí descargar el paquete y forzar la instalación.

Y funcionó.

 

Mostrar todos los usuarios con shell y cuenta activa

awk -F ":" '$0 ~ /bash$/ {print $1}' /etc/passwd | xargs -L 1 -I {} grep {} /etc/shadow | awk -F ":" '$2 !~ /^!/ {print $1}'

– Requiere privilegios de root, obviamente.

– Sustituir “bash” por la terminal de su preferencia (o sh$ si quieren ver *todas* las terminales…)

– No he encontrado como optimizar la segunda parte a un solo comando awk, debido a que no encuentro como introducir el resultado de xargs a variable en awk. Si alguien lo puede hacer es bien recibida la mejora 🙂

Extraer nombres de rutinas en códigos fuente tipo C

Bien dicen que la necesidad es la madre de la invención.

Tenía que extraer todos los nombres de rutinas de las diferentes clases de C# que he estado trabajando. Después de buscar en Visual Studio por alguna opción que me permitiera hacer esto de manera sencilla – y vaya que busqué – me desesperé y pensé… finalmente son texto plano, no? Las clases, esto es.

Pues, ¡claro que lo son! Y entonces awk viene muy al caso. El siguiente script sirve para cualquier código fuente tipo C (rutinas con parámetros entre paréntesis, código de la rutina entre llaves) – siempre y cuando las llaves no estén nunca en la misma línea que el nombre de la rutina (una práctica relativamente común). Ejemplo de lo que sirve:

modificador modificador RUTINA(parámetros si los hay)
{
...
}

o también

modificador modificador RUTINA(parámetros si los hay)
{...}

o cualquier combinación entre ellas. Luego entonces, el script:

awk 'BEGIN{x=0;} {if($0 ~ /{/) x=x+1; if($0 ~ /}/) x=x-1; if(x==0 && $0 !~ /}/) print $0;}'

Nótese que esto no nos quita los modificadores, solo el código intermedio. Si queremos quitar todo lo demás, podemos utilizar sed – pero después de 10 minutos de jugar con él me doy cuenta que no es trivial (al menos ahorita ¬¬) y lo dejo para otro post – o como dijeran mis libros de la prepa: “Queda como ejercicio para el lector”.

🙂

Corrigiendo el error de empathy con MSN en Ubuntu 10.04

Hace como tres semanas se me ocurrió la loca idea de migrar de Debian Lenny a Ubuntu, con eso de que había ya salido la versión 10.04 (Lucid Lynx) y que esta es una versión LTS (Long Term Support, o bien de Soporte de Largo Plazo… tres años en particular). Me dije: Porqué no ahora?

Todo marcha de maravilla, con la notable de excepción de su cliente por defecto para mensajerías, llamado Empathy. Empathy es un proyecto de GNOME que está bastante apoyado – es decir, tiene apoyo de muchos frentes – y se ha convertido en el cliente por defecto del tal Ubuntu. Nada mal, excepto por el hecho de que su soporte para características del protocolo de MSN apesta. Y apesta feo.

La bronca con el tal Empathy es que, de vez en vez, se pasma la conexión. Ya no actualiza los contactos, ya no recibo (ni puedo enviar) mensajes, y lo peor… no me puedo desconectar. Bueno, al menos no con la interfaz que me proporciona Empathy. Según él, se desconecta (y luego vuelve a conectarse), pero son notablemente patrañas.

Un par de veces me desesperé y acabé reiniciando (sin comentarios), y todo volvía a la normalidad. Pero evidentemente esta no es forma de vivir… así que me puse a investigar. Primero, instalé el aMSN en un acto de desesperación, bajo el razonamiento de “si la conexión está trabada, el conectarse/desconectarse con otro cliente lo va a hacer funcionar”. Y no resultó como esperaba; efectivamente, aMSN pudo exitosamente conectarse y desconectarse, y sacó al Empathy de su estupor. Pero ahora se quejaba de que no podía conectarse por un (bien explicativo): “Network Error”. Hmmm….

Resulta que Empathy trabaja con un framework llamado “Telepathy” para el manejo de sus conexiones. Se ve bonito, platicado te lo pintan muy completo, pero esa cosa es la que acaba trabándose. La razón por la cual lo digo es que en este viejo bug report de GNOME hablan de un post que describe una posible solución; específicamente:

ok try this remove telepathy-butterfly an you should just have telepathy-haze installed try connecting with that

Lo cual me hizo investigar los fulanos módulos telepathy-*. Esto fue lo que dijo Debian:

||/ Name Version Description
+++-=================================-=================================-==================================================================================
ii telepathy-butterfly 0.5.9-0ubuntu1 MSN connection manager for Telepathy
un telepathy-connection-manager (no description available)
ii telepathy-gabble 0.8.12-0ubuntu1 Jabber/XMPP connection manager
ii telepathy-haze 0.3.4-1 A telepathy connection manager that use libpurple
ii telepathy-idle 0.1.6-1 IRC connection manager for Telepathy
un telepathy-mission-control (no description available)
ii telepathy-mission-control-5 5.3.2-3 management daemon for Telepathy real-time communication framework
un telepathy-python (no description available)
ii telepathy-salut 0.3.11-1 Link-local XMPP connection manager for the Telepathy framework
un telepathy-sofiasip (no description available)

Hmmm… entonces me fuí a ver el proceso y…

sbecerril@dolphins:~$ ps -e | grep telepathy
5320 ? 00:00:04 telepathy-butterfly

Ok… so… este debería ser el proceso trabado. Un simple kill (cortés, sin llamar a -2 ni a -9 por supuesto)…

y voilà! Empathy revivió.

Ahora… a escribir un script que haga eso recursivamente… 😛