Archive for the ‘Uncategorized’ Category

h1

Monitorizar máquinas virtuales VirtualBox con Monit

09/01/2009

Utilizando Monit se puede controlar el estado de procesos de una máquina, y actuar en consecuencia automaticamente en función del estado de los mismos. Es necesario distinguir los dos proyectos del mismo equipo de desarrollo: Monit (opensource) y M/Monit, comercial.

En el caso de que se estén ejecutando máquinas virtuales con VirtualBox, éstas se pueden levantar en caso de caída, cumpliendo siempre los siguientes requisitos:

Instalar VirtualBox como un demonio (servicio), tantas veces como máquinas virtuales se tengan.
– Cada máquina virtual debe tener activado el servicio «RemoteDisplay» (vdrp) con un puerto distinto logicamente.

Configurado esto, sería necesario añadir en /etc/monit/monitrc el siguiente código adaptándolo a la situación particular:

check host VirtualBox-Monowall with address 127.0.0.1
start program = "/etc/init.d/virtualbox-Monowall start"
stop program = "/etc/init.d/virtualbox-Monowall stop"
if failed port 3389 then restart

Donde habría que cambiar el nombre, la ruta del demonio y el puerto.
Hecho esto, reiniciar el servicio y hacer una prueba matando el proceso:

$ sudo /etc/init.d/monit restart
Stopping daemon monitor: monit.
Starting daemon monitor: monit.

$ ps axu | grep VB
carlos 14786 5.9 10.2 191844 91860 ? Sl 22:05 2:12 /usr/lib/virtualbox/VBoxHeadless -comment Monowall -startvm 8ea024df-49f2-4d1f-bd5c-f3ba15aacb37

$ kill -9 14786

Tras esperar el tiempo definido en Monit para chequear el sistema, se puede ver en el log de Monit como arranca la máquina:

$ tail -10f /var/log/monit.log
[CET Jan 8 22:05:33] error : 'VirtualBox-Monowall' failed, cannot open a connection to INET[127.0.0.1:3389] via TCP
[CET Jan 8 22:05:36] info : 'VirtualBox-Monowall' trying to restart
[CET Jan 8 22:05:36] info : 'VirtualBox-Monowall' stop: /etc/init.d/virtualbox-Monowall
[CET Jan 8 22:05:36] info : 'VirtualBox-Monowall' start: /etc/init.d/virtualbox-Monowall

$ ps axu | grep VB
carlos@shirley:~/.VirtualBox/Machines/Monowall$ ps aux | grep VB
carlos 16204 27.6 10.2 191516 91800 ? Sl 22:48 0:27 /usr/lib/virtualbox/VBoxHeadless -comment Monowall -startvm 8ea024df-49f2-4d1f-bd5c-f3ba15aacb
37
carlos 16341 0.0 0.1 7468 896 pts/4 S+ 22:50 0:00 grep VB
carlos 30314 0.0 0.2 24356 2060 ? S 14:29 0:00 /usr/lib/virtualbox/VBoxXPCOMIPCD
carlos 30321 0.0 0.6 43752 5528 ? Sl 14:29 0:05 /usr/lib/virtualbox/VBoxSVC --automate

h1

Crear servicio para VirtualBox

09/01/2009

Para ejecutar máquinas virtuales de VirtualBox, la alternativa libre a Vmware desde el inicio del sistema y como servicios es necesario crear un script para el demonio.

Se puede crear una copia del /etc/init.d/skeleton, pero es más rápido utilizar la siguiente plantilla ya predefinida para VirtualBox. Para ello crearemos el script del servicio:

$ sudo nano /etc/init.d/virtualbox-Monowall

y se introduciría el siguiente contenido que posteriormente hay que adaptarlo a la máquina propia (en el ejemplo se ejecuta una máquina Monowall):

#! /bin/sh
### BEGIN INIT INFO
# Provides: virtualbox-Monowall
# Required-Start: $local_fs $remote_fs vboxdrv vboxnet
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: Monowall virtual machine
# Description: Monowall virtual machine hosted by VirtualBox
### END INIT INFO

