miércoles, 31 de diciembre de 2008

Xplico, un decodificador de tráfico de Red

Gracias al rincón de Laramies me sigo enterando de cosas novedosas acerca de herramientas y noticias sobre seguridad informática; esta vez de la existencia de Xplico, un software para analizar y disecar [1] capturas de red en formato PCap (el más común, utilizado por herramientas como Wireshark o Tcpdump, por ejemplo).

Su objetivo es detectar el protocolo de aplicación (no basado en el número puerto, sino que lo hace interpretándolo realmente), y extraer la información relevante (el stream de datos), mostrarla y darle a uno la posibilidad de guardarla aparte para abrirla con un software que pueda reproducir dicho formato. Por ejemplo, puede detectar el formato SIP (utilizado comúnmente en llamadas telefónicas de VoIP) en una serie de paquetes capturados y guardarlo aparte para poder escuchar la llamada telefónica. :-)

De todas maneras, su página de estado del proyecto nos dice que le falta soporte de varios protocolos más (por ahora soporta decentemente HTTP, SMTP, IMAP, POP, FTP, IPP, PJL y SIP, entre otros) pero insisto que es un proyecto muy interesante, con muchos usos y muy útiles. Además, sería un lindo como add-on para Wireshark, IMHO.

Vean las capturas de pantalla.

Saludos
Marcelo
[1]: Es "disecar", no "disectar"; es la primera acepción de esta palabra. La segunda acepción es la conocida. :-)

lunes, 29 de diciembre de 2008

OpenSolaris 2008.11

Bueno, parece que se pusieron de acuerdo a que (ayer) me instalara en una máquina virtual el OpenSolaris 2008.11, ya que hoy me llegó en forma totalmente gratuita el Live CD que pedí desde esta página a Sun.

El software, por lo poco que pude probar, está muy, muy bueno e interesante. Y más si estamos hablando de un Sistema Operativo que ya viene con ZFS, DTrace y toda la infraestructura de Solaris, más una capa de escritorio Gnome retocada y bastante coqueta (una vez hace bastante tiempo instalé un Solaris Express con CDE... mamita que era "de piedra" [1]).
En fin, por lo que conozco, leí y me dijeron, Solaris es un UNIX completo hecho y derecho, con un desempeño excelente como servidor. Así y todo, el desarrollo de OpenSolaris tiene que ver con llevar paulatinamente esta performance de "roca sólida" de los centros de cómputos a las notebooks de los desarrolladores, administradores de red, geeks en general y usuarios de escritorio (¿por qué no?). Y si bien uno puede pensar "para qué, si ya está Linux" (o más bien Ubuntu, je), creo que el desarrollo de alternativas competitivas fue uno de los pilares del desarrollo del Software Libre como movimiento, y hasta de las especies de la naturaleza (algo que es parte de lo que se llama evolución); por lo tanto, es bueno, más si tiene tanta tecnología high-end con la cual uno en principio puede jugar y experimentar, siendo tan diferente a Linux en sus entrañas [2].

Por ahora les dejo este y este link (y el blog en general, orientado a este SO), para "otros como yo" que están metiendo el dedo gordo en las aguas de Solaris y vienen de Linux. ¡Ah! y no puede faltar este video mostrando el laburo de integración progresiva del escritorio al entorno; esto en particular Linux no lo tiene.




Actualización: Vean la página con info y capturas de las mejoras de esta versión.

Saludos
Marcelo

[1] Si leen el post de este link, verán que disiento totalmente con el autor en cuanto a que esa versión era "tan fácil de usar"... pero bueno, son opiniones.
[2] Una de las cosas que hay que tener en cuenta es que por cuestiones de
incompatibilidad de licencias de los proyectos, no se puede intercambiar código del kernel Linux (GPLv2) en OpenSolaris (CDDL) y viceversa. Sin embargo, ambos proyectos obviamente están considerados como de Código Abierto (aprobados por la OSI - Open Source Initiative). Ojalá esto cambie, por el bien general.

sábado, 27 de diciembre de 2008

Dan Kaminsky en BlackHat 2008 - Japón

Esta presentación es la única que me llamó la atención repasando el archivo del Black Hat de Octubre de este año en Japón. El ya conocido Dan Kaminsky fue el keynote del evento, explicando no sólo (nuevamente) la vulnerabilidad de DNS descubierta por él este año, sino también qué se viene en general en materia de (in)seguridad informática.


Son un montón de diapositivas (101!), unas cuantas las pasé por alto, pero son útiles; a modo de resumen, enumero los "highlights":

  • Vulnerabilidad DNS: Análisis exhaustivo del problema, demostración del ataque. Es útil porque empieza desde el principio, comenta la impresionante (awesome) reacción de las "software factories" de DNS con un lindo grafiquito, y tiene interesantes conclusiones para los desarrolladores de software en general (ver los Takeaway a lo largo de toda la presentación). También explica porqué atacar DNS: ¡es el MiTM perfecto!.
  • Lo que viene: Bienvenidos a la tercera era del hacking. Ya se explotaron vulnerabilidades en los servidores y en los navegadores. Lo que sigue es aprovecharse del resto del software, que está íntimamente ligado a la red también; a modo de ejemplo cita esta vulnerabilidad del Sidebar de Windows Vista. Incluye a los juegos en red, y a las formas "seguras" de actualizar desde el software que se usa a diario.
  • Cuidado con SSL: Destaca muchos problemas a futuro, tanto técnicos como del usuario: falta de escalabilidad y de difusión, problemas con los virtual hosts, los usuarios no prestan atención a los mensajes de advertencia, el uso de MD5 para su firma, etc. "No es la panacea que pareciera ser".
  • Autenticación - el Bug principal de 2008: elabora una lista las últimas vulnerabilidades importantes conocidas, todas tienen que ver con este punto crucial en la interacción de sistemas.
  • En resumen, la infraestructura y servicios (¡todos ellos!) de Internet y las Intranets dependen del servicio de DNS. Hay que mejorar la infraestructura; esta vez tuvimos suerte, la próxima vez puede que no sea tan "suave" el problema. DNS no debería haber sido capaz de provocar este daño: entonces, ¿Por qué lo fue?
Además, mientras tuve algo de tiempo, también estuve mirando:

The Internet is Broken: Beyond Document.Cookie - Extreme Client Side Exploitation. Presenta una serie de vulnerabilidades en varios componentes de software comunes estos días, provocado por el abuso de confianza en el nombre de dominio (está claramente relacionado con lo que decía Kaminsky, pero bien práctico); en Java, los servidores Web locales de ciertas aplicaciones, etc.

Disclosing Secret Algorithms from Hardware: Confieso que no sé mucho de electrónica, pero así y todo entiendo que esta charla estuvo interesantísima: ¡los tipos hacen ingeniería reversa de algoritmos en hardware! Muestran cómo se hace, en forma muy gráfica, y explican qué herramientas utilizan. Me asombra que digan "acá hay un NAND, así y así..." Y ya que están, agarran un chip RFID de MiFare a modo de (mal) ejemplo para determinar el algoritmo de encriptación (cerrado), como ya lo hicieron anteriormente (aunque la ley impidió la presentación en sí). Nobleza obliga, debo agregar que la compañía relativiza esta cuestión y hace pública su posición al respecto.

Bueno, espero que tengan un feliz año!

Saludos
Marcelo

Fábrica de "Startups Cooperativas": FairSoftware

En mi lista de links pendientes, figuraba visitar este sitio. Realmente olvidé cuándo lo agregué, y me lo puse a leer. Resulta que se trata de un sistema de administración, promoción y gestión administrativa de una startup de software.
La idea es que uno registre un proyecto software (Aplicación Web, Blog, Aplicación Desktop, etc.), pueda reclutar un equipo para colaborar en él, generar ingresos monetarios reales (supongamos que por el Adsense del blog, o por el cobro de la descarga de la aplicación) y luego se dividan las ganancias en el equipo. Cada colaborador tiene un "share" ("acción") virtual del proyecto, y cobra (en $ reales, je) una parte de los ingresos según las acciones que se posean, en forma equitativa.

FairSoftware se encarga de la gestión (virtual) de los ingresos y los pagos (electrónicos), de permitir la búsqueda de colaboradores para ciertas tareas, y de figurar "legales" ante el fisco estadounidense. No se mete con el copyright del desarrollo en sí ni con la gestión técnica del proyecto, y lógicamente un usuario puede colaborar en varios proyectos (lo cual pienso que puede servir de "propaganda personal" también).

Lo bueno de todo esto es que FairSoftware evita que la persona que tiene una idea (más los colaboradores de antemano, por qué no) tenga que lidiar con contratos, abogados, el ponerse de acuerdo en ciertas cuestiones con el equipo, etc., además de permitir que cualquier persona del globo contribuya. El "contrato" que existe entre los miembros de un equipo es lo que llaman el Bill Of Rights, que si bien no lo leí, entiendo que muchos equipos ya lo utilizan; propone la igualdad de derechos, el manejo abierto del proyecto, compartir ganancias, etc.

