jueves, 3 de julio de 2014

OpenCobol: vivo y activo !!!!!!

A fines de Febrero nos visitó oficina un vendedor, ofreciendo actualizar el compilador de COBOL que utilizamos en uno de nuestros servidores. No programo en COBOL, estoy familiarizado con el lenguaje. Destacaba la conectividad con Bases de datos y facilidades para desarrollo WEB de la nueva versión.

La visita despertó mi curiosidad por el estado de los compiladores de COBOL libres. Recordaba haber leído sobre los mismos hace mucho, en Linux Journal. En ese momento los compiladores solo podían compilar programas sencillos, SQL embebido o conexión a bases de datos era un sueño. Recordaba un compilador llamado Tiny Cobol, con el que compile algún programa de Pruebas. Este proyecto está detenido desde principios del 2011. Buscando información rencontré el proyecto opencobol, actualmente conocido como GNU COBOL.

Y mirando el proyecto encontré:
  • Un compilador que soporta una parte sustancial del COBOL 85 y COBOL 2002. 
  • Muchas extensiones de los compiladores COBOL existentes.
  • Binding a GTK, para aplicaciones gráficas de escritorio.
  • Integración con MySQL y PostgreSQL. No es soporta SQL embebido, lo anterior requiere algo de programación en C. Hay ejemplos de integración con Oracle y DB/2.
  • Hay reportes de usuarios en ambientes de producción, desde el 2005. Como caso emblemático esta la prefectura de Nagasaki, que tiene un sistema de sueldos y jornales portado a OPENCobol.
No esperaba encontrar un producto tan fuerte y con un desarrollo tan activo. Me animo a decir que es una alternativa a considerar, para migrar código existente de ambientes cerrados.

jueves, 26 de junio de 2014

Ayudas para programar en C

Estoy escribiendo un pequeño programa en C, para sacar texto desde un archivo binario. Estaba necesitando refrescar algunos conocimientos y el particular algunas funciones de la biblioteca estandar.

Un recurso obligado a tener a mano es El lenguaje de Programacion C, también conocido como el "Kernighan y Ritchie". Un libro que intimida y asusta al novicio, pero un invaluable ayuda como referencia.
El Lenguaje de Programación C, segunda edicion.
No encuentro en mi casa el libro de marras, perdido entre tantas cosas que aun no acomodé desde la ultima mudanza. Buscando recursos en linea encontré esta referencia de la biblioteca estandard. Tiene buenos ejemplos, es una suerte de man versión hipertexto.

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, eventualemente erogaciones, para generar experiencias dignas de ser publicadas en el blog. Me cruzo con blogs como dolce uruguay, con un volumen y calidad de produccion envidiable. O La Frase del Viernes, que casi todas las semanas publica una cronica. 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 conexion 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.

miércoles, 9 de abril de 2014

Vulnerabilidad de OpenSSL (Heartbleed)

OpenSSL es una implementación de fuente abierta de los protocolos SSL y TLS. Es utilizada por la mayoría de los sistemas operativos tipo Unix , OpenVMS y Windows. La biblioteca proporciona funciones criptograficas básicas y de utileria. 

Esta biblioteca se utiliza en muchos paquetes, siendo quizas su cara más visible los servidores WEB seguros. Utilizados para intercambiar información sensible, como datos personales o tarjetas de crédito.

El pasado 9 de abril se publicó la existencia de un bug, que se ha dado a llamar HeartBleed. El numero de vulnerabilidad en MITRE es CVE-2014-0160. Hay un sitio que explica el alcance de la vulnerabilidad. Y para los que quieran revisar si sus servidores web son vulnerables, acceden a este sitio. La mayoría de las distribuciones Linux ya tienen disponibles parches, que mitigan el problema o resuelven el problema.

sábado, 22 de marzo de 2014

FLOSS en AIX

Actualmente estoy trabajando bastante en AIX. Al igual que me pasó con Solaris, siento la falta de muchas de las herramientas a las que estamos acostumbrados en Linux.

Y como el post de unos días atrás, en AIX hay varios recursos a disposición. IBM portó las herramientas para trabajar con paquetes formato RPM. Esto facilita mucho la tarea de empaquetar software para AIX.

Hay varios sitios desde donde bajar software:
  • AIX Toolboox: Mantenido por IBM, las versiones de algunos paquetes son viejas.
  • BULLFreware:   Mantenido por la empresa homónima, cubre las versiones 5 y 6 de AIX.
  • OSS4AIX: Este sitio tiene paquetes para las versiones 5, 6 y 7 de AIX. En general los paquetes son bastante nuevos. El propietario del sitio afirma que sus paquetes son totalmente compatibles con los paquetes de AIX Toolboox.
El contar con las herramientas para gestionar paquetes RPM facilita mucho portar paquetes desde distribuciones Linux. Hace unas semanas atrás instalé algunas herramientas para generar PDFs y Postcript desde OSS4AIX, no tuve mayores problemas de compatibilidad con lo ya existente.

viernes, 21 de marzo de 2014

Activar Journal en filesystems NTFS

A raiz de un problema con los respaldos, encontré que tenia que activar el change journal de un servidor Windows. Esta bitacora puede ser utilizada por sistemas de respaldo, para saber que archivos y directorios cambiaron desde el ultimo respaldo. 

