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
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:
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:
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”
- Asigna un nombre a la billetera y presiona enter
- 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
- Guarda el archivo en una url que controles. Por ejemplo https://charity-pool.ro/metadata.json
Opción 2
-
Si no tienes una URL, puedes usar GIST en github, por ejemplo
https://raw.githubusercontent.com/Alexd1985/a/master/a.json -
Crea una cuenta en github e inicia sesión.
-
Click en “new”
- 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)
- Click en “create new file”
- Agrega el nombre del archivo (nombre corto), edita la información de tus metadatos y presiona “commit new file”
- Click en “branch”
- Cambie la rama a maestra (has click en "main ", escribe “master” y has click en “create branch master”
- 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)
deberías ver:
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
selecciona el pool creado anteriormente
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:
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.
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:
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.
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
Para encriptar los archivos del pool ve a “POOL” selecciona “encrypt”, elige tu pool, y añade la contraseña.
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)
- Elige “yes” para elimiar las llaves privadas y establecer una contraseña de encriptación
- Revisa si la salva fue creada
- Revisa si tus llaves fueron eliminadas:
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)
- Ingresa la contraseña
Si todo estuvo bien, deberías visualizar lo siguiente:
- Ahora en tu archivo de salva tienes todas las llaves , las cuales deben moverse a la carpeta priv/wallet/test y priv/pool/test
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