Erudeando con Duker

Tecnologías de la Información, de las Otras y la cosas de la vida…

QuickHowTo: Instalar Jenkins en CentOS 5.5

Aquí les dejo una crónica de la instalación de Jenkins en CentIOS 5.5 por si les interesa empezar a utilizarlo para sus soluciones de CI.

Acá pueden encontrar las instrucciones oficiales, yo decidí instalarlo standalone, es decir sin tener un Tomcat corriendo.

El primer paso es agregar los repositorios de Jenkins y su firma a nuestro yum, para ello ejecutamos los siguientes comandos como root:

# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
# rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
# yum update && yum install jenkins

El siguiente paso es configurar el servicio en caso de que no nos sirva alguno de los parámetros por defecto del mismo, para eso necesitamos editar el archivo/etc/sysconfig/jenkins

En mi caso cambie el puerto por defecto de 8080 a 5353 ya que tengo el 8080 ocupado por otros servicios. Esto lo hice modificando la variable JENKINS_PORT de la siguiente manera:

JENKINS_PORT="5353"

El siguiente paso es arrancar el servicio, para ello como root corremos

# /etc/init.d/jenkis start

Es muy común que en este paso se produzca una excepción similar a la siguiente:

Starting Jenkins Exception in thread "main" java.lang.reflect.InvocationTargetException
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:616)
 at Main._main(Main.java:127)
 at Main.main(Main.java:96)
 Caused by: java.lang.UnsatisfiedLinkError: /tmp/jna/jna7112420072244666734.tmp: /tmp/jna/jna7112420072244666734.tmp: failed to map segment from shared object: Operation not permitted
 at java.lang.ClassLoader$NativeLibrary.load(Native Method)
 at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1750)
 at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1646)
 at java.lang.Runtime.load0(Runtime.java:787)
 at java.lang.System.load(System.java:1022)
 at com.sun.jna.Native.loadNativeLibraryFromJar(Native.java:745)
 at com.sun.jna.Native.loadNativeLibrary(Native.java:674)http://blog.mibanez.com.ar/wp-admin/post.php?post=193&action=edit
 at com.sun.jna.Native.<clinit>(Native.java:115)

El problema se debe a que jenkins crea una librería en el directorio temporal /tmp y trata de ejecutarla, pero generalmente dicha partición esta montada con el bit noexec por seguridad.

La solución es muy simple, lo que tenemos que hacer es instruir a la maquina virtual de java para que use un directorio temporal diferente, en mi caso decidí usar

/usr/local/java/tmp

Para crearlo y darle los permisos adecuados ejecutamos:

# mkdir -p /usr/local/java/tmp
# chmod 777 /usr/local/java/tmp

Y luego modificamos el script que arranca Jenkins para que use esta nuevo directorio como temporal. Para ello editamos el script /etc/init.d/jenkins y modificamos la variable JENKINS_JAVA_CMD para que quede de la siguiente forma:

JENKINS_JAVA_CMD="$candidate -Djava.io.tmpdir=/usr/local/java/tmp"

Con esto ya deberíamos poder arrancar el servicio y configurarlo yendo con el navegador a http://miserver.com:5353

Una ver que hacemo esto Jenkins se va a autoconfigurar. Noten que en ningun momento configuramos usuarios o privilegios, para crear un usuario y que solamente ese usuario se pueda loguear vamos a Manage Jenkins, luego a Configure System. Una vez en esa pantalla elegimos Enable Security luego en Security Realm pueden elegir el sistema que prefieran, en mi caso elegi Jenkin’s own user database. Una vez hecho esto, guardamos los cambios con el boton Save.

En ese momento tendremos que crear un usuario, y recien ahi tenemos seguridad habilitada para nuestro Jenkins.

En proximos posts, vamos a ir configurando la pequeña bestia que es este sistema de Continuous Integration.

Share

Como renombrar una aplicación en Symfony / How to rename a Symfony application

