2012 otro año de éxito para Linux

El año 2012 ha sido para el sistema operativo GNU/Linux y su kernel Linux otro año de éxito y satisfacciones, en el que se recibieron varios galardones y se alcanzaron nuevos records. El sistema operativo continúa siendo la plataforma de mayor crecimiento en distintos ámbitos de aplicación, con nuevos proyectos y oportunidades de negocios cada día.

La Linux Foundation ha publicado un video que resume en dos minutos el año 2012 para Linux, con palabras del propio Linus Torvalds:

… y cómo concluye el video…

Se parte del proyecto de desarrollo colaborativo más grande del Mundo

Amazon EC2 linea de comandos

Las API Tools de Amazon permiten realizar acciones sobre la nube de Amazon como se hace desde la Consola Web, pero directamente desde la línea de comandos.

En este artículo describo cómo tengo mi instalación en Mac OS X, aunque perfectamente es aplicable para Linux u otros Unix. Esta descripción también incluye la configuración para poder trabajar con varias cuentas de Amazon independientes.

Sin duda, esta instalación puede ser perfeccionada, así que espero sugerencias en los comentarios.

Java JDK

Las herramientas de Amazon requieren Java, sirve tanto sea JDK como JRE. El documento de instalación oficial de Amazon describe cómo realizar esta instalación.

Es mandatorio tener configurada la variable de ambiente JAVA_HOME. Esto se se hace agregando la siguiente línea al archivo ~/.bashrc:

export JAVA_HOME=»/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home»

Amazon EC2 API Tools

Descargar las herramientas de Amazon EC2 API Tools y descompactar en /usr/local; renombrar directorio de extracción a amazon

cd /usr/local
unzip ec2-api-tools.zip
mv ec2-api-tools-1.6.5.1 /usr/local/amazon

Configurar el entorno creado para dejarlo disponible, agregando las siguientes líneas en el archivo ~/.bashrc

export EC2_HOME=/usr/local/amazon
export EC2_AMITOOL_HOME=/usr/local/amazon
export PATH=$PATH:$EC2_HOME/bin

Certificados de Seguridad

Crear y descargar los certificados X.509 de Credenciales de Acceso en la cuenta de Amazon. Estos certificados digitales permiten validar SOAP para las herramientas de línea de comandos.

Se obtienen dos archivos:

  • pk-33XYJMEMKWAFXK0UZ7OU6FWCRYBR99Y.pem
    Llave privada RSA: respaldar (si se extravía se debe generar una nueva)
  • cert-33XYJMEMKWAFXK0UZ7OU6FWCRYBR99LY.pem
    Certificado público X.509: se puede acceder y volver a bajar siempre.

En caso de dudas de cómo funciona el sistema de validación en Amazon, consultar la documentación oficial.

Dejar esos dos archivos en un directorio “oculto” en el home el usuario

cd
mkdir .ec2
chmod 700 .ec2

chmod 400 .ec2/pk-33XYJMEMKWAFXK0UZ7OU6FWCRYBR99Y.pem

ls .ec2/
cert-33XYJMEMKWAFXK0UZ7OU6FWCRYBR99LY.pem pk-33XYJMEMKWAFXK0UZ7OU6FWCRYBR99Y.pem

Entorno para uso de certificados

Crear un alias que cargue las variables de ambiente con los certificados, con la siguiente línea en el archivo ~/.bash_aliases (o en el ~/.bashrc):

alias ec2cuentaA=’KEY=»33XYJMEMKWAFXK0UZ7OU6FWCRYBR99LY»;
export EC2_PRIVATE_KEY=$HOME/.ec2/pk-$KEY.pem;
export EC2_CERT=$HOME/.ec2/cert-$KEY.pem’

(es una única línea, pero se muestra aquí en tres líneas para facilitar la lectura)

Para cada cuenta que se tenga de Amazon EC2 se crea un alias que cargue los certificados correspondientes, por ejemplo ec2cuentaB, ec2empresa1, etc.

Probar Instalación

Al abrir una nueva terminal se estará cargando el entorno definido en el ~/.bashrc (si así está previamente definido en el archivo ~/.profile o ~/.bash_profile o ~/.bash_login).

Cuando se desea conectar con una cuenta determinada, ejecutar el alias:

ec2cuentaA

Y ya se pueden usar dos comandos para consultar Amazon EC2:

