🇪🇸 Como configurar un pool en pocos minutos y registrarlo usando CNTOOLS

:cuba: :es: Traducción de How to set up a POOL in a few minutes - and register using CNTOOLS publicado por Alexd1985 operador del pool CHRTY.


Hola a todos.

¿Has estado pensando en administrar un pool de Cardano, pero no tienes tienes conocimiento avanzado sobre Linux? ¡No hay problema! Hoy te mostraré cómo configurar un pool de Cardano usando CNTOOLS en unos pocos pasos/minutos:

Pero primero, algunas recomendaciones para la seguridad de los nodos (deben ser aplicadas a todos los nodos):

  • Crea un nombre de usuario/contraseña, cambia la conexión ssh por defecto y desactiva ssh para el usuario root.
sudo adduser example
  • En el ejemplo “example” sería tu nuevo usuario, aquí es recomendado establecer una contraseña compleja (bastante compleja, difícil de hackear), la cual usarás para conectarte al nodo mediante un terminal de sesiones.

  • Añade a tu nuevo usuario permisos sudo (administrador)

sudo adduser example sudo
  • Prueba el nuevo usuario
sudo su - example
  • Cambia el puerto por defecto ssh (puerto 22), recomiendo cambiarlo, puedes elegir cualquier puerto que desees.

¡Antes de habilitar el corta-fuegos, añade la regla para permitir la conexión ssh por defecto en el puerto (22), de otra forma perderás la conexión cuando actives el corta-fuegos!

  • Añade la regla en tu corta-fuegos para ssh puerto 22 y actívalo.
sudo ufw status

sudo ufw allow proto tcp from any to any port 22

sudo ufw enable
  • Modifica el archivo sshd_config para poder cambiar el puerto ssh
sudo nano /etc/ssh/sshd_config

#Puerto 22
  • Activa la línea eliminando # al principio, y reemplaza 22 por el puerto que desees.

  • Desactiva incio de sesión mediante ssh para el usuario root. Mueve el scroll hacia abajo hasta que encuentres la línea y modifícala poniendo “no”

PermitRootLogin no

Ctrl+x y Enter - guardar el archivo
  • Añade una regla en el corta-fuegos para el nuevo puerto ssh configurado anteriormente
sudo ufw allow proto tcp from any to any port x - (el puerto configurado anteriormente)

sudo ufw status
  • Reinicia el proceso ssh y revisa el estado, debería decir “listening on port” (el nuevo puerto)
sudo systemctl restart ssh

sudo systemctl status ssh

¡ No cierres aún la conexión actual con el terminal, ya que lo necesitarás en caso de que no puedas acceder a través del nuevo puerto!

Abre un nuevo terminal e intenta conectarte otra vez mediante ssh pero esta vez no uses el puerto 22, usa el nuevo puerto que configuraste arriba, también intenta inciar con usuario root y revisa si ya no eres capaz de conectarte.

  • Instalar google_auth

Antes de empezar necesitarás instalar la app móvil google_auth en tu teléfono móvil, luego de este paso puedes continuar con:

sudo apt install libpam-google-authenticator

¡ El próximo comando generará un código QR y 5 códigos. Te recomiendo que los guardes en algún lugar seguro, porque los necesitarás en caso de que reinstales la app google_auth en otro dispositivo móvil. Ten en mente que sin google_auth no podrás conectarte mas a los nodos!

- google-authenticator - presiona "Y" para todo, hasta después que guardes el QR y los códigos.
  • Modifica el archivo sshd_config para permitir auntenticación de dos factores:
sudo nano /etc/ssh/sshd_config - y busca:

ChallengeResponseAuthentication no

- ponlo en "yes"

ChallengeResponseAuthentication yes

- reinicia el proceso ssh

sudo systemctl restart ssh - reinicia el proceso ssh
  • Edita el archivo- pam.d/sshd
sudo nano /etc/pam.d/sshd - y añade las líneas de abajo

# Auntenticación de una vez mediante Google Authenticator

auth required pam_google_authenticator.so

sudo systemctl restart ssh - reinicia el proceso ssh

image

Ahora intenta conectarte por el terminal ssh para probar si google_auth está funcionando (luego de que entres tu contraseña ssh deberías ver una petición para que introduzcas un código de verificación, el cual será el código generado por tu aplicación móvil google_auth)

  • Instalar fail2ban
sudo apt install fail2ban
  • Revisa el estado de fail2ban, debería estar ejecutándose.
sudo systemctl status fail2ban

Estos son pasos mínimos de seguridad, siempre puedes mejorar tu seguridad configurando otros pasos (como llaves públicas, etc), pero esos otros pasos son un poco más difíciles y necesitarás ver tutoriales y videos.

==============================================================================

Ahora, si todo fue bien, entonces es momento de construir el nodo

Construyendo el NODO

==============================================================================

Paso 1 - descargando los prerrequisitos:

Este paso creará la estructura de carpetas y descargará los archivos necesarios y scripts para operar el Pool.

mkdir "$HOME/tmp"

cd "$HOME/tmp"

curl -sS -o prereqs.sh https://raw.githubusercontent.com/cardano-community/guild-operators/master/scripts/cnode-helper-scripts/prereqs.sh

chmod 755 prereqs.sh

./prereqs.sh

. "${HOME}/.bashrc"

========================================

Paso 2 - construyendo el nodo :

Este comando construirá tu nodo y tomará alrededor de 40-45 minutos.

cd ~/git

git clone https://github.com/input-output-hk/cardano-node

cd cardano-node

git fetch --tags --all

git checkout 1.25.1

git pull origin master

echo -e "package cardano-crypto-praos\n flags: -external-libsodium-vrf" > cabal.project.local

$CNODE_HOME/scripts/cabal-build-all.sh

Ahora puedes tomar un descanso hasta que el nodo esté compilado.

  • Revisa la versión de cardano-cli y cardano-node.
cardano-cli --version

cardano-node --version

Si todo está bien, ve al próximo paso.

¡¡El Paso 2 puede ser aplicado sin problemas si decides bajar o subir la versión del nodo, solamente necesitarás reemplazar 1.25.1 por la versión deseada!

==============================================================================

Paso 3 - inciar y sincronizar el nodo

Una vez el nodo esté construido debes iniciarlo para sincronizarlo (la sincronización del nodo descargará toda la blockchain localmente en una carpeta llamada db). Ve a la carpeta de los scripts escribiendo:

cd $CNODE_HOME/scripts

o

cd /opt/cardano/cnode/scripts
  • Abre el archivo “env” y cambia el CNODE_PORT ( por defecto es 6000, pero quizás quieras usar otro puerto)
nano env

CNODE_PORT=6000 (si quieres modificar el puerto, reemplaza 6000 por el puerto que desees)

Ctrl+x y Enter, para salvar el archivo
  • Configura el nodo para iniciarlo como un servicio, esto significa que si tu servidor falla y se reinicia, el proceso del nodo arrancará automáticamente por si mismo.

¡Recuerda que todos los scripts están ubicados dentro de la carpeta “scripts”!

./deploy-as-systemd.sh

Importante saber que cuando ejecutas ./deploy-as-systemd.sh:

El comando preguntará también si quieres establecer el proceso topologyupdater como servicio, a lo cual responderás:

  • Para el productor presiona “NO” para el topologyUpdater

  • Para el Relay presiona “YES” para el topologyUpdater, y deja el temporizador por defecto, para el cnode en autoreinicio en 86400

  • Después de que ejecutes el script, reinicia el cnode y revisa el estado.

sudo systemctl restart cnode

sudo systemctl status cnode

Deberías visualizar esto:

image

Cuando tu nodo esté bien y ejecutándose, entonces necesitará sincronizar la blockchain (este proceso puede tomar más horas) y puedes revisar el estado ejecutando el script:

./gLiveView.sh

Deberías visualizar una ventana como esta:

image

Cuando los nodos estén 100% sincronizados, entonces hay que conectarlos entre ellos.

==============================================================================

Paso 4- conectar los nodos entre ellos

Entre el Productor y el Relay configuraremos una conexión estática:

Para el Productor: Modifica el archivo topology

cd $CNODE_HOME/files

nano topology.json

{

"Producers": [

{

"addr": "RELAY IP ADDRESS",

"port": RELAY_PORT,

"valency": 1

}

]

}

