Como Instalar un nodo completo de Bitcoin Core en Linux Debian 11/Ubuntu con Tor (edición 2022)
Hay cuatro formas de instalar un nodo de Bitcoin, voy a enumerarlas empezando de la más fácil a la más difícil:
1.Con software plug & play como Umbrel, RaspiBlitz o similares. Estos programas tienen instaladores para raspberry pi y también pueden correr en pcs con sistema linux.
En el caso de Umbrel instala un contenedor docker con Bitcoin Core y la implementación LND de Lightning network por defecto usando Tor. Lo cual le da facilidad a usuarios no técnicos de correr un nodo de forma muy simple y con privacidad por defecto.
2.Instalar a partir de contenedores docker.
3.Instalación a partir de binarios ya compilados.En bitcoin.org hay instaladores binarios para varios sistemas operativos, es cuestión de descargarlos y seguir las instrucciones.
4.Bajar el código fuente, compilarlo e instalar.
En este tutorial vamos a desarrollar el punto 4, que puede ser retador para personas no técnicas. Si eres un usuario técnico o no tan técnico pero con muchos deseos de aprender entonces este tutorial es para ti.
Para sacarle el jugo a este tutorial debes haber instalado previamente una versión de Linux basada en Debian como Ubuntu, en mi caso lo hice en Debian 11 Bullseye y también debes haber creado otro usuario además del root. Ahora sí manos a la obra.
La instalación la hice en un Debian 11 Bullseye, pero dado que Ubuntu está basado en Debian, la instalación debe ser igual para las últimas versiones de Ubuntu.
Si tienes una instalación desde cero debes tener dos usuarios en el sistema el root y otro usuario cualquiera que será el usuario en el cual haremos toda la instalación para no trabajar con el usuario root por cuestiones de seguridad.
El usuario que vamos a usar en este tutorial se llama admon y está agregado al grupo sudo para que pueda ejecutar comandos sudo.
Para chequear si el usuario está agregado al grupo sudo ejecuta este comando cambiando admon por tu usuario
$groups admon
En caso de que el resultado anterior no se encuentre el grupo sudo agrégalo con el siguiente comando
$sudo usermod -a -G sudo admon
Instalar programas, librerías y dependencias
Programas que necesitamos
Vamos a instalar estos dos programas que los necesitaremos más adelante:
$sudo apt-get install git curl
Instalar Tor
Vamos a usar Tor, no sólo por la privacidad, sino porque de esa forma no
tenemos que hacer ninguna redirección de puertos en el router que tengamos y tampoco usar servicios dns dinámico para que se refresque nuestra ip en
caso de que sea fija, que es el caso más típico en caso de instalaciones de internet domésticas.
Ahora instalaremos Tor y lo dejaremos listo para cuando lo necesitemos más adelante.
Ejecutamos el siguiente comando para saber el nombre de la distribución linux que estamos usando
$lsb_release -c
Ahora vamos a crear el siguiente archivo
$sudo nano /etc/apt/sources.list.d/tor_repo.list
Edita donde dice bullseye por lo que te haya aparecido a ti y copias allí
las siguiente líneas para poder bajar los repositorios en donde se aloja el código fuente
deb http://deb.torproject.org/torproject.org bullseye main`
deb-src http://deb.torproject.org/torproject.org bullseye main
presiona Ctrl+x , luego presiona ‘s’ y enter para guardar los cambios.
Ahora ejecuta el siguiente comando para bajar la llave GPG del repositorio para poderla instalar:
$curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | sudo apt-key add -
Ejecutamos este comando para actualizar los repositorios que acabamos de añadir:
$sudo apt-get update
E instalamos:
$sudo apt-get install tor deb.torproject.org-keyring
Ahora vamos a ir a la siguiente ruta para editar el archivo de configuración torrc
$cd /etc/tor
Y añadimos las siguientes líneas
SOCKSPort 9050
Log notice stdout
ControlPort 9051
CookieAuthentication 1
CookieAuthFileGroupReadable 1
Ahora vamos a añadir el usuario en donde está la instalación de bitcoin al grupo de Tor. Con este comando encontramos el nombre del Tor group.
$grep User /usr/share/tor/tor-service-defaults-torrc
En nuestro caso aparece debian-tor, entonces añadimos el usuario admon a este grupo:
$sudo usermod -a -G debian-tor admon
Deslogueate y logueate de nuevo para que se apliquen las modificaciones o reinicia el pc.
Ahora vamos a configurar Tor para que arranque cada vez que inicie el pc:
$sudo systemctl enable tor
Y para lanzarlo en este momento ejecutamos
$sudo systemctl start tor
Ahora la máquina está corriendo Tor. El tráfico es normal a menos que le especifiques al software de comunicaciones que estés usando que se conecte a través de Tor como lo haremos más adelante con bitcoind & lightningd.
Librerías y dependencias
Ahora necesitamos instalar algunas librerias. Al instalar librerias, a veces se puede enumerar muchas en un solo comando y separarlas con un solo espacio. En este tutorial, los dividí en grupos similares a la documentación de compilación en Github para Debian/Ubuntu
Ejecuta los siguientes comandos para instalar todas las librerías que ayudarán a compilar el código de bitcoind y que también servirán en caso de que quieras usar herramientas para aprender a desarrollar.
$sudo apt-get install build-essential autoconf libtool autotools-dev automake pkg-config bsdmainutils python3 libevent-dev
$sudo apt-get install libboost-system-dev libboost-filesystem-dev libboost-test-dev libboost-thread-dev
$sudo apt-get install libsqlite3-dev
$sudo apt-get install libminiupnpc-dev
$sudo apt-get install libzmq3-dev
$sudo apt-get install libqrencode-dev
En caso de que quieras usar GUI(interfaz gráfica) para administrar bitcoind debes instalar estas librerías, si solo vas a usar la línea de comando no es necesario.
$sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools
Compilar e instalar bitcoind
Verificamos que estamos en el home del usuario actual:
$cd ~
Y ejecutamos este comando para bajar el código del repositorio de Bitcoin:
$git clone https://github.com/bitcoin/bitcoin.git
Navegamos hasta la carpeta bitcoin que se acaba de crear
$cd bitcoin
Miramos los tags para ver las versiones disponibles con este comando
$git tag
También puedes mirar la versión del último release en esta url:
https://github.com/bitcoin/bitcoin/releases
En este caso vamos a ir a la última versión que es la v23.0 para eso ejecutamos este comando (Si la versión es diferente a la imagen es porque el tutorial ha sido actualizado)
$git checkout v23.0
Instalamos la Berkeley Database
Esta es una base de datos que aún se necesita para poder compilar, posiblemente no se necesite en el futuro.
Instalamos la base de datos Berkeley con este comando:
$./contrib/install_db4.sh `pwd`
Con el siguiente comando exportamos la ruta donde quedó la base de datos en una variable de entorno BDB_PREFIX, esta variable la necesitamos más adelante (recuerda debes reemplazar el usuario admon por tu usuario)
$export BDB_PREFIX='/home/admon/bitcoin/db4'
Empezamos el proceso de compilación
Ejecutamos el siguiente comando para preparar el entorno
$./autogen.sh
El anterior comando creó el script configure. A este script se le puedan pasar varios parámetros para ajustar a la medida de nuestras necesidades.
En este caso sólo le vamos a pasar los parámetros para configurar la base de datos Berkeley que ya instalamos en un paso previo.
$./configure BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" BDB_FLAGS="-I${BDB_PREFIX}/include"
Con esta configuración vas a usar GUI (Interfaz gráfica) y requieres las librerías QT. En caso de que no quieras usar la GUI podemos pasarle el parámetro –with-gui=no y quedaría así:
$./configure BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" BDB_FLAGS="-I${BDB_PREFIX}/include" --with-gui=no
Si todo estuvo sobre ruedas se deben haber creado los scripts para compilar bitcoind.
En caso de que no, mira qué librerías faltaron las instalas e intenta de nuevo.
Ahora si compilamos:
$make -j$(nproc)
Si todo esta bien ya se creó el compilado. Ahora lo instalamos:
$sudo make install
Esto debe haber instalado bitcoind en esta ruta /usr/local/bin/bitcoind
al igual que /usr/local/bin/bitcoin-cli y /usr/local/bin/bitcoin-qt en caso de que hayas usado GUI.
Configurar el archivo bitcoin.conf
Cuando se ejecuta bitcoind por primer vez se crea un directorio .bitcoin en el home del usuario que contiene el archivo bitcoin.conf
Como aún no hemos ejecutado bitcoind vamos a crear el directorio:
$mkdir ~/.bitcoin
$cd .bitcoin
Ahora creamos el archivo de configuración bitcoin.conf con cualquier editor de texto, voy a usar nano por simplicidad
$nano bitcoin.conf
Este archivo puede tener parámetros para configurar un nodo completo que baje toda la blockchain o un nodo podado que baje una blockchain parcial para ahorrar espacio.
Está fuera del alcance de este tutorial explicar sobre la conveniencia de instalar un nodo podado, así que usaremos una configuración para instalar un nodo completo.
Lo más recomendable es que la blockchain no la almacenes en el mismo disco donde tienes instalado el sistema operativo. La sugerencia es destinar para ello un disco SSD de 1 Tera. Si tomas este camino, ten en cuenta que debes montar el disco con fstab.
Introduce esta línea en el archivo de texto que estás creando:
assumevalid=0
txindex=1
En caso de que hayas montado un disco para almacenar la blockchain, debes añadir una línea para indicar la ruta en donde montaste el disco. Voy a suponer que la ruta es /home/admon/BTC_Blockchain, entonces la línea quedaría así:
datadir=/home/admon/BTC_Blockchain
Antes de ejecutar bitcoind en segundo plano, ten en cuenta que se empezará a bajar toda blockchain que al momento de crear este tutorial está en 400 Gigas aproximadamente. Eso demora varios días dependiendo de la conexión a internet.
Para que esta descarga sea más rápida la blockchain se bajará por la clearnet ya que no hemos configurado Tor aún.
Ejecutar bitcoind y descargar la blockchain usando clearnet
Ahora ejecuta bitcoind como un demonio para que se ejecute en segundo plano y empiece a bajar la blockchain:
$bitcoind -daemon
Para chequear el progreso usar este comando:
$bitcoin-cli getblockchaininfo
El parametro verificationprogress te indicará el porcentaje del progreso, cuando llegue a 0.99 ya ha descargado la blockchain completa.
Configurar bitcoind para que use exclusivamente Tor y cargue al iniciar el sistema.
Cuando haya bajado la blockchain podemos modificar la configuración para que bitcoind se comunique con los otros nodos exclusivamente a través de Tor y así tener más privacidad.
El archivo quedaría así:
assumevalid=0
txindex=1
debug=tor
onlynet=onion
proxy=127.0.0.1:9050
bind=127.0.0.1
dnsseed=0
dns=0
addnode=kpgvmscirrdqpekbqjsvw5teanhatztpp2gl6eee4zkowvwfxwenqaid.onion
addnode=bnx4povtqynvwnui5oqm5xcxqvat3j7yzgn6mqciuyszqawhuayvyaid.onion:8333
addnode=wyg7twmf7t3pfvfpdcfd64wvjj2pkccuui7ew34ovnqung5f623b4yyd.onion
addnode=glm52zywiqrcxuwswvgjsxr5pfeggil7uci4z5tbpvb4rjyu5hwjhtid.onion
addnode=xspiicyddsdmzxsffzw6z4f22wi2iwyyufkjcaj2qr7cznxymtft5nid.onion
addnode=nqb5q6d4nhp54ziahhm2oxopqwyyulg7nrqwrcmfvwhj7y7xasaeg7ad.onion
addnode=vp4qo7u74cpckygkfoeu4vle2yqmxh7zuxqvtkazp4nbvjnxl2s3e6id.onion
addnode=ew7x2hv76f7w7irfyektnbhd42eut27ttbfgggu7lbpxsyrlfvsujuqd.onion
addnode=qxkgr5u4rmwme5jticjuuqrecw5vfc5thcqdxvbffwbqgqkdin7s7vid.onion
Presiona Ctrl+x , luego presiona ‘s’ y enter para guardar los cambios.
Expliquemos un poco estos parámetros:
debug=tor
agrega logs que tengan que ver con tor
onlynet=onion
le indica a Bitcoin Core que las conexiones salientes sean sobre Tor
proxy=127.0.0.1:9050
le indica a Bitcoin core como comunicarse mediante Tor
bind: 127.0.0.1
restringirá las conexiones entrantes de Bitcoin Core desde otros nodos para que solo se realicen a través de Tor. Si nunca has ejecutado un nodo antes, otros peers no intentarán conectarse con tu nodo porque no saben que existe, pero aún podrían hacerlo.
dnsseed=0
and dns=0
Evita que Bitcoin Core intente conectarse a las “semillas” de DNS predeterminadas que se encuentran el siguiente archivo del repositorio de bitcoin:
https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L116
A pesar de las restricciones entrantes/salientes que establecimos anteriormente, sin estas dos configuraciones, nuestro nodo aún intentará conectarse a estos hosts.
¿Por qué queremos evitar que se conecte a esas semillas?
Dado que a finales del año 2021 se dejó de tener soporte para la versión 2 de Tor, entonces varias personas tuvieron problemas obteniendo conexiones entrantes de nodos con la version 3 de Tor cuando hicieron la actualización.
Por eso vamos a agregar semillas manualmente para conectarnos.
Con addnode
se añaden las semillas, que son otros peers que se van a conectar a nuestro nodo. Y dado que estamos ejecutando el nodo sólo sobre Tor, debemos agregar las direcciones onion de otros peers en lugar de las direcciones IP. Una vez que nos conectamos a ellos, nos envían más a los que podemos conectarnos.
Eventualmente, nuestro nodo creará una larga lista de nodos y ya no necesitará los nodos semilla, por eso más adelante los quitaremos.
La lista de nodos la extraje de este hilo de reddit donde un usuario tuvo problemas porque con la versión 3 de Tor y no obtenía conexiones entrantes de otros nodos de modo que varias personas le compartieron sus direcciones onion.
https://www.reddit.com/r/Bitcoin/comments/kzhhgk/bitcoin_core_0210_tor_v3/
Hay dos parámetros llamados rpcuser
y rpcpassword
que si no se usan como en este caso, Bitcoin core por defecto genera un archivo .cookie para autenticarse. En caso de que ingreses estos parámetros debes especificarlos más tarde en la configuración del nodo de lightnind para que este se comunique por el protocolo RPC con bitcoind.
Terminada la explicación del archivo de configuración procedemos a detender bitcoind:
$sudo bitcoin-cli stop
Ahora los arrancamos de nuevo:
$sudo bitcoind -daemon
Si ejecutamos el comando
$bitcoin-cli getnetworkinfo
Podemos observar que estamos conectados mediante Tor, connections_in aún está en cero porque tarda un poco en ir obteniendo conexión de otros nodos.
Si no hacemos nada más, cada vez que se reinicie el PC hay que ejecutar este comando para que bitcoind se ejecute. Por eso lo que debemos hacer es crear un servicio para que se ejecute automáticamente al iniciar el pc.
Para lograrlo vamos a la siguiente ruta:
$cd /etc/systemd/system
Y ejecutamos este comando para obtener el archivo de configuración directamente desde el repositorio de bitcoin
$sudo wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/init/bitcoind.service
Ahora tenemos que modificar las rutas donde esta la blockchain de bitcoin y comentar tres parámetros, por eso abrimos el archivo:
$sudo nano bitcoind.service
Y editamos las rutas en el parámetro ExecStart, en mi caso con el usuario admon queda así:
ExecStart=/usr/local/bin/bitcoind -daemon \
-pid=/run/bitcoind/bitcoind.pid \
-conf=/home/admon/.bitcoin/bitcoin.conf \
-datadir=/home/admon/.bitcoin
Y comentamos con # las siguientes tres líneas que están más abajo:
#PermissionsStartOnly=true
#ExecStartPre=/bin/chgrp bitcoin /etc/bitcoin
#ProtectHome=true
Presiona Ctrl+x , luego presiona ‘s’ y enter para guardar los cambios.
Ejecutamos este comando para que inicie el servicio cuando se reinicie el equipo:
$sudo systemctl enable bitcoind.service
Y con este comando lo ejecutamos:
$sudo systemctl start bitcoind.service
Para mirar el estado del servicio ejecutamos:
$sudo systemctl status bitcoind.service
Si deseamos detenerlo usamos:
$sudo systemctl stop bitcoind.service
Si has llegado hasta aquí felicitaciones, ahora tienes instalado un nodo de Bitcoin instalado que te proveerá privacidad y ayudará a la descentralización de la red.
Comentarios recientes