Claro que este servicio tiene un costo: el 9,9% de los ingresos, que incluye el pago electrónico vía PayPal y/o tarjetas de crédito y la declaración de impuestos frente al gobierno de EEUU.

En fin, es una idea muy interesante. De todas maneras, aún está en "beta", por lo tanto no tiene forma (visible, al menos) de buscar startups a las cuales unirse.

Saludos
Marcelo

lunes, 15 de diciembre de 2008

USB 3.0

Más allá de que el video de la señorita de Intel lo pueden encontrar en todos los sitios de noticias (me hace acordar a Chloe de 24, je), es muy interesante el hilo de comentarios de Slashdot, similar a lo que hablaba ayer con un amigo sobre USB 2.0 vs. Firewire (aka IEEE 1394). USB está diseñado para ser muy dependiente del CPU (no por nada lo hizo Intel, guiño, guiño, aunque tiene el side-effect de ser un poco más barato), y Firewire (más dependiente de hardware específico, y por ende un poco más caro) le gana en la práctica por lejos. USB tiene un ancho de banda máximo (teórico) de 480 Mbps, mientras que Firewire viene en sabores de 400 Mbps a 800 Mbps (y ya están saliendo productos de 1600 y 3200 Mbps).


Tratando de ser breve, copio un comentario de Slashdot:
"This is why you can't have USB-to-USB devices like you have Firewire-to-Firewire devices. It's why USB is very bad for time-sensitive data like music and video, because you're always waiting for the host controller to do something on the CPU, which might be busy.. have you ever seen DMA to memory ever work properly on consumer grade hardware anyway?

It's not so much a "scam" as it is designing to the market. Firewire devices have a non-triv
ial price premium because of the device-to-device controller... but that's why they can do things like daisy-chain or direct connect between computers with no special cables. On the other hand USB allows endpoint devices to be made very cheaply.. they have near-zero intelligence if you want. The USB host can be as "thick" or "thin" as the OEM wants... they can put all the host chip control in software drivers to keep chip cost down. They can also put all the control codes for devices in software... remember "wINKjets" that went obsolete with each new Windows version... they have almost no internal software at all."

Por motivos como estos, por ejemplo, hace poquito compré una sintonizadora barata de TV, de tipo PCI, y Ubuntu la tomó sin ningún problema; funciona perfecto, sin ningún "salto", y sin consumir CPU (el cuello de botella para encodear al vuelo pasó a ser mi CPU, je).

Si la hubiera comprado USB (sólo a $60 más).... hubiera tenido otro problema más además del encoding: el consumo de CPU de la misma transferencia de datos quizás me hubiera impedido hacer otras cosas mientras transfería video. Obviamente, al comprarlo PCI tengo que pagar el costo de no poder llevar la sintonizadora de un equipo a otro fácilmente, cuestión que no necesitaba tampoco.

Es por esto que algunas filmadoras DV que conozco vienen exclusivamente con interfaz Firewire, teniendo como alternativa una interfaz USB de compromiso (entiéndase "compromiso" como de "menor calidad", como está documentado). Y el tema del precio mayor no es tan así hoy... en Capital se pueden conseguir controladoras Firewire PCI a $46.

Así y todo, USB es el rey, porque Intel domina claramente el mercado, logró que en su momento todos los fabricantes de motherboards y dispositivos incluyeran dispositivos USB, y porque USB es suficientemente bueno (aka "good enough") en la mayoría de los casos (no es la primera vez que pasan estas cosas en la informática). Algo más a destacar es que al parecer USB 3.0 elimina el polling de dispositivos por parte del CPU, con lo cual el consumo de procesador bajaría considerablemente (pero hay que verlo en acción, Firewire en cambio es una realidad ya probada, donde sus versiones más veloces apenas requieren cambios estructurales).

En fin, como siempre a Slashdot lo elevan muchísimo los comentarios de muy alto nivel. Veremos cómo funciona USB 3.0 (especificación disponible aquí).

Saludos
Marcelo
PD: Qué lindo que las demostraciones las hagan con Linux (Ubuntu); para que se den una idea de la importancia de Linux hoy, USB 1.0 tardó mucho tiempo en soportarse en Linux (1999). Hoy el mismo desarrollo de USB 3.0 se hace sobre Linux...

martes, 18 de noviembre de 2008

Charlas de Software Libre en la Universidad Nacional de Luján

Bueno, este sábado 22 de Noviembre los muchachos del UNLuX (del cual soy orgullosamente integrante) hacen su 2do evento anual sobre tecnología y software libre... a mí se me hace imposible ir por motivos personales (¡realmente un bajón!), pero espero que vayan, ¡va a estar más que interesante y va a haber muy buena onda!

Resumo de su nota principal:
"El Grupo de Usuarios de Software Libre de la Universidad Nacional de Luján (UNLUX) invita a toda la comunidad educativa, profesionales e interesados en Tecnologías de la Información al "Ciclo de charlas UNLUX 2008".

Día: Sábado 22 de noviembre de 2008
Lugar: Sede Central de la Universidad Nacional de Luján
Organiza: UNLUX - Grupo de usuarios de software libre de la Universidad Nacional de Luján.

Este es un evento libre, gratuito y abierto a la comunidad.
Traer Mate (Condicion de acceso a la actividad)
Esperamos contar con la participación de todos!!"

Por otra parte, si bien hay charlas técnicas para los que estudian (o estudiamos) sistemas, creo que esta vez se intentará captar la atención de aquellos interesados en otras áreas de la ciencia en donde el software libre hoy brinda excelentes soluciones, como la ofimática, gráfica, biología, matemática, etc. Con lo cual, si no sos informático, no importa, ¡Este evento es para vos también!

El cronograma de charlas ya está listo y lo pueden ver acá.

Mientras, voy a seguir como siempre, todos los días, en el canal de IRC #unlux de Freenode. :-)

Saludos!
Marcelo

lunes, 10 de noviembre de 2008

(Mi) Migración a Ubuntu 8.10

(Este es un Post que debería haberse publicado el 31/10/2008 y que por diferentes motivos no pude terminar...)

Bueno, hoy llegó el día... luego de leer este y este documento, ayer bajé tranquilo por BitTorrent las imágenes de Ubuntu 8.10 para la arquitectura x86-64 versión desktop y alternate, con la intención de probar la primera como Live-CD primero y luego, si todo iba bien, actualizar mi Ubuntu 8.04 a 8.10 aprovechando la segunda ISO, tal como está documentado en la página de "Cómo Actualizar a Ubuntu 8.10".

Migración:
La prueba con el Live-CD fue rápida e indolora; simplemente comprobé que funcionara normalmente el hardware: video, wi-fi, red, webcam, etc. y no hubo novedades, todo funcionaba! (al igual que con Hardy). Luego, arranqué del disco como siempre y montando la ISO de alternate, comencé el proceso de actualización, desde una terminal:

sudo mount -o loop ~/Escritorio/ubuntu-8.10-alternate-.iso /media/cdrom0
sudo /cdrom/cdromupgrade &
Arrancó el software de actualización, me preguntó si quería utilizar la conexión a internet para bajar paquetes extra que no estén en el CD y/o paquetes más nuevos, a lo cual acepté y me puse a trabajar mientras esto pasaba en segundo plano.

Luego de un par de horas de bajar a unos ~30 KB promedio[1] unos ~300 paquetes (de ~1500 paquetes a actualizar), comenzó el proceso de instalación real de la nueva versión. Ahí paré de para ir a comer (por hambre y por precaución), ya que a medida que iba transcurriendo el proceso, programa nuevo que abría, programa que aparecía nuevo y "feo", seguramente porque arrancaba con la mitad de las cosas instaladas y/o configuradas.


Cuando vuelvo de comer, me encuentro con un cuadro de diálogo de reemplazo de archivos de configuración (¡Estaría bueno que primero instale el paquete y por último me pregunte todo junto!).
En fin, el actualizador me preguntó si quería reemplazar 3 archivos de configuración del sistema que yo había modificado anteriormente: cups.conf (configuración del servidor de impresión), otroquenomeacuerdo y el archivo de configuración del Apache. Sobreescribí los dos primeros (ya que con apache trabajo[2], no quería que la actualización me lo desconfigurara), y reinicié.

Al reiniciar, todo anduvo bárbaro. ¡Presto!

Problemas (?):
El único "problema" que supongo que tengo es que la performance de mi placa de video Intel cayó mucho, más que nada al renderizar los efectos de Compiz; me alegra saber que no soy el único y que este bug ya estaba creado. Por las dudas, y porque mi Wi-Fi Intel 4965 aparece con algunos problemas conocidos en las Release Notes (aunque yo no tuve ninguno), instalé el paquete linux-backports-modules-intrepid y anda mejor (aunque no tan fluído como con Hardy). Espero que con el correr de los días estos problemas se vayan resolviendo a través de actualizaciones.

