Juan Antonio F.M.

Just Another Freak of Machines

Appengine Testing With Travis and Nose

In this post I’m gonna talk about how to automate the testing of your github repo with travis.org, if you are using google appengine for your application.

Setting up your travis account and the repository

go to travis.org and login with your github account. Magic. in no time you will be done. Follow the wonderful getting started guide or go straight to the task:

  • go to your accounts in travis, and enable the repo of the app you want

  • create a .travis.yml in the root of your repo, and add something like this python example

  • commit to github and travis will start the first build (that will most likely fail, dont worry ;) )

Adapting for appengine

add something like this to your .travis.yml:

# to fix the dependencies with appengine
before_script:
- wget https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.6.zip -nv
# old version: - wget https://googleappengine.googlecode.com/files/google_appengine_1.8.9.zip -nv
- unzip -q google_appengine_1.9.6.zip

I leave you both kind of links for reference. The old is for appengine untill 1.8.9.

That way, the libraries will be just right there for the testing. Then, you can also do other tasks with travis, like uploading automaticly to appengine if the build is successful, etc. The power of travis is quite awesome.

Integar Tumblr en Una Pagina Estatica

La forma facil (pero pobre)

El metodo mas rapido, es incluir en tu pagina un trozo de javascript como este:

<script type="text/javascript" src="http://wakaru44.tumblr.com/js"></script>

Al que luego puedes dar tu estilo con el CSS que quieras. No esta mal si solo quieres un pequeño “feed” de tu tumblr, pero las opciones avanzadas (controles personalizados, metadatos, etc) son escasas o nulas.

La forma buena (y no tan complicada)

El truco magico, viene gracias de nuevo a la API de tumblr, que nos permite recuperar datos en forma de JSON, y con los que luego podemos hacer lo que queramos.

Para ir calentando, un ejemplo sencillito. Pon en el <head> de tu pagina este script, por supuesto cambiando “username” por tu nombre:

<script type="text/javascript" src="http://username.tumblr.com/api/read/json"></script>

lo que creara una variable tumblr_api_read en la que estaran todos los datos de tus posts. Puedes echar un vistazo al formato en la propia salida de mi tumblr.

Luego, alla donde quieras poner enlaces a tu tumblr, solo tendras que agregar algo como:

<script type="text/javascript">
    // The variable "tumblr_api_read" is now set to your tumblr feed.
    document.write(
    '<a href="' + tumblr_api_read['posts'][0]['url'] + 
    '">My most recent Tumblr post</a>'
    );
</script>

o si quieres, un ejemplo un poco mas enrevesado:

<script type="text/javascript">
    // The variable "tumblr_api_read" is now set to your tumblr feed.
    for (var i=0; i < 5; i++){
        link = tumblr_api_read['posts'][i]['url'] 
        title = tumblr_api_read['posts'][i]['slug'] 
        img = tumblr_api_read['posts'][i]['photo-url-75'] 
        document.write(
                '<li><a href="' + link + 
                '">' + title + '</a> <br /><img src="' + img+ '" alt ="' + title + '" /></li>'
                    );
    }
</script>

lo demas lo dejo a tu eleccion ;)

Server side

Y por supuesto, aunque en el titulo ponga en una pagina estatica, mencionare tambien que hay muchas y muy diversas formas de hacerlo con codigo en el lado servidor, basandose en la api de tumblr para recoger el contenido en XML (en ingles), con URL de este estilo:

http://wakaru44.tumblr.com/api/read
http://wakaru44.tumblr.com/api/read?start=0&num=1
http://wakaru44.tumblr.com/api/read?start=0&num=1&type=text

Instalando Eagle en Debian 32Bits