Ctrl + x y and Enter - salva el archivo

Actualiza las reglas del corta-fuegos para aceptar conexiones solo de tus Relay

sudo ufw allow proto tcp from RELAY_IP to any port xxxx - donde xxxx es el Productor CNODE_PORT configurado anteriormente en el archivo "env".

Revisa si la nueva línea fue añadida en el corta-fuegos:

sudo ufw status

Ahora reinicia el Productor y revisa otra vez con gliveview

cd $CNODE_HOME/scripts

sudo systemctl restart cnode

sudo systemctl status cnode

./gLiveView.sh

Para el RELAY - el Relay se conectará estáticamente con el Productor y dinámicamente con otros Relay públicos

  • Edita el script topologyUpdater:
cd $CNODE_HOME/scripts

nano topologyUpdater.sh
  • Activa la línea de abajo eliminando el # del principio y añade la IP de tu Productor y Puerto (también puedes añadir otros nodos de confianza aquí separándolos con |)
#CUSTOM_PEERS="None"

por ejemplo:

CUSTOM_PEERS="1.1.1.1:6000"
  • Añade una regla en el corta-fuegos del Relay para permitir conexiones de todos por el puerto x (donde x es el CNODE configurado en archivo “env”)
sudo ufw allow proto tcp from any to any port x
  • Reinicia el RELAY:
cd $CNODE_HOME/scripts

sudo systemctl restart cnode

sudo systemctl status cnode

./gLiveView,.sh

Si todo funcionó bien, deberías ver en cada nodo (en ./gLiveView.sh presiona P para peers) la IP del host remoto en IN y OUT peers.

¡Felicitaciones! tus nodos están ok y ejecutándose (déjalos unas horas para sincronizar con la red)

¡Ten en mente que no hemos iniciado el Productor aún, esto lo haremos después de unos cuantos pasos más!

==============================================================================

CREAR LA BILLETERA Y REGISTRAR EL POOL MEDIANTE CNTOOLS

Todos los pasos de abajo son en el nodo productor (el nodo que creará los bloques), ahora veremos los beneficios de usar CNTOOLS, te encantará (gracias a las personas que lo desarrollaron)

CNTOOLS trabaja para ti y generará todas las llaves, certificados, etc y las guardará en /opt/cardano/cnode/priv folder

Recuerda: todos los scripts están ubicados en la carpeta “scripts”. Y si estamos en este capítulo, déjame mostrarte como el árbol de carpetas está construido, las carpetas están ubicadas en: /opt/cardano/cnode, desde ese punto, si presionas ls -l, deberías visualizar:

  • priv folder- es donde los archivos del pool y la billetera, como llaves privadas, certificados, metadatos, etc, son guardados.

  • files folder- donde los archivos de configuración, archivo de topología, etc son guardados

  • db Folder- donde está almacenada la base de datos

  • socket folder- donde el socket-node está guardado

  • scripts folder- donde están guardados los scripts

==============================================================================

OK, empecemos:

Paso 5: - crear una nueva billetera la cual mas tarde se asociará al pool

  • Abrir CNTOOLS
cd $CNODE_HOME\scripts

./cntools.sh - (si ves alguna información con respecto a la última actualización presiona q y ejecútalo otra vez)
  • Crear una nueva billetera- ve a billetera y presiona “new”

image

  • Asigna un nombre a la billetera y presiona enter

image

  • Tu billetera debe haberse creado:

La billetera tendrá asociada una dirección ya que vas a necesitar ADA para poder registrar el pool (la comisión es de 500 ADA + la comisión de la transacción, pero recibirás los 500 ADA de regreso si decides retirar el Pool )

  • Envía ADA a la dirección de tu billetera (mínimo 500 ADA + lo necesario para cubrir las comisiones de registro), esta dirección será usada también para el pledge

Por ejemplo, si quieres tener un pledge de 1000 ADA necesitarás enviar 1510 (1000 para el pledge / 500 para registrar el pool, y 10 para las comisiones de las transacciones)

Si quieres añadir/retirar fondos o retirar recompensas de la billetera debes ir a CNTOOLS- FUNDS y elegir la operación que desees.

==============================================================================

Paso 6- crea tu archivo de metadatos y súbelo.