Conclusión:
Salvo el detalle anterior, el SO sigue siendo tan sólido como con Hardy, no tuve ningún problema real, digamos... aunque para ser sinceros, salvo la actualización del núcleo, Gnome y el Network Manager (entre otras cositas como PulseAudio nuevo), no hay muchas cosas nuevas. No hay Python 2.6 ni Openoffice 3.0 por ejemplo, así que todo es casi tan estable como lo fue con Hardy.

Bueno, es todo, espero que tengan una dulce migración. :-)

Saludos
Marcelo

[1] Y está bien para mí, hay que considerar que todo el mundo está comiéndose el ancho de banda de los repositorios... además, tanto el sitio como los repositorios no colapsaron (a diferencia de Hardy, por ejemplo), lo cual es bueno.

[2] De todas maneras, el programa de actualización te deja el archivo de configuración viejo o nuevo (depende si lo sobreescribo o no) en la ubicación destino pero renombrado en su extensión a "dpkg-old" o ".dpkg-dist", respectivamente . Es decir, pueden plantearse dos casos: si sobreescribo el archivo /etc/cups.conf con uno actualizado, el original queda como /etc/cups.conf.dpkg-old. Caso contrario, si le digo que no me sobreescriba mi /etc/apache2/apache2.conf, me queda un /etc/apache2/apache2.conf.dpkg-dist por si quiero ver más tarde qué diferencias había con el mío.

viernes, 24 de octubre de 2008

Nvidia CUDA

Estoy leyendo un artículo de la última Linux Journal, referido a la tecnología CUDA, que sacó hace un tiempito nomás NVidia. Básicamente se trata de una plataforma de software (compilador + libs + soporte en hardware) para que cualquier programador pueda acceder al enorme poder de cálculo que tienen las tarjetas gráficas actuales, que es mucho mayor que las CPUs que se utilizan todos los días; se comenta que la mejora de performance es de ¡uno a dos órdenes de magnitud como regla general!

Ya hace un tiempo vengo leyendo que están utilizando CUDA para romper WPA/WPA2, comprimir videos, procesamiento paralelo, y hasta acelerar las operaciones de cálculo de un RAID[1]. ¡Me parece bárbaro!, al fin una nueva "cosa" con la cual jugar, usar y aprender.

En primera instancia creo que la vuelta de la tecnología del viejo y querido "coprocesador matemático" viene muy bien, más cuando la arquitectura x86/x86_64 no deja muchas opciones más al momento de escalar; me parece que es un gran mérito de Nvidia poner esta idea primero (masivamente) en el mercado, y como se ve lo viene explotando a pleno (prensa, fama y fortuna, je).

Si no vieron de qué se trata, péguense una vuelta por el sitio/showroom virtual de CUDA, que está buenísimo. En cuanto a lo técnico, resumo:

  • No es software libre, pero sí es gratuito (free as in beer, not as in speech).
  • Ya está disponible para Linux (sólo x86/x86_64) y Windows. Mac está en camino (ahora en forma de beta descargable).
  • Si bien es ideal para usarlo desde C y C++, ya hay bindings para usarlo desde Matlab y ¡Python! :-D
  • Si bien es recomendable usar una tarjeta gráfica soportada (Nvidia 8000 o mayor), puede utilizarse en forma emulada.
  • Compatibiliad binaria: una vez que genero un programa CUDA, funciona en cualquier tarjeta soportada por la plataforma.
  • Ojo, no es "transparente" al programador, ni "mágico". Hay que leer la documentación, entender cómo funciona la arquitectura y escribir desde cero.
Y qué hace la competencia? Los próximos pasos de AMD/ATI parecen ser el desarrollo de Fusion, que es un approach mucho más general, al igual de Intel, que está por sacar Nehalem.

Ambos parecen tener la idea de empezar a fabricar CPUs con varios cores especializados, al estilo del pionero Cell, pero manteniendo la milenaria y vetusta arquitectura x86. Lo bueno es que esta solución, aunque más compleja, me atrevo a decir que será más efectiva ya que no tendrá el cuello de botella del puerto PCI-Express; aunque parece que falta mucho para ver algo concreto, y es atendible que CUDA tenga como objetivo "sólo multiprocesamiento masivo". El tiempo dirá cómo evoluciona la cosa.

Y bueno... hago público mi bajón de no tener una Nvidia serie 8000 y hacer pruebas. :-(

Saludos
Marcelo

[1] Puede ser aplicado, por ejemplo, al módulo md de Linux, el que permite que hagamos RAID por software.

jueves, 23 de octubre de 2008

Tip para vagos (como yo) al usar SSH

Tip estilo "cortita y al pie".

Para el que tiene varios equipos remotos a los que entra usualmente por SSH pero bajo diferentes usuarios al del host propio, termina siendo un garrón tener que escribir diferentes usuarios, y un montón de veces, "ssh usuariopepe@mihost".

Pero con sólo crear un archivo .ssh/config parecido a este:

marcelo@marcelo-laptop:~$ cat .ssh/config
Host *.dominio.com.ar *.dominio server1 server2 server3
User mfernandez

Host desarrollo.dominio.com.ar desarrollo.dominio desarrollo
User usuario1

Host vm1 vm2
User prueba
A partir de ahora sólo hay que escribir "ssh vm1" para entrar!!!

Más info en "man ssh_config". :-)

Saludos
Marcelo

martes, 21 de octubre de 2008

Cómo Conectarse a Oracle desde Python en Ubuntu

Luego de luchar (y bastante) para acceder a una BD Oracle desde Python, me propuse escribir los pasos a realizar así quedan para la posteridad. Tengo entendido que el único driver que funciona bien para conectarse es el cx_Oracle, así que voy a tratar de explicar cómo se instala todo desde el comienzo, usando Ubuntu Hardy 8.04.

1. Instalación del Oracle InstantClient
Primero, hay que descargar el Oracle InstantClient para la plataforma Linux que se utilice (x86, x86_64, Power, Itanium, etc.) desde acá (es necesario registrarse, pero es gratuito). Los paquetes necesarios son "Instant Client Package - Basic Lite" y "Instant Client Package - SDK". cx_Oracle debería funcionar con cualquiera de las versiones 9.x y 10.x, así que vamos a bajar la última versión de la serie 10.x (que en este momento es la 10.2.0.4).

Primero hay que descomprimir los 2 archivos .zip; por ejemplo:

marcelo@ubuntu-server:~$ unzip basiclite-10.2.0.4.0-linux-x86_64.zip
Archive: basiclite-10.2.0.4.0-linux-x86_64.zip
inflating: instantclient_10_2/BASIC_LITE_README
[...]
inflating: instantclient_10_2/libocijdbc10.so
inflating: instantclient_10_2/ojdbc14.jar
marcelo@ubuntu-server:~$ unzip sdk-10.2.0.4.0-linux-x86_64.zip
Archive: sdk-10.2.0.4.0-linux-x86_64.zip
creating: instantclient_10_2/sdk/
creating: instantclient_10_2/sdk/include/
inflating: instantclient_10_2/sdk/include/occi.h
inflating: instantclient_10_2/sdk/include/occiCommon.h
[...]
inflating: instantclient_10_2/sdk/SDK_README
extracting: instantclient_10_2/sdk/ottclasses.zip
inflating: instantclient_10_2/sdk/ott
marcelo@ubuntu-server:~$
Al descomprimir ambos archivos en el mismo directorio se generó el nuevo directorio "instantclient_10_2" con todo el contenido:
marcelo@ubuntu-server:~$ cd instantclient_10_2/
marcelo@ubuntu-server:~/instantclient_10_2$ ls -l
total 33504
-rw-rw-r-- 1 marcelo marcelo 238 2008-03-12 04:37 BASIC_LITE_README
-r--r--r-- 1 marcelo marcelo 1609607 2008-03-12 04:37 classes12.jar
-rwxrwxr-x 1 marcelo marcelo 67542 2008-03-12 04:37 genezi
-rwxrwxr-x 1 marcelo marcelo 21038613 2008-03-12 04:37 libclntsh.so.10.1
-r-xr-xr-x 1 marcelo marcelo 3796601 2008-03-12 04:37 libnnz10.so
-rwxrwxr-x 1 marcelo marcelo 1664116 2008-03-12 04:37 libocci.so.10.1
-rwxrwxr-x 1 marcelo marcelo 4351321 2008-03-12 04:37 libociicus.so
-r-xr-xr-x 1 marcelo marcelo 138033 2008-03-12 04:37 libocijdbc10.so
-r--r--r-- 1 marcelo marcelo 1555682 2008-03-12 04:37 ojdbc14.jar
drwxrwxr-x 4 marcelo marcelo 4096 2008-03-12 04:37 sdk
marcelo@ubuntu-server:~/instantclient_10_2$
Creamos el directorio /opt/oracle, y después lo movemos al nuevo directorio renombrado como /opt/oracle/instantclient.
marcelo@ubuntu-server:~$ sudo mkdir -p /opt/oracle/
marcelo@ubuntu-server:~$ sudo mv instantclient_10_2 /opt/oracle/instantclient
Ahora debemos decirle al linker de bibliotecas dinámicas del sistema (ld) la ubicación de un nuevo path donde podrá encontrar más bibliotecas software para el programa que lo requiera; en este caso ese "programa" será el módulo de python para acceder a Oracle, cx_Oracle. Es decir, que además de las bibliotecas disponibles en, por ejemplo, /usr/lib y /usr/local/lib, también pondremos a disposición de los programas del usuario las bibliotecas del directorio /opt/oracle/instantclient. Esto se hace con el programa ldconfig:
marcelo@ubuntu-server:~$ sudo -i
[sudo] password for marcelo:
root@ubuntu-server:~# echo "/opt/oracle/instantclient" > /etc/ld.so.conf.d/oracle.conf
root@ubuntu-server:~# ldconfig
root@ubuntu-server:~# ldconfig --print | grep /opt/oracle
libocijdbc10.so (libc6,x86-64) => /opt/oracle/instantclient/libocijdbc10.so
libociicus.so (libc6,x86-64) => /opt/oracle/instantclient/libociicus.so
libocci.so.10.1 (libc6,x86-64) => /opt/oracle/instantclient/libocci.so.10.1
libnnz10.so (libc6,x86-64) => /opt/oracle/instantclient/libnnz10.so
libclntsh.so.10.1 (libc6,x86-64) => /opt/oracle/instantclient/libclntsh.so.10.1
root@ubuntu-server:~# cd /opt/oracle/instantclient
root@ubuntu-server:/opt/oracle/instantclient# ln -s libclntsh.so.10.1 libclntsh.so
root@ubuntu-server:/opt/oracle/instantclient# ln -s libocci.so.10.1 libocci.so
La idea es crear un archivo con extensión .conf en el directorio /etc/ld.so.conf.d/ [1], con un nombre relacionado con nuestro propósito, que sólo indica un nuevo directorio de bibliotecas de ubicación "no estándar".

