NXTER.ORG

Tutorial: Cómo montar un nodo Nxt en una Raspberry Pi 2

 

Nxt es una de las redes p2p más impresionante y, al mismo tiempo, más subestimada de todo internet. Es una plataforma basada en una cadena de bloques descentralizada de código abierto que introdujo un novedoso algoritmo de consenso basado en la prueba de participación (proof-of-stake) y que ya lleva sobreviviendo en este ambiente hostil durante más de dos años. En la actualidad, la tecnología que introdujo Nxt está siendo utilizada en proyectos que cuentan con una vasta financiación como Ethereum, mientras que la Nxt permanece en segundo plano.

Sin embargo, los desarrolladores de Nxt continúan trabajando duro y la última versión nos trae un nuevo juego de funcionalidades de lo más vanguardistas. La API continua aumentando sus capacidades, mientras que el software sólo requiere de un equipo con pequeños recursos para funcionar. Un “nodo completo” capaz de generar bloques puede funcionar en una Raspberry Pi 2 que sólo cuesta unos 50$ en componentes. Probablemente si estás leyendo esta entrada pretendas poner en marcha el tuyo, así que empecemos.

Necesitarás lo siguiente:

  • Raspberry Pi 2
  • Tarjeta de memoria microSDHC de al menos 8GB (Recomendable que sea de Clase 6 o superior)
  • Un cable micro USB para la alimentación
  • Un cable de red de Cat. 5 o bien un adaptador wifi para conectarlo al puerto USB
  • Teclado USB, monitor y cable HDMI (sólo para la configuración inicial)

Instalando el Sistema Operativo

Utilizaremos Linux porque es confiable, seguro y gratuito. Raspbian es la variante de Linux más utilizada en los dispositivos Raspberry Pi y cuenta con un buen servicio de soporte y de mantenimiento. En el momento de escribir estas líneas, la última versión de Raspbian se llama”Jessie” (21-11-2015), que se puede descargar desde RaspberryPi.org. El nuestro será un nodo dedicado y el usuario solo accederá remotamente, por lo que recomiendo usar la versión Jessie Lite puesto que no necesitaremos de una interfaz gráficas.

Existen multitud de maneras diferentes de grabar la imagen en tu tarjeta microSDHC y la guía de instalación explica como hacerlo en LinuxOS X y Windows.

“Es fácil una vez lo has conseguido…”

Configuración del Sistema Operativo

Una vez que tu tarjeta microSDHC está lista, puedes iniciar tu Raspberry Pi 2 por primera vez. En primer lugar inserta la tarjeta de memoria, conecta tu teclado USB, cable de red y cable HDMI y, acto seguido, enciende tu Raspberry Pi 2 conectando el cable micro USB. Muchos de los routers para usuarios domésticos que se venden hoy en día disponen de un puerto USB que deberían ser capaces de alimentar a la Raspberry Pi 2, pero si estás planeando usar periféricos (como por ejemplo un adaptador wifi por USB) te recomiendo usar un adaptador de corriente a micro USB que proporcione una salida de 1.0A, como mínimo.

Una vez que el sistema se ha iniciado deberías ver el símbolo del terminal. El usuario por defecto es pi y la contraseña por defecto es raspberry. Una vez que que has iniciado la sesión, ejecuta los siguientes comandos para instalar las últimas actualizaciones del S.O:

sudo apt-get update
sudo apt-get upgrade

A continuación, inicia la utilidad de configuración del S.O. tecleando lo siguiente:

sudo raspi-config

La primera cosa a realizar es cambiar la contraseña por defecto por una más segura. Elige “2 Change User Password” y sigue los pasos para establecer una nueva contraseña.

Selecciona “9 Advanced Options”

Puesto que no vamos a utilizar ningún gestor de ventanas podemos reasignar una parte de la memoria de la GPU al S.O. Selecciona “A3 Memory Split” y establece el valor en 16.

Si quieres ser capaz de acceder a tu nodo desde otro ordenador a través de SSH puedes activar el servicio en “A4 SSH”. Recomiendo insistentemente establecer medidas de protección en tu instalación SSH una vez has conseguido que todo funcione.

