Hace ya algún tiempo estuve buscando aplicaciones para notas y me encontré con Turtl Notes que actualmente es una aplicación que uso tanto en Android como en mis ordenadores. Esta aplicación me encanta y por eso estoy colaborando con la traducción en catalán y castellano. Aún así, uso el servidor que hay por defecto y hace ya algún tiempo estuve buscando como tener mi propio servidor de Turlt.

Requisitorios Primero necesitamos instalar estos paquetes:

# apt-get install git wget curl libtool subversion gcc make automake

Instalación de libuv

Libuv es una librería que nos permitirá sincronizar los datos. Para instalar esta librería nos posicionamos en la siguiente ruta:

# cd /usr/local/src

Nos descargamos la librería:

# wget http://dist.libuv.org/dist/v1.9.1/libuv-v1.9.1.tar.gz

La descomprimimos:

# tar -xf libuv-v1.9.1.tar.gz

Y ahora compilamos:

# cd libuv-v1.9.1
# sh autogen.sh
# ./configure
# make
# make install

Instalación de RethinkDB Ahora toca instalar

RethinkDB, que es una base de datos a tiempo real para guardar las notas y demás información. Para instalar RethinkDB en Debian añadimos este repositorio:

cd ~
echo "deb http://download.rethinkdb.com/apt `lsb_release -cs` main" | tee /etc/apt/sources.list.d/rethinkdb.list

Nos descargamos la llave pública y la añadimos:

# wget -qO- https://download.rethinkdb.com/apt/pubkey.gpg | apt-key add -

Y actualizamos repositorios:

# apt-get update

Finalmente instalamos

RethinkDB:

#apt-get install rethinkdb

Utilizaremos la configuración por defecto, así que copiaremos la configuración

default:

# cp /etc/rethinkdb/default.conf.sample /etc/rethinkdb/instances.d/default.conf

Y reiniciamos el servicio:

# systemctl restart rethinkdb

Instalación Common Lisp

Common Lisp es un lenguaje, y tiene muchas implementaciones diferentes. Turtl funciona bien en CCL, nos posicionamos:

# cd /usr/local/src

Y descargamos el paquete:

# svn co http://svn.clozure.com/publicsvn/openmcl/release/1.11/linuxx86/ccl

Copiamos los ficheros en la carpeta

/usr/local/bin para poder ejecutar los scripts:

# Para 32 bits
# cp /usr/local/src/ccl/scripts/ccl /usr/local/bin

# Para 64 bits
# cp /usr/local/src/ccl/scripts/ccl64 /usr/local/bin

Iniciamos lisp con el comando:

# Para 32 bits
# ccl

# Para 64 bits
# ccl64

Para salir:

(quit)

Instalación de QuickLisp

QuickLisp es un administrador para la biblioteca de** Common Lisp**. Creamos un usuario no privilegiado para Turlt:

# adduser turtl
# su turtl
$ cd ~

Descargamos dos paquetes,

QuickLisp y ASDF:

$ wget https://common-lisp.net/project/asdf/asdf.lisp
$ curl -O https://beta.quicklisp.org/quicklisp.lisp

Instalamos los paquetes:

# Para 32 bits
$ ccl --load quicklisp.lisp

# Para 64 bits
$ ccl64 --load quicklisp.lisp

Se iniciará una shell especifica para lisp, y desde allí instalaremos los paquetes:

(quicklisp-quickstart:install)
(ql:add-to-init-file)
(load (compile-file "asdf.lisp"))

Para salir:

(quit)

Eliminamos los paquetes instalados:

$ rm asdf.lisp quicklisp.lisp

Instalar Turtl Server Ahora toca instalar la

API de Turtl, nos lo descargamos de GitHub:

$ git clone https://github.com/turtl/api.git
$ cd /home/turtl/api

Creamos un fichero para escribir comandos de lisp:

$ nano launch.lisp

Copia lo siguiente:

(pushnew "./" asdf:*central-registry* :test #'equal)
(load "start")

Salimos del usuario no privilegiado y volvemos al usuario root:

$ exit

Ahora instalamos algunas dependencias  que faltan el

QuickLisp (puede haber paquetes innecesarios en la lista, pero no lo tengo muy claro). Nos posicionamos:

# cd /home/turtl/quicklisp/local-projects

Descargamos de GitHub:

# git clone git://github.com/orthecreedence/cl-hash-util
# git clone git://github.com/orthecreedence/vom
# git clone git://github.com/orthecreedence/cl-async
# git clone git://github.com/orthecreedence/cffi
# git clone git://github.com/orthecreedence/wookie
# git clone git://github.com/orthecreedence/cl-rethinkdb
# git clone git://github.com/orthecreedence/cl-libuv
# git clone git://github.com/orthecreedence/drakma-async
# git clone https://github.com/Inaimathi/cl-cwd.git

Modificamos el fichero de inicialización de ccl:

# nano /home/turlt/.ccl.init.lisp

Copiamos lo siguiente al final de todo:

(cwd "/home/turtl/api")
(load "/home/turtl/api/launch")

Creamos un fichero de configuración para Turlt:

# cp /home/turtl/api/config/config.default.lisp /home/turtl/api/config/config.lisp

Lo editamos:

# nano /home/turtl/api/config/config.lisp

Configuramos los parámetros *site-url*, *admin-email* y *email-from*, con nuestra URL (o IP), y dos correos electrónicos. Ahora es el momento de iniciar ccl con el usuario turtl, que debería de cargar y construir la API automáticamente:

# su turtl
$ cd ~

Ejecutamos:

# Para 32 bits
$ ccl

# Para 64 bits
$ ccl64

Aquí es cuando Turlt creará un esquema para la DB y lo lanzará. A partir de ahora deberías de poder acceder al servidor a través de un cliente con el server que has configurado anteriormente (algo así como http://turtl.tudominio.com:8181). Si lo intentas hacer en el navegador recibirás un error «Authentication failed.» ya que actualmente no hay una interfaz web. Salimos haciendo Ctrl + C y salimos de Lisp. Ahora volvemos al usuario root:

$ exit

Configuramos Turtl para que inicie al cargar:

# nano /etc/rc.local

Añade al final pero por encima del «exit 0» lo siguiente:

# Para 32 bits
sudo -u turtl /usr/local/bin/ccl

# Para 64 bits
sudo -u turtl /usr/local/bin/ccl64

Reiniciamos y comprobamos que nuestro cliente se conecta a nuestro servidor de Turtl:

http://turtl.yourdomain.com:8181

Yo he configurado una IP local, ya que todo esto lo estoy haciendo desde una maquina virtual, y mi configuración es la siguiente:

http://192.168.1.14:8181

Creamos un usuario nuevo y podremos iniciar sesión sin problema:

Actualmente estamos usando HTTP, lo ideal sería utilizar HTTPS, por lo que se debería de configurar el servicio Turtl a través de Apache o Nginx para implementar HTTPS.

Fuentes:
* Running Turtl
* Libuv Documentation
* RethinkDB Documentation
* Common-Lisp
* QuickLisp Documentation
* Guide – How To install Turlt

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación