la propiedad timeout en puppet

Este post que va corto me sirve mas como una nota para un futuro. Lo hago publico porque puede ayudar a algunos con problemas de tiempo de ejecución de comandos con puppet.

Primero aclaremos que es puppet y svn, Puppet es un sistema para automatizar tareas, escalable y libre, permite simplificar la mayoría de las tareas técnicas que los administradores de sistema hacemos diariamente. Lo mejor de todo es que las clases, templates y demás archivos de puppet pueden ser compartidos como cualquier otro código.

El segundo tema que quería aclarar era el de svn (Subversion) que es un sistema de control de versiones el cual automatiza las tareas de guardar, recuperar, registrar, identificar y manejar archivos. Muy útil para archivos que son modificados frecuentemente.

El problema que tenia era con una clase de puppet muy similar a esta:
exec {
  "templates-listo": path => "/bin:/usr/bin:/usr/sbin:/usr/local/bin",
  command => "svn co --non-interactive http://svn.orvtech.com/cms/templates /var/www/cms/templates/",
  onlyif => "/usr/bin/test -d /var/www/cms/",
  unless => "/usr/bin/test -f /tmp/templates.chkout",
}

Esta clase se ejecuta sin problemas pero no hace el checkout completo del repositorio, siempre quedan pendientes algunos directorios que no son copiados.

La solución a este problema en mi caso fue el de agregar timeout => 0, y así permitirle a subversion que termine de hacer la copia. La clase final queda muy parecida a:

exec {
  "templates-listo": path => "/bin:/usr/bin:/usr/sbin:/usr/local/bin",
  command => "svn co --non-interactive http://svn.orvtech.com/cms/templates /var/www/cms/templates/",
  timeout => 0,
  onlyif => "/usr/bin/test -d /var/www/cms/",
  unless => "/usr/bin/test -f /tmp/templates.chkout",
}

El archivo /tmp/templates.chkout es creado por otra clase que verifica si el checkout se realizo sin problemas.


La nueva interfaz gráfica de Fedora 15 (Gnome 3) puede ser confusa para algunos, en especial si están acostumbrados a otros sistemas operativos o distribuciones. Recientemente he visto como se ha incrementado la cantidad de preguntas en canal de IRC #fedora-latam referente a este tema, desde ¿Como se instalan programas en Fedora? hasta "Descargue este blender.exe, ¿Como lo instalo?".

La ventaja de usar aplicaciones que están en el repositorio de Fedora es que los programas allí colocados tienen una firma electrónica que valida y garantiza la autenticidad del programa que estás instalando además garantiza que el programa que instalas tiene una alta calidad y es compatible 100% con Fedora y a diferencia de Windows no tienes que estar buscando cracks ni tener que hacer cualquier cantidad de cosas antes de poderlos descargar.

Aquí les dejo un video:



Para los que tienen equipos que no soportan la nueva interfaz gráfica de Gnome 3 y están corriendo en 'fall-back mode' aquí les dejo unas capturas de pantalla:

  1. Hacemos click en Aplicaciones, se encuentra en la parte superior izquierda de nuestras pantallas, seguidamente click en Herramientas de sistema del y por ultimo en Añadir/Quitar Software

    Click en Aplicaciones luego en Herramientas de sistema y por ultimo Añadir/Quitar Software

  2. Buscamos la aplicación que queremos instalar, en este caso Blender y la seleccionamos en la ventana de los resultados que se encuentra a la derecha.

    Buscamos la aplicación, en este caso blender

  3. Revisamos las dependencias requeridas para instalar esta aplicación y aceptamos.

    Revisamos la lista de dependencias y aceptamos

  4. Por ultimo, autorizamos la instalación de la aplicación y su dependencias autentificandonos con las credenciales apropiadas.

    Autorizamos la instalación autentificandonos con las credenciales apropiadas

  5. Luego de esto Blender se instalara con todas las dependencias necesarias para su funcionamiento. Los programas instalados pueden ser localizados inmediatamente en el menú de aplicaciones.

Mi presentación ante el Grupo de Usuarios de Linux de South MIami Dade

A finales del 2006 fue la ultima vez que asistí a una reunión del grupo de usuarios de Linux (LUG por su siglas en ingles) de Miami hasta este pasado fin de semana. El grupo es un poco mas pequeño de lo que recuerdo pero las intenciones y la motivación siguen siendo las mismas.

Mi participación este pasado 11 de Junio no se limito a ser oyente, por el contrario, di una corta charla que consistió en un recuento del FUDcon de Panamá, Un servidor casero económico y diagnosticar problemas usando strace.

