Como adoptar un pingüino

BLOG de AZULcasiNEGRO, donde se cuentan básicamente las peripecias durante la migración a Kubuntu/Linux

Aviso Cookies

Categories

Contador

Eres el visitante

Ayer, al actualizar mi sistema (Kubuntu 8.10 64bits con KDE 4.1), me llevé la agridulce sorpresa de que el sistema, practicamente sin consultar, me actualizaba a KDE 4.2. En casa ya lo tenía instalado, y aunque me parece más estable que la 4.1, estaba esperando a la siguiente versión de Kubuntu para dar el salto.

Hay un monton de webs y blogs que hablan del cambio de las bibliotecas de 4.1 a 4.2, que al parecer son importantes. Probablemente KDE 4.1 pase a la historia como una versión beta que no debería haber pasado de ahí. Pero a mí me gusta escribir de lo que no escriben otros, sobretodo de las soluciones a problemas que no se encuentran fácilmente.

Pues vamos a comentar un fallo en un paquete nuevo Akonadi. Gran parte de la solución ya está documentado, pero aun así no acababa de funcionar correctamente.

Lo primero es parar apparmor, que es el "responsable" de que el MySQL asociado a Akonadi no arranque.

# /etc/init.d/apparmor stop
Iniciamos Akonadi y miramos si funciona correctamente.
$ akonadictl start
$ akonadictl status
Si nos contesta lo siguiente, es que realmente AppArmor estaba lo bloqueando.
Akonadi Control: running
Akonadi Server: running
Ya hemos verificado el origen del problema, ahora ejecutamos la solución.
# aa-complain mysqld
# aa-complain mysqld-akonadi
# /etc/init.d/apparmor reload
Ahora podemos reiniciar el sistema para ver que el error ha desaparecido.

Ciencia y paciencia.

Primero vamos a ver para que nos puede servir.
Supongamos que tenemos una maquina virtual que contiene un determinado servicio o programa que queremos que se arranque y pare cuando se arraque y pare nuestro ubuntu/kubuntu. También sería interesante para una mv que tubiera algún programa que accedemos remotamente.
Un caso típico sería un Windows con alguna vieja y/o pegajosa aplicación de gestión, la cual es necesaria pero no se quiere o puede migrar a linux.

Pues para eso os propongo el siquiente script:

#!/bin/sh                                                                   
### BEGIN INIT INFO
# Provides: VB - ServidorXP
# Required-Start: $local_fs $remote_fs vboxdrv vboxnet
# Required-Stop: $local_fs $remote_fs vboxdrv vboxnet
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: Handles the ServidorXP virtual machine
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO

# AZULcasiNEGRO - x22bcn@gmail.com

#
# CHANGE THESE AS NEEDED
#
# Name given to the virtual machine
VM_NAME="ServidorXP"

# Name of this file, excluding /etc/init.d/
THIS_FILE=vb-servidorxp

# Username to run as
RUNAS_USERNAME=usuario

#
# END CHANGE THESE AS NEEDED
#
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="VirtualBox - ${VM_NAME}"
#DAEMON=/usr/bin/VBoxHeadless
DAEMON=/usr/bin/VBoxManage
DAEMON_ARGS="-startvm \"${VM_NAME}\""
PIDFILE=/var/run/$THIS_FILE.pid
SCRIPTNAME=/etc/init.d/$THIS_FILE

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

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

is_running()
{
ISRUNNING=`su $RUNAS_USERNAME -c "$DAEMON showvminfo $VM_NAME | grep running"`
# echo ">"$ISRUNNING"<"
if [ -n "$ISRUNNING" ]; then
return 1
else
return 0
fi
}

#
# 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
is_running
if [ $? -eq 1 ]; then return 1; fi

su $RUNAS_USERNAME -c "$DAEMON startvm ${VM_NAME} -type vrdp " &
sleep 5

is_running
if [ $? -eq 0 ]; then return 2; fi
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
is_running
if [ $? -eq 0 ]; then return 1; fi

su $RUNAS_USERNAME -c "$DAEMON controlvm ${VM_NAME} savestate "

is_running
if [ $? -eq 1 ]; then return 2; fi
return 0
}

case "$1" in
start)
log_daemon_msg "Starting $DESC" "$THIS_FILE"
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1; log_failure_msg "$DESC in running." ;;
2) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$THIS_FILE"
do_stop
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1; log_failure_msg "$DESC in stoped." ;;
2) log_end_msg 1 ;;
esac
;;
status)
is_running
case "$?" in
0) log_success_msg "$DESC is stoped." ;;
1) log_success_msg "$DESC is running." ;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status}" >&2
exit 3
;;
esac
:

¿ Como lo usamos ?
Creamos un archivo con el contenido de este script en /etc/init.d
Le ponemos un nombre archivo, en este caso vb-servidorxp. Nos acordamos de él ;)
Configuramos esta parte del script
#
# CHANGE THESE AS NEEDED
#
# Name given to the virtual machine
VM_NAME="ServidorXP"

# Name of this file, excluding /etc/init.d/
THIS_FILE=vb-servidorxp

# Username to run as
RUNAS_USERNAME=usuario

#
# END CHANGE THESE AS NEEDED
#
Donde VM_NAME es el nombre de la máquina virtual. THIS_FILE el nombre del script, y RUNAS_USERNAME el usuario con el que se debe ejecutar la máquina virtual.

Le cambiamos el usuario y grupo
# chown root:root /etc/init.d/vb-serverxp

Ahora le damos permisos de ejecución al script
# chmod ug+x /etc/init.d/vb-serverxp

Sólo nos queda que se inicie y cierre con el ordenador. Aquí debemos tener una cosa en cuenta. Como dependemos de los servicios de VirtualBox (vboxdrv y vboxnet) para que funcione, debemos configurarlo para que se encienda despues y se apague antes. Si no lo hacemos, o no arrancará o puede dejar colgado el sistema al cerrar. En principio, esto ya lo conseguimos con los parámetros Required-Start y Required-Stop. El sistema ya se encargará de vigilar que se encienda despues y se apague antes que estos servicios. Entonces asignaremos a nuestro script para que se ejecute automáticamente de la siguiente manera:
# update-rc.d vb-serverxp defaults

Pues ya tenemos nuestro pc complementario dentro de nuestro pc con linux, que arranca y apaga automáticamente.

Actualización: He añadido la restricción de servicios en Required-Start y Required-Stop porque es mucho más efectivo que la numeración de arranque.
Para eliminar el arranque automático actual haremos:
# update-rc.d -f vb-serverxp remove
Y luego volveremos a asignarlo con defaults.

Actualización (II):
Este primer apaño no acaba de funcionar del todo. Al apagar si que funciona, pero al arrancar la vm no se inicia porque aún no están cargados los modulos de VirtualBox en el kernel. Creo que el error es debido a lo hace de forma asíncrona. Total, como lo queremos es que funcione, le cambiamos la configuración al script y listo.
Para eliminar el arranque automático actual haremos:
# update-rc.d -f vb-serverxp remove
Y luego volveremos a asignarlo con defaults, y 99 al arrancar (al final de todo) y 20 al apagar (tal y como estaba).
# update-rc.d vb-serverxp defaults 99 20

Cuenta atrás

Nuestros derechos

Recent Posts

Recent Comments