1.- Instalación nodo Bitcoin y Lightning

En este foro se tratan los temas de interés general.
Avatar de Usuario
jochemin
Mensajes: 46
Registrado: Dom Sep 09, 2018 8:55 pm
GnuPG: 8009 FEB1 1A79 C293 5D17 72D5 0E1E DC2D 57F8 D07F
Twitter: jochemin
Agradecido : 14 veces
Agradecimiento recibido: 38 veces

1.- Instalación nodo Bitcoin y Lightning

Mensaje por jochemin » Lun Ene 14, 2019 3:59 pm

Suelo echar una mano en la instalación de nodos, voy a intentar unificar toda la información necesaria en este post. La instalación se va a realizar en una Raspberry Pi por estas razones:
  • Es pequeña, no molesta y se puede colocar al lado del router.
  • Consumo bajísimo, unos 5€/año estando encendida 24x7.
  • Precio muy contenido
Contras:
  • Su potencia es muy comedida
  • Las tarjetas Micro SD son más propensas a corromperse que los discos duros
Para evitar discos externos y que la instalación y el mantenimiento sean lo más sencillo posible vamos a utilizar un nodo con podado (pruning) esto elimina bloques ya validados para que el espacio que ocupa la cadena de bloques no sobrepase unos límites. Esto es contraproducente cuando se trata de Lightning, así que necesitaremos una Micro SD de, al menos, 64 GB.

Esta es la lista de la compra necesaria:
  • Cable de red para conectarla al router. (Seguro que tenéis uno en la caja del router)
  • Lector de MicroSD en nuestro pc
Una vez que tengamos todo el hardware necesario nos ponemos con la instalación. Una Raspberry no es más que un ordenador muy pequeño con una potencia muy limitada, como cualquier ordenador, necesita un sistema para poder funcionar. En el caso de la Raspberry hay varios sistemas que se instalan normalmente en la microsd (aunque es posible hacerlo en un pendrive, un disco externo, etc). Para nuestro nodo vamos a utilizar Raspbian la distribución oficial para Raspberry basada en Debian. No vamos a utilizar pantalla en nuestro nodo, haremos todo por comandos, tranquilos, es mucho más sencillo de lo que parece.

Las explicaciones asumen que se va a realizar la instalación de Raspbian desde un ordenador con Windows instalado, si tienes Linux seguramente sabrás hacer este paso sin mayor problema.
  1. Instalación de Raspbian
Podemos descargar la imagen desde la web oficial seleccionando Raspbian Stretch Lite. Enlace directo de descarga pinchando AQUÍ Se descargará un fichero comprimido en zip con la imagen. Extraemos el fichero .img:
Imagen

Para volcar esta imagen usaremos el software que recomiendan en la página de Raspberry. Desargamos e instalamos Etcher (LINK)

Una vez instalado, conectamos la Micro SD al ordenado y abrimos el programa. Tiene 3 fases, seleccionar la imagen (el fichero .img que hemos descomprimido), seleccionar la unidad (la micro SD) y pulsar en "Flash!"
Imagen

Nos avisará que todos los datos de la tarjeta serán eliminados y comenzará el proceso de volcado.

Cuando finalice probablemente aparezca un aviso de Windows indicando que un disco no tiene formato, cancelamos y cerramos Etcher:
Imagen

En ocasiones puede ser necesario extraer y volver a insertar la Micro SD.

Veremos que en nuestras unidades aparece una etiquetada como "boot", entramos dentro de ella:
Imagen

Dentro creamos un fichero vacio que se llame ssh (comprobar que no tenga extensión)
Imagen

Una vez creado, extraemos nuestra microsd de manera segura y la metemos en nuestra raspberry que ya habremos montado en su caja. La conectamos con el cable de red a nuestro router y conectamos la alimentación.

Bien, tenemos un aparato conectado a nuestro router, no tiene teclado, no tiene ratón, ni pantalla. ¿Como accedemos a él? Para poder hacerlo necesitamos saber la dirección IP de nuestra Raspberry. Para ello vamos a utilizar una app en nuestro móvil Fing, la tenemos tanto para Android como para IOS. Esta aplicación nos muestra los dispositivos conectados a nuestra red, el dato que necesitamos es la ip, en el pantallazo inferior sería 192.168.1.100:
Imagen

En nuestro PC instalaremos PUTTY, que es un software que nos permite conectarnos vía SSH a otros dispositivos que lo tengan habilitado, se puede descargar desde aquí. Una vez instalado ejecutamos putty y rellenamos los datos para la conexión que no es otro que la dirección ip que ya tenemos:
Imagen

Pulsamos en conectar y decimos que si al aviso que nos aparece. Metemos el usuario por defecto de Raspbian que es pi y la contraseña que es raspberry (tranquilos, cuando tecleamos no hace nada, es normal, escribir la contraseña y darle al intro)

Se conectará y ya estaremos en la linea de comandos de nuestra Raspberry.
Imagen

