.:: HeCSa blog ::.
Un extraño registro de mis experiencias en la red...
martes 24 de enero de 2012
SPICE - Una introducción para entenderlo
Ya hemos hablado, en varias oportunidades, sobre formas de virtualizar servidores. También hemos abordado los temas relativos a la virtualización de escritorios. Alguna vez hablamos de computación en la nube, y nos maravillamos por la forma en la que este concepto evoluciona y se aplica, cada día, a más elementos que hasta ahora acostumbrábamos usar en forma local. Y es en este tópico en particular donde nace una nueva forma de exportar las interfaces gráficas de los escritorios para alimentar clientes delgados, o PCs que ya no tienen la potencia necesaria para funcionar por sí solas. SPICE, un acrónimo de “Simple Protocol for Independent Computing Environment”, será el invitado de honor de este artículo.
Hoy nos pondremos a analizar SPICE, que está emergiendo como una tecnología alternativa, pero altamente mejorada, a los sistemas de escritorios exportados por la red, y que se perfila para ser, en un futuro cercano, el protocolo elegido cuando se deseen las mejores prestaciones en lo que a integración, velocidad y gestión de audio y video refiere.
Dos se vuelven uno
SPICE fue originalmente desarrollado por la empresa Qumranet, quien en su época de independencia corporativa se dedicaba a desarrollar entornos de virtualización de escritorios basados en el uso de KVM (Kernel Virtual Machine). Suena bastante lógico que esta empresa haya trabajado sobre este protocolo si tenemos en cuenta que fueron ellos mismos los que crearon y mantuvieron el mismísimo hipervisor KVM, que hoy en día podemos ver en sistemas operativos GNU/Linux y hasta en OpenIndiana gracias a los aportes y el desarrollo de la empresa Joyent.
Este producto resultó como un subconjunto de su idea original, Solid ICE, que en su momento parecía estar posicionándose como el producto de virtualización de escritorios por excelencia, dado que entregaba sus interfaces mediante el uso de una interfaz web, o un pequeño cliente delgado. Como todos nos podemos imaginar, ICE es parte del nombre SPICE, justamente por ser el acrónimo de “Independent Computing Environment”.
Y como muchas veces pasa en el mundo corporativo, esta pequeña empresa israelí que armaba soluciones de código cerrado para GNU/Linux fue comprada en el año 2008 por Red Hat, quien un tiempo después integró su cartera de productos con los que Qumranet poseía. Por supuesto, abrió su código a las comunidades, permitiéndoles alimentarlo y acrecentarlo para llegar a ser lo que es ahora.
Lo que pensamos que es
Así es que SPICE es una solución de computación remota que provee a sus clientes acceso a sus entornos gráficos y dispositivos (teclado, mouse, micrófono, parlantes, etc.). Logra una experiencia similar a la que se tiene cuando se interactúa con una máquina local gracias al uso de un sistema de análisis de potencia que dependiendo de lo que se posea del lado del cliente puede bien enviar comandos para generar (render) los gráficos del lado del cliente, si éste tiene suficiente potencia, o puede procesar y sólo enviar los elementos necesarios para dibujar pantallas del lado del cliente, si el cliente tiene poco poder de procesamiento.
A diferencia de los protocolos de presentación remota de escritorios, tales como RDP, VNC o ICA, SPICE se presenta como una arquitectura basada en varias capas que interactúan para mejorar la experiencia del usuario. Estas capas son:
SPICE Driver: Es un componente que se encuentra en cada escritorio virtual. Un escritorio virtual es una de las máquinas virtuales que se podrá generar partiendo de un hipervisor como lo es, efectivamente, KVM.
SPICE Device: Es éste el componente existente en el entorno de virtualización en sí mismo, como ser un hipervisor.
SPICE Client: Este componente reside del otro lado de esta relación, es decir, en el cliente delgado, PC a punto de ser tirada a la basura por vieja, o el navegador. A través de esta capa se accede a cada escritorio virtual.
Desde el punto de vista de la arquitectura, SPICE está compuesto por el protocolo SPICE, el servidor SPICE, y el cliente SPICE. Sus capas de “Driver” y “Device” serán entregadas por un dispositivo QLX y un driver QLX, respectivamente. El dispositivo QLX se encuentra en el paquete de virtulización “qemu”, y el driver QLX en el mismo sistema operativo que exporta su interfaz gráfica.
Cuando un cliente se conecta a un servidor SPICE, lo hace a través de canales. Cada tipo de canal está dedicado a un tipo de datos en particular. Usa su propio socket, y puede estar encriptado utilizando SSL. Del lado del cliente cada canal será manejado por un hilo de procesamiento separado (thread), lo que nos permitirá definir valores que gestionen el nivel de rendimiento de nuestros escritorios. Si quisiéramos, podríamos aplicar QoS (Quality of Service) a cada thread, y entonces modificar su grado de precedencia dentro del sistema operativo.
El canal principal se llama “RedClient” y es el responsable de controlar todos los demás. Parte de este control es la creación de canales, su conexión y desconexión, entre otros.
Entre los demás canales encontramos:
Main: Este canal está implementado por RedClient.
DisplayChannel: Es el responsable de gestionar los comandos gráficos, así como las imágenes y los flujos de video.
InputsChannel: Es quien gestiona la entrada por teclado y mouse.
CursorChannel: Es el que maneja la posición y visibilidad del cursor.
PlaybackChannel: Para nuestra grata alegría, este canal maneja la forma en la cual el servidor envía audio y video al cliente de forma tal de permitir ver, por ejemplo, videos en forma remota con prácticamente ningún tipo de retardo.
RecordChannel: Es el encargado de capturar audio y video del lado del cliente, y enviarlo al servidor.
A diferencia de otros protocolos que envían al cliente actualizaciones de frame-buffer, SPICE envía comandos de gráficos 2D, y hasta 3D, si bien este último aún no está listo. Media hora de horno, y lo podremos disfrutar.
Algo un poco divertido
Veamos, entonces, la forma en la que se establece una conexión entre un cliente y un servidor de SPICE.
El proceso de conexión de canales es iniciado por el cliente. Éste envía un mensaje (RedLinkMess) al servidor. Entonces, el servidor responde con otro mensaje (RedLinkReply). Cuando el cliente recibe el RedLinkReply examina su código de error, y actúa en consecuencia. En el caso de no haber un código de error (porque no han habido errores) encripta su contraseña utilizando la clave pública que le envió el servidor dentro del mensaje RedLinkreply y se lo envía al servidor. Entonces el servidor recibe la clave, y envía un mensaje más con el detalle del enlace que el cliente debe utilizar. El cliente examina el link, y si es adecuado (se verifica que su código de error coincida con el que el cliente posee) se establece una conexión válida. No es tan terrible, y ocurre en una fracción de segundo.
Si alguna vez hemos viajado en un autobús (colectivo para mis paisanos) sabemos que de tanto en tanto hemos prestado nuestro boleto a un inspector que nos lo solicitaba para saber si habíamos pagado o no. Si habíamos pagado, todos felices. Si no habíamos pagado, bueno, nos bajaban del autobús, generalmente acompañados de algún vocablo o frase mundana que evocaba a un pariente cercano nuestro.
SPICE también tiene una forma de controlar boletos (tickets) a través de su sistema de ticketing. Este sistema es la forma que tiene SPICE para asegurarse que el cliente que está sólicitando la conexión es una fuente confiable. El servidor logra esto generando un ticket que contiene una clave y un tiempo de expiración. Cuando el tiempo de la conexión supera este valor, el ticket completo expira.
Este ticket se encontrará encriptado generando una clave RSA de 1024 bits cuya porción pública es enviada al cliente mediante el mensaje RedLinkInfo. El cliente utiliza esta clave para encriptar la contraseña y enviarla de vuelta al servidor a través del mensaje recién comentado, RedLinkMess. Entonces el servidor desencripta la contraseña, la compara con el ticket, y se asegura que se ha recibido dentro del período de tiempo establecido.
Para hacer corta una historia larga, SPICE implementa una forma de comunicación muy parecida a la que tiene el mismísimo protocolo TCP/IP, con formatos propios de ping, por ejemplo.
Moverse
Hasta ahora nos hemos focalizado en el caso de tener un servidor y un cliente. Pero ¿qué pasaría si un servidor se debe sacar de línea, o si sencillamente se cae, producto de un mal funcionamiento? Todo está pensado en el protocolo SPICE, y para casos como estos, tenemos a nuestra disposición un conjunto de mensajes que nos permitirán migrar la sesión desde un servidor a otro.
Principalmente, se comenzará enviando mensajes para que se migran los canales de mensajes que el cliente se encuentra utilizando, y que por lo tanto están abiertos. El canal principal será el que utilizará para iniciar el proceso de migración de canales cuando el servidor envía un mensaje al cliente. Entonces éste examina sus componentes, y envía una respuesta al servidor.
Entonces es que el cliente comienza a utilizar los canales de comunicación con el servidor de destino, desafectando de esta responsabilidad al servidor de origen. Así de sencillo es que una sesión pase de un servidor a otro.
Si pensamos en un esquema de computación en la nube, donde no hay uno, sino cientos de servidores funcionando como si fueran uno solo, veremos que este mecanismo es extremadamente útil, ya que nos permite balancear la carga de las conexiones entre los diferentes servidores sabiendo que existe la posibilidad de mover sesiones desde un servidor a otro sin generar inconvenientes en el cliente, entregándole una sensación de continuidad muy buena.
Y por supuesto, dado que uno de los usos del sistema de escritorios virtualizados es el de alimentar soluciones de recuperación ante desastres, encontramos en SPICE una excelente opción para entregar escritorios remotos aún cuando un centro de cómputos entero se destruya, pasando a otro centro de cómputos alternativo sin que el cliente note la diferencia.
Si te querés divertir
Para finalizar este artículo sobre las bondades del sistema SPICE, abordaremos un tema que ha dejado con la boca abierta a muchas personas. Es la capacidad de manejar video y audio en forma remota prácticamente sin retardo entre el servidor y el cliente, inclusive sobre redes WAN como lo es internet.
SPICE ofrece muchos mecanismos diferentes de compresión de imágenes que se pueden elegir en el momento de inicializar el servidor, y dinámicamente mientras éste está funcionando. Un método propietario de SPICE es el denominado Quic, basado en el algoritmo SFALIC.
Como siempre, SFALIC es un acrónimo que significa “Simple Fast and Adaptive Lossless Image Compression”. Resulta que este algoritmo ha sido diseñado, desde su base, para entregar compresión a velocidades elevadísimas. Se basa en predicción lineal, y un método de modelado predictivo de control de errores. Por lo tanto, Quic tendrá un manejo predictivo para el envío de imágenes, permitiendo entonces entregar video por medio de redes WAN con un nivel increible de velocidad y exactitud.
Otra opción de compresión es LZSS, o su pariente, el Global LZ (Lempel Ziv), o GLZ, que gestiona cambios en las imágenes para enviar comandos de renderización al cliente. Sin meternos en demasiados detalles, GLZ es un algoritmo que analiza las repeticiones de ocurrencias dentro de una cadena de audio, por ejemplo, y las parametriza para evitar el envío redundante de información.
Imaginemos este último como si escucháramos una canción de discoteca, donde por media hora se escucha el mismo ritmo, las mismas meoldías y el mismo estribillo por períodos de un minuto y medio. No tendría sentido enviar por red media hora de sonidos, si se puede enviar sólo un minuto y medio, y luego un parámetro que especifique la cantidad de veces que se debe repetir. Lo mismo para el video, y así tenemos como resultado un sistema de audio y video bidireccional de alta velocidad.
Conclusión
Hemos metido nuestra nariz en el protocolo SPICE, y nos hemos enterado que el mundo no termina donde VNC, RDP o ICA nos han dejado. Encontramos que este protocolo, que está en plena producción para entornos virtualizados de escritorios, está siendo mejorado para que se comporte y se maneje de la misma forma en la que hoy usamos VNC, por sólo citar un ejemplo de notable simplicidad.
Esperemos ver en breve estas implementaciones funcionando en nuestros servidores. Como hacemos en estos casos, no podemos sino sacarnos el sombrero ante tan buen producto ;-) . ¡Nos vemos el mes que viene!
Sobre la originalidad y la reacción
La cosa es que, con todo el tema de SOPA y PIPA, otra vez hablamos de estos temas.
Cuando menos nos lo esperábamos, nuevamente apareció la amenaza de tener un Internet censurado. Y no fue sólo una amenaza, ya que algunos sitios, como es el caso de Megaupload, fueron cerrados por el gobierno de un país diferente del mío. No quiero decir con esto que las decisiones de mi gobierno siempre representan mi pensaniento...
Como nota de color, cito un diario de mi tierra que decidió hablar de Anonymous y Sony, aún luego de haber declarado, el mismo Anonymous, que en ESE caso sí no tenía nada que ver. No hay nada que hacer. El que nació para clarinete no llega a saxofón. No tiene nada que ver, pero leyendo sobre SOPA y PIPA en ese diario me encontré con eso. Me hizo reir un rato.
La cuestión es que generalmente nos encontramos ante actitudes desmesuradas por parte de algunas entidades no representativas, o al menos no para nosotros, que apuntan a defender a quien le da de comer. Ante eso, tenemos dos posibilidades. Una es demostrar que podemos también darles de comer (no, no me gusta esa opción), y la otra es reaccionar en consecuencia.
Claro está, todo tipo de reacción es eso: una respuesta a la acción original de alguien o algo.
Entonces, mi idea es bien sencilla, y se basa justamente en la originalidad. Es decir basta a todo este juego de reacciones, y comenzar a tener acciones originales, que apunten al beneficio de la comunidad informática en general, y a la libertad de que gozamos.
Entonces, eso implicaría una nueva organización que esté completamente de espaldas al esquema de control por parte de entidades como aquellas de que hemos tenido tristes noticias últimamente, manejada por personas que sí se interesen en lo que esta tecnología (léase: ideología) tiene para ofrecer.
Hay un millón de cabos sueltos en este esquema de originalidad, así que agradeceré que los que lean esto le pongan y agreguen los pensamientos que se les crucen, ya que mi cabeza está explotando de repentinas ideas viejas, pero muy renovadas.
Salutte!
sábado 7 de enero de 2012
Otra vez VirtualBox
Luego de la instalación del repo y de VirtualBox, en lo que no voy a ahondar porque no tendría sentido considerando que está más que claro en el mismo sitio virtualbox.org, me dispuse a instalar el tan querido Extension Pack de VirtualBox para tener RDP, USB, y algún que otro beneficio en las máquinas virtuales.
Pero la sorpresa no fue muy agradable cuando me encontré con el mensaje "Failed to install the Extension Pack The installer failed with exit code 127: The value for the SHELL variable was not found the /etc/shells file".
Más abajo menciona algo sobre que el incidente ya ha sido reportado.
Así que hurgando por la red me encontré con que en un sistema recientemente implementado se debe instalar, primero, todo el kit de compilación de kernel, y el dkms.
Allá vamos, ejecuté, como root:
# yum install dkms binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel
Bien, seguí las instrucciones de ejecutar:
...y luego volví a probar suerte...pero sin suerte. Los USB aún no se ven, y probaré volver a bootear para ver si ahora sí los levanta.
Luego del reboot, ejecuté de nuevo:
Wow! Sin erorres! Pero nada es tan bello, el sistema sigue sin reconocer el subsistema USB.
La frustración no tiene límites...qué quieren que les diga...esto con Sun no pasaba...
[ACTUALIZACIÓN - GRACIAS SALVA!!!]
No olviden agregar Vuestro usuario al grupo vboxusers, de esa forma al reloguearse todo vuelve a estar en su lugar, y el error desaparece.
lunes 8 de agosto de 2011
Punk Fluid, the Shorewall
- Todo cliente que quiera salir a Internet directamente, y sin configurar su proxy en su sistema, deberá ser redirigido automáticamente al puerto 8008.
- Todo protocolo de red diferente de la navegación por Internet deberá salir al mundo utilizando enmascaramiento de direcciones IP.
- Sólo habrá un cliente que tendrá permitido salir a Internet sin pasar por el proxy, y tendrá la dirección IP 10.100.100.10.
- La red interna continuará utilizando el rango de direcciones IP 10.100.100.0/24.
- Se implementará un servidor Web interno, que no deberá ser accedido desde afuera de la red. Su dirección IP será 10.100.100.50.
- Se deberá implementar un servidor de aplicaciones que utilice los datos de la base que se encuentra en un servidor con dirección IP 10.100.100.100. El servidor es PostgreSQL, por lo que se accede a sus datos a través del puerto 5432. El software del servidor de aplicaciones es un Tomcat, que usa el puerto TCP 8080 para funcionar.
- La puerta de enlace predeterminada de todos los puestos clientes será 10.100.100.1, es decir, será el servidor que ahora es un proxy.
- Una regla de coincidencia, donde podré especificar protocolo, puerto, dirección IP de origen y de destino, y conjunto de reglas a la que quiero agregarla.
- Una acción o serie de acciones a ejecutar sobre los paquetes de red que coincidan con dicha regla.
- Si un paquete de red quiere ingresar vía Internet, y apunta al puerto 80, redirigirlo al puerto 8080 del servidor 10.100.150.10 que se encuentra en la DMZ.
- Si un paquete de red tiene origen en la red interna, tiene dirección IP diferente de 10.100.100.10, y quiere acceder a Internet, redirigirlo al puerto 8008.
- Impedir el ingreso de cualquier paquete de red, no importa su origen, al firewall o cualquier otra red interna, a menos que no ingrese explícitamente por el puerto 80.
- Directorio /etc/shorewall: en él encontraremos todos los archivos de configuración de este paquete a nivel de reglas.
- Archivo /etc/default/shorewall: ciertas configuraciones de caracter más general se encontrarán en este archivo, como ser la orden de ejecutar o no Shorewall cuando se invoque. Sirve para generar la configuración sabiendo que nadie va a ejecutarlo y, por error, dejarnos por ejemplo sin acceso al servidor firewall.
- Archivo /etc/init.d/shorewall: este archivo estará relacionado por medio de links simbólicos con los correspondientes en los directorios /etc/rcX.d.
- Archivo /var/log/kern.log: en este archivo, típicamente, se dejarán los mensajes correspondientes a las acciones que se han ejecutado a nivel de kernel cuando un paquete de red coincidió con alguna regla.
- eth0: corresponde a la red interna, o zona “lan”.
- eth1: corresponde a la red externa, o zona “wan”.
- eth2: corresponde a la red intermedia, o zona “dmz”.
- fw: si bien no es una tarjeta de red, se podrán realizar conexiones hacia y desde él.
- Resultado esperado: es el resultado que pretendemos cuando un paquete de red coincide con una determinada regla. Por ejemplo, podríamos especificar:
- ACCEPT: el paquete de red es aceptado.
- DROP: el paquete de red es descartado.
- REJECT: el paquete de red es denegado. Difiere del anterior en que quien lo envía toma conocimiento de esta acción.
- DNAT: Se ejerce “NAT” sobre la dirección de destino. En nuestro caso, todo lo que llegue al puerto 80 del servidor firewall, será redirigido al puerto 8080 del servidor de aplicaciones, y las respuestas de dicho servidor saldrán como si nunca hubiera habido un redireccionamiento. Por eso se llama “Destination NAT”.
- SNAT: si un cliente de la red interna debe realizar un pedido a un servidor en la red externa, su dirección será reescrita de forma tal que cuando el servidor responda, dicha respuesta llegue nuevamente al cliente en cuestión. Por eso se llama “Source NAT”.
- Cliente: es el punto donde se genera la comunicación de red. Por ejemplo, en el caso de una conexión desde Internet hacia nuestro equipo, la máquina que hace el llamado por medio de su navegador será el cliente.
- Servidor: es el punto al cual llegarán los paquetes de red. En el caso del servidor del proxy, por ejemplo, el cliente será cualquiera de los puestos de trabajo, y el servidor estará en algún lugar de internet.
- Familia de protocolos: en este caso, la familia de protocolos podrá ser “tcp”, “udp”, “icmp”, etc.
- Puerto: en este caso, se registrará el puerto al cual se invoca desde el lado del cliente. En el ejemplo del servidor de aplicaciones, el puerto sería 80.
- Comentarios: en este campo se colocarán comentarios que nos guíen sobre qué afecta esa regla. Por ejemplo, documentar nuestros archivos con algo del estilo “Sólo pasan desde Internet hacia 10.100.150.10” puede ser muy útil si queremos en algún momento modificar las reglas.
- Interface: se especifica en este caso cuál será el destino del cual se espera recibir respuestas cuando se enmascare una dirección o rango de direcciones IP. Por ejemplo, si pensamos en todo Internet, tendremos que colocar 0.0.0.0/0.
- Dirección o rango de origen: aquí configuraremos la dirección o rango de direcciones IP que serán enmascaradas cuando deban acceder alguna dirección especificada en el campo anterior. Por ejemplo, para los puestos cliente, tendremos que colocar 10.100.100.0/0.
- Cliente: como vimos antes, desde donde se generan las conexiones.
- Servidor: ídem, hacia donde van las conexiones.
- Política: qué se hará en forma predeterminada. Las acciones también podrán ser “ACCEPT”, “DROP”, etc.
- Nivel de log: en este campo definiremos si queremos que se genere un registro en el log cada vez que se produzca un error (“err”), sólo por cuestiones informativas (“info”), u otros casos. Tengamos en cuenta que puede ser bastante grande un archivo de log cuando el tráfico es fuerte, por lo que esto se debe regular bien.
domingo 16 de enero de 2011
Sobre OpenSolaris, OpenIndiana, IllumOS, Solaris 11, y demás
Ya todos conocen la historia, y deben de estar mirando al mundo de los que seguimos y/o codificamos para estas distros como "esos tipos que pierden el tiempo con algo que nadie usa".
Lo cierto es que estamos en uno de esos momentos en los que la inflexión se hace notar demasiado, y la diáspora entre los miembros de una comunidad puede resultar en dos cosas, muy bien diferenciadas:
a) Varias comunidades que se tienen simpatía por haber tenido una raíz común en algún momento de su historia.
b) Un montón de gente que cada tanto se junta en un bar a hablar de las buenas épocas y nada más.
c) La unión de todas las personas que están metiendo los dedos en cada una de las distros para armar una comunidad mucho más grande y con mejores productos.
Creo que había dicho dos...bueno, son tres las opciones. Tengo derecho a meter la pata a veces.
Y cuál es el estado actual de las cosas?
Bien, en la lista de OpenSolaris la gente se mete para ver en qué momento alguien, quizá el mismísimo Jim Grisanzio declara la muerte por cierre del sitio. La punta la metió el grupo de OpenSolaris de Madrid pidiendo que archiven su parte del sitio, y que cierren su lista de correo, dado que no tiene más nada que ver con un grupo de personas que siguen al código abierto. Yo ya lo decía hace tiempo, la madre patria para algunos se suma a la tendencia del paro...bueno, algo de humor negro en estos tiempos. Quizá algún gobernante lea esto y se dé cuenta que es importante hacer algo, pero no con la lista de OpenSolaris de Madrid, sino con el país que le toca conducir. Si quiere meterse en la lista de OpenSolaris de Madrid, ya es tarde...espero que no sea una tendencia.
El canal IRC de la misma lista sirve para que la misma gente que desarrolla en otras distros tome algo de conocimiento sobre las cosas que allí se cocinan, que no son muchas, porque dicho sea de paso, el horno no tiene gas hace rato.
Eso nos lleva a la lista de illumOS, donde pareciera que hay un poco más de movimiento, claro que tenemos a Garrett como moderador-censor-definidor de cada línea de código que se mete allí, y a algún que otro programador malhumorado que cada tanto pone el grito en el cielo porque siente que eso no es democrático.
Quién le dijo a esos programadores que algo democrático podría salir de una iniciativa como esa? Ojalá que así sea, al menos pareciera que hay esfuerzos para que esa sea la tendencia, pero por ahora, parece que la tendencia es seguir los caminos y designios de los mismos malhumorados de unas líneas más arriba.
En este caso el canal de IRC es bastante más divertido. Se definen porciones de código, se piensa cuál será el alcance real del esfuerzo de illumOS, se ahuyenta a todo programdor que tenga ganas de comenzar con esto, que generalmente es alguien que no entiende que si bien está mejor organizado que la mayoría de los IRC's de otras distros, se va a sentir mal antes de poder compilar el código mínimo para tener un illumOS en ejecución.
Luego tenemos OpenIndiana, que parecía como la salvación de la gente que alguna vez apostó mucho de su tiempo en la implementación del viejo OpenSolaris. Esta distro funciona, es una distro en sí misma, lo que significa que una persona no debe ser experta en C/C++, Python, Java y demás para poder instalarla, y dentro de todo se ve bastante amigable.
El problema es el que se esperaba: no hay tantos paquetes directamente en el repositorio, por lo que todo el tiempo salen propuestas para que aparezcan nuevos que contengan estos paquetes. Claro está, si alguien viene de la vieja guardia, como es mi caso, entenderán al segundo cómo hacer para implementar OpenOffice, PostgreSQL, o demás con el sistema de paquetería SVR4, que tantas alegrías me ha dado.
El canal de IRC de esta distro también está más interesante. Mucha gente propone cosas, y mucha otra le explica a la primera que las manos no alcanzan para todo lo que se quiere hacer. Por lo menos en este caso es más democrático que en el anterior.
Solaris 11 lo bajé, lo instalé, lo maldije, y lo desinstalé. Pesa una barbaridad (de seguro alguien del oráculo va a venir a decirme que es mentira, que el uso de CPU en esta distro es un 95,23% menor que en los anteriores desarrollados por los tipos de Sun, que los viejos programadores no sabían nada, que el color rojo es más lindo que el violeta, y otra estupideces), pero tiene novedades interesantes en lo que a ZFS respecta, por ejemplo. La versión es superior a la que teníamos en nuestro OpenSolaris, y también que en el OpenIndiana.
Claro está, tiene el pequeño problema de ser software privativo que el señor Larry entre cirugías y regattas nos permite usar porque es buen chabón.
Pero tengamos en cuenta una cosa importante: si las versiones se comienzan a abrir, entonces estamos ante el problema de no saber en el futuro qué es lo que se podrá o no se podrá montar.
Alguien podría tener un Ubuntu implementado, con su flamante módulo de ZFS, y ver cómo le aparece un mensaje de error que hace referencia a que la versión que tiene es más nueva que la que el sistema operativo soporta.
O alguien puede querer mudar sus containers de una máquina con un ZFS a otra y ver cómo no funciona la migración, alimentando todos los foros del mundo XXXSolaris para que alguien le tire una soga y le permita volver a levantar sus sistemas operativos virtualizados. Parece mentira ne esta época hablar de eso, no?
Por mi parte, mi actitud frente a todo este descontrol es bien clara: seguiré con un grupo de personas con las cuales cada vez que nos juntamos sentimos que estamos haciendo cosas grossas por cada miembro de la comunidad de acá y del resto del mundo, seguiré adaptando paquetes para que se puedan levantar en cualquiera de las versiones de XXXSolaris que aparezcan, y se las seguiré ofreciedo al mundo. Porque sí, porque soy taaaan copado...
Salutte per tutti.
martes 27 de julio de 2010
DRAFT – Compilación de actualizaciones
Para compilar el código fuente que cada cierto tiempo se libera, se deben seguir determinados pasos, así como se debe contar con determinada configuración de ambiente de compilación.
Este capítulo intenta simplificar este proceso a través de una lista de sencillos pasos. La fuente de consulta en caso de dudas es http://hub.opensolaris.org/bin/view/Community+Group+on/devref_toc .
Armado del ambiente de compilación
Como regla general, recordemos que para compilar la versión "N", siempre tendremos que estar utilizando, como mínimo, la versión "N-2". Eso quiere decir que si partimos de la versión onnv_142, podremos compilar la versión onnv_144, por ejemplo. Luego, podremos compilar la versión onnv_145, o la onnv_146.
Instalaremos ante todo, desde el repositorio /dev de opensolaris.org, el paquete "developer/versioning/mercurial".
Luego, tendremos que instalar el paquete "developer/opensolaris/osnet" desde el repositorio "extras" de pkg.sun.com, para el cual necesitaremos seguir determinados pasos, a saber:
- Tener una cuenta. Si no la tenemos, ingersaremos a http://pkg.sun.com/register, y la sacaremos.
- En el mismo sitio ingresaremos, y solicitaremos nuestro certificado para el repositorio "extras" de OpenSolaris.
- En la pantalla donde se nos ofrece bajar la clave y el certificado, bajaremos ambos dos. Es importante guardarlos como si fueran hechos de oro y brillantes.
- Ejecutamos la siguiente secuencia de comandos:
# mkdir -m 0755 -p /var/pkg/ssl
# cp -i OpenSolaris_extras.key.pem /var/pkg/ssl
# cp -i OpenSolaris_extras.certificate.pem /var/pkg/ssl
# pkg set-authority -k /var/pkg/ssl/OpenSolaris_extras.key.pem -c /var/pkg/ssl/OpenSolaris_extras.certificate.pem -O https://pkg.sun.com/opensolaris/extra/ extra
# pkg list -a 'pkg://extra/*'
# pkg install developer/opensolaris/osnet
Si nuestra instalación estaba limpia, cuando instalemos este paquete veremos que también se instalan:
- developer/build/onbld
- library/gnome/base-libs
- developer/parser/bison
- library/libsigsegv
- system/library/mozilla-nss/header-nss
- system/management/snmp/sea
- SUNWwbdev
- developer/java/jdk
- web/server/apache-13
- SUNWcsl
- library/apt-util-13
- SUNWsasnm
- data/docbook
- SUNWjsnmp
- developer/library/lint
- SUNWadmj
- developer/astdev
- text/gnu-gettext
- web/server/apache-22
- SUNWwbapi
- developer/gcc-3
- library/tooltalk
- library/apr-13
- cde/cde-runtime
- system/header
- SUNWlibms
- library/motif
- library/nspr/header-nspr
- library/apt-util-13/apr-ldap
- SUNWwbcou
- developer/gnu-binutils
- SUNWlibC
- developer/lexer/flex
- developer/macro/gnu-m4
- system/library/liblayout
Ahora, debemos instalar el compilador que usaremos. Si instalamos el compilador SunStudio 12 Update 1, tendremos infinitos errores de compilación, dado que el que está homologado, al menos al día de la fecha (07/2010) es el SunStudio 12 (sin el Update 1).
Entonces, tendremos que bajar dicho compilador del url http://hub.opensolaris.org/bin/view/Community+Group+tools/sun_studio_12_..., que nos llevará nuevamente a un sitio donde necesitamos nuestro Sun Online Account.
En mi caso particular, el archivo que bajé es el sunstudio12-patched-ii-2009Sep-sol-x86.tar.bz2, por lo que ejecutaré, para instalarlo, los siguientes comandos:
$ su -
# cd /opt
# mkdir SUNWspro
# cd SUNWspro
# tar jxvf /export/home/hecsa/Downloads/sunstudio12-patched-ii-2009Sep-sol-x86.tar.bz2
...
Compilación del nuevo código
Con esos paquetes instalados, ya podremos bajar el código fuente nuevo.
Debemos ejecutar los siguientes comandos:
$ su -
# cd /opt
# mkdir sources
# cd sources
# hg clone ssh://anon@hg.opensolaris.org/hg/onnv/onnv-gate onnv_144
# cd onnv_144
# hg update onnv_144
Aceptamos el fingerprint si es la primera vez que ingresamos mediante la utilidad "hg" de Mercurial utilizando ssh. Al finalizar este proceso, tendremos un nuevo directorio llamado "/opt/sources/onnv-gate" con aproximadamente 862 MB. Este valor puede variar según la versión que se esté bajando.
También debemos, para esta versión, bajar los binarios cerrados, y los de criptografía.
En nuestro caso, para esta versión, lo haremos desde los URL's: http://dlc.sun.com/osol/on/downloads/b144/on-closed-bins-nd.i386.tar.bz2 y http://dlc.sun.com/osol/on/downloads/b144/on-crypto.i386.tar.bz2.
Para hacer uso de estos dos archivos, ejecutaremos estos comandos:
# cd /opt/sources/onnv_144
# tar jxvf /export/home/hecsa/Downloads/on-closed-bins-nd.i386.tar.bz2
...
# mv /export/home/hecsa/Downloads/on-crypto.i386.tar.bz2 .
Copiaremos y modificaremos el archivo opensolaris.sh:
# cd /opt/sources/onnv_144
# cp usr/src/tools/env/opensolaris.sh .
# vi opensolaris.sh
Modificaremos las siguientes líneas:
GATE=testws;
por
GATE=onnv_144;
CODEMGR_WS="/export/$GATE";
por
CODEMGR_WS="/opt/sources/$GATE";
STAFFER=nobody;
por
STAFFER=root;
Ahora, configuraremos las variables de ambiente necesarias para realizar la compilación:
# export PATH=/opt/onbld/bin:/opt/SUNWspro/bin:$PATH
Al final del archivo agregamos estas dos líneas:
i386_LINT=/opt/SUNWspro/bin/lint; export i386_LINT
amd64_LINT=/opt/SUNWspro/bin/lint; export amd64_LINT
Listos para la compilación, ejecutaremos:
# nightly ./opensolaris.sh &
Si queremos ver cómo van las cosas que estamos haciendo, sólo tendremos que verificar el archivo log/nightly.log, utilizando el comando "tail -f /opt/sources/onnv_144/log/nightly.log". También podemos verificar la existencia de varios comandos "dmake" en plena ejecución con el comando "prstat -a".
Nótese que en forma predeterminada tendremos en la variable NIGHTLY_OPTIONS del archivo opensolaris.sh la letra "p", lo que significa que el comando nightly generará, al final de la compilación, un directorio conteniendo todos los paquetes que se han implementado.
Esos paquetes conforman un repositorio que se encuentra en "/opt/sources/onnv_144/packages".
domingo 20 de junio de 2010
Sobre Cyborgs y demás yerbas
Para los que están acostumbrados a ver salir de mis neuronas artículos sobre tecnologías de código abierto, GNU/Linux y OpenSolaris, u otros más pegados a ciencias duras, la inclusión de éste que tienen en Su poder puede despertar una sensación de considerar que el postre tenía mucho moscato y me cayó mal, dejando casi sin oxígeno al pobre cerebro que intento llevar sobre mis hombros con algo de esfuerzo y dignidad.
Lo cierto es que este tema siempre me interesó. Lo analicé varias veces sin demasiada profundidad, al menos eso es lo que ahora pienso. Veamos cómo encarar un tema que en un principio puede sonar futurista, y casi salido de un libro de ciencia ficción, pero que se mete cada día más en nuestra vida de una forma casi imperceptible, y para quedarse. Hablemos de cyborgs.
¿Qué es un cyborg?
La palabra “cyborg” es un acrónimo de “cybernetic organism”, u organismo cibernético. Y la cibernética no es más que una ciencia estudiosa de las “analogías entre los sistemas de control y comunicación de los seres vivos y los de las máquinas; particularmente, el de las aplicaciones de los mecanismos de regulación biológica a la tecnología” (entre comillas por pertenecer al diccionario de la Real Academia Española").
Simplificando y contrastando con la imagen que el común de la gente tiene, un cyborg es un organismo que posee parte de su tejido orgánico, y parte conformado por dispositivos mecánicos, o electrónicos.
Al hablar de “un organismo”, y no un “ser humano”, estamos dividiendo las aguas y separando éste de conceptos como el del “androide”, que es un autómata con aspecto de ser humano. Un cyborg no tiene por qué tener un aspecto humano.
Un ejemplo de ello son los experimentos que se han hecho en una universidad de Surrey (Inglaterra) utilizando un cerebro de rata contenido en un recipiente capaz de enlazar terminaciones nerviosas a través de un dispositivo bluetooth (enlace inalámbrico para distancias cortas, se utiliza en redes de área pequeña, o portátiles, y de allí su nombre “PAN”) con un robot de tres ruedas y varios juegos de sensores dispuestos para reemplazar ojos, nariz y oídos.
Por suerte, la sociedad protectora de animales estuvo presente en cada uno de los cientos de experimentos que se hicieron en Surrey. Fueron cientos hasta que se terminó de entender cómo hacer para encender los mecanismos del robot usando el cerebro de la rata. Sí, mataron cientos de ratas hasta que le dieron en el clavo.
Es especialmente interesante el momento en el que el robot comienza a funcionar como se esperaba, y podemos ver cómo la rata nota que algo le está faltando (todo su cuerpo), por lo que comienza a mover las ruedas del robot de forma desesperante, como buscando algo que no sabemos qué es.
Por suerte, nos hacemos llamar humanos, y no escatimamos en gastos cuando de lágrimas de rata se trata.
Y yo pensaba que un implante de pelo era antinatural
Si ya lloramos un poco pensando en la pobre rata, veamos ahora un ejemplo de aplicaciones claramente cibernéticas sobre seres humanos.
Tal parece que nuestro querido amigo Kevin Warwick, también de Inglaterra, pero esta vez desde Coventry (¿será sólo una casualidad que sean todos ingleses, y que vengan de ciudades con nombre de aire acondicionado?), decidió llevar sus estudios sobre cibernética un paso más adelante, y un buen día luego de una sobredosis de “El hombre nuclear” desarrollo algo bastante imaginativo.
Su desarrollo se denominó “Proyecto Cyborg”, y (por ahora) constó de dos fases.
En la primera (“Cyborg 1.0”) creó un implante subcutáneo que un grupo de cirujanos dirigidos por él mismo le implantó en el antebrazo.
Este implante consta de un transmisor RFID (Radio Frequency Identification) gracias al cual la identidad de Kevin es verificada en cada lugar por el cual se mueve, abriendo automáticamente puertas y ventanas, o encendiendo las luces y su computadora cuando él se encuentra cerca.
Para que tengamos una idea un poco más acabada del nivel de desarrollo que tiene la tecnología RFID en este momento, ya hay cadenas de supermercados que incorporan etiquetas de este tipo en sus alimentos, sabiendo automáticamente cuándo ingresa, es vendido, o vence. En base a eso, se disparan órdenes de compra automáticas a los proveedores para nunca quedar desabastecidos, o para alimentar la estacionalidad de nuestras costumbres como consumidores.
La segunda fase (“Cyborg 2.0”) es aún más polémica, dado que desarrollo un dispositivo de interface neuronal que luego fue construido por el Dr. Mark Gasson. Este dispositivo fue luego implantado en el sistema nervioso de nuestro amigo Warwick, quien en una primera etapa logró controlar un brazo robot con su pensamiento. Así es, conectó su sistema nervioso a la entrada de internet de la Universidad de Columbia, en Nueva York, y desde ese punto pudo controlar este brazo robotizado.
La broma clásica en esa universidad por aquellos tiempos (2002) era que con tanta pornografía dando vueltas en internet, era de esperar que Kevin quisiera un nuevo brazo.
Como a Warwick no lo satisfizo ese experimento, le conectó un distribuidor de señales a su esposa, con quien aún hoy en día puede mantener contactos en forma telepática utilizando también internet como medio de enlace mundial.
No todo son rosas
Así es, no todo es color de rosa. Algunos ven el mundo en blanco y negro, como le ocurría al artista plástico Neil Harbisson (sí, adivinaron, también es inglés, pero esta vez de Londres).
En sus épocas de estudiante Neil conoció a Adam Montandon, un licenciado en cibernética de la Universidad de Plymouth, con quien trabajó en el desarrollo de un dispositivo denimonado “Eyeborg”.
Este aparato (el eyeborg, no Neil) consta de un sensor frontal que se dispone entre ambos ojos, y una serie de interconexiones que llegan hasta el oído, de forma tal de permitir la conversión de los colores a sonidos.
Esta invención hizo merecedores a Neil y Adam del premio británico a la innovación. Neil, por su parte, recorrió toda Europa y le asignó a cada país un color que lo identificaría. Su obra se denomina “Capital Color of Europe”.
Ya que los colores se pudieron traducir en sonidos, Neil llevó esto un escalón más arriba convirtiendo los sonidos en colores, traduciendo las cien primeras notas de varias partituras famosas en colores, consecuentemente entregándonos una espléndida obra denominada “Color Scores”.
Por suerte, esta historia tiene un final felíz. No matamos ratas, ni esclavizamos esposas controlando cada uno de sus pasos a través de internet.
Cyber-cucatrap
En Japón no podían quedarse atrás. En este caso, el desarrollo se basó en un dispositivo de sólo tres gramos de peso (el doble del de una cucaracha, que soporta cargar hasta veinte veces su masa corporal) aplicado sobre la cabeza de una cucaracha.
Así, se creó una cucaracha que aún estando viva es controlada en forma remota, pudiendo influenciar al resto de su grupo. Me recuerda a ciertos políticos, pero debo ser yo que siempre tengo malos pensamientos.
Se logró modificar el recorrido de un grupo de insectos y hasta su comportamiento frente a determinadas circunstancias.
Volviendo a la tierra
Pisando nuevamente el suelo, nos encontramos con ejemplos de cyborgs mucho más cotidianos. Una persona que tenga implantado un marcapasos puede orgullosamente ubicarse dentro de este grupo, ya que sin este dispositivo no podría siquiera vivir.
En general, hemos dejado de ser seres que se mueven dentro de la pura naturaleza y nos convertimos en dependientes de la tecnología a niveles tales de caer en un colapso nervioso cuando se agota la batería de nuestro celular, o de nuestro reloj pulsera. Ya no sabemos siquiera mirar al cielo para reconocer por la posición de las estrellas si es medianoche o estamos cerca de la madrugada del día siguiente.
Tampoco podemos oler un alimento y saber cuándo está por descomponerse, nos limitamos a verificar la fecha de vencimiento de una lata. Y lo peor, confiamos ciegamente en que un día antes de ese vencimiento nuestro cuerpo estará a gusto con ese alimento, y un día después estaremos ante las siete plagas por ingerirlo.
Por lo tanto, en menor medida (¿realmente menor?) nos hemos convertido en cyborgs. O mejor dicho, nos han obligado a aceptar nuestra característica cyborg casi sin chistar.
Hoy recordaba con una compañera la frase “resistirse es fútil, serás asimilado”, acuñada por la legendaria serie “Star Trek” y sus colonias Borg. Hagan una pausa para suspirar con “SevenOfNine” y sigan adelante.
Desmenuzando algo de la sociedad en la que he nacido, encuentro que esta frase se hace carne en mí. No puedo resistirme a volverme un cyborg; desde que nací, y aún antes de haberlo hecho, las máquinas han sido un factor de supervivencia para mí. Me he vuelto un adicto a ellas, esta sociedad insertó en mi cabeza un sistema de control neuronal que me impulsa a considerarlas una necesidad, aún cuando realmente no lo sean.
No es que hayamos perdido la cordura, es la triste realidad. Si cuando ordenás tu placard te aparece la pantalla del Tetris delante tuyo, es momento de consultar con un profesional, y tirar la PlayStation al tacho de basura.
Algo bueno para cerrar
Basta de mala onda. Seamos felices, encarguemos un Big Mac, y veamos el mundo a través del Google Earth.
Hace menos de un año tuve el gusto de compartir una conferencia con Rómulo Speratti, un miembro del CaFeLUG (Capital Federal Linux Users Group) tal como lo soy yo. Él se dedico a asombrar al público de la Universidad Tecnológica Nacional formándolos sobre los desarrollos que existen en materia de software libre dedicados a personas minusválidas y discapacitadas. No voy a ahondar en la diferencia que existe entre cada tipo de discapacidad porque si hay alguien que realmente sabe de eso es él, yo soy apenas un neófito, y desde ese día, otro entusiasta esperando en algún momento poder ser un colaborador de sus proyectos.
Tan abrumado salí de su conferencia, que me puse a investigar más a fondo sobre los temas que había tocado.
Concretamente, tuve el gusto de implementar un software denomiado eViaCam que sirve para que personas cuadripléjicas, sólo girando su cara, puedan controlar una computadora en forma completa accediendo a páginas web, escribiendo y leyendo mails, o realizando cualquier tipo de trabajo que con una máquina es posible.
También implementé el sistema Orca en mi computadora, que lee el texto que tengo delante de mí, o magnifica cualquier parte de la pantalla para que pueda verlo más cómodamente.
Me queda la felicidad de estos inventos, y de recibir a veces algún mail de sus listas de correos, con la ilusión de que fueron escritos por personas que de no haber sido desarrollados, no hubieran podido decirle al mundo lo que sienten.
Hasta la próxima, mis queridos cyborgs.






