Archive for the ‘Uncategorized’ Category

h1

Conexión SSH lenta o con cortes

05/04/2009

En las actuales versiones de SSH (por ejemplo OpenSSH_5.1p1 Debian-5, OpenSSL 0.9.8g 19 Oct 2007 en Debian 5.0), al conectar a un servidor ssh se pueden producir retrasos, desconexiones o imposibilidad de conectar.

El problema más común es la resolución DNS equivocada del demonio sshd sobre el cliente que se intenta conectar. Se resuelve corrigiendo los DNS del servidor, incluyendo servidores DNS más fiables, y/o añadiendo la IP del cliente en el fichero /etc/hosts, así como verificando la IP propia en dicho fichero .

h1

Problema de alto consumo de CPU en VirtualBox / High CPU load in Virtualbox

31/03/2009

En casos en los que al ejecutar una máquina virtual (vm) de VirtualBox se pueden copar los recursos de la máquina anfitriona sin lógica. Tras haber analizado la memoria asignada a la vm y teniéndola en reposo (idle), sin apenas uso, se pueden ver datos similares al siguiente:

carlos@shirley:~$ top
top - 19:12:44 up 25 min, 1 user, load average: 1.26, 1.38, 1.11
Tasks: 92 total, 2 running, 90 sleeping, 0 stopped, 0 zombie
Cpu(s): 10.2%us, 6.6%sy, 81.5%ni, 0.0%id, 0.0%wa, 1.0%hi, 0.7%si, 0.0%st
Mem: 895708k total, 886940k used, 8768k free, 3176k buffers
Swap: 971924k total, 26028k used, 945896k free, 91784k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11491 carlos 20 0 416m 278m 6780 S 94.3 31.8 3:21.06 VBoxHeadless Monowall (no-gui)
11536 carlos 20 0 295m 157m 6816 S 2.6 18.1 1:56.37 VBoxHeadless Debian
11180 boinc 39 19 173m 29m 2088 R 2.8 3.4 9:51.67 charmm34_6.15_x
(...)

Para solucionarlo, es tan sencillo como aumentar el tamaño de la memoria de video de la máquina virtual en cuestión y reiniciarla. Es probable que el alto consumo se deba al uso de vrdp o una memoria de video insuficiente, incluso aunque el sistema no tenga interfaz gráfica.

h1

Joomla, instalación de plugin con error JFolder::create

19/03/2009

Si al instalar en Joomla un plugin se produce el siguiente error:
Joomla! • View topic - JFolder::create: Could not create directory
ó

* JFolder::create: No se ha podido crear el directorio
* Unable to create destination

Es necesario tanto asignar permisos de acceso completo (777) al directorio temporal (habitualmente /tmp) como desactivar el modo seguro de ejecución de php:

#nano /etc/php5/apache2/php.ini
(...)
safe_mode = Off
(...)

Si se trabaja con un hosting ajeno, este cambio se puede hacer desde el panel de control del alojamiento o contactando directamente con el soporte técnico del hosting.

h1

Cómo copiar/duplicar un disco VDI de VirtualBox

18/03/2009

Al copiar una imagen de disco de VirtualBox para crear otra máquina idéntica por ejemplo y añadirla en el  Virtual Media Manager, se produce el siguiente error:

Código Resultado
NS_ERROR_INVALID_ARG (0x80070057)
Componente:
VirtualBox
Interface:
IVirtualBox {339abca2-f47a-4302-87f5-7bc324e6bbde}

errorvb

Esto es debido a que las imagenes de disco en Virtual Box llevan un UUID que las identifica, de modo que al añadir otra el gestor comprueba que no esté repetida para evitar que una máquina virtual arranque unas veces con uno y otras con otro disco.

Por ello las imagenes de VB se deben copiar con un comando especial que les genere un UUID nuevo, lo cual no dará problemas a la hora de utilizarla:

carlos@WhenIGrewUp:~/maquinas.virtuales$ sudo VBoxManage clonehd "/home/carlos/maquinas.virtuales/Debian_Ping_Antenas.vdi"  "/home/carlos/maquinas.virtuales/Debian_Router.vdi"
VirtualBox Command Line Management Interface Version 2.1.4(C) 2005-2009 Sun Microsystems, Inc.All rights reserved.0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%Clone hard disk created in format 'VDI'. UUID: 5cfc14a9-2926-444a-9406-1717512ca88b

Es necesario especificar el path completo tanto en la imagen de origen como en la de destino.

h1

Pérdida de teclado en VMWare

03/03/2009

A veces trabajando con VMWare (1.0.8 por ejemplo) en GNU/Linux, al volver al host se desconfigura el teclado, perdiéndose las mayúsculas y acentos. Para ello basta con ejecutar un comando que reestablezca el tipo de teclado.