Segunda parte en breve!
Si te ha servido alguna de mis guías o simplemente me quieres invitar a un café --> https://tippin.me/@jochemin

Avatar de Usuario
jochemin
Mensajes: 46
Registrado: Dom Sep 09, 2018 8:55 pm
GnuPG: 8009 FEB1 1A79 C293 5D17 72D5 0E1E DC2D 57F8 D07F
Twitter: jochemin
Agradecido : 14 veces
Agradecimiento recibido: 38 veces

Re: Instalación nodo Bitcoin y Lightning

Mensaje por jochemin » Mar Ene 15, 2019 10:53 am

  • Configuración de Raspbian


Si hemos seguido el primer post estaremos conectados a nuestra Raspberry vía SSH. Antes de instalar los clientes de Bitcoin Y Lightning vamos a hacer unos cambios muy sencillos en nuestro sistema.
  • Cambiar la contraseña
Lo primero es cambiar la contraseña por defecto, nos hemos conectado con el usuario pi y la contraseña raspberry que son las credenciales por defecto. Para lo que queremos dejaremos el usuario pi pero cambiaremos la contraseña. Los comandos en esta guia irán

Código: Seleccionar todo

en este formato
escribir literal o copiar y pegar.

Para cambiar la contraseña:

Código: Seleccionar todo

passwd
Nos solicitará la contraseña actual (raspberry) y escribir la nueva contraseña 2 veces. Como en el caso de la conexión no se muestra cuando escribimos, el cursor no se mueve.

Imagen

Ya tenemos la contraseña cambiada, si desconectamos y volvemos a conectar lo haremos con la nueva contraseña.
  • Poner IP fija
La dirección que tiene nuestra Raspberry puede variar, para evitar esto vamos a poner una dirección fija, debemos editar un fichero de texto con

Código: Seleccionar todo

sudo nano /etc/dhcpcd.conf
Se abrira el fichero de texto y nos moveremos con las teclas de dirección hacía abajo hasta encontrar este texto:
Imagen

Para editar el fichero nos tenemos que mover con las teclas de dirección hasta donde queramos editar, eliminaremos el símbolo # del principio de algunas lineas, y modificaremos los datos con la dirección que nos interese, para facilitar las cosas utilizaremos la misma dirección con la que nos hemos conectado, en mi caso 192.168.1.100, los datos quedarán así:
Imagen

Para guardar los cambios pulsamos ctrl + o, intro y para salir ctrl + x.

Vamos a reiniciar para comprobar que hemos puesto los datos correctamente, para ello:

Código: Seleccionar todo

sudo reboot
Esto nos desconectará, esperamos unos segundos y volvemos a conectar con el usuario pi y la contraseña que hayamos elegido.

Nota: Hay muchas configuraciones posibles en nuestra Raspberry, en una guía es complicado abarcar todas esas posibilidades por lo que me centraré en hacerla lo más sencilla posible.
Si te ha servido alguna de mis guías o simplemente me quieres invitar a un café --> https://tippin.me/@jochemin

Avatar de Usuario
jochemin
Mensajes: 46
Registrado: Dom Sep 09, 2018 8:55 pm
GnuPG: 8009 FEB1 1A79 C293 5D17 72D5 0E1E DC2D 57F8 D07F
Twitter: jochemin
Agradecido : 14 veces
Agradecimiento recibido: 38 veces

Re: Instalación nodo Bitcoin y Lightning

Mensaje por jochemin » Mar Ene 15, 2019 10:53 am

  • Instalación Bitcoin Core


Vamos a instalar el cliente Bitcoin Core. De nuevo tenemos diferentes maneras de hacerlo, por facilidad bajaremos el cliente ya compilado desde BitcoinCore.org, para tener nuestro software organizado crearemos un directorio que se llame soft

Código: Seleccionar todo

mkdir soft && cd soft
Con un pc vamos a la página de descarga para copiar el enlace al cliente que nos interesa que en el caso de Raspberry es ARM Linux, hacemos click con el botón derecho del ratón encima de la palabra 32bit y seleccionamos "Copiar dirección del enlace"
Imagen

Para pegar el texto copiado en nuestro terminal basta con hacer click en él con el botón derecho, ejecutaremos la orden wget seguida del link que hemos copiado, a 15/01/2019 quedaría así:

Código: Seleccionar todo

wget https://bitcoincore.org/bin/bitcoin-core-0.17.1/bitcoin-0.17.1-arm-linux-gnueabihf.tar.gz
Esto descargará el cliente comprimido. Creamos una carpeta para guardar los ficheros que descomprimiremos

Código: Seleccionar todo

mkdir bitcoin
y descomprimimos con

Código: Seleccionar todo

tar -xf bitcoin-0.17.1-arm-linux-gnueabihf.tar.gz --strip-components=1 -C bitcoin
(sustituiremos el nombre del fichero por el que hayamos descargado)

Con este comando que pongo en imagen porque si lo escribo me da error al publicar el post, añadiremos los ejecutables al PATH (es para que podamos ejecutarlos desde cualquier ruta):
Imagen