El tema que mas genero preguntas fue el del "Un servidor casero económico" especialmente sobre un NSLU2 que lleve para que lo vieran, algunos de los participantes no podían creer que esa cosa tan pequeña con un costo menor de $30 pudiese convertirse en un servidor web. Parte de mi charla consistió en demostrar lo que es capaz de hacer este mini NAS hackeado a mini server, así que les mostré el blog http://www.linuxevolution.org que esta corriendo sobre mi NSLU2 y además les hice una demostración de transmisión de imágenes en vivo con fotos del evento.

La charla cerro con el tema de 'Diagnosticar problemas con strace' fue la siguiente y aunque cubrí todo lo básico, me hubiese gustado haber hecho una practica sobre este tema.

Aquí les dejo un video de parte de mi presentación donde le explico a un miembro del LUG sobre el NSLU2. Me despido muy agradecido con Jonathan Respeto del southdadelug.org por su invitación a este evento y pueden descargar aqui mi presentación en formato PDF.

Si te pareció interesante este articulo, tal vez este otro también te interese: Reunión de septiembre en el LUG de Miami

El modo de single user (usuario individual) un modo en el cual un sistema operativo multi-usuarios es iniciado en modo de super usuario. Por lo general se usa para mantenimientos. En Linux es muy popular iniciar en este modo para cambiar el password del usuario.

Aquí les dejo los pasos para arrancar Fedora (y la mayoría de las distribuciones de linux) en modo single user.

  1. Al momento de arrancar presiona 'TAB' y seleccionamos el kernel desde el cual queremos arrancar en caso de que tengamos varios. deberías de ver una pantalla como esta: Seleccionamos la primera opción de arranque de Fedora Linux y presionamos la tecla e para editarla

  2. Presiona la tecla E para editar esta entrada en el menú de grub y selecciona la segunda linea, la que comienza con la palabra kernel.

    Es esta segunda linea que vamos a editar

  3. Presiona E para que puedas editar esa linea y agregar la palabra single al final de la linea.

    Asi se ve el inicio de la linea que vamos a editar en la configuración de grub

    Aquí vamos a editar los parámetros que se le pasa al kernel, podemos borrar quiet y rhgb

    Aquí vamos a editar los parámetros que se le pasa al kernel, podemos borrar quiet y rhgb

    Le pasamos el parámetro single al kernel en el grub

    Le pasamos el parámetro single al kernel en el grub

  4. Presiona ENTER para finalizar la edición de parámetros del kernel. Seguidamente presiona la tecla B para arrancar esa entrada del grub en modo single user. Como ven, ejecutando el comando who -r muestra en que nivel estamos, en este caso estamos en single.

    who -r nos muestra que estamos en single user mode

Una vez que iniciamos bajo modo single user, podemos iniciar el servicio de red ejecutando /etc/init.d/network start. Suficiente para usar fpaste y irssi y consultar cualquier duda que tengamos en el canal #fedora del servidor irc.freenode.net.

Supongamos que necesitamos soporte por que nuestra laptop no termina de iniciar. Algo que podemos hacer es iniciar en mode single user, arrancar el servicio de red y ejecutar cat /var/log/messages | fpaste luego ejecutamos irssi -c irc.freenode.net y nos unimos al canal de Fedora LATAM con el comando /j #fedora-latam, allí podemos compartir la URL que nos dio como resultado el comando fpaste.

Existe aun un nivel mas bajo que single user mode donde no se montan particiones en modo escritura. Es un nivel mucho mas básico. Para entrar en este nivel es necesario pasarle al kernel el parámetro init=/bin/bash en vez de pasarle single. Le pasamos el parámetro init con el valor /bin/bash al kernel en el grub

Un nivel mas bajo que single. Bajo init=/bin/bash el comando who no reporta en que nivel estamos. Un nivel mas bajo que single. Bajo /bin/bash el comando who no reporta en que nivel estamos

Hoy quiero retomar el tema del NSLU2, el tema de un servidor casero, silencioso y económico. El NSLU2 es un dispositivo que Linksys saco al mercado como un simple NAS sin muchas funciones que se diga pero gracias a esfuerzos de la comunidad se ha podido convertir en un servidor completo. Para Nosotros, los que nos gusta meterle Linux a cualquier cosa que consuma electricidad y tenga conectividad a internet le llamamos de cariño "Slug".