Luego hay que refrescar la información de bibliotecas, con el comando "ldconfig". Después, "ldconfig --print" muestra todas las bibliotecas disponibles en el sistema para enlazar dinámicamente, pero como ahora sólo son de nuestro interés las del directorio /opt/oracle, se filtra la salida con un grep acorde.

También hacemos dos enlaces simbólicos a las bibliotecas principales del Instantclient, cuyo número de versión es "genérico", a diferencia de los archivos originales, cuya versión es 10.1. Al momento de compilar el cx_Oracle, éste buscará la versión genérica de estas librerías, no una versión específica (por ende, serán los archivos libclntsh.so y libocci.so). Todo esto debe hacerse como root, por eso el "sudo -i" inicial.

2. Instalación del cx_Oracle
(instrucciones extraídas en parte y basadas del Readme.txt del proyecto)

Una vez que se tiene el Instantclient instalado y configurado, vamos a proceder a instalar el módulo cx_Oracle. Lo "complicado" de la instalación del módulo (a diferencia de la gran mayoría que son 100% python) es que requiere correr un proceso de compilación contra las bibliotecas Instantclient que acabamos de instalar. Lo bueno es que a esta altura ya hicimos casi todo el trabajo. :-)

Primero instalamos algunas dependencias:
marcelo@ubuntu-server:~$ sudo apt-get install python-dev python-setuptools build-essential
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
binutils dpkg-dev g++ g++-4.2 gcc gcc-4.2 libc6-dev libgomp1 libstdc++6-4.2-dev libtimedate-perl linux-libc-dev make patch python-pkg-resources python2.5-dev
Paquetes sugeridos:
binutils-doc debian-keyring g++-multilib g++-4.2-multilib gcc-4.2-doc libstdc++6-4.2-dbg autoconf automake1.9 bison flex gcc-doc gcc-multilib gdb libtool manpages-dev
gcc-4.2-locales gcc-4.2-multilib libgcc1-dbg libgomp1-dbg libmudflap0-4.2-dbg libmudflap0-4.2-dev glibc-doc libstdc++6-4.2-doc make-doc diff-doc
Se instalarán los siguientes paquetes NUEVOS:
binutils build-essential dpkg-dev g++ g++-4.2 gcc gcc-4.2 libc6-dev libgomp1 libstdc++6-4.2-dev libtimedate-perl linux-libc-dev make patch python-dev python-pkg-resources
python-setuptools python2.5-dev
0 actualizados, 18 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 12,8MB de archivos.
After this operation, 52,9MB of additional disk space will be used.
¿Desea continuar [S/n]?
[...]
Cuando se compilan módulos de python que acceden a librerías nativas (generalmente en C), debe instalarse el paquete "python-dev", que contiene los headers de las estructuras, funciones y demás símbolos del lenguaje. Las setuptools creo que no hacen falta, pero siempre es útil tenerlo para instalar más módulos después. El metapaquete "build-essential" nos provee todo lo básico necesario para compilar programas en C/C++.

Luego descargamos y descomprimimos el código fuente del módulo, en formato .tar.gz (hay RPMs y paquetes para Windows, pero no DEBs). La última versión es la 4.3.1. La descompresión puede ser en un directorio cualquiera, como por ejemplo, el home de un usuario (no es necesario root):
marcelo@ubuntu-server:~$ tar xvzf cx_Oracle-4.3.1.tar.gz
cx_Oracle-4.3.1/
cx_Oracle-4.3.1/test/
cx_Oracle-4.3.1/test/test_dbapi20.py
cx_Oracle-4.3.1/test/LongVar.py
cx_Oracle-4.3.1/test/LobVar.py
cx_Oracle-4.3.1/test/DateTimeVar.py
cx_Oracle-4.3.1/test/test.py
cx_Oracle-4.3.1/test/NumberVar.py
[...]
marcelo@ubuntu-server:~$ cd cx_Oracle-4.3.1/
marcelo@ubuntu-server:~/cx_Oracle-4.3.1$
Luego, para poder compilar/construir primero e instalar después el módulo, hay que establecer la variable de entorno ORACLE_HOME:
marcelo@ubuntu-server:~/cx_Oracle-4.3.1$ export ORACLE_HOME=/opt/oracle/instantclient/
Ahora, a construir el módulo. Puede verse que no hace falta ser root:
marcelo@ubuntu-server:~/cx_Oracle-4.3.1$ python setup.py build
running build
running build_ext
building 'cx_Oracle' extension
gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions build/temp.linux-x86_64-2.5/cx_Oracle.o -L/opt/oracle/instantclient/lib -L/opt/oracle/instantclient/ -lclntsh -o build/lib.linux-x86_64-2.5/cx_Oracle.so
marcelo@ubuntu-server:~/cx_Oracle-4.3.1$
Listo, ya podemos instalar y probar el nuevo módulo:
marcelo@ubuntu-server:~/cx_Oracle-4.3.1$ sudo python setup.py install
running install
running build
running build_ext
running install_lib
copying build/lib.linux-x86_64-2.5/cx_Oracle.so -> /usr/lib/python2.5/site-packages
running install_egg_info
Writing /usr/lib/python2.5/site-packages/cx_Oracle-4.3.1.egg-info
marcelo@ubuntu-server:~/cx_Oracle-4.3.1$ ipython
Python 2.5.2 (r252:60911, Jul 31 2008, 17:31:22)
Type "copyright", "credits" or "license" for more information.

IPython 0.8.1 -- An enhanced Interactive Python.
? -> Introduction to IPython's features.
%magic -> Information about IPython's 'magic' % functions.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.

In [1]: import cx_Oracle

In [2]: conn_str='scott/tiger@192.168.1.90:1521/DESARROLLO'

In [3]: db_conn = cx_Oracle.connect(conn_str)

In [4]: cursor = db_conn.cursor()

In [5]: cursor.execute('SELECT username, user_id, created FROM dba_users')
Out[5]:
[<cx_Oracle.STRING with value None>,
<cx_Oracle.NUMBER with value None>,
<cx_Oracle.DATETIME with value None>]

In [6]: registros = cursor.fetchall()

In [7]: for r in registros:
...: print str(r)
...:
...:
('MGMT_VIEW', 46, datetime.datetime(2008, 10, 15, 13, 4, 47))
('SYS', 0, datetime.datetime(2008, 10, 15, 12, 43, 8))
('SYSTEM', 5, datetime.datetime(2008, 10, 15, 12, 43, 8))
('DBSNMP', 24, datetime.datetime(2008, 10, 15, 12, 51, 3))
('SYSMAN', 44, datetime.datetime(2008, 10, 15, 13, 3, 24))
('SCOTT', 49, datetime.datetime(2008, 10, 21, 17, 30, 43))
('PYTK08', 47, datetime.datetime(2008, 10, 15, 13, 54, 37))
('OUTLN', 11, datetime.datetime(2008, 10, 15, 12, 43, 13))
('MDSYS', 43, datetime.datetime(2008, 10, 15, 12, 57, 21))
('ORDSYS', 40, datetime.datetime(2008, 10, 15, 12, 57, 21))
('ANONYMOUS', 36, datetime.datetime(2008, 10, 15, 12, 55, 58))
('EXFSYS', 34, datetime.datetime(2008, 10, 15, 12, 55, 41))
('WMSYS', 25, datetime.datetime(2008, 10, 15, 12, 51, 55))
('XDB', 35, datetime.datetime(2008, 10, 15, 12, 55, 58))
('ORDPLUGINS', 41, datetime.datetime(2008, 10, 15, 12, 57, 21))
('SI_INFORMTN_SCHEMA', 42, datetime.datetime(2008, 10, 15, 12, 57, 21))
('DIP', 19, datetime.datetime(2008, 10, 15, 12, 46))
('TSMSYS', 21, datetime.datetime(2008, 10, 15, 12, 49, 19))