Bien, lo siguiente es generar el fichero de configuración de nuestro nodo Bitcoin, este fichero por defecto se encuentra en el directorio .bitcoin dentro de nuestra carpeta personal, como todavía no hemos ejecutado el cliente el directorio no se ha generado, así que lo haremos nosotros

Código: Seleccionar todo

mkdir ~/.bitcoin
y generamos el fichero con los siguientes datos cambiando los valores que comienzan por "cambia":

Código: Seleccionar todo

echo "daemon=1" >> ~/.bitcoin/bitcoin.conf
echo "server=1" >> ~/.bitcoin/bitcoin.conf
echo "rpcuser=cambiauser" >> ~/.bitcoin/bitcoin.conf
echo "rpcpassword=cambiapass" >> ~/.bitcoin/bitcoin.conf
echo "prune=cambiaprune" >> ~/.bitcoin/bitcoin.conf
echo "zmqpubrawblock=tcp://127.0.0.1:18501" >> ~/.bitcoin/bitcoin.conf
echo "zmqpubrawtx=tcp://127.0.0.1:18502" >> ~/.bitcoin/bitcoin.conf

En mi caso hemos puesto un valor de prune de 50GB ya que estoy trabajando con una tarjeta de 64GB:
Imagen

Perfecto, ya tenemos Bitcoin Core instalado y nuestro fichero de configuración listo. Para que el cambio del path sea efectivo reiniciamos con

Código: Seleccionar todo

sudo reboot
y nos volvemos a conectar.

Ahora podríamos ejecutar nuestro cliente Bitcoin y comenzar la descarga y validación de la cadena de Bitcoin y este es uno de los puntos en los que las limitaciones de Raspberry quedan al descubierto, hace ya unos meses la sincronización completa tardaba más de 1 mes así que si tenemos tiempo perfecto, sino, Bitcoineando pone a nuestra disposición la cadena casi sincronizada para descargar. Son 3.5GB de descarga y una vez descargado lo descomprimimos al directorio de datos de Bitcoin

Código: Seleccionar todo

cd  ~/soft && wget https://bitcoineando.es/btc_datadir/bitcoin_datadir.tar && tar -xvf bitcoin_datadir.tar -C ~/.bitcoin
Cuando finalice este paso arrancamos el cliente con

Código: Seleccionar todo

bitcoind
Debería decirnos que se está iniciando
Imagen
Podemos ver exactamente lo que está haciendo en el log con

Código: Seleccionar todo

tail -f ~/.bitcoin/debug.log
para salir del log ctrl + c
Imagen

Ya tenemos el nodo funcionando aunque tardará unas horas en sincronizar completamente. Ya podemos utilizar comandos como

Código: Seleccionar todo

bitcoin-cli getblockchaininfo
que nos devolverá información sobre nuestra copia de la cadena.

Dejamos que sincronice, sabremos que ha finalizado cuando el valor de "blocks" y de "headers" coincida:
Imagen
Si te ha servido alguna de mis guías o simplemente me quieres invitar a un café --> https://tippin.me/@jochemin

Avatar de Usuario
jochemin
Mensajes: 46
Registrado: Dom Sep 09, 2018 8:55 pm
GnuPG: 8009 FEB1 1A79 C293 5D17 72D5 0E1E DC2D 57F8 D07F
Twitter: jochemin
Agradecido : 14 veces
Agradecimiento recibido: 38 veces

Re: Instalación nodo Bitcoin y Lightning

Mensaje por jochemin » Mar Ene 15, 2019 10:53 am

  • Instalación Lightning Network Daemon (LND)


Bien, tenemos nuestro nodo Bitcoin en marcha y sincronizado. Vamos a instalar LND que es uno de los clientes disponibles para Lightning Network.

Vamos a utilizar el directorio soft para alojar lightning así que entramos a nuestro directorio soft con

Código: Seleccionar todo

cd ~/soft
En un pc comprobamos cual es la última versión de LND. Para esta instalación vamos a tirar de paquetes precompilados tal y como hemos hecho en Bitcoin para facilitar la instalación. Vamos a la página de versiones de LND y seleccionamos la última marcada como "Latest Release".

En nuestro caso necesitamos la versión para Raspberry cuyo procesador es ARMv7, lo podéis comprobar con

Código: Seleccionar todo

cat /proc/cpuinfo |grep "model name"
Sabiendo esto copiamos el link de descarga y desde la Raspberry lanzamos el comando para su descarga, hoy sería este:

Código: Seleccionar todo

wget https://github.com/lightningnetwork/lnd/releases/download/v0.5.1-beta/lnd-linux-armv7-v0.5.1-beta.tar.gz
Cuando finalice la descarga, simplemente descomprimimos el archivo a un directorio que llamaremos LND dentro de soft con

Código: Seleccionar todo