Finalmente, selecciona la opción “1 Expand Filesystem” para reescribir la tabla de partición de tu tarjeta microSDHC para usar al completo la capacidad de almacenamiento.

Una vez completado, presiona ESC para salir del raspi-config y reinicia el sistema:

sudo reboot

Después de iniciar sesión de nuevo, comprueba que el sistema de archivos raíz que está montado en / se ha expandido:

df -h

El tamaño del sistema de archivos raíz debería aproximarse al tamaño de tu tarjeta microSDHC.

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  2.2G   13G  14% /

A continuación vamos a aumentar el espacio de intercambio swap, para lo que editaremos el archivo de configuración swap y reiniciaremos el servicio:

sudo nano /etc/dphys-swapfile

Cambia la línea dónde pone CONF_SWAPSIZE y establécela en 512 o 1024 y guarda el archivo (CTRL-O, ENTER, CTRL-X).

# set size to absolute value, leaving empty (default) then uses computed value
#   you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=1024

Reinicia el servicio del archivo de intercambio swap:

sudo service dphys-swapfile restart

Configuración de la red

Puesto que estamos creando un nodo completo, tendrás que permitir el tráfico peer-to-peer en tu router. La configuración de cada red es diferente, así que está sección solo va a indicar unas líneas generales. Si estás conectado a un router que tiene el DHCP activado, tu Raspberry Pi 2 ya debería haber obtenido una dirección IP local. En caso contrario, necesitarás configurar una dirección IP estática. Para mostrar la configuración actual de tu red teclea:

ifconfig eth0

eth0   Link encap:Ethernet  HWaddr b1:ff:4a:a4:ff:1b
       inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0

inet addr es tu dirección IP local, HWaddr es tu dirección MAC. En la configuración de tu router, localiza los ajustes de reenvío de puertos (port forwarding) y reenvía el tráfico TCP/UDP que llegue al puerto 7874 a la IP Local de la Raspberry Pi 2. Si no estás usando una dirección IP estática, deberías configurar un préstamo de una DHCP estática (también conocido como reserva de DHCP) para esa dirección MAC y dirección IP local. De esta manera la Raspberry Pi 2 siempre obtendrá la misma dirección IP Local para la que configuraste la regla de reenvío de puertos.

Instalando Java

Nxt requiere Java 8. Puedes descargar e instalar manualmente Oracle JRE, o puedes instalar fácilmente OpenJDK JRE:

sudo apt-get install openjdk-8-jre

Asegúrate de que Java se ha instalado correctamente comprobando la versión:

java -version

Deberías ver un resultado semejante al siguiente:

openjdk version "1.8.0_40-internal"
OpenJDK Runtime Environment (build 1.8.0_40-internal-b04)
OpenJDK Zero VM (build 25.40-b08, interpreted mode)

Instalando Nxt

Descarga la última versión de Nxt desde el repositorio público. Puedes usar el comando wget en el terminal para descargar directamente el archivo por HTTPS. En el momento de escribir este texto la versión actual de Nxt es la 1.7.4, pero asegúrate de que usas la última versión disponible.

wget https://bitbucket.org/JeanLucPicard/nxt/downloads/nxt-client-1.7.4.zip

Comprueba el hash del paquete y asegúrate de que coincide con el hash de las notas certificadas de la versión. También puedes comprobar el hash en la blockchain. La cuenta Nxt usada por Jean Luc, el desarrollador líder del código central, es NXT-X4LF-9A4G-WN9Z-2R322.

sha256sum nxt-client-1.7.4.zip

baf0286983fee3f718ea755dd76f5e9bb3d6a2962560368d513ffc9517d10c9b  nxt-client-1.7.4.zip

Extrae el archivo para crear la carpeta “nxt”:

unzip nxt-client-1.7.4.zip

Antes de configurar Nxt, necesitarás conocer tu dirección IP pública. Puedes saber cual es tecleando el comando:

curl ipinfo.io

Anota tu IP pública y a continuación ejecuta el siguiente comando para crear un nuevo archivo de configuración:

nano ~/nxt/conf/nxt.properties

Lo que viene a continuación es un ejemplo de un archivo de configuración:

nxt.myAddress=12.34.56.78
nxt.apiServerHost=0.0.0.0
nxt.allowedBotHosts=*