In [8]:
Listo! Ya tenemos acceso a Oracle desde mi lenguaje de programación preferido, Python.

Espero que les sirva.

Saludos!
Marcelo

[1] Esto es así en Ubuntu Hardy 8.04. En versiones más antiguas de Ubuntu, como Dapper 6.06, este directorio no existe y en su lugar se debe agregar una línea con el mismo contenido pero en el archivo /etc/ld.so.conf (creándolo en caso de no existir).

domingo, 12 de octubre de 2008

Habemus Nuevo Kernel: 2.6.27

Bueno, si bien hace unos días que salió una nueva revisión del kernel de Linux, 2.6.27, yo tenía pendiente leer los cambios (versión "light", o sea, entendible por alguien más o menos técnico) al estilo que me tiene acostumbrado KernelNewbies.

Y aunque en el Blog de Diego Calleja ya hay un buen resumen de lo más "grueso" (aka "The Cool Stuff") de esta versión (en castellano), yo quería comentar algunas cosas que están en la "letra chica" del changelog. De nuevo, para lo más importante, los invito a pasar por el Blog de Diego.

  • Nueva forma de hibernar: Es un método alternativo, no reemplaza a los anteriores, a menos que se lo indique explícitamente. Además, está sólo disponible para la arquitectura x86, y en principio utiliza mucho del código de hibernación actual, con lo cual los problemas existentes con los distintos drivers de dispositivos van a persistir; sin embargo mucho de éste código problemático no es necesario con este nuevo método, con lo cual en el futuro la hibernación será óptima y sin los problemas de hoy. Es decir, es un primer paso que sienta las bases para futuros desarrollos y mejoras, que van a ir tomando forma en posteriores versiones.
  • ACPI PCI Slot detection driver: Cuántas veces olvidamos cuántos slots PCI tengo disponibles/ocupados en mi motherboard? Muchas. Y cuántas veces de ésas tengo ganas de abrir la CPU para fijarme? (o ir siquiera si estoy remoto)? Ninguna. Todos estos problemas se esfuman con esta mejora, porque ahora podemos consultarle a Linux la geografía física del subsistema PCI, consultando el (nuevo) directorio /sys/bus/pci/slots.
  • Mejoras en Xen: Cuando el kernel corre en modo "paravirtualizado" como guest de un kernel Xen en modo "hypervisor", la arquitectura del kernel guest es "Xen" (no por ejemplo "x86" o "x86_64"). Bueno, hay algunos cambios para esta arquitectura, de relativa importancia: Se permiten hosts de 64 bits, save/restore de la VM, y algunas cosas más.
  • Drivers Wi-Fi intel mejorados: Los drivers en general de estas placas wifi fueron ampliamente mejorados: los módulos iwl4965 y iwl3945 ahora soportan modo monitor (mi placa es iwl4965!), consultarles el nivel de energía, modo Ad-hoc y algunas cositas más.
Bueno, éste pequeño listado es lo "extra" que rescaté de la nueva versión del kernel, que será incluído en Ubuntu Intrepid Ibex 8.10. Por ejemplo, ahora sé que con este nuevo kernel en mi máquina voy a poder correr kismet y escuchar por redes ajenas... :-D

Saludos!
Marcelo

sábado, 11 de octubre de 2008

Análisis de Performance de un Script Python

Hola!

De toda la pila de mails que recibo, leo y analizo (cuando puedo) de PyAr, me interesó mucho uno de este hilo, referido al lenguaje DOT y su utilización práctica en el desarrollo en general. Básicamente, se comentó lo útil que es graficar la salida de la ejecución de un profiler, con este generador de lenguaje DOT basado en el log de cualquiera de los 3 módulos de profiling de Python [1][2]: Gprof2Dot.

Brevemente, lo probé con un script que tengo para armar un archivo de texto con cierto formato, resultado de un query a una base de datos. Ejecuté esto, tal como dice el sitio de la herramienta:

$ python -m cProfile -o output.pstats ./mkmenu.py
$ gprof2dot.py -f pstats output.pstats | dot -Tpng -o output.png
Y obtuve este precioso gráfico:
El cual demuestra que una vieja regla sigue teniendo vigencia: "no importa lo que hagas en tu programa, el cuello de botella va a estar en la base de datos". :-)

Más allá de eso, me encantó esta manera gráfica y elegante de buscar "hot spots" donde uno puede ir y optimizar el código.

Saludos
Marcelo

[1]: Python tiene 3 módulos para hacer profiling, 2 relacionados (profile y cProfile) y uno aparte (hotshot). Según el caso, uno es más adecuado que otro. Hotshot ya está en desuso y en próximas versiones se lo podría quitar de la librería estándar.
[2] Gprof2Dot también sirve para graficar el log de un log oprofile (es un profiler genérico para Linux).

viernes, 10 de octubre de 2008

Wikipedia migra a Ubuntu Server

Según este artículo, la Fundación Wikimedia, entidad que mantiene online a la Wikipedia, decidió migrar sus servidores de una combinación de Red Hat Linux y Fedora a Ubuntu Server (8.04 LTS, para ser más precisos).

Quiero destacar algunos puntos de la noticia:

  • 400 servidores soportan un tráfico de 684.000.000 visitantes al año (1.873.972 promedio por día, 1301 visitantes por minuto). Viendo su página de estadísticas, esta semana, estuvo teniendo picos de 55.000 hits por segundo. Y ojo, que esto es sólo Wikipedia, los servidores migrados sirven a todos los sites de la Fundación.
  • Sólo 5 personas alrededor del mundo administran semejante infraestructura.
  • La migración empezó en 2006 (reemplazando Proxys Reversos perimetrales) y ahora van por los Application Servers.
  • Buscaban estandarizar, simplificar, unificar toda la infraestructura. Está claro para un sysadmin no es lo mismo escribir scripts, instalar paquetes, configurar servicios en un Red Hat 4 que un Red Hat 5, que un Fedora 8... etc.
  • El caos se generó cuando en sólo 18 meses aumentaron la cantidad de servidores de 15 a 200 (!). Es que, cuando montaron los primeros servidores, RedHat tenía una distribución libre y gratuita, y sólo se pagaba el soporte (si se lo necesitaba). Pero la empresa del sombrero rojo cambió de opinión (creo que por 2003), comenzando a cobrar por la adquisición del producto en cualquier forma diferente del código fuente, y creando una distribución "comunitaria" (aunque financiada por ellos) llamada Fedora. Es por esto que Wikimedia terminó con un mix de Red Hats y Fedoras. Ahora van hacia Ubuntu en busca de ahorro de costos (instalar Ubuntu Server no cuesta dinero, sólo hay que pagar si se quiere soporte de Canonical) y menos trabajo (que también se traduce en un ahorro de costos indirectamente).
Como conclusión, más allá de que sea una buena noticia para los ubunteros como yo (y por esta vez), creo que es una buena noticia para todos aquellos que se deciden por instalar software libre. El valor agregado del software libre no está en ahorrar costos al momento de adquirir el software, ya que esto puede o no ser posible, según las circunstancias y las necesidades. El valor agregado que sólo el software libre puede brindar es la libertad que uno tiene de cambiar de proveedor, ya que el software es tanto propiedad del que lo utiliza como de todos.

Sí, hoy me levanté "predicador"... y qué? :-)

Saludos
Marcelo

martes, 7 de octubre de 2008

Cómo corregir el Adelanto de Hora en Ubuntu

Hola!

Visto y considerando el bug que surgió este fin de semana con la información de husos horarios y DSTs de la vasta mayoría de sistemas Linuxes, Mac OSXs, celulares, mp3, etc., a partir de las 00:00 hs. de este último 5 de Octubre (y que erróneamente produjo el adelanto de 1 hora), acá voy a postear cómo arreglarlo en forma (relativamente) sencilla, a la espera de las actualizaciones de rigor que hacen los SOs.

En una terminal, tipear:

export TZ=America/Argentina/Buenos_Aires
cd /tmp
mkdir tzdata2008g
wget ftp://elsie.nci.nih.gov/pub/tzdata2008g.tar.gz
cd tzdata2008g
tar xvzf ../tzdata2008g.tar.gz
date ; date -u
# aca deberia dar la hora mal
sudo zic southamerica
sudo cp /usr/share/zoneinfo/America/Argentina/Buenos_Aires /etc/localtime
date ; date -u
# aca deberia dar la hora bien

Lo bueno es que este método es bastante agnóstico; funciona en todos los Ubuntus y Linuxes que andan por ahí; el único detalle es el no uso del comando 'sudo' en otras distros que hacen uso más efectivo del usuario root, con lo cual habría que hacer un 'su' en su lugar.

Este es un post con fecha de vencimiento, pero me decidí por hacerlo igual ya que en Hardy el paquete nuevo va a entrar dentro de 7 días aprox. (ya que hay toda una política de testing).

Actualización: Una cosa más e importante: la versión "g" del paquete tzdata2008 sólo posterga el cambio de hora al 19 de octubre de 2008, con lo cual sólo "pateamos para adelante" el problema. La solución definitiva debería venir de una nueva versión "h" (?) que no incluya ningún cambio de hora (al menos por ahora y mientras el gobierno lo decida).

Para saber qué cambios están planificados para nuestra instalación, podemos ejecutar:
zdump -v /etc/localtime | egrep "2008|2009"

Para crear una versión personalizada de los cambios de hora (sería una solución "definitiva"), ver este post:
http://linux.org.ar/pipermail/sgo-gral/2007-December/001719.html

De todos modos (y al menos en Ubuntu), el paquete tzdata con las actualizaciones propuestas, que corrigen el problema, debería llegar antes del 19 (alrededor del lunes 13).

Actualización 2: Ya están las actualizaciones mencionadas en el repositorio hardy-updates.

Actualización 3: No se "patea para adelante" el problema. El gobierno parece que va a adelantar la hora el 19 de Octubre nomás....

Saludos
Marcelo
PD: Gracias TecnicosLinux!

jueves, 17 de julio de 2008

Pack de Templates para OpenOffice.org

Para el que no sabe, la suite de aplicaciones de oficina OpenOffice.org soporta extensiones al igual que Firefox. Hace algún tiempo que me di una vuelta por el sitio oficial de extensiones y no encontré nada útil para mí (tengo pendiente revisarlo).

Sin embargo, hoy encontré (de rebote) este Paquete de Templates o Plantillas (textos, planillas y presentaciones) en español e independiente del Sistema Operativo que se use, cortesía de Sun.

Para instalarlo, abren el OpenOffice y van a Herramientas -> Administrador de Extensiones -> Agregar. Aparece el cuadro para elegir el archivo, seleccionan el archivo que está en esta dirección (Hacer click en "Get it") y que acaban de descargar, click en Aceptar, y listo, extensión instalada.

Para usarlas, ir a Archivo ->Nuevo -> Plantillas y Documentos. :-)

Espero que les sirva, a mí me salva porque por defecto no hay plantillas, y más de una vez me pasó que quería armar una presentación rápida y empecé de cero.

Saludos
Marcelo

martes, 15 de julio de 2008

VPNs en Ubuntu

Buenas... esta es una guía de instalación y configuración de un vínculo punto a punto autenticado y encriptado por medio de una red insegura (como puede ser Internet), denominado más comúnmente VPN. Para su implementación se utilizará OpenVPN sobre el Sistema Operativo Ubuntu 8.04, aunque seguramente estos mismos pasos servirán para Debian u otros derivados de ella (tal como lo es Ubuntu).

Instalación
La instalación, como sucede con la mayoría del software ya disponible en los repositorios de Ubuntu, es sencilla: una vez en la consola, tipear:

mfernandez@saturno:~$ sudo apt-get install openvpn
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
openvpn-blacklist
Suggested packages:
resolvconf
The following NEW packages will be installed:
openvpn openvpn-blacklist
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B/1439kB of archives.
After this operation, 3228kB of additional disk space will be used.
Do you want to continue [Y/n]?
Preconfiguring packages ...
Selecting previously deselected package openvpn-blacklist.
(Reading database ... 25764 files and directories currently installed.)
Unpacking openvpn-blacklist (from .../openvpn-blacklist_0.1-0ubuntu0.8.04.1_all.deb) ...
Selecting previously deselected package openvpn.
Unpacking openvpn (from .../openvpn_2.1~rc7-1ubuntu3.3_i386.deb) ...
Setting up openvpn-blacklist (0.1-0ubuntu0.8.04.1) ...
Setting up openvpn (2.1~rc7-1ubuntu3.3) ...
* Restarting virtual private network daemon. [ OK ]

mfernandez@saturno:~$
A partir de este momento, OpenVPN está instalado en esta máquina, y luego habrá que instalarlo de la misma manera en el otro nodo que funcionará como extremo opuesto. De ahora en más, vamos a llamarle nodo "A" al que funcionará como "Servidor" de VPN y nodo "B" al que será el "Cliente".

Configuración Genérica de OpenVPN
El paquete OpenVPN en Ubuntu está bien integrado a la estructura de directorios estándar de este SO:
  • En el directorio /etc/openvpn/ se guardan los archivos de configuración de las diferentes conexiones que se pueden crear. El archivo /etc/openvpn/conexion.conf, por ejemplo, va a contener las instrucciones para establecer un vínculo VPN.
  • En el archivo /etc/default/openvpn se configuran los enlaces alojados en /etc/openvpn/ que va a administrar el script de arranque/parada de OpenVPN (ver punto siguiente), y si se va a generar un archivo de "status" o no.
  • El archivo /etc/init.d/openvpn sirve para poder arrancar, parar y reiniciar las VPNs configuradas en el archivo /etc/default/openvpn.
La única diferencia entre el nodo A y B residirá en el archivo de configuración, que por ejemplo puede ser /etc/openvpn/conexion-a-A.conf en el Cliente y /etc/openvpn/conexion-desde-B.conf en el Servidor. El resto es igual en ambos hosts.

Archivo Default
Tal como se dijo anteriormente, en /etc/default/openvpn se indican los archivos de configuración (que se traducen en conexiones) que administrará el script /etc/init.d/openvpn. El contenido de este archivo es el siguiente:
# This is the configuration file for /etc/init.d/openvpn

#
# Start only these VPNs automatically via init script.
# Allowed values are "all", "none" or space separated list of
# names of the VPNs. If empty, "all" is assumed.
#
#AUTOSTART="all"
#AUTOSTART="none"
AUTOSTART="conexion-a-A"
#
# Refresh interval (in seconds) of default status files
# located in /var/run/openvpn.$NAME.status
# Defaults to 10, 0 disables status file generation
#
STATUSREFRESH=10
#STATUSREFRESH=0
Los únicos dos parámetros que existen son AUTOSTART y STATUSREFRESH. El primero puede ser igual a "all", "none" o un listado de archivos que deberán existir en /etc/openvpn, pero sin la extensión .conf [1].

Archivo de Configuración Cliente - B
El archivo de conexión de un cliente /etc/openvpn/conexion-a-A.conf será muy similar al siguiente:
#
# Sample OpenVPN configuration file for
# home using a pre-shared static key.
#
# '#' or ';' may be used to delimit comments.

# Use a dynamic tun device.
# For Linux 2.2 or non-Linux OSes,
# you may want to use an explicit
# unit number such as "tun1".
# OpenVPN also supports virtual
# ethernet "tap" devices.
dev tun

# Our OpenVPN peer is the office gateway.
remote 74.125.47.103

# 10.1.0.2 is our local VPN endpoint (home).
# 10.1.0.1 is our remote VPN endpoint (office).
ifconfig 10.1.0.2 10.1.0.1

# Our up script will establish routes
# once the VPN is alive.
up ./conexion-a-A.up

# Our pre-shared static key
secret test.key

# OpenVPN 2.0 uses UDP port 1194 by default
# (official port assignment by iana.org 11/04).
# OpenVPN 1.x uses UDP port 5000 by default.
# Each OpenVPN tunnel must use
# a different port number.
# lport or rport can be used
# to denote different ports
# for local and remote.
port 1194

# Downgrade UID and GID to
# "nobody" after initialization
# for extra security.
; user nobody
; group nobody

# If you built OpenVPN with
# LZO compression, uncomment
# out the following line.
; comp-lzo

# Send a UDP ping to remote once
# every 15 seconds to keep
# stateful firewall connection
# alive. Uncomment this
# out if you are using a stateful
# firewall.
ping 10

# Uncomment this section for a more reliable detection when a system
# loses its connection. For example, dial-ups or laptops that
# travel to other locations.
; ping 15
; ping-restart 45
; ping-timer-rem
; persist-tun
; persist-key