mkdir lnd && tar -xvzf lnd-linux-armv7-v0.5.1-beta.tar.gz -C lnd --strip-components=1
Con esto ya tenemos los ejecutables en el directorio lnd. Vamos a añadir la ruta al PATH para poder lanzar los comandos desde cualquier ruta:

Código: Seleccionar todo

echo "export PATH=$PATH:$HOME/soft/lnd" >> /home/pi/.profile
Para que el cambio se haga efectivo cerramos la conexión y volvemos a conectarnos.

Lo siguiente es generar el fichero de configuración de nuestro nodo Lightning, este fichero por defecto se encuentra en el directorio .lnd dentro de nuestra carpeta personal, como todavía no hemos ejecutado el cliente el directorio no se ha generado, así que lo haremos nosotros

Código: Seleccionar todo

mkdir ~/.lnd
y generamos el fichero con los siguientes datos cambiando los valores que comienzan por "cambia" y poniendo en rpcuser y rpcpass los mismos datos que en el fichero bitcoin.conf:

Código: Seleccionar todo

echo "bitcoin.active=1" >> ~/.lnd/lnd.conf
echo "bitcoin.mainnet=1" >> ~/.lnd/lnd.conf
echo "bitcoin.node=bitcoind" >> ~/.lnd/lnd.conf
echo "alias=cambianombre" >> ~/.lnd/lnd.conf
echo "bitcoind.rpcuser=cambiauserbitcoin" >> ~/.lnd/lnd.conf
echo "bitcoind.rpcpass=cambiapassbitcoin" >> ~/.lnd/lnd.conf
echo "bitcoind.zmqpubrawblock=tcp://127.0.0.1:18501" >> ~/.lnd/lnd.conf
echo "bitcoind.zmqpubrawtx=tcp://127.0.0.1:18502" >> ~/.lnd/lnd.conf
Y con esto hemos finalizado, lanzamos nuestro nodo lightning con el comando

Código: Seleccionar todo

lnd &
Pulsamos enter para que nos devuelva el prompt y creamos nuestra wallet con

Código: Seleccionar todo

lncli create
Nos pedirá contraseña para nuestra cartera, la introducimos. Pedirá confirmación, la volvemos a introducir. Entiendo que es la primera instalación así que no tenemos una semilla previa así que en la siguiente pregunta respondemos que no. Lo siguiente es una contraseña para cifrar la semilla aconsejo poner. Y con eso nos generará la semilla. GUARDAR BIEN ESTA SEMILLA
Imagen

Una vez finalizada la creación de la wallet, nuestro nodo comenzará a sincronizar. Hora de otra pausa (1 hora más o menos), ya tenemos los 2 nodos corriendo!
Si te ha servido alguna de mis guías o simplemente me quieres invitar a un café --> https://tippin.me/@jochemin

Avatar de Usuario
jochemin
Mensajes: 46
Registrado: Dom Sep 09, 2018 8:55 pm
GnuPG: 8009 FEB1 1A79 C293 5D17 72D5 0E1E DC2D 57F8 D07F
Twitter: jochemin
Agradecido : 14 veces
Agradecimiento recibido: 38 veces

Re: Instalación nodo Bitcoin y Lightning

Mensaje por jochemin » Mar Ene 15, 2019 10:54 am

  • Redirección de puertos


Tanto Bitcoin Core como LND utilizan puertos para permitir conexiones entrantes. Bitcoin Core por defecto establece 8 conexiones salientes a la red Bitcoin. Pero debemos redirigir puertos para que el resto de nodos se pueda conectar a nosotros, en la red Bitcoin contribuimos al número de conexiones para otros nodos, servicios... y en el caso de LND permitiremos a otros nodos añadirnos como peer y abrir canales con nosotros.

La apertura de puertos se realiza en el router y varía en cada modelo, es conveniente que consultéis las instrucciones concretas para vuestro modelo de router.

Este es el ejemplo en mi router:
  • 1.- Entramos en el router, para ello basta con poner la dirección ip en un navegador, pedirá la contraseña que suele estar en una pegatina debajo del router, si no la tenemos, la solicitamos a nuestro proveedor de internet.
  • 2.- En mi caso hay un modo sencillo y otro avanzado, el sencillo es suficiente. Desplegamos el menú y pinchamos en puertos.
    Imagen
  • 3.- Rellenamos los campos y pulsamos añadir
    Imagen
  • 4.- Comprobamos que se ha añadido y que está activo
    Imagen
En el modo avanzado sería así:
  • 1.- Buscamos la opción de Virtual Servers (puede llamarse "port forwarding") y pulsamos en la opción de añadir.
Imagen

2.- Rellenamos los datos, cuidado con la interface, hay que seleccionar aquella que tenga salida a internet. En la imagen 6/ppp0.1.
Imagen

Para Bitcoin Core abrimos el puerto 8333 y para LND el 9735. Una vez que tengamos los puertos abiertos podemos comprobarlo con NMAP u online en páginas como esta si ponemos nuestra dirección ip pública (se puede consultar aquí) y el puerto 8333 o 9735 (con los clientes en marcha) nos debería decir que los puertos están abiertos.
Imagen
Si te ha servido alguna de mis guías o simplemente me quieres invitar a un café --> https://tippin.me/@jochemin