Si conseguiste configurar el reenvío de puertos en el router, establece en nxt.myAddress tu dirección de IP pública tal y como se mostraba en la salida del comando curl. En caso contrario, elimina esta línea del archivo de configuración. En el resto de parámetros, hemos establecido que la API acepte conexiones desde cualquier lugar. Una vez que tienes las cosas funcionando, deberías procurar restringir el acceso a tu área local o solo permitirlo a direcciones IP específicas. Échale un vistazo a nxt/conf/nxt-default.properties para ver descripciones de los parámetros de configuración. Guarda el archivo de configuración y cierra el editor.

Edita el archivo de inicio y optimiza la configuración de memoria:

nano ~/nxt/run.sh

Añade el parámetro -Xmx640m para aumentar la asignación de memoria de almacenamiento dinámico de Java a 640mb:

java -Xmx640m -cp classes:lib/*:conf nxt.Nxt

Ya estás listo para iniciar el servidor. Puesto que es una instalación nueva, el nodo necesitará descargar la cadena de bloques al completo para poder sincronizar con la red Nxt. En algunos casos esto puede llevar mucho tiempo, dependiendo de la velocidad de tu conexión de red y del tipo de tarjeta de memoria utilizado.

Puesta en marcha y conexión

Nxt funciona como un proceso servidor que proporciona una API y una interfaz web cliente. En primer lugar iniciaremos el servidor:

cd ~/nxt
./run.sh

Deberías ver el arranque del servicio y como sincroniza con la red. Cuando el arranque se haya completado, verás lo siguiente:

2016-01-03 13:43:28 INFO: Nxt server 1.7.4 started successfully.
2016-01-03 13:43:28 INFO: Copyright © 2013-2016 The Nxt Core Developers.
2016-01-03 13:43:28 INFO: Distributed under GPLv2, with ABSOLUTELY NO WARRANTY.
2016-01-03 13:43:28 INFO: Client UI is at http://localhost:7876/index.html

Abre un navegador web en un PC conectado a la misma red y navega hasta la dirección IP local de la Raspberry PI 2 en el puerto 7876.

Ejemplo: http://192.168.1.10:7876

Para la interfaz interactiva de la API, añade /test a la dirección.

Ejemplo: http://192.168.1.10:7876/test

Enhorabuena, si eres capaz de acceder la página de login /test entonces Nxt se ha instalado correctamente. Para detener el servidor Nxt, pulsa CTRL-C en el terminal.

Pasos finales

Activar SSL

Para poder usar con seguridad Nxt, deberías configurar SSL en tu nodo. Si usas HTTP, un atacante a tu red podría robar tu contraseña de Nxt. Recomiendo configurar un certificado autofirmado en el nodo y usar solo HTTPS.  Publiqué algunas instrucciones con “trucos” que se basan en las instrucciones de la wiki. El desarrollador del núcleo Riker también ha posteado en un hilo sobre como configurar SSL.

Instalar screen

Para facilitar la gestión del nodo, recomiendo instalar screen. Te permitirá mantener ejecutando programas en sesiones de las que te podrás desconectar. Una vez que empiezas a usarlo te preguntarás por qué no lo habías utilizado antes.

sudo apt-get install screen

Para usar screen en tu servidor Nxt, edita el archivo run.sh y modifica el comando:

nano ~/nxt/run.sh

screen -mS nxt java -Xmx640m -cp classes:lib/*:conf nxt.Nxt

La próxima vez que inicies el servidor tecleando run.sh, serás capaz de desengancharte del proceso pulsando CTRL-A, CTRL-D. Para reengancharte a esa sesión, introduce el comando:

screen -r nxt

Inicio automático

Una manera fácil de iniciar automáticamente el servidor Nxt cuando se inicia el sistema es con el programador de tareas cron. Necesitas añadir una entrada especificando @reboot y ejecutar los comandos de inicio allí:

crontab -e

@reboot sleep 30 && cd /home/pi/nxt && ./run.sh

En este ejemplo, el servidor Nxt se iniciará 30 segundos después de que se inicie el sistema. Puedes usar cron para programar otras tareas también.

Para preguntas o comentarios, por favor visita el hilo de este post en el foro (en inglés).

View this in: English 简体中文 Русский

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.