Para activarla basta con ejecutar:
fsutil usn createjournal m=1000 a=100 C:

Y para saber si esta activa:
 fsutil usn queryjournal C: 

Cuando esta activa, la salida es algo como esto:

       Id. de diario de USN    : 0x01cd32a607fbd462       Primer USN              : 0x00000000e9300000       Siguiente USN           : 0x00000000eb522420       USN mínimo válido       : 0x0000000000000000       USN máximo              : 0x7fffffffffff0000       Tamaño máximo           : 0x0000000002000000       Diferencia de asignación: 0x0000000000400000

En las versiones más nuevas de windows es necesario ejecutarlo con shell de administrador. Hay una pagina con una explicación bastante escueta de las opciones del comando fsutil.

martes, 11 de marzo de 2014

FOSS en SOLARIS

Hace más de 15 años tuve mi primer contacto laboral con Solaris, entrando así al mundo de UNIX. Hacia un buen rato que trabaja en Linux, muchas herramientas eran familiares. Pero se extrañaban las Core Utils, el VIM y muchas de los paquetes que estamos acostumbrados en cualquier distribución. 

Muchos administradores de sistemas Solaris compilan lo que necesitan, ese fue el primer camino que seguí. Es una tarea nada trivial, en paquetes con muchas dependencias como PHP. Buscando paquetes pre compilados llegue a SunFreeWare. Este sitio empaquetaba mucho software libre, para distintas versiones de Solaris. Soportando desde la versión 2.5 hasta las últimas, en arquitecturas SPARC y X86. Lamentablemente, el sitio cerró las descargas a fines del pasado año. En su lugar, esta el sitio UNIXpackages. Es un servicio por suscripciones, con más software del que soportaba el sitio original. No lo he utilizado, es a tener en cuenta.

Solaris ha evolucionado mucho en todo este tiempo, proveyendo mucho software libre, sin necesidad de compilar o recurrir a terceros. Se puede ver un listado parcial aqui, para la ultima versión. Facilita mucho el trabajo, hay que reconocer que esta lejos de la oferta de las distribuciones Linux más populares.

jueves, 20 de febrero de 2014

Extensiones de Oracle para PHP

Dando soporte, donde un desarrollo en PHP debe utilizar una base de datos  Oracle, decidí documentar el proceso. MySQL y PostgreSQL  vienen como parte de la mayoría de las instalaciones de PHP. En otras bases de datos, ya me pasó con Informix, es necesario agregarlas en forma manual. No suele haber paquetes precompilados

Encontré esta guia en el sitio de SuSE, que con algunos cambios y adaptaciones aplique con éxito. Brevemente, esto es lo que hay que hacer:

  • Instalar PHP-devel: la forma mas simple de hacer esto es desde YaST, que resuelve automaticamente las dependencias. Si estamos trabajando con SLES, necesitaremos el SDK. 
  • Instalar la extensión PECL de Oracle: Se baja desde esta pagina, en el sitio de PECL. Descomprimir el archivo, cambiarse al directorio creado y correr phpize.Se creara un script configure. Fijamos la variable de ambiente ORACLE_HOME, para que apunte al directorio de instalacion de Oracle. Para concluir, ejecutamos: ./configure ‑with‑oci8=shared,$ORACLE_HOME y luego make install.
  • Agregar la extensión en php.ini: En SuSE hay dos php.ini, uno para apache y otro que aplica cuando se ejecuta desde linea de comando. Hay que agregar: extension=oci8.so.
Terminada la instalación solo resta probarlo.

lunes, 17 de febrero de 2014

Booteo Interactivo ...

Pocas veces he tenido problemas con los scripts de booteo. Los scripts que corren en el booteo están muy probados. Pero siempre hay algo que puede fallar. Y días atrás fallo, un servidor tenia problemas, algunos comandos tenían comportamiento extraño. Decidimos sacarlos fuera de linea e investigarlo. Al bootear varios scripts fallaban. Para resolver esto, decidimos utilizar el booteo interactivo. No hay un consenso de como implementar esto, cada distribución lo maneja a su antojo.
  •  RedHat/Fedora/Centos: Los arranque siempre dan la posibilidad de bootear interactivo. Al bootear el sistema, cuando aparece el mensaje "Welcome to ..." presionamos I. Previo a ejecutar cada script de arranque pide confirmacion.
  • SuSE/OpenSuSE: Es necesario modificar un archivo de configuración, para habilitar el booteo interactivo. El archivo a editar es /etc/sysconfig/boot. Alli las opciones mas relevantes son: PROMPT_FOR_CONFIRM y CONFIRM_PROMPT_TIMEOUT. Una vez cambiado este archivo, arrancar el equipo. En cada script, pedirá confirmacion, si en el plazo definido en CONFIRM_PROMPT_TIMEOUT no se confirma, asume que se quiere ejecutar el script.
  • Debian: En esta disitrbucion se recomienda arrancar el equipo en runlevel 1, y ejecutar luego uno por uno los scripts del runlevel habitual del equipo, en el orden estipulado. 
  • Ubuntu: Se puede grabar un log del arranque. Si alguien conoce como hacer un boot interactivo en Ubuntu que pase el dato.