Avatar de Usuario
jochemin
Mensajes: 46
Registrado: Dom Sep 09, 2018 8:55 pm
GnuPG: 8009 FEB1 1A79 C293 5D17 72D5 0E1E DC2D 57F8 D07F
Twitter: jochemin
Agradecido : 14 veces
Agradecimiento recibido: 38 veces

Re: Instalación nodo Bitcoin y Lightning

Mensaje por jochemin » Mar Ene 15, 2019 10:54 am

  • TOR (opcional)


Podemos necesitar un grado de privacidad mayor al correr nuestros nodos o no tenemos capacidad para abrir puertos, no nos interesa hacer pública nuestra ip.... tenemos la posibilidad de que nuestros clientes funcionen en la red TOR. Es muy, muy sencillo.

Para el que no sepa qué es TOR aquí su entrada en Wikipedia

Lo primero que tenemos que hacer es instalar TOR. La versión en los repositorios de Raspberry es antigua (0.2.9.16) y LND no la soporta (mínimo 0.3.3.6) asÍ que añadimos el repositorio de TOR (si no estáis instalando en raspberry comprobar el repositorio para vuestro sistema AQUÍ) con

Código: Seleccionar todo

sudo apt-get install gnupg2 dirmngr
sudo su
echo "deb https://deb.torproject.org/torproject.org stretch main" >> /etc/apt/sources.list
echo "deb-src https://deb.torproject.org/torproject.org stretch main" >> /etc/apt/sources.list
gpg2 --recv A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89
gpg2 --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
apt-get update
exit

instalamos tor con

Código: Seleccionar todo

sudo apt-get install tor
Cuando finalice la instalación el servicio arranca automáticamente, lo podemos comprobar con

Código: Seleccionar todo

sudo service tor status
Imagen

Bien, tenemos que editar el fichero de configuración para habilitar un par de cosas, para eso

Código: Seleccionar todo

sudo nano /etc/tor/torrc
Buscamos las lineas donde pone #ControlPort 9051 y #CookieAuthentication 1 y las descomentamos (quitar el #)
Imagen
Guardamos el fichero y reiniciamos TOR con

Código: Seleccionar todo

sudo service tor restart
Ahora debemos agregar al usuario con el que lanzamos los clientes, "pi" en nuestro caso, al grupo de TOR, para ello

Código: Seleccionar todo

sudo adduser pi debian-tor
para que el cambio se haga efectivo tenemos que volver a logearnos con el usuario, así que salimos con

Código: Seleccionar todo

exit
y nos volvemos a conectar. Damos permisos de lectura a la cookie de tor con

Código: Seleccionar todo

sudo chmod a+r /var/run/tor/control.authcookie
Paramos nuestros clientes con

Código: Seleccionar todo

lncli stop && bitcoin-cli stop
Editamos el fichero bitcoin.conf con

Código: Seleccionar todo

sudo nano ~/.bitcoin/bitcoin.conf
y agregamos las siguientes lineas:

Código: Seleccionar todo

proxy=127.0.0.1:9050
listen=1
bind=127.0.0.1
Una vez editado el fichero arrancamos el cliente con

Código: Seleccionar todo

bitcoind
Lo siguiente es editar el fichero de configuración de LND con

Código: Seleccionar todo

 sudo nano ~/.lnd/lnd.conf
si no hemos tocado nada no tendremos el valor externalip, en caso de que lo tuviéramos, lo borramos o lo comentamos. Añadimos estas lineas al final del fichero:

Código: Seleccionar todo

tor.socks=9050
listen=127.0.0.1
y arrancamos nuestro cliente con

Código: Seleccionar todo

lnd --tor.active --tor.v3
, nos pedirá que desbloqueemos la wallet.

Cuando arranque podemos comprobar nuestra dirección .onion ejecutando

Código: Seleccionar todo

lncli getinfo
Imagen

Ya tenemos nuestros clientes corriendo en TOR.
Si te ha servido alguna de mis guías o simplemente me quieres invitar a un café --> https://tippin.me/@jochemin

Avatar de Usuario
jochemin
Mensajes: 46
Registrado: Dom Sep 09, 2018 8:55 pm
GnuPG: 8009 FEB1 1A79 C293 5D17 72D5 0E1E DC2D 57F8 D07F
Twitter: jochemin
Agradecido : 14 veces
Agradecimiento recibido: 38 veces

Re: Instalación nodo Bitcoin y Lightning

Mensaje por jochemin » Mié Ene 30, 2019 9:59 am

  • Servicios (automatizando arranque de clientes)


Tenemos nuestros 2 clientes funcionando pero, ¿qué pasa si se corta la luz? ¿Al reiniciarse se inician sólos? No. Los clientes se inician a mano, y en el caso de Bitcoin basta con introducir el comando, pero ¿y en el caso de LND? Hay que meter una contraseña cada vez que se inicia, ¿cómo lo hacemos?

