miércoles, 21 de mayo de 2014

¡¡Segundo !!!!

El mes de mayo viene movido. De ahí las pocas publicaciones del blog. No me falta inspiración, si tiempo para plasmarla en el blog. Antes de empezar a escribir este post terminé uno sobre mi experiencia con el modem bandluxe, que tenia en el tintero hace varias semanas. No quería dejar pasar que en Mayo este blog cumple dos años. 

 Mirando el año

Desde febrero el blog es parte de agujero del mate, invitado por Rodolfo Pilas. No tengo elementos objetivos para cuantificar como ha variado el trafico a Raiz de esto. 

Tengo la impresión de tener más trafico latinoamericano, especialmente de Mexico, Ecuador y Peru. El trafico ha continuado creciendo, a un ritmo mas lento que en el primer año. Sobre fin de año vi un aumento importante de trafico.

Este año me animé a escribir comentarios de libros, comenzando con Hacker epico. Tengo leidos algunos otros libros, pero no he encontrado tiempo para escribir sobre ellos.He escrito más sobre Windows, tengo que lidiar con una cantidad importante de PCs con ese Sistema Operativo. Escribí menos de fotografía de lo que me hubiera gustado, coincide que estoy haciendo menos fotografía.

Mi valoración y respeto a los blogueros que publican activamente ha crecido. Para quienes no contamos con el don de la pluma, escribir una buena entrada es una tarea difícil. Sumarle a eso el tiempo, eventualmente erogaciones, para generar experiencias dignas de ser publicadas en el blog. Me cruzo con blogs como dolce uruguay, con un volumen y calidad de producción envidiable. O La Frase del Viernes, que casi todas las semanas publica una crónica. No quiero mencionar a aquellos blogueros casi profesionales, una categoría casi imposible de alcanzar.

martes, 20 de mayo de 2014

SCRIPT para Modem BANDLUXE LTE en Linux

Semanas atrás recibí unos de estos modems. El objetivo es utilizarlo para una conexión de emergencia, en caso de caída de la conexión principal cableada; tengo que levantar la conexión mediante un script. ANTEL entrega estos módems como oferta de conexión inalámbrica. Probado en mi notebook la velocidad de conexión es buena, la conexión estable.
Modem BnadLuxe (foto del sitio del fabricante)
 ANTEL informa que el módem esta soportado en Ubuntu. Fuera de esa mención, no hay más datos para hacerlo funcionar en Linux. Buscando información llegue al blog de Fernando da Rosa, donde cuenta en una entrada su experiencia y da instrucciones para utilizar el modem. La información del blog de Fernando es muy clara, pero en mi caso necesito establecer la conexión desde un script sin intervención de un usuario/operador, seguí buscando información.  Otra entrada en el blog Marvin Rebooted me dio una idea. El soporte técnico del fabricante me envió un PDF, con indicaciones similares a lo publicado en los blogs antemencionados. Con un script armado, que no funcionaba bien, hice una pregunta en la lista UYLUG-Linux.

Por correo, Fernando da Rosa me sugirió ver otra pagina, cuyo autor seria también Uruguayo.  Esta menciona a USB-Modeswitch, a lo que podría dedicarle un entrada entera del blog. Uno de los primeros escollos que enfrenté era no tener instalado este paquete, que resolví conversando con Enrique Verdes. Sin él, el módem es reconocido como un disco USB o pendrive. Esta ultima pagina hace un estudio bastante exhaustivo del módem, presentando varias alternativas para utilizarlo. Después de varias pruebas, y una tarde de dedicación casi exclusiva al problema, tengo un script que establece la conexión.

 Configuración Inicial

Para trabajar con más comodidad, decidí sacarle el PIN a la SIM del MÓDEM. Hecho esto, con las instrucciones de Fernando da Rosa seleccioné la conexion de ANTEL. Hecho esto, el modem se puede utilizar con el script que publico a continuación.

El Script

#!/bin/sh
# Start Internet connection with BandLuxe C505 LTE modem

# (c) 2014 Andres Tarallo (atarallo@gmail.com)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
 
# Path might be customized to your particular installation

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

if [ "$( dmesg|grep 'Manufacturer: BandRich, Inc.' |wc -l)" = "0" ]; then
        echo "No modem availiable"
        exit 1
else
        # Modem detected, lets get it's parameters and info
        for i in $(dmesg |grep 'GSM modem (1-port) converter now attached'|tail -1); do SERIAL_PORT=${i}; done
        ETHERNET_PORT=$(dmesg |grep 'cdc_ether'|grep ': register '|awk '{print $5}'|cut -f1 -d':'|tail -1)
        echo "Modem detected"
        if [ -c "/dev/${SERIAL_PORT}" ]; then
                TTY="/dev/${SERIAL_PORT}"
        else
                echo "No terminal found, modem might be misconfigured"
                echo "make sure you have usb-modeswitch installed"
                exit 1
        fi
        if [ ! -n ${ETHERNET_PORT} ]; then
                echo "Ethernet port not present or missconfigured"
                exit 1
        fi
fi
echo "\nConfiguring Modem (${TTY}) "
echo  "at\$wancall=1" > ${TTY}
echo "\nConfiguring Network Card (${ETHERNET_PORT})"
dhclient -4 ${ETHERNET_PORT}
echo "Done !!!!!"

Pendientes (To do list)

El script publicado funciona correctamente, admite mejoras. Lo probé en mi notebook con OpenSuSE; basado en el mismo tengo en producción, en un PC con Ubuntu 12.04, una versión que agrega algunas rutas estáticas necesarias donde se utiliza el módem. 

Algunos pendientes:
  • Documentación: Un README y quizás manpage.
  • Programación defensiva: Chequear que la conexión no esté activa, verificar que la conexión luego de establecida. Esto ultimo podría  hacerse con pings a los DNS de Google  o alguna otra IP publica que admita pings. En la misma linea, seria interesante chequear la configuración de DNS. Otros chequeos útiles (necesarios) es verificar que los comandos utilizados sean ejecutables por el script.
  • Parametrización: El script tiene algunos valores cableados. Seria util tener un archivo de configuración. 
  • Empaquetarlo: Para facilitarle la vida a usuarios finales y administradores de sistemas. Seria útil contar con paquetes DEB y RPM, para las distribuciones más populares. 
  • Gestion de proyecto: Subir el script a algún repositorio  que permita hacer versionado y llevar listas de bugs. Algo tipo Sourceforge o Savannah

Esta lista de pendientes no es exhaustiva ni está cerrada. Seguramente lo primero que encare sea subir el script a un sitio que me facilite la gestión del desarrollo.