Paquete screen en Linux

El paquete screen es una de esas utilerías simples que descubrí un día, gracias a Angel Prieto, y que luego uso bastante. Aprovechando que tengo que copiar unas máquinas virtuales para el trabajo de mañana, edito esta entrada; Screen es un programita que al ejecutarse lanza una shell en segundo plano, que después podemos dejar ejecutándose y desconectarnos; si después necesitamos ver como va el proceso, podemos volver a recuperar la consola... lo cual marca la principal diferencia con el comando nohup. Esto es muy útil cuando tenemos que lanzar un apt-get upgrade por ejemplo.

La idea es:
  1. Ejecutar el comando screen
  2. Lanzar lo que queramos, lanzar
  3. Salir de la consola pulsando CONTROL+A, lo que sería [detached]. Si pulsamos CONTROL+D saldremos y mataremos el proceso [screen is terminating].
  4. Una vez que hemos pulsado CONTROL+A, podremos ejecutar los siguientes comandos básicamente:
    • screen -ls, para listar los procesos screen que tenemos activos
    • screen -r PID, para recuperar la consola
Aunque la página man es más completa, lo básico para sobrevivir sería esto.

Mi Google Code: DynIP

Por fín me he decidido a probar el servicio Google Code, para en principio ir dejando cosillas que deseo otras personas puedan usar cuando quieran. Ya lo intenté con SourceForge, pero la creación de proyectos es moderada, osea, hay alguien que decide si acepta tu proyecto o no, por la descripción que haces de él, lo que pretendes, etc, en fín una forma de asegurar la calidad de los contenidos, que me parece justa, aunque lo único que yo siempre pretendí fue alojamiento de mis cosillas y disponibilidad de acceso independientemente de donde estuviera.

Parece que google code me permite esto que yo quiero... fácil y rápido, como todo lo que hacen: en 10 minutos tenía subido el código a mi nueva cuenta, http://tecnoquia-scripts.googlecode.com/svn/trunk/dynIP/. Este proyecto DynIP  incluye el script de renovación de IP de mi anterior entrada, y además un demonio que me permite saber si se me ha caído la conexión a internet o no. Lo he desarrollado, porque últimamente , el poco tiempo que estoy en casa, me paso más tiempo esperando estar conectado que realmente conectado.

IP dinámica en casa y DynDNS

Hace tiempo que tengo un script para comprobar la dirección IP dinámica que me reparte mi proveedor de internet y actualizar el registro dyndns, con el fin de poder acceder al servidor de casa, cuando estoy fuera. Hace unas semanas estaba notando ya que no siempre está disponible showmyip, y ayer me decidí a cambiar el script y reescribirlo para quitarle toda la parte XML, dejándolo puramente en Bash.
Este es el resultado:
#!/bin/bash
#
# Este script permite renovar la direccion IP de mi servidor en
# dyndns, lanzando una consulta HHTP a servicios web para
# comprobar la IP que tenemos.
#

# ---------------------------------------------------------

# Configuracion de DynDns
DynDns_User=LOGIN_DE_USUARIO_DYNDNS
DynDns_Pwd=PASSWD_DE_USUARIO_DYNDNS
DynDns_Domain=NOMBRE_DOMINIO
DynDns_MX=REGISTRO_MX

# ---------------------------------------------------------

# Definir el directorio donde iremos dejando logs, IPs, etc
BaseDir=/var/log/dynIP
if [ ! -w $BaseDir ]
then
echo "No puedo escribir en [$BaseDir]. Asegurese de que existe y que tiene permisos de escritura" >&2
exit 1
fi

# Ficheros temporales
tmpFile=/tmp/renuevaIP-$$-$RANDOM

# Fichero de Log con las renovaciones
logFile=$BaseDir/renovaciones.log

# Fichero con la ultima IP conocida
ipFile=$BaseDir/lastIP

# Direccion IP inicial
MyIP=""

# Asegurarnos de que cualquiera podrá escribir en los ficheros...
chmod a+w $logFile $ipFile 2>/dev/null >&2

# --- FUNCIONES -------------------------------------------
download () {
/usr/bin/wget \
-O $tmpFile.dwn \
-U "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3) \
Gecko/20030430 Debian/1.3-5" \
"http://$1" >/dev/null 2>&1
return $?
}


# --- MAIN ------------------------------------------------

# Buscar la IP de Internet
if download 'www.whatismyip.com/automation/n09230945.asp'
then
MyIP=$(cat $tmpFile.dwn)
elif download 'checkip.dyndns.org'
then
MyIP=$(cat $tmpFile.dwn \
| perl -ne 'print $1 if ($_=~ m/Current IP Address:\s([\d|\.]+)/);')
elif download 'www.formyip.com'
then
MyIP=$(grep 'Your IP' $tmpFile.dwn \
| head -1 \
| perl -ne 'print $1 if ($_=~ m/Your IP is\s([\d|\.]+)/);')
elif download 'whatsmyip.org'
then
MyIP=$(grep 'Your IP' $tmpFile.dwn \
| head -1 \
| perl -ne 'print $1 if ($_=~ m/Your IP is\s([\d|\.]+)/);')
else
exit 0
fi

# Obtener la ultima IP
OldIP=`cat $ipFile 2>/dev/null`

if [ "$MyIP" != "$OldIP" ] && [ "$MyIP" != "" ]
then
if download "$DynDns_User:$DynDns_Pwd@members.dyndns.org/nic/update?system=dyndns&hostname=$DynDns_Domain&myip=$MyIP&wildcard=ON&mx=$DynDns_MX&backmx=NO&offline=NO"
then
echo "[`date "+%d/%h/%y %H:%M:%S"`] Resultado: `cat $tmpFile.dwn` " >> $logFile
echo -n "$MyIP" > $ipFile
fi
fi

# Borrar todos los ficheros temporales creados
rm -f $tmpFile.*
Este script podemos guardarlo en /usr/local/TECNOQUIA/bin/renuevaIP y darle permisos de ejecución. Luego deberíamos crear el directorio /var/log/dynIP con permisos 777 y añadir al crontab del root lo siguiente:
# Renovacion de IP en DYNDNS, cada 15 minutos, si procede.
*/15 * * * * /usr/local/TECNOQUIA/bin/renuevaIP >/dev/null 2>&1
. Del script sólo deberíamos personalizar las variables: DynDns_User, DynDns_Pwd, DynDns_Domain, DynDns_MX con los datos de nuestra cuenta en dyndns.

Swappiness

Hace tiempo Longinos, me comentó el problema que existía con el servidor TSM y que todas las noches escribiera a SWAP aún a pesar de tener RAM disponible. Esto se debía a en la rama 2.6, el kernel de linux tiene este valor a un 60%, mientras en 2.4 no existía: cat /proc/sys/vm/swappiness, lo que significa que se hará bastante uso swap. Esto es útil en equipos con poca RAM y mucha carga. Conviene realizar pruebas con nuestro servidor, antes de pasarlo a producción:
sudo sysctl -w vm.swappiness=10
Para consolidar los cambios bastará con editar el fichero /etc/sysctl.conf, añadir al final vm.swappiness=10 y reiniciar el equipo.

Gvim en Ubuntu e iluminación de sintaxis

Esta tarde, al intentar trabajar con Ubuntu 7.10 y Gvim, me he propuesto no tener que configurar contínuamente la iluminación de la sintaxis, cuando edito cualquier tipo de documento. Esto se consigue editando la línea 20 del fichero /etc/vim/vimrc y quitando la doble comilla por la que empieza, que indica que se trata de un comentario. Así, que basta con dejar:

syntax on
... et voilá, a funcionar.