Por partes, primero lo sencillo, vamos a crear el servicio para el cliente Bitcoin Core, este servicio se encargará de arrancar el cliente en caso de reinicio o cualquier error que provoque una parada. Simplemente tenemos que crear un fichero que se llame bitcoind.service (ajustar nombre de usuario y rutas si las habéis modificado), para ello:

Código: Seleccionar todo

echo "[Unit]" >> ~/soft/bitcoind.service
echo "Description=Bitcoin daemon" >> ~/soft/bitcoind.service
echo "After=network.target" >> ~/soft/bitcoind.service
echo "" >> ~/soft/bitcoind.service
echo "[Service]" >> ~/soft/bitcoind.service
echo "User=pi" >> ~/soft/bitcoind.service
echo "" >> ~/soft/bitcoind.service
echo "Type=forking" >> ~/soft/bitcoind.service
echo "ExecStart=/home/pi/soft/bitcoin/bin/bitcoind -conf=/home/pi/.bitcoin/bitcoin.conf -datadir=/home/pi/.bitcoin -pid=/home/pi/.bitcoin/bitcoin.pid" >> ~/soft/bitcoind.service
echo "" >> ~/soft/bitcoind.service
echo "Restart=always" >> ~/soft/bitcoind.service
echo "" >> ~/soft/bitcoind.service
echo "" >> ~/soft/bitcoind.service
echo "[Install]" >> ~/soft/bitcoind.service
echo "WantedBy=multi-user.target" >> ~/soft/bitcoind.service

Movemos el fichero al directorio system con

Código: Seleccionar todo

sudo mv ~/soft/bitcoind.service /etc/systemd/system/bitcoind.service
Habilitamos el servicio con

Código: Seleccionar todo

sudo systemctl enable bitcoind.service
Iniciamos el servicio con

Código: Seleccionar todo

sudo systemctl start bitcoind.service
[*]Nota: Este servicio arranca el cliente siempre que esté parado, en caso de que queramos pararlo hay que desactivar el servicio con

Código: Seleccionar todo

sudo systemctl disable bitcoind.service
antes de detener el cliente.

Con esto hacemos "imparable" nuestro cliente Bitcoin, ahora vamos con lo peliagudo, el cliente Lightning.

La wallet de Lightning está protegida por contraseña, debemos desbloquear esta cartera con la contraseña en cada arranque por lo que si creamos un servicio como el de Bitcoin, el cliente arrancará y se quedará a la espera del desbloqueo de wallet, es nuestra primera opción:
  1. Arranque cliente y desbloqueo manual
Creamos el servicio con

Código: Seleccionar todo

echo "[Unit]" >> ~/soft/lnd.service
echo "Description=LND Daemon" >> ~/soft/lnd.service
echo "Requires=bitcoind.service" >> ~/soft/lnd.service
echo "After=bitcoind.service" >> ~/soft/lnd.service
echo "" >> ~/soft/lnd.service
echo "[Service]" >> ~/soft/lnd.service
echo "User=pi" >> ~/soft/lnd.service
echo "" >> ~/soft/lnd.service
echo "Type=simple" >> ~/soft/lnd.service
echo "ExecStart=/home/pi/soft/lnd/lnd " >> ~/soft/lnd.service
echo "PIDFile=/home/pi/.lnd/lnd.pid" >> ~/soft/lnd.service
echo "" >> ~/soft/lnd.service
echo "Restart=always" >> ~/soft/lnd.service
echo "" >> ~/soft/lnd.service
echo "[Install]" >> ~/soft/lnd.service
echo "WantedBy=multi-user.target" >> ~/soft/lnd.service

Movemos el fichero al directorio system con

Código: Seleccionar todo

sudo mv ~/soft/lnd.service /etc/systemd/system/lnd.service
Habilitamos el servicio con

Código: Seleccionar todo

sudo systemctl enable lnd.service
Iniciamos el servicio con

Código: Seleccionar todo

sudo systemctl start lnd.service
  • Arranque cliente y desbloqueo automático
Este modo nos obliga a almacenar nuestra contraseña en un fichero.

Instalamos prerequisitos (este punto tarda un rato, ¡coffee time!)

Código: Seleccionar todo

sudo apt-get install python-pip git
pip install grpcio grpcio-tools googleapis-common-protos
mkdir ~/soft/lndinit && cd ~/soft/lndinit
curl -o rpc.proto -s https://raw.githubusercontent.com/lightningnetwork/lnd/master/lnrpc/rpc.proto
git clone https://github.com/googleapis/googleapis.git
python -m grpc_tools.protoc --proto_path=googleapis:. --python_out=. --grpc_python_out=. rpc.proto

Creamos un pequeño script en python que será el encargado de desbloquear la cartera, para ello (sustituir el password por el que habéis puesto a vuestra cartera):

Código: Seleccionar todo

