Mostrando entradas con la etiqueta script. Mostrar todas las entradas
Mostrando entradas con la etiqueta script. Mostrar todas las entradas

Bash debug/failure

Cuando realizo scripts en Bash que son bastante complicados y deseo ver muy bien lo que estan haciendo, suelo crear una funciona llamada debug tal que:

debug () {
    if [ ${DEBUG} -eq 0 ]; then
        echo "[DEBUG] ${1}" 
        return 0
    else
        eval "${1}" > /dev/null 2>&1
        return $?
    fi
}

Por lo que en lugar de hacer las llamadas directamente, se utiliza esto:

debug "mv ${old} ${new}"

Si ejecutamos el script con la variable DEBUG=0 entonces, en lugar de ejecutar el comando, aparecerá el mensaje de debug con el comando. El mayor problema de esto y que se tiene que tener muy en cuenta, es que con esta función tambien podemos incluir comentarios como:

debug "Vamos a mover el directorio"

Estos comentarios no nos traen problemas ya que eval intentará ejecutar Vamos como si fuera un comando y fallaría sin problemas, pero cuidado con estos comentarios.

Otra función que está en mi "Toolbox" es failure:

failure () {
    if [ ${1} -ne 0 ]; then
        echo "[FAIL] (${1}): ${2}"
        exit ${1}
    fi
}

La utilizamos después de ejecutar cualquier comando:

failure $? "Failed to mkdir ${archive_dir}${2}"

La función recibe el código de salida del comando anterior y muestra el mensaje que deseamos en caso de haber fallado. En caso de fallar, devuelve el código de error del comando como el código de error de nuestro script. Tambien podemos utilizarla para resolver algún otro test:

if [ -z "${1}" ] ; then
     failure 1 "No existe el directorio ${1}"
fi


Las dos funciones pueden ser utilizadas en conjunto:

debug "mkdir ${archive_dir}${2}"
failure $? "Failed to mkdir ${archive_dir}${2}"

Además, las ventajas de estas dos funciones es que podemos escribir en un log sin modificar todas nuestras lineas, podemos añadir colores y modificar el formato de salida en un solo lugar y funcionan bastante bien.

Xbox Live Bridge

El siguiente es un sencillo script para crear un bridge y poder conectar una Xbox utilizando la wifi de un portátil. Si tienes la WiFi de la Xbox esto no hace falta.

Lo que hace es crear un bridge utilizando IPTables que enruta el tráfico entre las dos interfaces. Solo hay que cambiar en el script el nombre de las interfaces de red.

Descargad

Servidor virtual en Intrepid Ibex

Llevo ya tiempo estudiando las distintas soluciones más populares de virtualización para GNU/Linux: VMWare, VirtualBox, Qemu. Finalmente y después de algunas pruebas (nada científicas o exhaustivas) me decidí por VirtualBox. No porque las otras no sirvan para nada, la verdad es que las tres son excelentes, pero la decisión se basó en el nivel de intrusión que se genera en el sistema operativo local... el cual es mi estación de trabajo y es muy importante para mi.
Por ejemplo, VMWare tiene la manía de querer modificar mi kernel, y eso no me mola nada. VirtualBox utiliza un módulo que ya viene en el kernel Linux.
En fin, la idea de esta entrada es la de un HOWTO para hacer que la máquina virtual sea accesible desde Internet y de la LAN, porque de hecho, será un servidor de aplicaciones de pruebas (Jboss, HTTP/modpy, FTP).
Después de instalar VirtualBox (en Intrepid Ibex la versión es la 2.0.4 OSE) creamos una máquina virtual. A la hora de configurar la red, vamos a utilizar la opción "Host Interface" e introducimos en el campo "Host Interface" lo siguiente: vth0
Genial, ahora tenemos que crear vth0. Esta es sencillamente, una tarjeta de red virtual. Para que ésta tenga conexión, necesitamos crear un "puente" entre vth0 y eth0. Para lo cual creamos el siguiente script:




#!/bin/bash

if [ -z $1 ]; then
echo "Usage: $0 [start|stop]"
exit 1
fi

#Check root

USER=$(id -u)

if [ "$USER" -ne "0" ]; then
echo "Must be root"
exit 1
fi

USER=ubersoldat
TAP=vth0
BR=br0
ETH=eth0

function doStart {
#No parece ser necesario ya que el usuario
#pertenece al grupo virtualbox
#chmod 0666 /dev/vboxdrv
#chmod 0666 /dev/net/tun

#Create the bridge
brctl addbr $BR
ifconfig $ETH 0.0.0.0 promisc
brctl addif $BR $ETH
dhclient $BR

tunctl -t $TAP -u $USER
brctl addif $BR $TAP
ifconfig $TAP up

echo "$TAP ready"
}

function doStop {
ifconfig $BR down
ifconfig $TAP down
tunctl -d $TAP
brctl delbr $BR
dhclient $ETH

echo "Cleaned"
}

case $1 in
start)
doStart
;;

stop)
doStop
;;

*)
echo "Usage: $0 [start|stop]"
;;
esac

exit 0




Ejecutamos como root y tendremos lista vth0 siempre que el DHCP funcione. Al ejecutar la maquina virtual y darle como parámetro nuestra interfaz virtual, el servidor podrá conectarse a Internet y viceversa. Sólo tendréis que configurar un dirección IP estática para la maquina virtual y abrir los puertos en el router.



Me parece importante recalcar que todo el tráfico pasará por eth0 por lo que podemos hacer cualquier modificación o capturarlo desde la estación de trabajo.


Nota:
Según tengo entendido, la versión 2.1 de VirtualBox se "engancha" directamente a eth0 sin la necesidad de realizar todo esto. Pero no es la versión que está en los repositorios de Ubuntu, por lo que hay que apañarse.

1234567890

Despues de un día de curro asqueroso para ser viernes, dos cosas me han alegrado el día. Saber que mi segundo hijo va a ser niño y que voy a poder vivir el segundo 1234567890 del tiempo UNIX. De hecho, recordar este hecho me ha hecho olvidar que también es San Valentin, Día de los enamorados, etc.
Para no perderme de este acontecimiento me he hecho un par de comandos para bash y así terminar de coronar la noche más geek del siglo:
El primero es para avisar de los minutos que faltan y mostrar una alerta cuando falten cinco minutos:
$while(true); do sleep 30; NOW=$(date +%s); LEFT=$(( 1234567890 - $NOW )); X=$(( $LEFT / 60 )); if [ $X -lt 5 ]; then xmessage "Es la hora"; else echo Faltan $X minutos; fi ; done
El segundo es para realizar una captura de la pantalla en el momento justo:
$while(true); do UTIME=1234567890; NOW=$(date +%s); if [ $NOW -eq $UTIME ]; then date +%s; sleep 1; /usr/bin/scrot /tmp/1234567890.png; else echo Faltan $(( $UTIME - $NOW )) segundos; fi; done
Actualización: Todo ha funcionado de maravilla :) Ya podré recordar lo que estaba haciendo el segundo 1234567890



Ah! Y el segundo en el que el mundo explote será 2147483647 o lo que es lo mismo Tue Jan 19 04:14:07 CET 2038. Esperemos que dentro de tres décadas ya no existan los sistemas de 32 bits.