$ ec2-describe-regions
REGION eu-west-1 ec2.eu-west-1.amazonaws.com
REGION sa-east-1 ec2.sa-east-1.amazonaws.com
REGION us-east-1 ec2.us-east-1.amazonaws.com
REGION ap-northeast-1 ec2.ap-northeast-1.amazonaws.com
REGION us-west-2 ec2.us-west-2.amazonaws.com
REGION us-west-1 ec2.us-west-1.amazonaws.com
REGION ap-southeast-1 ec2.ap-southeast-1.amazonaws.com

$ ec2-describe-availability-zones
AVAILABILITYZONE us-east-1a available us-east-1
AVAILABILITYZONE us-east-1b available us-east-1
AVAILABILITYZONE us-east-1c available us-east-1
AVAILABILITYZONE us-east-1d available us-east-1
AVAILABILITYZONE us-east-1e available us-east-1

Los comandos de las Amazon API Tools quedan disponibles en el PATH y expandibles con el tabulador (en Bash). En caso de que algo no esté bien configurado muestra un error.

Referencias

El origen de este artículo es una página de mi Wiki Pi.Lastr.Us donde mantengo la información actualizada de este tema.

Los artículos de Hugh Gilmour «Installar las herramientas de EC2 API en Mac OS X Leopard» y de Robert Sosinski «Starting Amazon EC2 with Mac OS X» fueron de gran ayuda para escribir este artículo.

Copiar base de datos MySQL de un servidor a otro

Tengo un servidor en producción por allá en la nube y quiero tener otra réplica (asincrónica) de algunas bases de datos MySQL. Buscando la solución más sencilla y rápida llegue a este script que se ejecuta en el servidor de réplica y que trae la base de datos remota y la deja activa en el MySQL local.

ssh shelluser@server.remoto.com «mysqldump -uusuario -pclave123 basedatos | gzip -c1» | gunzip -c | mysql -uroot -ppassword basedatos

Los comandos ente comillas mysqldump -uusuario -pclave123 basedatos | gzip -c1 se ejecutan en el servidor remoto mediante la conexión ssh que debe poder realizar el usuario ‘shelluser’, para sacar por estándar output el dump compactado de la base de datos.

Localmente se recibe por estandar input con los comandos gunzip -c | mysql -uroot -ppassword basedatos, que descomprimen y ejecutan los comandos del dump en el mysql local contra la base de datos que se indica.

El gzip y el gunzip es opcional y lo que busca hacer es comprimir el tráfico que se transfiere mediante SSH, y solo sería necesario si la base que se está bajando es de cierto volumen.

Debug lighttpd magnet lua script

El servidor web lighttpd mediante su módulo magnet (mod_magnet) permite incorporar la funcionalidad del lenguaje lua para el manejo las peticiones al servidor.

La siguiente porción de código se puede incorporar al final del script lua para conocer cómo será recibida la petición para ser servida:

print(«>>>>> parts of the URI»)
print(«request.uri: » .. lighty.env[«request.uri»])
print(«uri.path: » .. lighty.env[«uri.path»])
print(«uri.path-raw: » .. lighty.env[«uri.path-raw»])
print(«uri.scheme: » .. lighty.env[«uri.scheme»])
print(«uri.authority: » .. lighty.env[«uri.authority»])
print(«uri.query: » .. lighty.env[«uri.query»])
print(«>> filenames, pathnames»)
print(«physical.path: » .. lighty.env[«physical.path»])
print(«physical.rel-path: » .. lighty.env[«physical.rel-path»])
print(«physical.doc-root: » .. lighty.env[«physical.doc-root»])

y la salida quedará guardada en el archivo /var/log/lighttpd/error.log

Cuando la regla es la excepción

Muchos medios en internet han hecho eco de la noticia sobre Google bloqueando a un autor que quiere distribuir su obra mediante redes P2P.

Las redes P2P fueron creadas para distribuir masivamente contenidos digitales de una forma descentralizada y óptima pero fueron aprovechadas rápidamente por los que distribuyen contenidos sin las debidas autorizaciones, transformándose esta excepción en la regla de las redes P2P.

Mientras, por un lado, está bastante consolidada la idea que las redes P2P buscan distribuir material ilegalmente; por otro lado el que quiere distribuir material legal por ellas termina siendo segregado y tratado de «rarito».

De esta forma los falsos positivos están a la órden del día. Tendremos que acostumbrarnos más y más a demostrar que no somos culpables. Horrible? sin duda!

Una pena que una tecnología tan interesante como P2P termine siendo la mala de la película. Hay muchas razones y, creo, que desde distintos puntos de vista, todos tenemos una cuota de responsabilidad.

Liberar la memoria en Linux

Free Your Mind Now! Me ha sucedido en Linux que a pesar de bajar aplicaciones, la memoria sigue estando ocupada, como si no se liberara. Este comportamiento busca lograr un mejor uso de la memoria dejando cargadas las aplicaciones recientes.

En principio lo que se describe en este artículo no es algo que deba preocupar a la mayoría de los usuarios, ya que el kernel se encargará de administrar la memoria y de manejar estos datos cacheados; pero puede darse la situación (me ha pasado varias veces) que se necesita memoria libre y no se puede esperar por el kernel, así que aquí describo el procedimiento para liberar la memoria.

A partir del kernel 2.6.16 hay una forma de decirle al kernel que limpie esa memoria que mantiene en cache. Para esto se utiliza el archivo /proc/sys/vm/drop_caches que generalmente tiene un cero si lo desplegamos.

Para liberar paginas en cache, como root ejecutamos:

sysctl vm.drop_caches=1

Para liberar dentries e inodos:

sysctl vm.drop_caches=2

Para liberar páginas de cache, dentries e inodos:

sysctl vm.drop_caches=3

Cuando ejecutamos estos comandos se cambia el número cero por el número que pasamos y, apenas el kernel libera la memoria, vuelve a restaurar el cero.

Lo ideal es ejecutar sync primero para bajar los datos en el buffer de memoria a disco y luego los comandos de arriba, por ejemplo:

sync; sysctl vm.drop_caches=3

y esto perfectamente puede ser colocado en el crontab de root o en un script en la carpeta /etc/cron.hourly

Foto de EnvironmentBlog (algunos Derechos Reservados)

Cortando con el Visio

Un jerarca conocido decidió expresar sus ideas mediante un diagrama en Visio® y luego compartirla con otros actores de la organización. El resultado fue el obvio: los otros no tenían cómo verlo y mucho menos editarlo, por lo que terminaron con con una versión impresa, recortando los dibujitos con tijera y armando un nuevo diagrama pegándolos en otra hoja. El corolario es una «corrida» para que otras áreas de la organización tengan instalado y disponible el Visio®.

La necesidad de compartir y trabajar en equipo es real, y estas herramientas que nos «pegan» a nuestros escritorios terminan siendo una carga que complota contra la realidad. Así que pasé a ver qué alternativas existen para cortar con el vicio que genera el Visio®.

LucidChart

http://www.lucidchart.com/

Se presenta como una solución justamente para este problema, con la posibilidad de importar los diagramas que se tengan hechos en Visio. Y en este sentido, está orientado precisamente a usuarios de Visio®

DiagramLy

http://www.diagram.ly/

Es una aplicación «pronta para usar» que guarda los resultados en XML en el disco local. Es simple, pero es para hacer diagramas y ya.

Gliffy

http://www.gliffy.com/

A diferencia de DiagramLy requiere registro, pero luego podemos ya podemos utilizarla. En este caso no es parecida a Visio, pero es muy potente y he encontrado referencias que la recomiendan bastante.

Cacoo

https://cacoo.com/

Es la herramienta de diagramas online que más he utilizado. Está principalmente pensado para diagramas colaborativos, formar grupos de trabajo e interactuar. La versión gratis tiene limitaciones, pero es perfectamente usable para un primer acercamiento y probar la herramienta.

"Hay peores cosas que quemar libros, una de ellas es no leerlos"

Hoy 6 de junio se ha producido la defunción de Ray Bradbury. Claro que no fue mi amigo, ni siquiera llegamos a conocernos o a simplemente cruzarnos, tampoco nos seguíamos en twitter… no nada de eso, solo que su obra marcó un antes y un después en mi relación con la literatura (y si, fue hace muchos años…)

Su desaparición física nos condena a no tener nuevos aportes de su producción intelectual, pero su obra seguirá produciendo efectos en todos nosotros y, sin dudas, nuevos autores encontrarán allí una fuente de inspiración.

Soy de la idea que los libros, en formato papel están condenados al desuso, como sucedió con el papiro. Pero la obra permanecerá… no importa si el ser humano tiene que crear una secta de hombres libro para mantenerla, siempre seguiremos leyendo, a pesar de la televisión, de las leyes, los gobiernos, los dispositivos técnicos, … siempre.