Hoy en dia, cada vez mas gente instala su SO con una arquitectura de 64Bits. Pero algunos no se dan cuenta y publican su software propietario en 32. Y solo en 32 :(

Con este articulo, podras instalar los programas propietarios que necesites (y que no puedas sustituir con software libre).

Enfoque

Hay varios metodos para conseguir instalar cosas de 32 en un SO de 64. una opcion es usar chroot, aunque para usar una o dos aplicaciones puede resultar pesada. Otro es la de crear un entorno encapsulado a mano, instalando las librerias en una carpeta local, que es la que vamos a seguir.

Los pasos han sido probados en un Debian 6 SID de 64, pero deberian funcionar en cualquier distro basada en, como ubuntu o mint. Ademas con un poco de imaginacion se pueden llevar a otras distros tambien.

Y aunque en este ejemplo instalemos eagle, tambien podemos instalar otros programas con el mismo metodo, investigando un poco cuales son las librerias que necesita y siguiendo pasos similares.

Preparativos

Para instalar eagle necesitamos algunas cosillas:

- libpng 1.4.x (provides libpng14.so)
- OpenSSL 1.0.0 (provides libssl.so.1.0.0 and libcrypto.so.1.0.0)
- libjpeg v8 (provides libjpeg.so.8)

Bajatelas (en los enlaces de arriba lo encontraras rapido), y descomprimelas es donde pongas los src. Para este caso lo haremos en /home/lusuario/.eagle pero para casos generales yo te recomiendo hacerlo en /usr/src y si no sabes mucho de instalar desde los fuentes, echale un vistazo a mi articulo Paquetes Fuente en Cuenco De Loto - the Ninja Way to Install Source Tarballs habla de un pequeño truco que algun dia te evitara muchas horas, como las que yo perdi en su dia -;)

Y para poder compilar, tambien hacen falta algunas herramientas:

sudo apt-get install build-essential perl gcc-multilib
sudo apt-get install ia32-libs lib32z1 lib32z1-dev

Descargando, compilando e instalando librerias a lo local

que no a lo loco