El Slug es una solución completa, barata para jugar con Linux embebido y lo mejor de todo es que el firmware original de Linksys usas el Kernel de Linux por lo tanto liberan el código fuente. Hoy en día aunque ya no tienen tanta actividad Unslung y OpenSlug siguen siendo las principales comunidades orientadas al NSLU2.

Debido a que ya esta descontinuado el NSLU2 no se puede comprar directo en las tiendas si en las que se puede lo cobran excesivamente caro. La solución es comprarlo por vías alternas como eBay, craigslist, etc.

Mi experiencia con el NSLU2 en cuanto a sistemas operativos se limita a Gentoo y Debian, particularmente prefiero Gentoo para este dispositivo ahora que Fedora esta empezando a desarrollar para ARM seria interesante intentar compilarlo para el NSLU2.

El NSLU2 viene limitado a correr a 133MHz pero su procesador en realidad es de 266MHz, para liberarlo es necesario eliminar un transistor. Así que sin miedo desconecten el cable de poder, abran la carcasa y eliminen este transistor:

Como servidor web con sus 266MHz (liberado desde 133MHz) y tan solo 32MB de RAM no es exactamente el tipo de servidores que usaríamos en para hostear el landing page de fedoraproyect.org o el wiki de Fedora pero si podemos tener nuestro blog personal corriendo en conjunto con otros servicios.



El NSLU2 no es la única opción en el mercado, pero es la mejor si tomamos en consideración el costo, al cabo de un anho de estar prendido 24/7 y los beneficios que obtenemos a cambio. Entre las alternativas que les puedo comentar están el DSM-G600 de D-LINK que cuesta alrededor de $50 y la primera versión del Apple TV por $110.


El DSM-G600 es rápido, tiene un procesador de 266MHZ al igual que el NSLU2 pero tiene 64MB de RAM y el almacenamiento es vía IDE en vez de USB 2.0. Lo malo de este dispositivo es que requiere de un ventilador para mantenerlo fresco y sacar el calor que genera el CPU y el disco duro en la carcasa.

La primera versión del AppleTV debería de ser mas rápida aun con su procesador de 1 GHz Intel "Crofton" Pentium M, 256 MB a 400 MHz DDR2 de memoria RAM y almacenamiento mas rápido que el NSLU2. No tengo mas que comentarles respecto a este candidato para servidor porque lo tengo corriendo con XBMC y lo tengo como media center hasta que le consiga remplazo (un google tv?).

Se le puede montar wordpress, joomla o algo así? No, créanme intente correr wordpress con 3 plugins distintos para la DB, intente usar sqlite3 y otros plugins para minimizar la carga de la DB pero no logre correr el blog que soportara mas de 3 conexiones simultaneas.

La buena noticia es que existen alternativas, en mi caso termine por usar Nanoblogger. Nanoblogger es un manejador de contenido que genera contenido estático esto reduce bastante la carga en el NSLU2.

CGI en BASH? No es tan halado de los cabellos como muchos piensan. Yo lo uso para cosas puntuales como una interfaz web para agregar artículos a Nanoblogger o mantener una URL (por ejemplo orvtech.com/ultima.bash siempre apuntando a la ultima URL que ya publicamos).

El limite de lo que puedes hacer con el NSLU2 es como el de Linux, te lo pones tu. Para mi no tiene limites, siempre hay una alternativa a lo que se puede hacer con maquinas potentes, para muestra aquí les dejo una lista de cosas interesantes que he hecho con el NSLU2:

  • Transmisión en vivo de imágenes: Con una demora de tres a cinco minutos un conjunto de scripts corriendo en el NSLU2 puede ser usado para cubrir eventos como el FLISOL, FUDcon, Google IO, eventos deportivos y convenciones en genera. La cobertura puede ser hecha por cualquiera con un dispositivo capaz de tomar fotos y enviarlas por email. Estos scripts manipulan estas imágenes insertando información relevante al evento, por ejemplo mis scripts para cubrir carreras de carros generan imágenes como esta:

    Como ven, en la parte superior tengo la fecha, hora, temperatura y presión atmosférica así como el logo en la parte inferior derecha. Puedes leer mas de este tema pinchando aquí.

  • Un puente de last.fm a gNewBook: Con un script hecho en BASH el NSLU2 puede actualizar nuestro estado en gNewBook.org con la ultima canción escuchada en nuestro perfil de last.fm. Si quieres ver el script, pincha aqui.

  • Comparte archivos vía torrents con tu propio tracker en el NSLU2: Usando bittornado podemos configurar el NSLU2 para que sea un torrent tracker. Para leer mas del tema puedes leer este articulo.

  • Un reproductor de música inalámbrico: Este articulo es una traducción de una mini-guia publicada por "POTUS Camacho", basicamente te explica como usar el NSLU2 y una tarjeta USB de bluetooh para convertir el NSLU2 en un MP3 player inalámbrico. La traducción de este articulo puede ser leída aqui.

