¿Qué es DevOps?

Aprovechando que me he leído el libro What is DevOps? (un e-book que, por cierto, es gratuito), voy a explicaros un poco de qué va el tema.

La idea principal del DevOps es la fusión del departamento de sistemas con el departamento de desarrollo. ¿Por qué? Pues porque la división de estos dos departamentos hace que sus miembros se vean como “enemigos”. Digamos que el objetivo del trabajo del departamento de sistemas es el mantener la aplicación funcionando, mientras que el objetivo del trabajo del departamento de desarrollo es (simplificando) añadir nuevas funcionalidades a la aplicación. El problema es que esas nuevas funcionalidades suelen ser vistas por el departamento de sistemas como potenciales desestabilizadores de la aplicación, es decir como más trabajo, por lo que sistemas intentará retrasar al máximo el despliegue en producción de esas nuevas funcionalidades (ha de pasar un tiempo en el entorno de test), lo que será percibido por desarrollo como un menosprecio o amenaza a su trabajo y ya tenemos montado el mal rollo dentro de la empresa.

Lo que propone DevOps es que uniendo ambos departamentos no sólo consigues una mayor harmonía dentro del departamento de IT, si no que consigues una mayor eficiencia a la hora de resolver incidencias. Por ejemplo, desarrollando la parte de logs ¿Cuántos de nosotros ha tenido un problema con una aplicación, ha ido a echarle un ojo al log y ver un galimatías que es incapaz de entender (no entremos cuando vemos el chorro de excepciones no capturadas tan típicas de una aplicación Java)? ¿Por qué? Pues por que el que ha programado la aplicación no sabe que información necesita sistemas, el es de desarrollo y pondrá la información que le resultaría útil a él o ella. Y no por ánimo de joder al pobre sysadmin a media hora de acabar su turno, si no simplemente porque no es consciente de lo que necesita el sysadmin.

Otra de las cosas interesantes que comentan, es hacer que la aplicación se “autoadministre”. Dado que sistemas ahora participa en el desarrollo, se puede añadir código que gestione las típicas incidencias que se resuelven reiniciando un demonio (¿a que jode una alerta a las tres de la mañana para, simplemente, reiniciar un Apache y que ya no te vuelva el sueño?). Hacer la aplicación más resiliente se le llama a esto. Si a esto le sumamos la aparición del IaaS (AWS, Rackspace, CloudBuilder, etc.) podemos hacer que la propia aplicación levante más frontales web cuando lo necesite, o pare un esclavo de base de datos y levante otro porque había fallos con la replicación de forma totalmente automática. Obviamente esto haría mucho más agradable el trabajo del sysadmin de guardia, que sólo sería despertado para incidencias gordas e interesantes, no para chorradas.

La verdad que es una idea que me parece interesante y creo que el futuro de sistemas a por ese camino, al menos en entornos web.

PD: Ya sabéis empresas web que estéis interesadas en un sysadmin molón y que sepa de qué va el rollo DevOps os invito a visitar mi perfil de LinkedIn. 😛

Compartir ficheros en una red local de forma fácil y sencilla (con Netcat)

Una de las cosas que más rabia me dan es cuando quieres copiar un fichero (algo grande) entre dos equipos que tienes en casa.

Un método sencillo y rápido es copiarlo en un pendrive y moverlo de un equipo a otro, el problema es que nunca encuentro un pendrive que funcione cuando lo necesito (tengo un montón de petados).

Otra idea sería la de configurar un servidor de SSH en un equipo y copiarlos por SCP, lo cual también sería efectivo, pero te obliga a instalar y configurar un servidor de SSH, otro problema sería que podrías estar desperdiciando ancho de banda debido a que el fichero se tiene que cifrar antes de enviar (tal vez en la red de casa te dé igual, pero si estás en la oficina podrías estar desperdiciando una buena conexión a gigabit).

Para ello puedes emplear Netcat (la navaja suiza de los administradores de red :P), simplemente ejecuta lo siguiente en el equipo donde quieres recibir el fichero:

nc -l ${puerto} > ${nombredelfichero}

Lo que arrancará una instancia de Netcat que escuchará el puerto que le hayas indicado en $puerto. En el equipo que esté el fichero que quieres copiar escribe:

cat ${nombredelfichero} | nc ${ipdestino} ${puerto}

Lo que enviará el fichero hacia el equipo destino, sin “perder tiempo” cifrando el contenido y sin tener que instalar ni configurar ningún extra.

Usar memorias USB y compartir carpetas con VirtualBox OSE

Buenas, hoy traigo un HowTo muy sencillo para ir empezando con la sección más “técnica” de este blog.


Una de las featuresmás interesantes, para el usuario medio, de la versión privativa de VirtualBox, es la capacidad de montar las unidades USB en el sistema virtual. Lo cual es útil cuando quieres transportar cómodamente los datos del sistema virtual, por ejemplo para prácticas de universidad.

Pero esta característica es emulable gracias a que en los sistemas Unix todo se considera un fichero (y las unidades USB también ;)).

Antes de nada veamos como compartir un directorio de nuestro GNU/Linux con un Windows XP virtualizado.Primero debemos de indicarle al Virtualbox cuál es la carpeta que vamos a compartir. Para ello escribimos en la consola:

ataulfo@vidimensional:~$ vboxmanage sharedfolder add Nombre -name /carpeta/carpeta -hostpath /carpeta/carpeta

Donde ‘Nombre’ es el nombre que tenga la maquina virtual en Virtual Box (ojo con las mayúsculas) y /carpeta/carpeta pues la ruta del directorio que vamos a compartir.

Luego entramos en Windows XP y una vez allí, abre “Mi PC” y en el menú “Herramientas” > “Conectar una unidad de red” seleccionamos la unidad que nos plazca (por defecto, Z:) y en la dirección debemos poner: VBOXSVR/carpeta/carpeta.

Y si todo a transcurrido normalmente veremos una nueva unidad de red en nuestro Mi Pc, que podremos usar normalmente.

Para poder usar la unidad USB, simplemente debemos compartir el directorio donde nos monte el USB (/media/usb, por ejemplo) y ya tendremos acceso a nuestra memoria USB.