echo "import codecs, grpc, os" >> ~/soft/lndinit/lndinit.py
echo "import rpc_pb2 as ln, rpc_pb2_grpc as lnrpc" >> ~/soft/lndinit/lndinit.py
echo "os.environ['GRPC_SSL_CIPHER_SUITES'] = 'HIGH+ECDSA'" >> ~/soft/lndinit/lndinit.py
echo "cert = open('/home/pi/.lnd/tls.cert', 'rb').read()" >> ~/soft/lndinit/lndinit.py
echo "ssl_creds = grpc.ssl_channel_credentials(cert)" >> ~/soft/lndinit/lndinit.py
echo "channel = grpc.secure_channel('localhost:10009', ssl_creds)" >> ~/soft/lndinit/lndinit.py
echo "stub = lnrpc.WalletUnlockerStub(channel)" >> ~/soft/lndinit/lndinit.py
echo "request = ln.UnlockWalletRequest(" >> ~/soft/lndinit/lndinit.py
echo "    wallet_password='blockchainespana'," >> ~/soft/lndinit/lndinit.py
echo "    recovery_window=0," >> ~/soft/lndinit/lndinit.py
echo ")" >> ~/soft/lndinit/lndinit.py
echo "response = stub.UnlockWallet(request)" >> ~/soft/lndinit/lndinit.py

Y ahora generamos el servicio que arrancará LND y desbloqueará la cartera, el servicio es igual que el anterior pero añadimos la linéa que lanzará nuestro script:

Código: Seleccionar todo

echo "[Unit]" >> ~/soft/lnd.service
echo "Description=LND Daemon" >> ~/soft/lnd.service
echo "Requires=bitcoind.service" >> ~/soft/lnd.service
echo "After=bitcoind.service" >> ~/soft/lnd.service
echo "" >> ~/soft/lnd.service
echo "[Service]" >> ~/soft/lnd.service
echo "User=pi" >> ~/soft/lnd.service
echo "" >> ~/soft/lnd.service
echo "Type=idle" >> ~/soft/lnd.service
echo "ExecStart=/home/pi/soft/lnd/lnd " >> ~/soft/lnd.service
echo "PIDFile=/home/pi/.lnd/lnd.pid" >> ~/soft/lnd.service
echo "ExecStartPost=/usr/bin/python /home/pi/soft/lndinit/lndinit.py" >> ~/soft/lnd.service
echo "" >> ~/soft/lnd.service
echo "TimeoutSec=infinity" >> ~/soft/lnd.service
echo "Restart=always" >> ~/soft/lnd.service
echo "" >> ~/soft/lnd.service
echo "[Install]" >> ~/soft/lnd.service
echo "WantedBy=multi-user.target" >> ~/soft/lnd.service

Movemos el fichero al directorio system con

Código: Seleccionar todo

sudo mv ~/soft/lnd.service /etc/systemd/system/lnd.service
Habilitamos el servicio con

Código: Seleccionar todo

sudo systemctl enable lnd.service
Iniciamos el servicio con

Código: Seleccionar todo

sudo systemctl start lnd.service
Con esto ya tenemos un arranque automático.
Si te ha servido alguna de mis guías o simplemente me quieres invitar a un café --> https://tippin.me/@jochemin

Avatar de Usuario
jochemin
Mensajes: 46
Registrado: Dom Sep 09, 2018 8:55 pm
GnuPG: 8009 FEB1 1A79 C293 5D17 72D5 0E1E DC2D 57F8 D07F
Twitter: jochemin
Agradecido : 14 veces
Agradecimiento recibido: 38 veces

Re: Instalación nodo Bitcoin y Lightning

Mensaje por jochemin » Mié Ene 30, 2019 9:59 am

  • Backup


En este post vamos a tratar el backup de ambos clientes, siempre enfocado a recuperar los fondos en caso de cualquier fallo, lo ideal es copiar los ficheros en un dispositivo externo y encriptar la copia.
  • Bitcoin Core
El caso de Bitcoin Core es muy sencillo, basta con copiar el fichero wallet.dat que se encuentra en el directorio ~/.bitcoin y con que lo hagamos una sola vez es suficiente. Si hemos cifrado el fichero también necesitaremos la clave de cifrado.

En caso de perdida del nodo podremos recuperar los fondos utilizando este wallet.dat en un nuevo nodo.
  • Lightning Network Daemon (LND)
El backup en LND es bastante más complicado a día de hoy, LND está probando ya el backup de canales implementado en el propio cliente pero hasta entonces utilizamos un parche que puede no resultar bien.

Primero tenemos que entender las diferentes partes donde se almacenan los satoshis en LND:

[*]wallet.db (~/.lnd/data/chain/bitcoin/mainnet/wallet.db)

Es la base de datos BOLT que contiene la información de nuestras claves privadas, direcciones usadas, información sobre nuestro nodo, nombre... es decir, controla los fondos on-chain, en la cadena. Si hemos guardado nuestra semilla podremos recuperar aquellos fondos que están en las direcciones que controlamos..