$ setxkbmap -model logiik -layout es

Como este error suele repetirse frecuentemente, es habitual crear un script para facilitar rapidamente la restauración del teclado:

$ sudo nano /usr/bin/teclado

Con el siguiente contenido:
#!/bin/sh
setxkbmap -model logiik -layout es

Se le da permisos de ejecución:
$ chmod 777 teclado

Y a partir de entonces cada vez que se desconfigure el teclado es suficiente con ejecutarlo:
$ teclado

Otra solución es utilizar una alternativa a VMWare: VirtualBox.

h1

Enviar los sucesos de logs por red

19/02/2009

En GNU/Linux para enviar los eventos que se registran en los logs a un servidor remoto syslogd es necesario editar la configuración de los eventos y añadir la IP a la que se reenviarán.

Es posible grabarlos en local y enviarlos simultanemanete a uno o varios hosts. Para ello se edita el fichero de configuración:

#nano /etc/syslog.conf

y se añade una línea por cada evento que se quiera replicar.

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none @172.18.222.86

# The authpriv file has restricted access.
authpriv.* /var/log/secure
authpriv.* @172.26.0.5

# Log all the mail messages in one place.
mail.* -/var/log/maillog
mail.* @172.26.0.5

# Log cron stuff
cron.* /var/log/cron
cron.* @LogsServer

# Everybody gets emergency messages
*.emerg *
*.emerg @172.26.0.5

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
uucp,news.crit @172.26.0.5

# Save boot messages also to boot.log
local7.* /var/log/boot.log
local7.* @172.26.0.5

Tras editarlo, es necesario reiniciar el demonio de logs
#sudo /etc/init.d/syslog restart

h1

Error gmcs compilando con Monodevelop

09/02/2009

Si compilando con Monodevelop 1.0 ocurre el siguiente error:

ERROR [2009-02-09 21:57:59Z]: System.ComponentModel.Win32Exception: ApplicationName='/usr/bin/gmcs', CommandLine='"@/tmp/tmp1afe7a7c.tmp"', CurrentDirectory='/home/carlos/p3/p3'
at System.Diagnostics.Process.Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process) [0x00000]
at System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process) [0x00000]
at System.Diagnostics.Process.Start () [0x00000]
at MonoDevelop.Core.Execution.ProcessWrapper.Start () [0x00000]
at (wrapper remoting-invoke-with-check) MonoDevelop.Core.Execution.ProcessWrapper:Start ()
at MonoDevelop.Core.Execution.ProcessService.StartProcess (System.Diagnostics.ProcessStartInfo startInfo, MonoDevelop.Core.Execution.ProcessEventHandler outputStreamChanged, MonoDevelop.Core.Execution.ProcessEventHandler errorStreamChanged, System.EventHandler exited) [0x00000]

Se soluciona en dos pasos:

1º) Instalar gmcs

# sudo apt-get install mono-gmcs

2º) Al disponer de gmcs2 y no de gmcs, crear un enlace para cubrir las llamadas a gmcs

# cd /usr/bin
# sudo ln gmcs2 gmcs

h1

Conocer la topología o diagrama de red de manera gráfica en Linux

04/02/2009

Una necesidad en redes es el estudio topológico de las mismas. Para ello existen herramientas como Zenmap, un interfaz gráfico para nmap, que además realiza un escaneo de la red generando automaticamente un diagrama de la misma.

zenmap3

Para ello es necesario:

1º) Descargar nmap 4.76 o posterior.
Descargar zenmap 4.76 o posterior.
Con versiones anteriores no funcionará.

2º) Instalar el software.
Los paquetes descargados son del tipo .rpm, formato de instalación de GNU/Linux Red Hat, Fedora o derivados. Si se desea instalar en otra distribución, es necesario adaptarlos al formato utilizado. En el caso de Debian ó (K)Ubuntu, se realizará mediante la utilidad «alien»:
# sudo apt-get install alien
# sudo alien nmap-4.76-1.i386.rpm
# sudo alien zenmap-4.76-1.noarch.rpm

Instalación:
# sudo dpkg -i nmap_4.76-2_i386.deb
# sudo dpkg -i zenmap-4.76-1.noarch

3º) Ejecución:
# sudo zenmap
Se mostrará el interfaz de nmap. La búsqueda más sencilla de la red que se puede hacer es:

nmap -T Aggressive -A -v 172.26.0.0/24
(sustituyendo logicamente el rango de red por el propio).

zenmap1

Tras un tiempo de escaneo, se obtendrá en la pestaña «Topology» el diagrama de red buscado:

zenmap2

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)