# Verbosity level.
# 0 -- quiet except for fatal errors.
# 1 -- mostly quiet, but display non-fatal network errors.
# 3 -- medium output, good for normal operation.
# 9 -- verbose, good for troubleshooting
verb 3
Es importante prestar atención y adaptar convenientemente los siguientes parámetros:
  • remote y port. Básicamente indica la IP y el puerto del host (respectivamente) correspondientes a la red insegura contra el cual queremos establecer la VPN. El puerto 1194 es el default de OpenVPN.
  • ifconfig. Indica la IP virtual de ambos extremos de la VPN.
  • up. Es el script bash que se ejecuta apenas se levanta la interfaz. Notar que el "./" indica que el script debe estar en el mismo directorio del archivo de configuración, esto es, /etc/openvpn/conexion-a-A.up. Usualmente sirve para establecer la nueva ruta (con el comando route) de la interfaz, aunque puede servir para cualquier cosa.
  • secret. Es el archivo con la clave pre-compartida (pre-shared) que ambos nodos deben poseer para que la conexión se inicie. Obviamente deben coincidir en ambos extremos, y se recomienda que una vez generado en uno, se transfiera a otro por un canal seguro, como SSH, por ejemplo. Este archivo también debe residir en el mismo directorio del archivo .conf.
  • ping. Dado que OpenVPN trabaja sobre un protocolo no orientado a la conexión como lo es UDP, es probable de que si hay firewalls entre ambos extremos de la conexión, la conexión sea filtrada por el mismo al no haber tráfico. El parámetro ping evita esto, haciendo que se envíe tráfico para que la conexión nunca se caiga.
Creación de la Clave Pre-Compartida
Como se dijo anteriormente, la clave pre-compartida es un archivo que deberá residir en el directorio /etc/openvpn de ambos nodos, y ser referenciada por el archivo de configuración de cada uno, por medio de su parámetro secret. La clave se genera con el siguiente comando:
root@saturno:/etc/openvpn# openvpn --genkey --secret test.key
root@saturno:/etc/openvpn# cat test.key
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
7e603bfe70074e19efc3dfd4440c145f
be2bbcc7812ce409780819b78e60bf66
8df944d7d40c119c4d9075a750e2d5e8
8289d67628faa69b0c4cb531727e4c64
145d0c4365ff0216963b3d67084225f2
e764facf91f248385152c8ccfcf93e40
ffb8aa19173bf4c12da08337f30d7f1f
61ea30ef51518276cc8fac51ac0793cd
8ba9417a68ca07ca400a72579aa82036
c15ccb5e470b4571ac58ef03c3d3144f
c8d586a30901fb7401d7d982d8805325
48c39f9a10ecba889ee3eeed3893fb98
2220804f860d100f9d7f602ee50c20ee
986e077958b111fbb57a0cdafa6a4ecd
0b59483d02b5185cf6abb9a83af948fe
61393ca6b50137257b255a296ff844e2
-----END OpenVPN Static key V1-----
root@saturno:/etc/openvpn#
Para pasar este archivo al equipo que funcionará como extremo opuesto de la VPN, se sugiere (nuevamente) un medio de transporte confiable, como pen drives, CDs, o en su defecto, SSH. El comando scp test.key marcelo@74.125.47.103:~/ copiará por medio de SSH el archivo test.key al equipo en 74.125.47.103, y para hacerlo, se logueará con el usuario "marcelo", dejando el archivo en su home.

Script de inicio
El script bash de inicio que se muestra a continuación agrega como ruta a cualquier host del rango 10.1.0.0-254
root@saturno:/etc/openvpn# cat conexion-a-A.up
#!/bin/sh
route add -net 10.1.0.0 netmask 255.255.255.0 gw $5
Archivo de Configuración Servidor - A
Como se dijo anteriormente, lo único que varía en definitiva en el Servidor VPN ("A" en este caso) es el archivo de configuración. Así y todo, las diferencias son sutiles (es decir, muy pocas). El archivo de configuración /etc/openvpn/conexion-desde-B.conf sólo difiere del que está en el cliente en los siguientes parámetros:
[...]
# *** El parámetro remote sólo se usa en el cliente!!!! ***
# remote 190.210.30.194

# 10.1.0.1 is our local VPN endpoint (office).
# 10.1.0.2 is our remote VPN endpoint (home).
ifconfig 10.1.0.1 10.1.0.2

# Our up script will establish routes
# once the VPN is alive.
up ./conexion-desde-B.up
[...]
En resumen, las diferencias son:
  • remote no se usa en el servidor (sólo se usa en el cliente).
  • El orden de las IPs virtuales a utilizar con el parámetro ifconfig se invierte, como es lógico.
  • El script a ejecutar cambia.
Con respecto al script que configura las rutas, es bueno saber que sin que haga falta ejecutar script alguno, la ruta 10.1.0.2 -dev tun0 se levanta automáticamente en el servidor (y lo mismo sucede con la 10.1.0.1 en el cliente). La configuración de la ruta para la red 10.x.x.x en el cliente permite mapear el resto de IPs 10.x.x.x que pueden existir detrás del Servidor VPN, con el objetivo de que el cliente las vea y pueda comunicarse por estos hosts por medio del Servidor VPN. En resumen, si sólo se pretende comunicar dos extremos (y no hay ninguna red detrás de ninguno de los dos equipos), el route add -net... no hace falta.

Ejecución
En resumen, para levantar la VPN, sólo hay que ejecutar tanto en el servidor como en el cliente:
mfernandez@B:~$ sudo /etc/init.d/openvpn start
* Starting virtual private network daemon.
* conexion-a-A (OK) [ OK ]
mfernandez@B:~$

mfernandez@A:~$ sudo /etc/init.d/openvpn start
* Starting virtual private network daemon.
* conexion-desde-B (OK) [ OK ]
mfernandez@stimpy:~$
Conclusión
Si bien no es algo muy sencillo de comprender para alguien ajeno a las redes, para el profesional informático en cambio las VPNs representan una herramienta importantísima para resolver problemas de conectividad como la indisposición de IPs públicas, manteniendo una seguridad y flexibilidad difíciles de igualar. Si combinamos eso con un software multiplataforma, libre y de configuración extremadamente sencilla como OpenVPN, tenemos un ganador. :-)

[1] En realidad, si al levantar OpenVPN no existe algún archivo .conf, no importa, el script de inicio muestra un warning avisando que no existe y sigue adelante con el resto de las conexiones definidas en el archivo.

Quejas, dudas, comentarios e insultos? Comenten este post o manden un bonito correo, gracias! :-D

Saludos
Marcelo

domingo, 15 de junio de 2008

Lo lindo del FLOSS

Sólo para comentar que reporté hace un tiempo un bug sobre el Handbook de FreeBSD y me aceptaron la sugerencia, corrigiendo el documento original.

Si bien no es la primera vez que me pasa, quiero transmitir esa linda sensación de poder colaborar con un granito de arena cuando uno obtiene tanto de otros en forma desinteresada.

Ah, por cierto, felíz día, viejo!

Marcelo

lunes, 9 de junio de 2008

FreeBSD y Actualizaciones

Los muchachos de Kriptópolis hace algun tiempito que vienen haciendo posts sobre experiencias con BSD. En este caso, postean sobre una de las cuestiones más críticas (para mí) en la administración de un servidor: el manejo de actualizaciones y las vulnerabilidades.

http://www.kriptopolis.org/actualizar-software-vulnerable-freebsd
http://www.kriptopolis.org/actualizar-software-vulnerable-freebsd-2

Una característica muy particular comparado con Debian/Ubuntu es que se recomienda utilizar los ports, a diferencia de los paquetes binarios. Sin embargo, se mantiene la info de dependencias, aunque para hacer un "upgrade" general de un paquete y sus dependencias haya que recurrir a software no instalado por defecto (portmanager, portmaster, portugrade, etc.).

Lo que sí es una delicia es el portaudit. Eso sí me gustaría verlo en Debian/Ubuntu ya! Aunque es más bien difícil que se porte, ya que es una de las ventajas de laburar siempre con software mínimamente modificado de origen: no hay vulnerabilidades particulares "de la distro", sino que las vulnerabilidades se obtienen directamente del fabricante o comunidad de desarrollo origen. Ojo, no digo que las listas DSA y USN tengan menos utilidad, sólo que me gusta "preguntarle" a mi SO directamente de la consola qué paquetes tiene instalados con vulnerabilidades conocidas. :-)

De todas formas, lindos posts para chusmear un rato.

Salutes
Marcelo

sábado, 7 de junio de 2008

Apache 3.0 (?)

En mi carpeta de documentos "para leer" (o sea, pendientes) tenía una presentación que bajé hace algún tiempo de la última ApacheCon realizada en Amsterdam, en Abril de este año. Dicha presentación está muy buena, para bajarla y leerla atentamente: cuenta qué se cocina para la próxima gran versión de Apache, nuestro Servidor Web amigo :-)


En fin, parece que Apache 3.0 se renovará completamente, y aunque aclara que lo expresado no está 100% consensuado y aprovado por la comunidad, Roy Fielding es miembro de Apache Fundation, esta charla fue la keynote del evento... entonces, por qué no tomarlo como muy probable que ocurra lo que nos cuenta?