[*]channel.db (~/.lnd/data/graph/mainnet/channel.db)

Es la base de datos BOLT que contiene la información de nuestros canales, el estado, las comisiones, los time locks... el saldo que tenemos en los canales no los controlamos en la cartera (wallet.db).

El backup que realizo es muy rudimentario, simplemente copio todo el directorio de datos a una unidad externa, con esto me llevo tanto el wallet.db como el channel.db. No es un método infalible pero nos puede sacar del paso hasta que implementen el backup de canales.

Para ello, vamos a utilizar cron editando el fichero crontab de nuestro usuario. El destino debe ser un dispositivo externo, yo tengo un usb montado y hago las copias cada 10 minutos (cambiar la ruta de destino a la vuestra). Editamos el fichero con

Código: Seleccionar todo

crontab -e
y añadimos esta línea:

Código: Seleccionar todo

*/10 * * * * rsync -au --delete /home/pi/.lnd/ /home/pi/backup/
Guardamos el fichero y a partir de ese momento comenzará las copias cada 10 minutos.

En caso de catástrofe tendremos todo el directorio de datos para restaurar. Como he dicho el sistema es rústico y puede dar problemas, a las bases de datos les puede no sentar bien la copia, o tener actualizaciones posterior a la última copia, pero hasta la implementación final es un pequeño salvavidas.
Si te ha servido alguna de mis guías o simplemente me quieres invitar a un café --> https://tippin.me/@jochemin

Avatar de Usuario
jochemin
Mensajes: 46
Registrado: Dom Sep 09, 2018 8:55 pm
GnuPG: 8009 FEB1 1A79 C293 5D17 72D5 0E1E DC2D 57F8 D07F
Twitter: jochemin
Agradecido : 14 veces
Agradecimiento recibido: 38 veces

Re: Instalación nodo Bitcoin y Lightning

Mensaje por jochemin » Mié Ene 30, 2019 10:00 am

  • Actualización de nuestros clientes


En esta ocasión comienzo por LND aprovechando que hoy han publicado la versión 0.5.2. La actualización es muy, muy sencilla.

En un pc comprobamos cual es la última versión de LND. Para esta instalación vamos a tirar de paquetes precompilados tal y como hemos hecho en Bitcoin para facilitar la instalación. Vamos a la página de versiones de LND y seleccionamos la última marcada como "Latest Release". En este caso veremos que han publicado la versión 0.5.2.
Imagen

copiamos el link de descarga (versión ARMv7) y desde la Raspberry preparamos el comando para su descarga, lo lanzaremos más adelante, hoy sería este:

Código: Seleccionar todo

wget https://github.com/lightningnetwork/lnd/releases/download/v0.5.2-beta/lnd-linux-armv7-v0.5.2-beta.tar.gz
Antes de hacer nada vamos a realizar una copia del estado actual, en caso de que ocurriera algo en la actualización podríamos volver a la versión actual rápidamente. El backup es una simple copia de los directorios que nos interesan, lo vamos a lanzar con una sola linea:

Código: Seleccionar todo

sudo systemctl disable lnd.service && lncli stop && sudo systemctl stop lnd.service && mv ~/soft/lnd ~/soft/backuplnd && cp -a ~/.lnd ~/soft/backuplnd_data
Tras esto actualizamos nuestro cliente con los siguientes comandos, utilizaremos el comando de descarga que hemos preparado hace un momento:

Código: Seleccionar todo

cd ~/soft
wget https://github.com/lightningnetwork/lnd/releases/download/v0.5.2-beta/lnd-linux-armv7-v0.5.2-beta.tar.gz
mkdir lnd && tar -xvzf lnd-linux-armv7-v0.5.2-beta.tar.gz -C lnd --strip-components=1
Con esto ya tenemos la nueva versión, simplemente activamos el servicio y lo arrancamos.

Código: Seleccionar todo

sudo systemctl enable lnd.service && sudo systemctl start lnd.service
Ya tenemos nuestro cliente actualizado:
Imagen

Si vemos que todo ha ido bien, nuestros canales están activos y todo funciona, eliminamos el backup (importante eliminar o no funcionará la próxima actualización) con:

Código: Seleccionar todo

rm -r backuplnd backuplnd_data/
Otras guías:

2.- Uso Bitcoin Core
Si te ha servido alguna de mis guías o simplemente me quieres invitar a un café --> https://tippin.me/@jochemin

jcigala
Mensajes: 1
Registrado: Dom Sep 16, 2018 8:14 pm
GnuPG:
Twitter: jcigala
Agradecido : 1 vez
Agradecimiento recibido: 1 vez

Re: Instalación nodo Bitcoin y Lightning

Mensaje por jcigala » Jue Ene 31, 2019 10:39 am

Muy bueno el post, bastante detalle. Gracias!
jochemin escribió:
Mar Ene 15, 2019 10:54 am
  • TOR (opcional)


Responder