Les dejo una pequeña guía para renombrar una aplicación en Symfony y no morir en el intento:

  1. Renombramos la carpeta de la aplicación. p.e. apps/frontend a apps/miapp
  2. Renombramos los test funcionales de manera similar. p.e. test/functional/frontend a test/functional/miapp
  3. Opcionalmente renombramos el controlador frontal. p.e. web/frontend.php a web/miapp.php y web/frontend_dev.php a web/miapp_dev.php
  4. Actualizamos los controladores frontales, cambiando el nombre de la aplicación en la linea que tiene el mismo. p.e. en web/miapp.php cambiamos $configuration = ProjectConfiguration::getApplicationConfiguration(‘frontend’, ‘dev’, true); por  $configuration = ProjectConfiguration::getApplicationConfiguration(‘miapp’, ‘dev’, true);
  5. Renombramos el archivo de configuración del proyecto al nuevo nombre. p.e. apps/frontend/config/frontendConfiguration.php a apps/frontend/miapp/config/miappConfiguration.php
  6. Editamos el archivo de configuración del proyecto y cambiamos el nombre de la clase. p.e. en apps/miapp/config/miappConfiguration.php cambiamos class frontendConfiguration extends sfApplicationConfiguration por class miappConfiguration extends sfApplicationConfiguration
  7. Borramos manualmente la carpeta cache/frontend
  8. Limpiamos la caché y listo!

Esta guía está basada en la que escribió Fabian Potencier acá , pero actualizada a symfony 1.2.x

Acá va la versión en mi burdo inglés para el que la necesite:

Here is a litte how to to rename a Symfony application and don’t die trying:

  1. Rename the application folder. i.e. apps/frontend a apps/myapp
  2. Rename the functional test in the same fashion. i.e. test/functional/frontend a test/functional/myapp
  3. Optionally rename the front controllers. i.e. web/frontend.php a web/myapp.php y web/frontend_dev.php a web/myapp_dev.php
  4. We update the front controllers, changing the applicattion name within them. i.e. in web/myapp.php we change $configuration = ProjectConfiguration::getApplicationConfiguration(‘frontend’, ‘dev’, true); for  $configuration = ProjectConfiguration::getApplicationConfiguration(‘miapp’, ‘dev’, true);
  5. Rename the project’s configuration file to the new name. i.e. apps/frontend/config/frontendConfiguration.php to apps/frontend/miapp/config/myappConfiguration.php
  6. We change the class name within the project’s configuration file. i.e. in apps/myapp/config/myappConfiguration.php we change  class frontendConfiguration extends sfApplicationConfiguration for class myappConfiguration extends sfApplicationConfiguration
  7. Manually delete the folder cache/frontend
  8. Clear the cache and voilá!

This howto is based on the one written by Fabian Potencier here , but updated to symfony 1.2.x

Share

Nueva versión de hyHelpers – 0.0.9

Gente les cuento las últimas funcionalidades que he incorporado en el hyHelpers:

  • 0.0.7:  Se corrigió un error que impedía el correcto funcionamiento de los botones editar y borrar de los datos precargados cuando la tabla tenía más de una columna.
  • 0.0.8:  Se corrigió un error que se presentaba cuando los datos precargados compartían valores en el cual se perdían varios datos. Por ejemplo si precargabamos un idPersona 15 y un idFactura 15, el idFactura se “perdía”.
  • 0.0.9: Agregué el parametro $general_params['show_only']. Si este parametro está en true, no se generan ni el javascript ni los botones.

Los invito a que se bajen la última versión del la página del proyecto y comenten al respecto de la misma. Si alguien quiere que se agregue alguna funcionalidad, soy todo oidos.
Saludos!

Share

hyHelpers 0.0.6 listo!

Gentes, hacé minutos nada más subí la versión 0.0.6 del hyHelpers que lanzamos anteriormente esta semana.

Estuve conversando con Agustín Casiva, quien me comentó un par de cosillas:

1. El codigo es imposible de entender.

2. Con ExtJS podés hacer lo mismo, pero ya está todo testeado y soportado por una empresa.