Opción 1

  • Crea el metadata.json en tu PC, usando un notepad por ejemplo, y salva el archivo con la extensión .json

Opción 2

image

  • Escribe el nombre del repositorio, has clic en “public” y “create” (debes usar un nombre corto para asegurarse de que el enlace no tenga más de 65 caracteres)

image

  • Click en “create new file”

image

  • Agrega el nombre del archivo (nombre corto), edita la información de tus metadatos y presiona “commit new file”

c4772ce6e74eda27a46f9f164e8b1654e3b1de38_2_500x155

  • Click en “branch”

9ddc5aa9fa4c84149de55536205416edeb6f6aa0_2_500x180

  • Cambie la rama a maestra (has click en "main ", escribe “master” y has click en “create branch master”

image

  • Click en archivo y presiona “raw” en el lado derecho
  • Copia la URL y pégala en algun lado, lo usaremos mas tarde para registrar el pool, y asegúrate de que la URL tiene menos de 65 caracteres
  • Un ejemplo de metadatos sería:

¡Asegúrate de que la URL sea menor de 65 caracteres! El archivo de metadatos debería verse así:

{

"name": "TestPool",

"description": "The pool that tests all the pools",

"ticker": "TEST",

"homepage": "https://teststakepool.com"

}

==============================================================================

Paso 7- crear el pool

  • Crea el Pool- desde CNTOOLS, ve a:

POOL- NEW- escribe el nombre del POOL (este es el nombre que usaremos en el archivo env del Productor más tarde, para iniciarlo como Productor)

image

deberías ver:

image

Recuerda que para realizar el próximo paso debes tener 500 + unas cuántas ADA demás para las comisiones en la dirección de tu billetera + los metadatos subidos en tu sitio de github

Puedes revisar tu saldo yendo hacia la billetera en la opción “show”.

==============================================================================

Paso 8- registrar el pool

  • Ve a POOL- REGISTER- opción online

image

selecciona el pool creado anteriormente

image

Inserta el pledge, comisión variable y fija, metadatos, registra tu Relay y paga las 500 ADA.
Esta imagen es solo un ejemplo, tus datos deben ser diferentes:

Como debes saber, si no hay suficientes fondos en tu billetera para pagar la transacción, entonces el registro fallará.

Este es un ejemplo de una transacción exitosa:

image

Si ves el mensaje mostrado arriba, entonces felicitaciones, tu pool debería estar disponible en adapools.org o pooltool.io

La billetera debe tener fondos suficientes para cubrir el pledge declarado (+ algunas ADA para las comisiones de transacción); de lo contrario, el pledge no será el declarado, y verás esta advertencia en pooltool.io o adapools.org.

image

Si vas a cambiar algún parámetro del Pool como (pledge, comisión variable o fija, añadir o quitar Relay, etc) necesitarás ir a: CNTOOLS - POOL - MODIFY y deberás introducir otra vez los nuevos parámetros del pool.

==============================================================================

Paso 9- Ejecuta tu Productor para que funcione como tal.

  • Después que registres el Pool y los “priv files” se hayan creado, debes ir y editar el archivo “env” de tu Productor:
cd $CNODE_HOME/scripts - para ir hasta la carpeta de scripts
  • Edita el archivo “env”.
nano env 
  • Activa la línea POOL NAME eliminando # del principio y escribe el nombre de tu pool.
#POOL_NAME=""
POOL_NAME="test"
  • Salva el archivo
Ctrl+x y Enter, para salvar el archivo
  • Reinicia el cnode, espera unos minutos y revisa con gliveview
sudo systemctl restart cnode
sudo systemctl 
./gLiveView.sh

Deberías ver los siguiente:

image

Si ves información sobre la fecha de expliración de las KES, BLOCKS, etc, entonces significa que configuraste bien el Productor y ya estás listo para crear bloques.

El certificado y las KES necesitan ser renovados (1 vez cada 90 días aproximadamente) para poder hacer eso, debes ir a: CNTOOLS - POOL - ROTATE; después de esta operación reinicia tu Productor y entonces en gliveview deberías la fecha de expiración de las nuevas llaves KES.

==============================================================================

Paso 10- asegurando tus archivos

¡No es recomendable tener tus llaves frías y llaves de pago en tu servidor online! Si decides de todas formas mantenerlas ahí, CNTOOLS brinda un método para encriptar estos archivos, esto servirá por si tu server es hackeado y te roban estos archivos, ya que el hacker no podrá usarlos si no tiene la contraseña para desencriptarlos. Recomiendo enormemente usar contraseñas fuertes.

Guarda tu contraseña en un lugar seguro, lejos de internet, y no vayas a perderla. Si pierdes la contraseña no podrás desencriptar las llaves y no podrás administrar la billetera ni el pool.

Mi recomendación además, es salvar una copia de los archivos en algún lugar sin conexión (como un USB), ya que podrías equivocadamente borrar o perder los archivos de tu servidor.

(esto puede realizarse usando filezilla para conectarte con tu nodo mediante sftp)

==============================================================================

Anteriormente mencioné que tus archivos están guardados en “priv folder”. Para empezar , primero sal de CNTOOLS y escribe:

cd $CNODE_HOME/priv

ls -l

cd wallet - para ir a la carpeta de la billetera

cd pool - para ir a la carpeta del pool

cd .. - para ir una carpeta hacia atrás

Como puedes ver los archivos como, cold keys y payment key, no están encriptados, y esta no es una medida de seguridad deseada.

image

Ve hacia cntools, y encripta esos archivos

cd $CNODE_HOME/scripts

./cntools.sh

Ve a la billetera - selecciona “encrypt”- elige la billetera e introduce la contraseña

image

Para encriptar los archivos del pool ve a “POOL” selecciona “encrypt”, elige tu pool, y añade la contraseña.

image

image

Ahora, los archivos están encriptados e incluso si alguien hackea tu nodo, no podrá robar tus fondos de la billetera porque tus archivos están encriptados (al menos hasta que encuentren la contraseña - USA una contraseña FUERTE)

Ahora, cada vez que desees realizar una transacción, primero deberás desencriptar los archivos.

Para desencriptar los archivos, sigue los pasos anteriores pero elige DECRYPT en lugar de ENCRYPT

¡Guarda tu contraseña a salvo, lejos de Internet, y ten cuidado de no perderla. Si pierdes las contraseñas, ya no podrás desencriptar las llaves y no podrá administrar la billetera ni el pool!

Otra opción útil de brindada por CNTOOLS es realizar una salva de los archivos (personalmente prefiero la primera opción):

¡Básicamente es lo mismo, pero una ventaja es que también tiene la posibilidad de salvar todos los archivos cnode; ten cuidado cuando uses esta opción porque al final te preguntará si quieres que los archivos se eliminen automáticamente. Puede elegir NO, y puedes eliminarlos después manualmente, siempre después de verificar que se creó la salva!

  • Inicia CNTOOLS- opción “backup & restore”

  • Click en “backup”

  • Elige el directorio donde se salvará (escribe la ruta tal y como la captura de abajo y presiona ENTER)

  • Elige si quieres salvar todos los archivos o solo las llaves frías (elige todos los archivos)

image

  • Elige “yes” para elimiar las llaves privadas y establecer una contraseña de encriptación

  • Revisa si la salva fue creada

image

  • Revisa si tus llaves fueron eliminadas:

image

como puedes ver (payment.skey, stake.skey y cold.skey) ya no existen, fueron eliminadas.

  • Restaurar los archivos:

  • Ve a CNTOOLS - opción “backup & restore”

*Elige “restore”

  • Establece la ruta donde va a estar ubicada la salva, como en la imagen de abajo

  • Inserta el directorio de restauración (o créalo si no existe)

image

  • Ingresa la contraseña

Si todo estuvo bien, deberías visualizar lo siguiente:

image

  • Ahora en tu archivo de salva tienes todas las llaves , las cuales deben moverse a la carpeta priv/wallet/test y priv/pool/test

image

Recuerda que este es un ejemplo en un entorno con conexión, si tienes un nodo sin conexión, puedes realizar las transacciones en dicha máquina, enviarlas hacia tu nodo con conexión y luego firmar la transacción en cntools eligiendo “transactions”- “sign” (pero ese no es el alcance de esta guía)

Ten en cuenta que los pasos de esta guía no te protegerán al 100%, debes pensar y hacer tu propio plan para las salvas, almacenar y restaurar archivos.

==============================================================================

Paso 11- descargar/subir archivos al servidor

Puedes usar filezilla para conectarte a través de sftp a los nodos:

  • Abre filezilla- presiona “File” - “New” - “New site”

  • Ingresa la dirección IP

  • Ingresa el puerto ssh

  • Elige el protocolo: sftp

  • Método de inicio: Interactive

  • Ingresa el usuario

  • Salvar y ok

FileZilla primero te pedirá la contraseña SSH y luego el Autenticador de Google (en caso de que esté configurado)

===========================

Fin!

Si todos los pasos funcionaron bien , entonces tu pool debe estar visible en adapools.org (yoroi) y pooltool.io (Daedalus)

Espero que esta guía te haya sido útil.

Saludos

3 Likes

Tremendo trabajo, gracias @CubanLeo !!! :muscle:

3 Likes

Buenas, soy nuevo el en foro, voy a intentar crear un nodo, seguro que vuelvo por ayuda, gracias por la info.

Bienvenido @ZapatillaPesada
Hay un grupo de Telegram que se dedica a eso, te comparto enlace por si te sirve:
Telegram Hispano dedicado a ejecutar nodos “Manualidades Cardano” : Telegram: Contact @ManualidadesCardano

Hola buenas, la verdad me han surgido varios problemas siguiendo el principio de la guía hasta la sincronizacion, os comento a ver si a alguno le ha pasado o sabe porqué puede ser.

Primero, cuando intento instalar el authenticator de google me da error, “E:-unable-to-locate-package-libpam-google-authenticator”. Este error lo conseguí solventar con el comando “sudo apt update” que lei por este foro en otras discusiones, pero una vez instalo el authenticator, escaneo el QR, todo parece ir bien, pero cierro la sesión SSH y la vuelvo a abrir y no se me pide en ningún momento la verificación en dos factores, como si no hubiese instalado nada.

El siguiente me sale cuando llego a la parte de sincronizar el nodo, primero estoy con el relay, he ejecutado el comando “./deploy-as-systemd.sh” y reiniciado el nodo, pero al revisar el estado me aparece este mensaje image
(en el apartado --PoolTool Sentip-- dice “cncli executable not found… skipping!” no sé si eso es un error del script o no).

Despues de ejecutar el script, reinicio el nodo y al revisar el estado me salta este error:


No sé por qué salta ese error ya que en la guía sale bien, eso sí, tras reiniciar el nodo un par de veces y revisar sus estados varias veces acabó saliendome esto: image
Pero acto seguido volvía ver el estado a ver si seguía activo, y volvió a saltar el error de que no lo estaba.

Luego probé después de que saliera que el nodo estaba activo el comando “./gLiveView.sh” pero obviamente no corría, pues daba 3 fallos al conectarse al nodo y daba el error “COULD NOT CONNECT TO A RUNNING INSTANCE, 3 FAILED ATTEMPTS IN A ROW!”
Supongo que el fallo está en que el nodo no se queda activo, es como que se activa un tiempo muy pequeño y acto seguido salta ese error.

El authenticator de google me da un poco más igual, pero sin poder sincronizar el nodo no voy a ser capaz de montar el stake pool.

Cabe comentar que estoy intentando montarlo en un gcp de google con 25gb de memoria y con 8gb de ram (por servidor, claro, uno así para el relay que es con lo que estoy ahora mismo, y luego uno igual para el producer) en un servidor EC2 y con sistema operativo ubuntu 20.04.2

Gracias a todos, y perdón por haberme extendido tanto, pero quería dar todos los detalles!

Buenas estoy interesado en crear un nodo después de leer e investigar un poco me he decidido por cardano. Entiendo que el nodo funciona 7 días 24 horas vamos todo el año excepto cuando se le hagan tareas de mantenimiento.

Cordial saludo, muchas gracias excelente guía. Una pregunta: al construir el nodo le gitcheckout 1.32.1 a pesar de ello el nodo quedó en versión 1.33.0, exite algún problema de seguridad o de desempeño teniendo en cuenta que a la fecha oficialmente la última versión aprobada liberada es la 1.32.1?