# Author: Brendan Kidwell
#
# Based on /etc/init.d/skeleton from Ubuntu 8.04.

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="Monowall virtual machine"
NAME=virtualbox-Monowall
SCRIPTNAME=/etc/init.d/$NAME

MANAGE_CMD=VBoxManage
VM_OWNER=carlos
VM_NAME="Monowall" #This has to be the name exactly as it appears in your VirtualBox GUI control panel.

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started

sudo -H -u $VM_OWNER $MANAGE_CMD showvminfo "$VM_NAME"|grep "^State:\s*running" >/dev/null && {
echo "$VM_NAME" is already running.
return 1
}

sudo -H -u $VM_OWNER $MANAGE_CMD startvm "$VM_NAME" --type vrdp >/dev/null || >/dev/null || {
echo Failed to start "$VM_NAME".
return 2
}

echo "$VM_NAME" started or resumed.
return 0
}

#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred

sudo -H -u $VM_OWNER $MANAGE_CMD showvminfo "$VM_NAME"|grep "^State:\s*running" >/dev/null || {
echo "$VM_NAME" is already stopped.
return 1
}

sudo -H -u $VM_OWNER $MANAGE_CMD controlvm "$VM_NAME" savestate || {
echo Failed to stop "$VM_NAME".
return 2
}

echo "$VM_NAME" suspended.
return 0
}

#
# Display "State" field from showinfo action
#
do_status()
{
sudo -H -u $VM_OWNER $MANAGE_CMD showvminfo "$VM_NAME"|grep "^State:\s*.*$"
}

case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
status)
do_status
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
exit 3
;;
esac

:

Resumidamente, hay que incluir el nombre de la máquina tal y como está definida en VirtualBox, el usuario que la ejecuta (y que mantiene por tanto sus ficheros de configuración en $HOME/.VirtualBox y el nombre del propio script).

Dar permisos al script:
$ sudo chmod 755 /etc/init.d/virtualbox-Monowall

Y probar a arrancarlo:
$ sudo /etc/init.d/virtualbox-Monowall start

Comprobar su estado:
$ sudo /etc/init.d/virtualbox-Monowall status

Pararlo:
$ sudo /etc/inid.d/virtualbox-Monowall stop

Por último hay que dar de alta ese script en los correspondientes runlevels:

$ sudo update-rc.d virtualbox-Monowall defaults

Fuente Glump.net (en Inglés)

h1

Error Vmware 1.0.8 /usr/lib/libxcb-xlib.so.0 en Kubuntu

07/01/2009

Al arrancar vmware server 1.0.8 en Kubuntu Hardy puede ocurrir el siguiente error:

carlos@ikeys:~/temp$ vmware
Locking assertion failure. Backtrace:
#0 /usr/lib/libxcb-xlib.so.0 [0xb6f86767]
#1 /usr/lib/libxcb-xlib.so.0(xcb_xlib_unlock+0x31) [0xb6f868b1]
#2 /usr/lib/libX11.so.6(_XReply+0xfd) [0xb7e261bd]
#3 /usr/lib/vmware/lib/libXrender.so.1/libXrender.so.1(XRenderQueryFormats+0x109) [0xb7d06969]
#4 /usr/lib/vmware/lib/libXrender.so.1/libXrender.so.1(XRenderFindFormat+0x4c) [0xb7d06f4c]
#5 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7b4c180]
#6 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7b4cd2c]
#7 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_draw_pixbuf+0x270) [0xb7b1cc14]
#8 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7b2924f]
#9 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_draw_pixbuf+0x270) [0xb7b1cc14]
#10 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_pixbuf_render_pixmap_and_mask_for_colormap+0x255) [0xb7b28b34]
#11 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a2d298]
#12 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a2d586]
#13 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a2f77e]
#14 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_cclosure_marshal_VOID__VOID+0xd1) [0xb7c42459]
#15 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0 [0xb7c2a3a1]
#16 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_closure_invoke+0x1b1) [0xb7c2a076]
#17 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0 [0xb7c416eb]
#18 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_signal_emit_valist+0x91e) [0xb7c40d46]
#19 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_signal_emit+0x38) [0xb7c410b8]
Locking assertion failure. Backtrace:
#0 /usr/lib/libxcb-xlib.so.0 [0xb6f86767]
#1 /usr/lib/libxcb-xlib.so.0(xcb_xlib_lock+0x2e) [0xb6f8681e]
#2 /usr/lib/libX11.so.6 [0xb7e25518]
#3 /usr/lib/libX11.so.6(XAddExtension+0x2c) [0xb7e08c9c]
#4 /usr/lib/vmware/lib/libXft.so.2/libXft.so.2(_XftDisplayInfoGet+0x77) [0xb7cfeed7]
#5 /usr/lib/vmware/lib/libXft.so.2/libXft.so.2 [0xb7cfd8b1]
#6 /usr/lib/vmware/lib/libXft.so.2/libXft.so.2 [0xb7cfdd39]
#7 /usr/lib/vmware/lib/libXft.so.2/libXft.so.2(XftDrawPicture+0x10) [0xb7cfdec0]
#8 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7b4a9b6]
#9 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7b4cd75]
#10 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_draw_pixbuf+0x270) [0xb7b1cc14]
#11 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7b2924f]
#12 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_draw_pixbuf+0x270) [0xb7b1cc14]
#13 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_pixbuf_render_pixmap_and_mask_for_colormap+0x255) [0xb7b28b34]
#14 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a2d298]
#15 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a2d586]
#16 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a2f77e]
#17 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_cclosure_marshal_VOID__VOID+0xd1) [0xb7c42459]
#18 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0 [0xb7c2a3a1]
#19 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_closure_invoke+0x1b1) [0xb7c2a076]
vmware: ../../src/xcb_lock.c:77: _XGetXCBBuffer: Afirmación `((int) ((xcb_req) - (dpy->request)) >= 0)' fallida.

Debido a un bug en una librería es necesario hacer un downgrade de la misma o actualizar a una más moderna. La segunda solución es la explicada.

En el caso de arquitectura i386, descargar los siguientes paquetes:
http://packages.debian.org/experimental/i386/libxcb1/download
http://packages.debian.org/experimental/i386/libx11-6/download

Instalarlos sobreescribiendo las versiones presentes.
sudo dpkg -i --force-all libx11-6_1.1.99.2-1_i386.deb
sudo dpkg -i --force-all libxcb1_1.1.92-0.1_i386.deb

y reiniciar.

h1

Problemas al instalar VMware server 1.0.8 en kUbuntu (8.04)

21/12/2008

En la instalación se producen varios errores, ante ellos es necesario:

1º) Desinstalar gcc 4.2.4 e instalar 4.2.3. Se puede descargar de:
http://packages.ubuntu.com/hardy/i386/gcc-4.2/download

$ sudo apt-get remove --purge gcc
$sudo dpkg -i --force-all gcc-4.2_4.2.3-2ubuntu7_i386.deb

y se comprueba que ha quedado bien instalado con
carlos@WhenIGrewUp:~/downloads$ gcc -v
Usando especificaciones internas.
Objetivo: x86_64-linux-gnu
Configurado con: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Modelo de hilos: posix
gcc versión 4.2.3 (Ubuntu 4.2.3-1ubuntu3)

Si no, revisa la desinstalación y el enlace simbólico «gcc» en /usr/bin

Después, al ejecutarlo, frecuentemente sale el siguiente error:

carlos@ikeys:~/Escritorio/vmware-server-distrib$ vmware
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)
Locking assertion failure. Backtrace:
#0 /usr/lib/libxcb-xlib.so.0 [0xb6fed767]
#1 /usr/lib/libxcb-xlib.so.0(xcb_xlib_unlock+0x31) [0xb6fed8b1]
#2 /usr/lib/libX11.so.6(_XReply+0xfd) [0xb7e781bd]
#3 /usr/lib/vmware/lib/libXrender.so.1/libXrender.so.1(XRenderQueryFormats+0x109) [0xb7d5a969]
#4 /usr/lib/vmware/lib/libXrender.so.1/libXrender.so.1(XRenderFindFormat+0x4c) [0xb7d5af4c]
#5 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7ba0180]
#6 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7ba0d2c]
#7 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_draw_pixbuf+0x270) [0xb7b70c14]
#8 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7b7d24f]
#9 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_draw_pixbuf+0x270) [0xb7b70c14]
#10 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_pixbuf_render_pixmap_and_mask_for_colormap+0x255) [0xb7b7cb34]
#11 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a81298]
#12 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a81586]
#13 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a8377e]
#14 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_cclosure_marshal_VOID__VOID+0xd1) [0xb7c96459]
#15 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0 [0xb7c7e3a1]
#16 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_closure_invoke+0x1b1) [0xb7c7e076]
#17 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0 [0xb7c956eb]
#18 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_signal_emit_valist+0x91e) [0xb7c94d46]
#19 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_signal_emit+0x38) [0xb7c950b8]
Locking assertion failure. Backtrace:
#0 /usr/lib/libxcb-xlib.so.0 [0xb6fed767]
#1 /usr/lib/libxcb-xlib.so.0(xcb_xlib_lock+0x2e) [0xb6fed81e]
#2 /usr/lib/libX11.so.6 [0xb7e77518]
#3 /usr/lib/libX11.so.6(XAddExtension+0x2c) [0xb7e5ac9c]
#4 /usr/lib/vmware/lib/libXft.so.2/libXft.so.2(_XftDisplayInfoGet+0x77) [0xb7d52ed7]
#5 /usr/lib/vmware/lib/libXft.so.2/libXft.so.2 [0xb7d518b1]
#6 /usr/lib/vmware/lib/libXft.so.2/libXft.so.2 [0xb7d51d39]
#7 /usr/lib/vmware/lib/libXft.so.2/libXft.so.2(XftDrawPicture+0x10) [0xb7d51ec0]
#8 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7b9e9b6]
#9 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7ba0d75]
#10 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_draw_pixbuf+0x270) [0xb7b70c14]
#11 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0 [0xb7b7d24f]
#12 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_draw_pixbuf+0x270) [0xb7b70c14]
#13 /usr/lib/vmware/lib/libgdk-x11-2.0.so.0/libgdk-x11-2.0.so.0(gdk_pixbuf_render_pixmap_and_mask_for_colormap+0x255) [0xb7b7cb34]
#14 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a81298]
#15 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a81586]
#16 /usr/lib/vmware/lib/libgtk-x11-2.0.so.0/libgtk-x11-2.0.so.0 [0xb7a8377e]
#17 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_cclosure_marshal_VOID__VOID+0xd1) [0xb7c96459]
#18 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0 [0xb7c7e3a1]
#19 /usr/lib/vmware/lib/libgobject-2.0.so.0/libgobject-2.0.so.0(g_closure_invoke+0x1b1) [0xb7c7e076]
vmware: ../../src/xcb_lock.c:77: _XGetXCBBuffer: Afirmación `((int) ((xcb_req) - (dpy->request)) >= 0)' fallida.