Igualmente les comento que pensamos seguir desarrollando el proyecto, e invito a toda la comunidad a que le peguen una hojeada, por ahí le sirve a alguno.
Ah, otra cosa es que la documentación es, a este punto, inexistente, pero si puedo el fin de semana próximo me escribiré un pequeño howto de como usarlo y para que sirve.

Saludos!

Share

SG1 – Grilla jQuery dinámica

Por medio de este sencillo pero emotivo acto, presentamos de Hydra Consultoría y Servicios el paquete hyHelpers.

La url del proyecto en Google Code es https://code.google.com/p/hyhelpers

El proyecto cuenta hoy por hoy con 2 archivos php listos para usar como helpers en symfony.  Se desarrollaron y funcionan bajo la versión 1.2.8 del framwork pero son fácilmente utilizables como librerías en cualquier proyecto PHP.

En el archivo hyJqueryHelper.php encontrarán una función watch_and_show que genera el código jQuery necesario para ocultar parte de un formulario html basado en su id dependiendo del valor de un componente html, también por id.

En el archivo hyFormHelper.php encontrarán dos funciones: wizard_navigation_buttons que básicamente se usa para generar la cantidad de controles <input> que quieran y generate_sg1 que es la vedette del paquete. SG1 es una tabla construida en html + jquery que permite hacer ABM contra los controles html que nosotros queramos.

Por ahora la única documentación existente es la de phpdoc que encontrarán en el interior de ambos archivos.

Espero que a alguien le sirvan los helpers y sepan que se encuentran bajo desarrollo pesado y constantemente se están depurando y agregando funcionalidades.

Stay tunned!

Share

Jason Statham no existe!

Esta semana tuve la oportunidad de mirar Crank y Crank 2, dos películas protagonizadas por el inglés Jason Statham. En ambas pelis la trama es similar: el pesonaje principal debe encontrar un elemento en un período muy corto de tiempo ya que su muerte es inminente.

Pero el truco está en que para retrasar su muerte puede realizar una serie de actividades de los más variopintas y extrañas como tener sexo en la vía pública, frotarse contra extraños, electrocutarse, inyectarse epinefrina y un largo etc.

El tema es que, como en toda buena película de acción, el héroe, si se lo puede llamar así, es sobrehumano, tiene una actitud de kickass terrible, se levanta todas las minitas, nunca le pegan, etc, etc.

Y ahí fue cuando me di cuenta de que en todas las peliculas de dicho actor, la actitud y maneras son las mismas, así que llegué a la conclusión de que así como Bruce Willis siempre es Jhon McLane, Jason Statham en realidad no existe, es Chev Chelios quien actúa. Acá les dejo una lista de sus pelis mas recordadas, y como deberían llamarse en realidad:

“Lock Stock and Two Somking Barrels” -> “Chev Chelios se roba dos pistolas viejas con sus amigos”

“Snatch” – “Chev Chelios es manager de un boxeador malo y se mete en problemas con gitanos”

“The One” – “Chev Chelios es un policia de la Autoridad Multiuniverso”

“Mean Machine” – “Chev Chelios preso en Inglaterra con unos que juegan futbol”

“The Trasporter” – “Chev Chelios maneja autos alemanes en Europa”

“The Italian Job” – “Chev Chelios y sus amigos se vengan de un ex amigo”

“Collateral” – “Chev Chelios se mudo a Estados Unidos y le lleva un maletín al vaguito de Top Gun que ya esta viejo”

“Transporter 2″ – Chev Chelios maneja autos alemanes en Estados Unidos”

“Crank” – “La historia real de Chev Chelios”

“The Bank Job” – “Chev Chelios viajo en el tiempo para robar un banco en Inglaterra”

“Transporter 3″ – “Chev Chelios se fue a manejar de vuelta sus autos alemanes en Francia”

“Crank: High Voltage” – “Chev Chelios empieza a transformarse en cyborg”