Luego del fiasco de la HP DM1Z decidí comprarme comprarme el equivalente de la marca Lenovo y la verdad es que no me arrepiento. La ThinkPad X120e es la respuesta de Lenovo a las ultra portátiles de bajo costo y alto rendimiento. Con una pantalla de 11.6 pulgadas y un procesador AMD E-350 Fusion de 1.6HGz dual-core, un teclado envidiable por el resto de las netbooks la X120e Lenovo ha logrado hacerme olvidar de mi frustración con mi netbook anterior (la HP DM1Z).

Al igual que la DM1Z, esta ThinkPad ofrece buenos gráficos, larga vida de batería aunque a un costo un poco mas alto. Básicamente estas pagando por calidad. Esta netbook se siente solida, no tiene el problema del trackpad y aunque suene repetitivo, el teclado es comodisimo, aquí les dejo unas fotos de cuando la recibí.

[gallery]

Este seria el resumen de las características técnicas de esta netbook o playbook.

Precio: $399 / $579
CPU 1.6GHz dual-core AMD Fusion E-350
Memoria: RAM 4GB a 667MHz tipo DDR3
Disco Duro: 320GB 7,200rpm
Chipset ID1510 + SB800
Gráficos: AMD Radeon HD 6310
Sistema Operativo Windows 7 Pro. (64-bit). Se puede hacer el upgrade a Linux fácilmente.
Dimensiones: 11.1x8.3 pulgadas
Altura: 0.6-1.2 Pulgadas
Pantalla: 11.6 pulgadas
Peso / Peso con cargador: 1.53 / 1.8 Kilos

Tienes problemas para iniciar httpd y no hay errores en los logs?, Tienes otro programa que que se congela y no tienes ni idea de que pueda estar pasando? es buen momento para empezar a usar strace.

Strace es una utilidad que se usa para correr un comando y visualizar todas sus interacciones con el sistema de forma que puedes ver exactamente que esta haciendo el programa desde que inicia hasta que sale incluso puede ser usado para hacer pruebas de rendimiento y estabilidad. En este articulo lo usaremos solo como una herramienta de diagnostico para ver por que un programa se congela.

El comando strace es fácil de usar, simplemente ejecuta strace al iniciar el servicio o programa que deseas diagnosticar, por ejemplo:

strace date

Esto te debería de dar una salida de bastantes lineas en el terminal. Veamos que pasa cuando una aplicación da error, intentemos correr man sin ningún parámetro.

$ man What manual page do you want?

Ahora veamos que hace man para llegar a ese mensaje:

execve("/usr/bin/man", ["man"], [/* 23 vars */]) = 0 brk(0)                                  = 0x9e89000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7869000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=24131, ...}) = 0 ...
open("/usr/share/locale/en_US.UTF-8/man", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/man", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/man", O_RDONLY) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=5830, ...}) = 0
mmap2(NULL, 5830, PROT_READ, MAP_PRIVATE, 4, 0) = 0xb7865000
close(4)                                = 0
write(2, "What manual page do you want?\n", 30) = 30 ...

Gracias a que man dio como salida "What manual page do you want?" sabemos cual es el error, pero si no nos hubiese dado este mensaje, como sabemos lo que esta pasando? aquí es cuando strace nos ayuda. La salida del strace es mucho mas larga que el párrafo que tenemos arriba pero lo recorte solo para mostrar lo que nos interesa en este ejemplo. Si se fijan el error "-1 ENOENT (No such file or directory)" se repite unas tres veces esto en algunos casos es un indicativo de lo que puede estar pasando.

Identificar los errores es relativamente fácil, por lo general tienen un -1 como salida y no todos los errores son fatales pero nos pueden dar pistas de lo que este mal con el programa

Algunos paramentos interesantes Puedes usar -u seguido del nombre del usuario para ejecutarlo como ese usuario en especifico cosa que es ideal para identificar correctamente problemas de permisos y lo mas seguro es que estés corriendo strace como root pero la mayoría de los servicios tienen sus propios usuarios para correr.

El parámetro -p seguido del PID es útil cuando el proceso que queremos examinar ya esta corriendo.

Personalmente suelo correrlo con estos parámetros:

strace -f -F -v -s 8192  -o <archivo>
  • -f Permite hacerle strace a los posibles forks que haga un programa, por ejemplo httpd.
  • -F Cumple la misma función que -f pero siempre lo pongo por cuestión de costumbre.
  • -v Nos da una salida detallada.
  • -s 8192 Asigno el valor de 8192 como limite de longitud de las cadenas que se van a imprimir. Por defecto es 32 y yo quiero la mayor cantidad de información posible.
  • -o La salida va a ser redirigida a un archivo.

Fedora sale de su fase alfa y entra en beta

La popular distribución de Linux Fedora, ha anunciado hoy su cambio de alfa a beta, aunque no es el método oficial, los usuarios Alfa pueden ejecutar yum clean all y seguidamente un yum upgrade para actualizar, si necesitan algo de documentación pueden revisar Fedora Project wiki: Yum Upgrade FAQ que aunque algo desactualizado seguramente responderá a muchas de sus preguntas.

La opción de menor problemática vendría siendo el instalar desde cero, con un medio físico como CD, DVD o USB esto lo pueden hacer descargando los archivos necesarios desde http://torrent.fedoraproject.org/.

Exportar tu shell script a HTML, con sintaxis resaltada en colores es posible con la ayuda de Vim y este comando:

vim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" hola.sh

Esta linea convierte hola.sh a hola.sh.html, el parámetro -f forza a Vim a permanecer en el primer plano, cosa que es útil si Vim va a ser utilizado por otro programa como un cliente de correos o en nuestro caso este script.

Activar el coloreado de sintaxis y ejecutar el plugin 2html.vim seria la segunda parte de este script. Aquí pasa algo peculiar, plugin 2html.vim divide la pantalla de Vim donde la parte superior es el código HTML y la inferior es el documento original. Seguidamente se le envía wq para salvar y salir de la primera ventana y se le envía q para que termine con la ventana restante.

La salida de esta linea seria hola.sh.html y luce así:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>/tmp/hola.sh.html</title>
<meta name="Generator" content="Vim/7.4">
<meta name="plugin-version" content="vim7.4_v1">
<meta name="syntax" content="bash">
<meta name="settings" content="use_css,pre_wrap,no_foldcolumn,prevent_copy=">
<meta name="colorscheme" content="none">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffff; }
body { font-family: monospace; color: #000000; background-color: #ffffff; }
* { font-size: 1em; }
.Comment { color: #0000c0; }
.Constant { color: #c00000; }
.Statement { color: #af5f00; }
-->
</style>

<script type='text/javascript'>
<!--

-->
</script>
</head>
<body>
<pre id='vimCodeElement'>
<span class="Comment">#!/bin/bash</span>
<span class="Comment"># orvtech.com</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">Este script sera convertido</span><span class="Statement">&quot;</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">a HTML usando Vim</span><span class="Statement">&quot;</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->
#!/bin/bash
# orvtech.com
echo "Este script sera convertido"
echo "a HTML usando Vim"

Incorporar este script en un bucle para que convierta todos los shell scripts a HTML es fácil, con un bucle for, lo podemos hacer, quedaría así:

for ARCHIVO in `ls *.sh`
  do echo -e "Convirtiendo $ARCHIVO a HTML"  vim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $ARCHIVO
done

Hace un par de semanas me asignaron una laptop nueva en el trabajo, cambie mi Lenovo T60 por una T410 que en general es mucho mas rápida. La nueva tiene 4GB de RAM por lo que preferí instalar Fedora 64 bits, todo me funciono sin problemas excepto por el ajuste del brillo de la pantalla, investigando un poco conseguí el controlador de vídeo como lo pueden ver aquí:

lspci | grep VGA
01:00.0 VGA compatible controller: nVidia Corporation GT218 [NVS 3100M] (rev a2)
Ajuste de brillo de pantalla en Fedora 14 para una laptop Lenovo T410

Luego de instalare los controladores privativos de nVidia me puse a probar las teclas especiales y note que no podía ajustar el brillo de la pantalla, cosa que es una molestia en especial si te toca estar de guarida y te llaman a las 3am por que el servidor XYZ reporta cargas altas. Luego de investigar un poco comparar versiones distintas de xorg.conf, encontré la solución. En la sección Device es necesario agregarle la opción RegistryDwords y la variable EnableBrightnessControl con el valor 1. La sección Device queda así:

Section "Device"
  Identifier     "Device0"
  Driver         "nvidia"
  VendorName     "NVIDIA Corporation"
  Option "RegistryDwords" "EnableBrightnessControl=1"
EndSection

Mi archivo de configuración xorg.conf completo puede ser descargado desde este link.