Se arregla con:

$ sudo mv /usr/lib/vmware/lib/libgcc_s.so.1 /usr/lib/vmware/lib/libgcc_s.so.1_orig

h1

Eventum: Subir ficheros mayores de 2MB

15/12/2008

Ante esta limitación, es necesario hacer los siguientes cambios en el módulo PHP:
carlos@pilar002:/etc/php5/apache2$ nano php.ini
(...)
memory_limit = 256M
max_execution_time = 300
max_input_time = 600
post_max_size = 64M
upload_max_filesize = 64M
(...)

Configuración de MySQL:
carlos@pilar002:/etc/mysql$ nano my.cnf
(...)
max_allowed_packet: 64MB
(...)

Y reiniciar ambos servicios:
/etc/init.d/apache2 restart
/etc/init.d/mysql restart

fuente: PenoyTechCentral

h1

VMWare 2.0 sin posibilidad de CTRL-ALT-SUPR

12/12/2008

La funcionalidad de poder mandar un CTRL-ALT-SUPR a una máquina virtual desde un vmware 2.0 Infrastructure instalado en Linux no existe inicialmente. Es un fallo de diseño, y ni siquiera han incluído la opción de hacerlo a través del menú como en ediciones anteriores.

Para solucionarlo, es suficiente con incluir una directiva:

echo 'xkeymap.nokeycodeMap = true' > ~/.vmware/config

h1

Monit, como definir una cuenta de correo con autenticación SSL

08/12/2008

Este monitorizador de tareas permite enviar alertas en función de eventos o condiciones. En la versión 4.10 no permite definir que el login de SMTP sea SSL (Como la mayoría de los actuales), y utilizar un localhost suele ser inútil al rechazar los relays de correo a servidores no autenticados como medida contra el spam.

Por tanto es necesario utilizar un smtp público, como Gmail, que no utilice SSL o, en el caso de que lo utilice, actualizar a la beta 5 de Monit que ya soporta autenticación en SMTP por SSL.

En este último caso, tras descargarla es necesario instalar bison. También es conveniente, aunque no necesario, hacer una copia del monitrc:
$sudo cp /etc/monit/monitrc /root
Pero en principio ni se modifica ni se incluye uno nuevo. La instalación se compone de:

(según la configuración del sistema es probable necesitar hacerlo con permisos de superusuario).

$ ./configure --without-ssl
(...)
monit has been configured with the following options:
Architecture: LINUX
SSL support: disabled
resource monitoring: enabled
resource code: sysdep_LINUX.c
large files support: enabled
Compiler flags: -g -O2 -Wall -D _REENTRANT
Linker flags: -lpthread -lcrypt -lresolv -lnsl
pid file location: /var/run
$ make
$ make install

Instalado, definir los datos del envío de correo (es probable que algunas variables no figuren en el fichero de ejemplo):

$ sudo nano /etc/monit/monitrc
(...)
set mailserver smtp.gmail.com PORT 587 # primary mailserver
USERNAME "micuenta@gmail.com" PASSWORD "micontraseña" using TLSV1
(...)

Reiniciar monit
$ sudo /etc/init.d/monit restart
y comprobar, provocando algún evento, que se reciben correos de alerta. Además se pueden ver configuraciones de ejemplo para definir alertas aquí.

h1

Eventum: no conecta el usuario admin@example.com tras instalación

23/11/2008

Si tras instalar Eventum no se tiene acceso con el login por defecto (admin@example.com / admin), lo más probable es que el usuario de acceso a la base de datos de Eventum no tenga acceso a la misma, y por tanto no pueda constantar si el usuario introducido existe en la BD.

Para ello es preciso darle permisos:

pilar002:/var/www/eventum/config# mysql -u root -h localhost -p
Enter password:

mysql> GRANT ALL on eventumDB.* TO usuarioEventum@locahost;

una solución más directa es dar permisos a todas las bases de datos, sabiendo lo que se hace en cuestiones de seguridad:
mysql> GRANT SELECT ON *.* TO usuarioEventum

h1

Configurar Eventum en Español

23/11/2008

Esta herramienta para manejar y hacer seguimiento de incidencias en cualquier tipo de proyecto de ingeniería actualmente viene en Inglés. En la versión actual (2.1.1) no incorpora el Español, por lo cual si se desea traducir es necesario incorporar los diccionarios españoles.

Para ello se consultará el SVN del proyecto, se copiarán de él las traducciones y se le especificará a Eventum que utilice por defecto este idioma. Para ello:

1º) Bajarse del SVN todo el proyecto:
mkdir svn.eventum
cd svn.eventum
svn checkout svn://eventum.mysql.org/eventum-gpl/

2º) Localizamos los diccionarios
cd /home/carlos/temp/svn.eventum/eventum-gpl/trunk/eventum/misc/localization

y los copiamos en el directorio de Eventum:
cp -R es /var/www/eventum/misc/localization
cp es.po /var/www/eventum/misc/localization

3º) Activar el idioma Español en Eventum: hay dos formas
a) Copiando el class.language.php del SVN a nuestro Eventum:
cp /home/carlos/temp/eventumSVN/eventum-gpl/trunk/eventum/include/class.language.php /var/www/eventum/includes/class.language.php

b) Descomentando en /var/www/eventum/includes/class.language.php el idioma Español.
No obstante es más fiable el primer método.

4º) Indicar a Eventum el idioma predeterminado: viene en Inglés norteamericano, cambiarlo por es_ES.

nano /var/www/eventum/config/config.php
(...)
//define('APP_DEFAULT_LOCALE', 'en_US');
define('APP_DEFAULT_LOCALE', 'es_ES');
(...)

Y probar a conectarse, ya está traducido. En algún caso se puede necesitar reiniciar Apache:
sudo /etc/init.d/apache2 restart

Además, en el caso de que el hosting sea GNU/Linux, las locales deben estar configuradas en el mismo idioma en el que se desee Eventum:

# dpkg-reconfigure locales

aunque también se puede optar por una solución rápida: reemplazar el valor «en_US» de los siguientes ficheros por «es_ES«:

# nano eventum-2.2\config\config.php
# nano eventum-2.2\init.php

h1

Script sencillo para backups

22/11/2008

Generalmente en entornos de producción es necesario hacer copias de seguridad. Para ello se puede utilizar software como Bacula o hacernos nuestro pequeño script si las necesidades no son muchas.

En este caso muestro un ejemplo de script que corre en el cron de un servidor, el cual se conecta a dos máquinas por SSH, comprime ciertos directorios de algunas máquinas y los envía por scp al servidor. Posteriormente borra las copias con 2 días de antigüedad.

Para que las copias de seguridad sean automáticas, sin intervención del usuario, es necesario configurar el acceso SSH sin password.

El script de ejemplo es el siguiente:

#!/bin/bash
#Definir el servidor donde se almacenan las backups.
LOCALHOST="172.26.0.5"
DEST="/home/carlos/disco.sda1/backups"

#Equipo #1 del que hacer copias.
ORIG1="/home/prod/software"
FICH1=prod-$(date +%Y%m%d).tgz
HOST1=172.26.0.4

ORIG2="/home/tibco"
FICH2=tibco-$(date +%Y%m%d).tgz
HOST2=172.26.0.9

#ATENCIÓN: Añadir la clave pública de ssh para que no se pida clave durante el proceso.

#Backup1
#Crear el fichero, enviarlo y borrarlo del host remoto
ssh $HOST1 "tar cvfz /tmp/$FICH1 --exclude="/home/prod/soft/temp" --exclude="/home/prod/soft/logs" /home/prod/soft/"
ssh $HOST1 "scp /tmp/$FICH1 carlos@$LOCALHOST:$DEST"
ssh $HOST1 "rm /tmp/$FICH1"
FICH_ANTERIOR=prod-$(date +%Y%m%d --date '2 days ago').tgz
if [ -f /home/carlos/disco.sda1/backups/$FICH1 ]; then
rm /home/carlos/disco.sda1/backups/$FICH_ANTERIOR
fi

#Backup2
ssh tibco@$HOST2 "tar cvfz /tmp/$FICH2 /home/tibco/"
ssh tibco@$HOST2 "scp /tmp/$FICH2 carlos@$LOCALHOST:$DEST"
ssh tibco@$HOST2 "rm /tmp/$FICH2"
FICH_ANTERIOR=tibco-$(date +%Y%m%d --date '2 days ago').tgz
if [ -f /home/carlos/disco.sda1/backups/$FICH2 ]; then
rm /home/carlos/disco.sda1/backups/$FICH_ANTERIOR
fi

Y es necesario programar en el cron la ejecución de este script:
carlos@shirley:~$ crontab -e
# m h dom mon dow command
00 21 * * * /home/carlos/backups/misBackups.sh

así como darle permiso de ejecución al script:
carlos@shirley:~$ chmod 700 backups/misBackups.sh