Bueno, la idea era un poco de humor. Ayer cuando se me ocurrio la idea no podía parar de reirme, espero que ustedes sí puedan reirse un poco.

Share

Software Freedom Day 2009 – Resistencia, Chaco

Gente linda del NEA, se viene el Software Freedom Day 09, evento que se realiza todos los años para celebrar la Libertad del Software.

En esta edición se llevarán a cabo una serie de charlas técnicas en las que trataremos de mostrar las ventajas de usar soft libre contandole de aplicaciones reales que se usan en entornos de producción con mucho éxito, a ver si de una vez por todas nos sacamos de encima el fantasma del “solo con fines académicos”.

Espero verlos a todos ahí.

Les dejo un link a la página del evento.

Share

Sin sonido en Linux con una HP DV6

Hace ya un par de meses tuve que adquirir una nueva laptop ya que el bug de la bios finalmente aniquiló a la vieja y querida Compaq v3000.

Compré una HP DV6 con la esperanza de poder seguir usando la batería de larga duración que tenía en la Compaq y el cargador universal, pero obviamente los muchachos de HP cambiaron de lugar la ficha de la batería cosa de vender toda una nueva serie. Bien por ellos, pero mal para mí.
Si lo hubiera sabido me compraba una Dell.

El caso es que nunca pude hacer funcionar el sonido en mi Sabayon 4.2 y por lo que pude investigar había que pasarse a alsa 1.0.20. Luego de un par de instalaciones inútiles, y ahora que encontré la solución innecesarias, finalmente hace breves momentos di con la solución.

No hacía falta instalar nada, bastaba con agregar la siguiente línea al final del archivo /etc/modprobe.d/alsa:

options snd-hda-intel model=hp-dv5

Luego corremos un update-modules, reiniciamos y voliá! Sonido para todo el mundo.

Hay un pequeño glitch que hace un ruido punzante como si se encendieran los parlates cada un par de minutos si no se está usando la placa de sonido, ahora bien si estamos mirando una peli o reproduciendo música, desaparece el bugcito.

Supongo que eso si se solucionará para la nueva actualización de alsa.

Saludos!

Share

Control de cursor mejorado con Poderosa/Bash

Para los que suelen usar la shell como herramienta de trabajo, existe una terminal open sorce muy buena para la plataforma Windows llamada Poderosa. Se las recomiendo ya que es una leve mejora sobre Putty al permitir el uso de pestañas, dividir la pantalla en diferentes partes y demás goodies que irán conociendo a medida que la usen.

El problema viene cuando nos logueamos a un servidor y descubrimos horrorizados que las teclas Inicio y Fin no funcionan como deben, sino que insertan extraños caracteres.

La solución por suerte es muy simple. En el home de sus usuarios en el servidor remoto, agreguen las siguientes lineas al archivo .initrc, en caso de que no exista, creenlo:

# poderosa/xterm
"\e[7~": beginning-of-line
"\e[8~": end-of-line
"\e[D": backward-word
"\e[C": forward-word

Y ready the chicken. No solo ahora funcionan las teclas de Inicio y Fin, sino que además las teclas de cursor izquierda y derecha saltan palabras completas!

Share

Instalando Arch en una Asus Eee 701 – Parte I

Bueno, este post va a ser un poco una bitácora de la instalación de Arch Linux en mi Eee.

Como primera medida nos descargamos la última versión del instalador de Arch para pendrives desde acá. Deben buscar el archivo .img para i686 USB. Si pueden usar bitorrent, los mirrors de Arch lo agradecerán.

Una vez que tenemos la imagen procedemos a “grabarla” en un pendrive con el comando

dd if=arch-version.img of=/dev/pendrive (reemplazando pendrive por el dispositivo correspondiente)

Y procedemos a bootear la maquina con el pen. Una vez que se nos presenta el login, ingresamos root como nombre de usuario y arch como contraseña.

Ahora simplemente invocamos el instalador propio de la distribución con el comando

/arch/setup