Seguiremos los pasos tipicos, pero con algunos retoques (lee mas abajo)

  1. con las librerias descargadas y desempaquetadas
  2. Configuramos las librerias con las opciones oportunas (como que prefijo usar, y compilar en modo 32 bits)
  3. Compilamos (repito, en modo 32)
  4. testeamos la libreria
  5. La instalamos
  6. Y comprobamos que las cosas estan bien y en su sitio (que es de 32 y que esta en la carpeta “encapsulada”

Al seguir el paso 2, tendras que configurar unas opciones:

$ export CFLAGS="-m32"
$ export LDFLAGS="-m32"

Y luego lanzar el configure con

./configure --prefix=/home/lusuario/.eagle 

i Para libpng:

cd libpng-`version  ./cfonfigure --prefix=/home/lusuario/.eagle/usr CFLAGS=-m32
# aqui necesitamos un arreglillo para debian y similares
sudo ln -s /usr/include/x86_64-linux-gnu/zconf.h  /usr/include
# Y seguimos como siempre
make check
make install
cd ..
# y comprobamos lo que hemos instalado
file -L /home/lusuario/usr/lib/libpng14.so

Para openSSl en concreto, haremos:

cd 
cd openssl-1.0.0e
./Configure shared --prefix=/home/lusuario/.eagle/usr linux-generic32 -m32
make
make test
make install
cd ..
file -L /home/lusuario/.eagle/usr/lib/libssl.so.1.0.0
file -L /home/lusuario/.eagle/usr/lib/libcrypto.so.1.0.0

Y para libjpeg v8

cd jpeg-8c
./configure --prefix=/home/lusuario/.eagle/usr CFLAGS=-m32
make
make test
make install
cd ..
file -L /home/lusuario/.eagle/usr/lib/libjpeg.so.8

Y alegria muchacho!!! podemos seguir.

Una ultima comprobacion…

file -L /home/lusuario/.eagle/usr/lib/* | grep 32  | cut -c1-90

Nos dira la lista de todo lo que tenemos, al estilo de

/home/lusuario/.eagle/usr/lib/libcrypto.so:        ELF 32-bit LSB shared object, Intel 80386
/home/lusuario/.eagle/usr/lib/libcrypto.so.1.0.0:  ELF 32-bit LSB shared object, Intel 80386
/home/lusuario/.eagle/usr/lib/libjpeg.so:          ELF 32-bit LSB shared object, Intel 80386
/home/lusuario/.eagle/usr/lib/libjpeg.so.9:        ELF 32-bit LSB shared object, Intel 80386
/home/lusuario/.eagle/usr/lib/libjpeg.so.9.0.0:    ELF 32-bit LSB shared object, Intel 80386
/home/lusuario/.eagle/usr/lib/libpng14.so:         ELF 32-bit LSB shared object, Intel 80386
/home/lusuario/.eagle/usr/lib/libpng14.so.14:      ELF 32-bit LSB shared object, Intel 80386
/home/lusuario/.eagle/usr/lib/libpng14.so.14.11.0: ELF 32-bit LSB shared object, Intel 80386
/home/lusuario/.eagle/usr/lib/libpng.so:           ELF 32-bit LSB shared object, Intel 80386
/home/lusuario/.eagle/usr/lib/libssl.so:           ELF 32-bit LSB shared object, Intel 80386
/home/lusuario/.eagle/usr/lib/libssl.so.1.0.0:     ELF 32-bit LSB shared object, Intel 80386

Instalando Eagle en si

En su carpeta mas bien

Ahora tenemos que ajustar algunas cosas para lanzar eagle tirando de las librerias que acabamos de compilar.

Hay que modificar la variable LD_LIBRARY_PATH en la sesion del shell para que el instalador use las librerias oportunas

export LD_LIBRARY_PATH=/home/lusuario/.eagle/usr/lib
./eagle-lin-6.5.0.run

Y le indicas que lo quieres instalar en /home/lusuario/.eagle/eagle-6.5.0

Una vez instalado ahi, necesitamos crear un script para poder lanzarlo con comodidad. Mete algo asi en un archivo:

#!/bin/bash
# Ejecuta nuestra instalacion de eagle
export LD_LIBRARY_PATH=/home/lusuario/.eagle/usr/lib
/home/lusuario/.eagle/eagle-6.5.0/bin/eagle

Y luego dale permisos de ejecucion y esas cosas

chmod +x eagle.sh

Colocalo donde quieras y a correr!!!!!

Utilizando RememberTheMilk Con Python

Si lees esto, puede que alguna vez hayas pensado en hacer tu pequeña aplicacion de tareas con python.

Yo lo hice… y me di unos cuantos coscorrones.

Remember The Milk: para el que no lo conozca, es un servicio de listas de tareas. Tienen aplicaciones para moviles, para la web, y una fabulosa Api.

Esta claro que tratar de empezar a utilizar el api directamente, es como reinventar la rueda, no somos los primeros que lo intentamos, ni los primeros que lo hacemos con python.

Pero tambien hay que tener cuidado con que “rueda” o libreria escogemos. Hay varias posibilidades, y no todasa son utiles para todo.

pyrtm

Es la mas antigua de las dos, y esta disponible en varios sitios. Por un lado, el autor original, Mariano Draghi, creo una version llamada rtmapi (ver mas abajo), y luego, creo un modulo llamado pyrtm.

El codigo esta en bitbucket, pyrtm, y la fecha de creacion es de 2009-08-07, osea un año despues de la ultima actualizacion de rtmapi “old school”

Hay a disposicion del usuario una aplicacion de demo, que mas o menos explica como funciona la libreria en rtm_appsample

rtmapi (old school..)

Aqui viene la mayor confusion. La version original era la de Mariano Draghi, que mencione en el apartado anterior. Esto es lo que luego se llamo pyrtm

La ultima version, 0.5, data de Marzo de 2008, asi que esta Obsoleta

El codigo lo metieron en Google Code y llegaron a la version 0.5

La documentacion esta en chagui

rtmapi (new school)

Es la nueva version, mas ligera, que actualmente esta en la version 0.6, y que no tiene nada que ver con la version de la vieja escuela.

El modulo se puede consultar en pypi, rtmapi.

El codigo esta en bitbucket, rtmapi se creo en 2010-09-06

Cuidado: esta libreria no incluye todavia todos los atributos de las tareas, y ademas no avisa de atributos que no existen, por lo que si eres nuevo con la api de Remember the milk

Pero…. ¿Cual es la buena? > pyrtm

Personalmente, mi preferida es pyrtm. Por varias razones:

  • esta actualizada ( a fecha de 10 de Mayo de 2013 )
  • parece bastante madura ( entre rtmapi “new school” y pyrtm, esta es la mas antigua)
  • es mas completa (algunas caracteristicas de la api todavia no estan implementadas en rtmapi “new school”)

asi que,

sudo pip install pyrtm

y a jugar! ;) recuerda que para importarla tienes que hacer algo tipo

from rtm import createRTM
rtm = createRTM(api_key, secret, token)

Instalando FunkLoad en CentOS-RHEL

Redhat, redhat, redhat

Siempre igual con tus RPM…. Bueno, por defecto, funkload no se considera soportado, pero con un poco de maña, podremos instalarlo en una version antigua de CentOS-RHEL 5.x

Como tenemos python 2.4, tenemos que tener cuidado con algunas cosas.

Configurar el repo

Primero nos tenemos que instalar el repo de repoforge:

http://repoforge.org/use/

Te bajas el paquete que corresponda, y te lo instalas…

Instalando dependencias

Luego tenemos que meter las dependencias oportunas:

yum install PyXML
yum install expat
yum install python-setuptools  # Ojo, si la version correcta no esta disponible, puede que tengamos que reinstalar 

Instalando FunkLoad

Y ahora es cuando empezamos la instalacion de verdad. De los diversos metodos que se nos ofrecen, para instalarlo con una version vieja de python, tenemos bastante pocas. La que a mi mejor me parece, es descargar un snapshot de la web de funkload (en pypi solo tienen las ultimas versiones). La ultima version que parece compatible con Python2.4, la version que tenemos en Centos/RHEL 5 es la 1.11.0 o la 1.11.1

wget http://funkload.nuxeo.org/snapshots/funkload-1.11.0-py2.4.egg 
# o
wget http://funkload.nuxeo.org/snapshots/funkload-1.11.0rc-r54193.tar.gz

Si tienes la version correcta de easy_install (aka setuptools) podras instalarlo de frente. Sino, tienes que segui la instalacion alternativa

Instalacion alternativa

Si tienes problemas con la instalacion automatica, puedes intentarlo con la version offline. Pillate los paquetes necesarios:

mkdir -p /tmp/fl
cd /tmp/fl
wget -r -l1 -nd http://funkload.nuxeo.org/3dparty/

Luego los pasas a la maquina en cuestion, y descomprimes el paquete de las setuptools

tar -xvf setuptools-*

E instalas el resto de paqueteria

easy_install docutils*

easy_install tcpwatch easy_install webunit

y luego el propio funkload, que para la version python2.4 cogeras este:

wget http://funkload.nuxeo.org/snapshots/funkload-1.11.1b-r54205.tar.gz

Monitorizacion De Aplicaciones Web Para Benchmarking

Cuando monitorizamon una aplicacion o un sistema con el objetivo de encontrar los cuellos de botella que afectan a su rendimiento, tenemos unas necesidades de monitorizacion especiales, que no todas las herramientas poseen. En este articulo, hago una criba en base a mi experiencia, separandolas entre herramientas graficas (que te dejan un precioso dibujin) y las que no (aunque luego puedas perfectamente transformar los datos en preciosas graficas).

Aplicaciones con graficos

La mayoria estan basadas en una interfaz web. Algunas como munin o nagios, no nos sirven, ya que su intervalo de actualizacion suele ser bajo, y su montaje un tanto complejo para simplemente estresar una aplicacion web.

Java Melody

Una pequeña aplicacion, que se instala en el servidor de aplicaciones (ojo que no todos estan soportados) y nos muestra detalles de lo que esta pasando por dentro de nuestra pequeña aplicacion. Desde que el usuario entra hasta que sale. Por suerte, esta aplicacion no introduce mucha instrumentacion en nuestro codigo, y [no supone ninguna gran perdida de rendimiento] (https://groups.google.com/forum/?fromgroups=#!topic/javamelody/39txASF__Lw).

Las graficas se elaboran con los datos unicamente estadisticos que recoge (una de las claves de su bajo impacto es que no guarda demasiados detalles, al fin y al cabo solo necesitamos estadisticas). Estan hechas con rddtool, asi que a mas de uno le resultara familiar el estilo. Aqui se pueden ver algunas capturas de pantalla JavaMelody captura de pantalla de las graficas [Instalacion de JavaMelody[(http://blog.klicap.es/archives/175)

VisualVM & JConsole

Mientras que el primero se mantiene fiel a las formas clasicas, es ligero y relativamente facil de conectar, VisualVM o jvisualvm llega ser mas que un profiler de java, extendiendolo a traves de plugins, como el GCPlugin que nos muestra informacion detallada de como esta recogiendo la basura nuestra querida JVM.

Conectar estas herramientas con un Tomcat o un Jboss es sencillo, aunque cuando hay problemas cuesta averiguar el porque. A veces hay que tener consideraciones especiales, segun el servidor de aplicaciones que utilicemos, como con Jboss AS 7: Como conectar VisualVM a Jboss7

Aplicaciones de consola para monitorizar aplicaciones Java

En un precioso nuevo articulo, que este se hace pesado :D Hablaremos de iostat, iotop, sar, vmstat, iptraf y dstat y para mirar la coleccion de basura, habilitamos las opciones _ -Xloggc: -XX:+PrintGCDetails_, miramos el log, y lo parseamos con GCViewer

Blogging Comodo Con Octopress

Con la vida ocupada de hoy en dia, no podemos perder tiempo en tareas mecanicas o repetitititititititivas :P

con unos pequeños scripts, la ayuda de crontab y pericia linuxera, podemos evitarnos tener que hacer login en ninguna web, para postear en nuestro blog.

Para ello, utilizaremos git (en concreto github , bash, markdown, y un editor de texto, como vim.

Si no los conoces, - markdown, es un lenguaje de marcado, sencillo y facil de aprender, orientado a la redaccion de webs, pero con el puedes elaborar documentos presentables sin preocuparte con el estilo.

  • git, es un sistema de control de versiones, usado por ejemplo para desarrollar el kernel de linux

  • github, es un servicio de repositorios git gratuito. Hay muchos otros como bitbucket, pero hemos elegido github por su especial vinculacion con Octopress

  • bash, es un interprete de comandos. Si no lo conoces, deja de leer e instala debian ;)

Conociendo Octopress

Octopress es una plataforma de blogging que funciona de una manera especial. En lugar de servir paginas dinamicas con PHP como muchos otros, sirve paginas estaticas. punto. Sin problemas de seguridad, sin problemas de actualizaciones, y sin (casi) problemas de carga (necesita muchiiiiiisima menos potencia en el servidor que un blog con PHP+MySQL, por ejemplo.

Cada vez que escribes un articulo, hay que regenerar el sitio “entero”. Para hacer todo esto comodamente, Octopress utiliza una serie de “tareas” de ruby (rake).

Por un lado, se instala el Octopress propiamente dicho, que contiene el codigo fuente, las tareas, etc Por otro lado, tendremos el sitio con las paginas a publicar, el blog en si. Para publicar las paginas, podemos utilizar las paginas de github, Heroku, o como es mi caso, tu propio servidor web.

La opcion mas natural para utilizarlo, es instalarlo en local, y cuando escribes un articulo, despliegas en el servidor. Pero este caso es especial :)

Vamos a ir un poco mas alla, y vamos a prepararlo todo para poder publicar desde cualquier sitio, y que automaticamente se despliegue en nuestro servidor. automagicamente

Instalando Octopress

Primero, lo instalaremos en el servidor, como si fuera una instalacion normal. No voy a detallar mucho la instalacion, teneis la documentacion oficial. Resumiendo rapidamente, tenemos que instalar ruby, descargar un par de cosillas, configurar el blog en un fichero .yaml, y pista

Configurando la automatizacion

La automatizacion consta de varias partes. Por un lado una tarea de ruby se encargara de vigilar el directorio con los posts en espera de que algo cambie, para re-generar el sitio automaticamente. Por otro, tendremos una tarea cron que descargara los posts de un repositorio en github, bitbucket, o similar, actualizando nuestra carpeta, provocando que la tarea de re-generar se lance. Y finalmente, nos tendremos que acordar de subir nuestros posts al repositorio cuando acabemos de editarlos. Calma, tambien haremos un script para esto.

Regenerando el sitio automaticamente

En la maquina en la que tenemos instalado Octopress, crearemos un demonio que ejecutara

$ rake watch

La tarea que re-generara nuestro sitio.

Sincronizando con el repositorio automaticamente _

En la misma maquina en la que hemos instalado Octopress, configuraremos una tarea Cron para que actualice nuestra carpeta de posts.

Bastara con editar un archivo de texto, sincroniza-blog.sh, con algo como esto:

1
2
3
4
 #!/bin/bash
  cd /ruta/a/la/instalacion/de/octopress
  git pull
  

y luego darle permisos de ejecucion y moverlo a la carpeta correspondiente de crontab

$ sudo su -                                # entrar como root
% mv sincroniza-blog.sh /etc/cron.hourly   # mover el script
% chown root:root sincroniza-blog.sh       # cambiar el owner
% chmod +x sincroniza-blog.sh              # dar permisos de ejecucion
% exit                                     # Para salir de la sesion de root 

De esta forma, se ejecutara automaticamente cada hora.

Facilitando la publicacion

Y como buen programador (e incluso te diria algun buen lenguaje de programacion) tenemos que ahorrar golpes de teclado (no confundir con vagancia ;) Y utilizaremos de nuevo otro script bash. NOTA: aseguraros de haber ejecutado un git push origin master al menos antes d lanzar este script.

1
2
3
4
5
 #!/bin/bash
  cd /ruta/al/repo/del/blog
  git commit -a
  git push
  

Escribiendo el primer post (y siguientes ;)

Y con todo configurado, ya podemos ponernos manos a la obra. Entra en la carpeta _posts y crea un nuevo post haciendo una copia de la plantilla

Como Sacar Informacion De Un vCenter Con Python

Me gusta automatizarlo todo, y muchas de las tareas que habitualmente realizo, estan relacionadas con VMWare, y principalmente con VCenter, VSphere, y servidores ESX o ESXi. Llegado el dia, a ti te ha tocado tambien, asi que echale un vistazo a este post, y averigua como hacer tu propio informe de capacidad o de estado de tus servidores, con un sencillo script en python.

Como conectarse al vCenter

Hay unas cuantas maneras. puedes usar libvirt, que es mucho mas potente, o puedes usar pysphere. Ahora vamos a utilizar psphere. Podemos instalarlo con el tipico

pip install psphere

O con el gestor de paquetes de nuestra distribucion. (lo siento por los de windows… si alguien puede aportar la instalacion en windows, la enlazo encantado)o

Una vez instalado, primero tenemos que conectarnos con un “cliente”, con el que luego haremos consultas e interactuaremos con el vCenter.

from psphere.client import Client
my_client = Client( server = "vc.domain.com", username = "Administrator", password = "secret")

Como sacar datos sobre las maquinas

Primero tendremos que sacar un listado de todas las maquinas. Podemos hacerlo con dos aproximaciones. Sacando directamente todas las maquinas del vcenter a partir de un objeto de maquina virtual:

from psphere.managedobjects import VirtualMachine
vms = VirtualMachine.all(my_client)
for vm in vms:
    print vm.name

O dividiendolo por host:

from psphere.managedobjects import HostSystem  
for host in HostsSystem.all(my_client):
    print "Hostname: ", host.name
    vms = host.vm
    for vm in vms:
        print vm.name

Avanzando mas alla

Y a partir de aqui, se abre un mundo de posibilidades. Yo por ejemplo, creo periodicamente informes de estado de mi entorno de virtualizacion, y lo subo a la wiki de mi empresa, para que lo pueda ver todo el equipo de infraestructura.

Mosh Mejora Ssh

Tiempo de lectura estimado: 2 minutos 22 segundos

SSH lleva muchos años entre nosotros, y es insustituible, pero mejorable. Mosh complementa a SSH a la hora de administrar maquinas por consola, sobre todo cuando tenemos una conexion pobre, lenta, con interrupciones, o movil.

Para instalar mosh

De entre la Lista de clientes podemos escoger para practicamente cualquiera de nuestras plataformas, aunque si lo quieres usar en windows, tendras que instalar Cygwin (jejeje)

en Debian

Con los repos de squeeze-backports habilitados, basta con un

    $ sudo apt-get install mosh

En RHEL / CentOS

Para instalar mosh en un servidor basado en redhat, tendremos que utilizar los repositorios de EPEL. Ojo, hay que tener mucho cuidado y no mezclar repos orientados a Fedora, con los orientados a CentOS. Aqui puedes ver “What NOT to do”. Echale un vistazo (son dos parrafos), y evita males mayores.

Despues, bastara con

    $ sudo yum install mosh

Y alegria!

En Android

Para usar en un cacharro con android (habitualmente un telefono) tenemos disponible un port construido sobre el cliente IRSSI ConnectBot, que algunos ya conocereis. Instalarlo es muy facil, basta con Descargar la version modificada de ConnectBot

A pelo como los paisanos

Siempre podremos compilar la veresion de codigo fuente, si no encontramos una opcion que surta a nuestra distro. Para compilarla, hay dos opciones, Cogiendo la version de GitHub, o descargando el paquete.

Algunas dependencias en debian, aparte de las herramientas esenciales de compilacion:

aptitude install protobuf-compiler
aptitude install zlib1g-dev
aptitude install autoconf
aptitude install libssl-dev
aptitude install  pkg-config
aptitude install libncurses5-dev
aptitude search  libprotobuf-dev

Para conseguirla de GitHub

Clona el repositorio y lanza el autogen

    $ git clone https://github.com/keithw/mosh
    $ cd mosh
    $ ./autogen.sh

Para instalar el codigo fuente

Tanto si has descargado el paquete y lo tienes descomprimido en una carpeta, como si descargaste el repo y lanzaste el autogen, solo tendras que seguir los pasos tipicos de instalacion.

    $ ./configure
    $ make
    # make install