En resumen, Apache 3.0 parece que va a tener:

  • Un modelo de proceso por cada plataforma: Chau elegir entre prefork,worker, etc. Va a haber un modelo "óptimo" por plataforma. Esto se lo llama el "spooning model".
  • También se va a quitar el soporte para plataformas que "apesten" (cuáles serán? :-D ). Para ellas, "usen Apache 1.3, y sino, tienen el código fuente".
  • No hay más opciones en tiempo de compilación.
  • Reemplazo de la APR por otra librería (Moccasin): no va a haber compatibilidad para atrás (a nivel de módulos, claro).
  • Menos configuración: configuración default simple y segura, para programadores web (arrancar usando user/group del usuario, escuchar en un puerto alto como 8080, ejecución como usuario normal con parámetros, etc.).
  • Introducción del protocolo Waka, como futuro reemplazo de HTTP 1.x (!). Obviamente, HTTP se sigue soportando (va a seguir siendo el estándar Web por largo rato), aunque la novedad es la extensión del soporte a Waka también.
En resumen, para la comunidad y el proyecto en sí, los objetivos son:
  • Renovarse, "introduce some fresh thinking".
  • Divertirse! ("Have Fun").
  • Y lo más importante: atraer nuevamente a la comunidad alrededor del proyecto.
Bueno, eso, ya que no leí nada sobre esto en ningún lado, lo posteo. :-)

Link al pdf: http://roy.gbiv.com/talks/200804_REST_ApacheCon.pdf
Link al video: http://streaming.linux-magazin.de/events/apacheconfree/archive/rfielding/frames-java.htm

Como opinión personal, creo que ya son varios los "viejos" proyectos FLOSS que se renuevan (Python, Perl, KDE, Gnome lo está considerando...), y esto es más que importante para todos.
Es como decir, "bueno, con todo lo anterior llegamos hasta acá; ahora, vamos por la gloria". Se vienen tiempos de nuevos y mejores aires para el FLOSS? Espero que sí. :-)

Saludos!
Marcelo

miércoles, 28 de mayo de 2008

D-Link DWA-510 en Ubuntu 8.04

Hola!

Si andan buscando una placa Wireless PCI 802.11b/g que funcione perfectamente en Linux (y Ubuntu 8.04 para AMD64 para ser más precisos), la D-Link DWA-510 funciona perfectamente.

Esta es la caja en la que vino....

Abrí mi PC, enchufé la placa en un slot PCI libre, arranqué mi Ubuntu, y ya estaba la dichosa barra de calidad de señal. No tuve que instalar drivers ni nada!

Pude configurarle una conexión WPA2 sin problemas, así que si bien leí por ahí que en modo AP todavía no está soportado (tengo que corroborarlo), al menos como uso "normal", sirve perfectamente. De más está decir que también soporta WAP, WEP y sin encriptación :-P

Lo bueno es que el chipset que trae este D-Link es un RaLink RT2561, que está totalmente soportado por el fabricante, a tal punto que liberaron hace tiempo como GPL el código de los drivers (sin acuerdo NDA de por medio) y permiten la distribución (sin que se modifique) del firmware que los hace funcionar. Mejor aún es saber que estos drivers se encuentran en el núcleo oficial de Linux a partir del 2.6.24, por lo tanto, ya está en Ubuntu Hardy 8.04...

El módulo que lo hace funcionar es el 'rt61pci', y aparece en mi lspci así:

05:07.0 Network controller: RaLink RT2561/RT61 rev B 802.11g

Por otra parte, la placa me salió un poquitito arriba de los $100 en Galería Jardín (U$S 30 aprox.), con lo que si bien no es una "ganga", es una marca reconocida, y funciona 10 puntos en Linux. Además, dudo que hubiera podido conseguir una placa de este tipo mucho más barata.

Además, al ser los drivers GPL, no me tengo que preocupar porque el fabricante cambie de dueño o de parecer, con lo que mi placa siempre va a funcionar (o siempre voy a tener la posibilidad de hacerla funcionar).

También sé que la versión "final" de Ubuntu Hardy 8.04 tenía algunos problemas que por suerte ya fueron solucionados mediante actualizaciones del kernel (específicamente la versión 2.6.24-17 que subieron al repositorio principal este último lunes 26).

Bueno, asi que ahora a disfrutar de la red sin cables... :-)

Saludos!
Marcelo

jueves, 15 de mayo de 2008

Dígame Licenciado...

(Este post es un fragmento de un mail que escribí hace unos días)

Bueno, sólo para comentar que este lunes a las 17 hs., después de más de 10 años de estudiar, remar, sufrir y (robar un poco, por qué no, je)...

ME RECIBIIIIIIIII!!!!!!!!!!!!!!!!!!!!

De qué? Sí, de Licenciado en Sistemas!!! (la p.... que vale la pena estar vivo!!!)... presenté la maldita y caprichosa TESIS en la que estuve un año y medio laburando....
(Por favor, no hacer comentarios sobre esta foto, éste es un post feliz!)

Así que bueno, éso, este es un pequeño gran logro personal, el cual hace que esté muy feliz en estos días (y con un poco de nostalgia también)... así que espero seguir yendo a la UNLu al menos para colaborar, investigar y nutrirme un poco más en cuestiones académicas... porque esto recién empieza! :-)

Cuando tenga el OK de la Universidad en cuanto a la licencia de publicación y otras cuestiones, obviamente haré público el documento mío y de Pablo, quizás a alguien le sea útil.

Y aunque ya se los dije personalmente, a ustedes, parientes, amigos, familiares más cercanos, gracias por el aguante!

Saludos!
Marcelo

domingo, 27 de abril de 2008

Ubuntu 8.04

Bueno, hace bastante que no posteo nada, simplemente porque estoy en etapa final de mi Trabajo Final de Licenciatura, y estoy a full!. Por lo tanto, brevemente comento que actualicé a Ubuntu Hardy 8.04, y todo fue muy bien!

Comentarios:
1 - Por primera vez me anduvo 10 puntos el "actualizador" gráfico, lo que creo que es un golazo a nivel de facilidad de uso y experiencia al usuario.



2 - Ahora el chequeo periódico de mantenimiento de los discos al arranque se hace gráficamente (aunque en inglés), y se puede cancelar.

3 - Si no les gusta que las particiones se muestren como "Soporte de xx GiB" (como a mí), lean esto:
https://help.ubuntu.com/community/RenameUSBDrive
https://bugs.launchpad.net/ubuntu/+source/gvfs/+bug/190366
Básicamente hay que ponerle una etiqueta a la partición, si alguien no sabe inglés me escribe (o comenta este post) y después posteo los pasos cuando tenga tiempo. :-)

4 - El Firefox 3 Beta 5 anda rápido, pero perdí algunos plugins (Google Reader/Calendar Notifier y Tab Mix Plus), esperemos que rápidamente se actualicen. Otra cosa que noto es que cuando veo páginas en flash está algo propenso a bloquearse unos instantes (toda la aplicación) y seguir; supongo que es porque estoy usando AMD64 y el nspluginwrapper (Adobe, para cuándo un Flash de 64 bits?). Igual flash anda muy bien. El OpenJDK 6 que trae interpreta correctamente un 80% de los applets que probé (cálculo a ojo); igual es mejor que el "IcedTea" de Gutsy, que directamente no servía y si uno quería ejecutar applets necesitaba un navegador de 32 bits (Sun, para cuándo un Webstart y un Plugin de Java para AMD64?).

5 - Me mordió este bug+workaround, relacionado al escanear con mi Multifunción Samsung SCX-4200 (la impresión anda 10 puntos):

https://bugs.launchpad.net/ubuntu/+source/sane-backends/+bug/220755

6 - Tracker funca de 10 ahora. Lástima que sigo siendo picado por este bug (sí, uso Thunderbird, y qué? :-D ):

https://bugs.launchpad.net/bugs/148207

7 - Al fin puedo ejecutar Compiz en distintos usuarios/sesiones a la vez!!!! (Nvidia/Compiz, gracias! Mi novia se cansó de pedirme que quería "los efectitos" cuando le dejaba la PC).

8 - Tuve que emparchar los módulos vmnet y vmmon de VMWare 6.0.3 porque no funciona con el kernel 2.6.24 de Hardy:

http://igordevlog.blogspot.com/2008/03/vmware-603-in-ubuntu-hardy-804-kernel.html

Creo no olvidarme nada, pero la verdad es que no tuve ningún gran problema, todo fue 10 puntos y muy sencillo, me animaría a decir que cualquiera con conocimientos de PC lo hubiera hecho. Si luego me encuentro con algún problema relacionado al upgrade, actualizo este post.

Actualización 1: También me afectó este bug (sólo para usuarios NVidia), pero la solución es muy sencilla. Seguramente saldrá una actualización corrigiéndolo.

Actualización 2: Pulse Audio es un caño. Como tengo una SB Live PCI (y se escucha mucho mejor que con mi placa onboard), la pobre plaquita onboard estaba desactivada por setup. Ahora con PulseAudio puedo elegir qué stream de audio va por qué placa, con lo que puedo usar los auriculares con la tarjeta onboard y al mismo tiempo los speakers Creative 2.1 conectados a la SB. :-)

Bueno, tengo que seguir escribiendo. Hasta luego.

Marcelo