En la primer pantalla que se presenta se nos informa de que el proceso es bastante sencillo y de que  podemos ver la salida de los diferentes comandos que el instalador ejecuta presionando Alt-F5. Para volver a la instalación propiamente dicha, presionamos Alt-F1.

Presionamos OK para pasar a la pantalla de selección de origen de la instalación. La opción CD-ROM or OTHER SOURCE que nos va a permitir instalar los paquetes base desde el USB, en contraposición con la opción 2 que nos permite instalar todo desde una conexión a Internet. Como los drivers para la red los instalaremos más adelante es conveniente elegir la opción 1.

Ahora viene el particionamiento. Yo voy a borrar todo el SSD y crear una única partición de 100 megas para el /boot y el resto para /. Para ello elegimos la opción Prepare Hard Drive y luego la opción Partition Hard Drives nuevamente para que haga un particionamiento automático. Luego el instalador nos informa que existen 2 dispositivos (el SSD y el Pendrive) en los que se puede instalar. Elegimos obviamente el SSD y creamos las particiones correspondientes con el cfdisk. En este punto es importante no olvidar marcar como activa la partición boot y no crear una particion de swap para que la vida útil de la memoria SSD no se vea drásticamente acortada.

Una vez concluido el particionamiento seteamos los puntos de montaje con Set Filesystem Mountpoints.

Ahora llego el momento de elegir los paquetes que instalaremos. Yo instalé, adicionalmente a lo que venía preseleccionado en la categoría base-devel:

  • dnsutils
  • gpm
  • iproute
  • iptables
  • sudo
  • wireless_tools (estes si o si para hacer funcionar luego el wifi)

Luego seleccionamos la opción Install Packages y nos tomamos unos matecitos mientras hace su trabajo (no tarda mas de 5 minutos).

Luego vamos a Configure Installation y de todas vamos seleccionando las opciones que se presentan según correspondan a los dispositivos desde los que queremos ser capaces de arrancar el sistema. Yo solo elegí dispositivos USB. Una vez finalizado ese paso se nos pregunta que editor preferimos, nuevamente a gusto del lector (yo elegí vi)

El último paso antes de arrancar nuestro flamante Arch es configurar el sistema. En mi caso hice los siguientes cambios:

/etc/locale.gen

es_AR.UTF-8 UTF-8
es_AR ISO-8859-1

Este paso nos crea las locales que usaremos en el siguiente.

/etc/rc.conf

LOCALE="es_AR.UTF-8"
TIMEZONE="America/Cordoba"
HOSTNAME="duker-eee"
eth0="dhcp"
#gateway ...
#ROUTES

Luego configuramos la clave de root y los mirrors para Pacman (el gestor de paquetes de Arch). Yo elegí el de ibiblio, pero hay un par de mirrors en Brasil que pueden ser más rápidos.

Al elegir volver al menú principal se generarán los kernels del sistema para el arranque con las opciones que elegimos durante la configuración.

Cuando ya termina eso podemos finalizar la instalación instalando el bootloader. Nuevamente cada uno elegirá el que más le guste. En mi caso elijo GRUB. Antes de instalarse se abre en nuestro editor por defecto el archivo de configuración que se usará. Siempre es bueno revisarlo, pero en general no le erra con las opciones. Yo lo guardé como venía. El último paso consiste en elegir en donde lo vamos a instalar, que en nuestro caso es el SSD principal /dev/sda .

Una vez finalizada la instalación del GRUB el instalador nos devuelve a la línea de comandos. Reiniciamos nuestro nuevo sistema con el comando reboot.

Bien esto ha sido la instalación de Arch linux para la eee. En próximos post iremos viendo el tema de instalar los diferentes paquetes.

Les dejo una lista los links en los que me basé:

http://wiki.eeeuser.com/installingarchlinux

http://wiki.archlinux.org/index.php/Installing_Arch_Linux_on_the_Asus_EEE_PC

Godspeed!

Share
Next entries »

  Wordpress Themes Juegos Fotos