Idena Sibling: distribuzione e gestione del nodo condiviso e regolare di Idena

Kazeru Wakabayashi
Idena
Published in
12 min readMay 3, 2023

Utilizzo della raccolta Ansibile guida e spiegazione dei Ruoli

L’obiettivo principale di questa guida è assistere i neofiti e i potenziali operatori di nodi condivisi nella distribuzione di un nodo Idena o di un nodo condiviso in modo rapido e sicuro. Con l’aiuto di queste guide e ruoli, potrai configurare tutti i parametri del tuo nodo o nodo condiviso e aggiornare facilmente le chiavi API del tuo nodo condiviso dopo il processo di distribuzione.

Se scegli di implementare un nodo condiviso, puoi scegliere di utilizzare il tuo certificato SSL o un certificato di Let’s Encrypt (Criptiamo). Se scegli Let’s Encrypt, il certificato verrà aggiornato automaticamente tramite una speciale “crontab task”. Di conseguenza, avrai un nodo condiviso pronto per la produzione con quasi nessuna necessità di attività manuali. Questo può essere particolarmente utile se stai distribuendo il server del tuo nodo condiviso su un droplet più potente prima della sessione di validazione.

Inoltre, ti verrà fornito una speciale guida, che ti consentirà di eseguire rapidamente azioni all’interno del tuo Nodo Idena già distribuito. Queste azioni includono l’attivazione o disattivazione dello stato di mining, l’aggiunta o rimozione delle chiavi API, l’avvio o arresto del Nodo Idena daemon e la modifica della chiave del nodo stesso (chiave privata).

Preparare il sistema per la guida Ansibile

Installazione di Ubuntu su WSL2 per utenti Windows

Nel mio esempio, usiamo WSL2 su Windows 10 con l’immagine Ubuntu 20.04 installata su di esso, ma tutte le istruzioni fornite potrebbero essere utilizzate in qualsiasi distribuzione di Linux basata su Debian. Se non sai cos’è WSL2 o come configurarlo, questo articolo ti aiuterà a familiarizzare con esso.

Installa tutto il necessario per eseguire WSL con un singolo comando in PowerShell o nel prompt dei comandi di Windows con privilegi di amministratore, quindi riavvia il computer.

wsl --install

Questo comando abiliterà le funzionalità necessarie per eseguire WSL e installare la distribuzione Ubuntu di Linux.

Se stai utilizzando Windows 10 Build 18305 o versioni successive e desideri utilizzare una distribuzione Linux diversa da quella installata per impostazione predefinita, esegui semplicemente comandi come questo all’interno della cartella in cui desideri installare la tua distribuzione Ubuntu. Assicurati solo di avere abbastanza spazio libero:

1.Scarica la root tarball contenente la distribuzione del server Ubuntu 20.04 per WSL. L’elenco completo delle distribuzioni disponibili può essere trovato qui. Nel mio caso, ho utilizzato l’ultima distribuzione AMD64 Ubuntu 20.04.
2. All’interno della cartella in cui hai scaricato il tarball, inserisci comandi come questo:

wsl.exe --import <Distribution_Name> <Install Folder> ubuntu-20.04-server-cloudimg-amd64-wsl.rootfs.tar.gz

C’è da notare che la cartella Install Folder e Distribution Name devono essere diverse.

3. Vedrai che una directory con lo stesso nome di quella che hai usato per la cartella Install Folder apparirà nella cartella in cui hai eseguito il comando sopra menzionato. Ora, per eseguire la distribuzione, inserisci semplicemente il comando:

wsl.exe -d Distribution_Name

4. Inoltre, ci sono molti altri comandi wsl che possono aiutarti a gestire le tue distribuzioni:

Per vedere l’elenco di tutte le distribuzioni che sono state installate nel tuo sistema, puoi usare il comando:

wsl --list

Per rimuovere una distribuzione precedentemente installata, puoi usare il comando:

wsl --unregister <Distribution_Name>

Dopo aver annullato la registrazione di una distribuzione specifica, puoi rimuovere facilmente la sua cartella.

Alcune cose importanti da tenere a mente:

  1. Tutti i tuoi dischi locali dopo aver eseguito la tua distribuzione verranno montati all’interno della directory /mnt.
  2. Dopo aver eseguito la distribuzione, entrerai nel sottosistema Linux, che è diverso dall’interfaccia della riga di comando di Windows. Una delle principali differenze è che nel file system di Linux, il prefisso prima del cursore avrà questo aspetto:
Esiste una differenza tra l’output della console nel WSL e il prompt dei comandi standard di Windows.

3. Per uscire dal sottosistema WSL, digitare semplicemente il comando exit.

4. Tutti i futuri comandi relativi all’utilizzo del nostro repository Ansibile che intendiamo eseguire devono essere eseguiti nel sottosistema WSL.

Prepara VS Code per configurare Idena Sibling e distribuire il tuo nodo

Dovremo lavorare con il terminale e modificare alcuni file di configurazione, inclusi quelli crittografati. Se hai familiarità con Linux, non sarà un problema, ma se sei un utente Windows, suggerirei di installare VS Code con una speciale estensione WSL.

Aggiorna i tuoi pacchetti all’ultima versione

sudo apt update && sudo apt upgrade

Aggiunta del repository ansibile, e installazione di Ansibile tramite Pip e i pacchetti richiesti

sudo apt install python3-pip
sudo pip3 install pywinrm
sudo pip3 install pyvmomi
sudo apt-add-repository ppa:ansible/ansible
sudo pip3 install ansible
sudo pip3 install ansible[azure]

Clonazione del repository di Idena Sibiling

clone di git https://github.com/ltraveler/idena-sibling.git

Entrare nella cartella del repository di idena-sibling

cd idena-sibling

Installazione delle raccolte e delle librerie python richieste sul tuo computer

Prima di iniziare a utilizzare queste guide, installa i pacchetti Python e i moduli Ansibile-galaxy richiesti.

  • Installazione delle librerie dnspython pip3 install dnspython
  • Installazione dei moduli della community ansible-galaxy install -r requirements.yml

Parliamo della generazione e gestione delle chiavi API del nodo condiviso.

Generatore di chiavi API

Per importare le chiavi del nodo nel tuo nodo condiviso, devi prima generarle. Il metodo migliore che ho trovato per me stesso è stato utilizzare il servizio Online Hash Tools.

Creazione di un array dalle chiavi API generate

Il passaggio successivo consiste nell’inserire le chiavi in ​​un formato array, come mostrato negli esempi forniti all’interno del file api_keys.yaml del repository. Il modo più semplice per farlo è utilizzare uno speciale Google Sheets Template. Il foglio è disponibile pubblicamente qui:

Requisiti per il computer locale e per i droplet remoti

Destinazione droplets

・È richiesta la versione 3.9 o successiva di Python. Alcuni fornitori di servizi cloud offrono droplet con Python già installato, mentre altri no. Se il droplet di destinazione non ha Python installato, Ansibile non può eseguire alcuna azione su di esso. Va tenuto sempre conto di questo.

・Lo script è stato testato su Ubuntu 20.04 LTS e potrebbe funzionare anche su altre distribuzioni basate su Debian, ma non sono state testate esplicitamente.

Master node

・È necessario installare Python versione 3.9 o successiva e pip3.

・Sulla macchina deve essere installata l’ultima versione di Ansibile.

・Se utilizzi un computer Windows, puoi eseguire questa guida utilizzando WSL2 con una distribuzione Ubuntu.

Due tipi di autorizzazione per i droplet remoti supportati da Ansibile

Autorizzazione tramite chiave SSH (consigliata)

La tua chiave SSH pubblica deve essere aggiunta al authorized_keys sul droplet remoto. È possibile utilizzare il seguente comando: ssh-copy-id -i ~/.ssh/my_public_key droplet_username@droplet_ipaddress.

Autorizzazione tramite password SSH (meno sicura e non consigliata)

In alternativa, puoi utilizzare l’autenticazione tramite password come opzione meno sicura. Per modificare il metodo di autenticazione, modificare il valore della variabile sshd_PasswordAuthentication all’interno del file./group_vars/main/vars e rimuovere il commento ansible_connection dalla variabile all’interno del file host che si trova nella radice della cartella del repository. Se non vuoi digitare la tua password SSH ogni volta che esegui la tua guida Ansibile, puoi aggiungerla ansible_ssh_pass=”your_droplet_ssh_password” alla variabile ./group_vars/main/vault nel file.

Il tuo certificato SSL contro Let’s Encrypt

Ci sono 2 opzioni per emettere un certificato SSL. Puoi acquistarne uno utilizzando uno dei provider di certificati SSL oppure puoi emetterlo gratuitamente dal provider Let’s Encrypt. La principale differenza tra loro è che il certificato di Let’s Encrypt sarebbe valido solo per 3 mesi e deve essere poi prolungato. Tuttavia, Idena Sibling preparerà uno script speciale per eseguire l’attività e rendere tale processo completamente automatico. Nel caso in cui non hai bisogno di alcun livello speciale di validazione e puoi prolungare automaticamente il tuo certificato ogni 3 mesi, il certificato di Let’s Encrypt sarebbe più che sufficiente per gli scopi di un nodo condiviso. Maggiori informazioni sulle principali differenze tra certificati commerciali e certificati emessi da ACME possono essere lette qui. (articolo in inglese) Nota che Let’s Encrypt ora supporta i certificati wildcard, ma nel nostro caso, il certificato emesso da questa guida sarebbe quello normale correlato alla variabile specificata in droplet_domain: “shared.node.domain.com” la variable in questo./group_vars/main/vault file.

In caso di utilizzo del provider di certificati SSL di Let’s Encrypt (la variabile letsencrypt: “SI”)

Assicurati di aver impostato correttamente il registro A per il tuo dominio del nodo condiviso. Se l’indirizzo IP del tuo dominio è collegato alla destinazione sbagliata, non sarai in grado di superare la sfida e ottenere il certificato SSL.

Il servizio di Let’s Encrypt ha un numero limitato di volte in cui puoi richiedere un certificato. Puoi trovare tutti i limiti possibili descritti qui. (articolo in inglese)

Per prevenire una situazione in cui hai superato la soglia disponibile e non hai alcun certificato, ne potrai riceverai una copia nella cartella ./node/remote_ssl_clone del tuo repository locale dopo aver emesso con successo un certificato SSL.

In caso di utilizzo del proprio certificato SSL personalizzato (il file variable letsencrypt: “no”)

Il tuo certificato SSL verrebbe importato dal file ./node/domain_pem.

Per generare un file PEM (Mail con Privacy Avanzata), in genere è necessario concatenare i due file utilizzando il seguente comando all’interno della cartella che contiene i file crt e key:
cat server.crt server.key > domain_pem

Dopo aver creato il tuo file PEM finale chiamato domain_pem, dovrai copiarlo (sovrascrivere quello esistente) nella cartella ./idena-sibling/node/ del repository e crittografarlo utilizzando il comando ansible-vault encrypt domain_pem.
Se in futuro desideri modificare il contenuto dell’archivio certificati, è possibile utilizzare il comando ansible-vault edit domain_pem.

Preparazione del repository clonato per la distribuzione e la gestione del nodo

Prima di iniziare a utilizzare le guide, dovrai modificare alcune variabili all’interno dei file:

./hosts

contiene variabili relative al droplet di destinazione che utilizzerai per distribuire il tuo nodo.

[main]
1.2.3.4
[all:vars]
ansible_ssh_private_key_file = ~/.ssh/id_rsa
ansible_user = root
idena_group = Olga
username = Olga
public_key_file = ~/.ssh/id_rsa.pub
#ansible_connection=ssh

1.2.3.4 - Indirizzo IP del tuo droplet
ansible_ssh_private_key_file = ~/.ssh/id_rsa - il percorso della tua chiave privata SSH è necessario nel caso in cui desideri connetterti al tuo droplet tramite una chiave privata SSH
ansible_user = root - di solito, dovrebbe rimanere così com’è, ma nel caso in cui l’utente root abbia un nome utente diverso e non standard, devi cambiare questa variabile in
idena_group = Olga e username = Olga - queste due variabili rappresentano il nome utente e il gruppo di utenti da utilizzare per l’installazione di Idena-go deamon e dell’istanza Idena-node-proxy. Normalmente, il gruppo utenti è uguale al nome utente
public_key_file = ~/.ssh/id_rsa.pub - percorso della tua chiave pubblica SSH, nel caso in cui tu stia distribuendo il tuo droplet tramite password SSH e desideri importare la tua chiave pubblica nel file authorized_keys del tuo droplet per future connessioni tramite chiave privata SSH.

Se preferisci invece utilizzare l’autenticazione della password della root anziché l’autenticazione della chiave SSH, sarà necessario impostare la password della root nell’archivio dati del vault nella variabile ansible_ssh_pass come descritto in precedenza e rimuovere il commento dalla variabile ansible_connection=ssh inhosts file.

./group_vars/main/vars

contiene variabili pubbliche relative alla configurazione di idena-go, idena-node-proxy, dominio, versioni del pacchetto richieste e così via. Menzionerò solo le variabili importanti qui per fare in modo che lo script faccia il suo lavoro. Se non conosci il significato di una o di un’altra variabile, mantienila al suo valore predefinito. Basta cambiare le variabili più critiche, che sono:

---
idena_go_ver: "1.0.3"
sshd_PasswordAuthentication: "no"
letsencrypt: "yes"
api_keys_path: "./group_vars/main/api_keys.yaml"
blockpinthreshold: 0.3
flippinthreshold: 0.5
shared: true

idena_go_ver: “1.0.3” - Normalmente la versione di Idena-go che vorresti usare nel tuo droplet, dovrebbe essere l’ultima versione
sshd_PasswordAuthentication: “no” - nel caso in cui desideri utilizzare una chiave privata SSH, puoi anche limitare la connessione al tuo droplet solo tramite la chiave privata SSH
letsencrypt: “yes” - in caso di installazione di un nodo condiviso, devi scegliere tra l’utilizzo del certificato SSL (yes) o il tuo certificato SSL personalizzato (no)
api_keys_path: “./group_vars/main/api_keys.yaml” - percorso del file che contiene le chiavi API da importare nell’Idena-node-proxy del tuo droplet
blockpinthreshold: 0.3 - by default, it is set to 0.3. per impostazione predefinita, è impostato su 0.3. Tuttavia, se stai distribuendo un nodo condiviso Idena, questo parametro dovrebbe essere impostato su 1
flippinthreshold: 0.5 - by default, it is set to 0.5. per impostazione predefinita, è impostato su 0.5. Tuttavia, se stai distribuendo un nodo condiviso Idena, questo parametro dovrebbe essere impostato su 1
shared: true - specifica se il client idena-go deve essere eseguito con o senza il --profile=shared flag (bandiera). Imposta questo valore sutrue se stai distribuendo un nodo condiviso e su false se stai distribuendo un nodo regolare.

./group_vars/main/vault

contiene variabili private come:

---
vault_api_key: e288dab99a8357371f527b41fe0439ba
vault_node_key: 6XCh2EqlfhHjOmb82Z386XhyJ8abeeKORBTi9r2joVhz9594y2138H9xqv8PS2cXts1bYTDaBlu
userpass: "eo4fejVM5jpA9Z"
droplet_ip: "1.2.3.4"
letsencrypt_email: "email@for_lets_encrypt.com"
droplet_domain: "shared.node.domain.com"
#ansible_ssh_pass="your_droplet_ssh_password"

vault_api_key: e288dab99a8357371f527b41fe0439ba - chiave API desiderata per il tuo nodo
vault_node_key: 6XCh2EqlfhHjOmb82Z386X - se lavault_node_key variabile vault_node_key (chiave privata) non è impostata, verrà generata automaticamente per il tuo nodo
userpass: “eo4fejVM5jpA9Z” - la password per l’utente che esegue il tuo idena-go deamon e l’istanza idena-node-proxy
droplet_ip: “1.2.3.4” - il tuo indirizzo IP del droplet
letsencrypt_email: “email@for_lets_encrypt.com” - La mail che verrebbe utilizzata nel caso in cui si desideri generare il certificato tramite Let’s Encrypt
droplet_domain: “shared.node.domain.com” - l’indirizzo del dominio del tuo nodo condiviso. Nel caso in cui desideri utilizzare il provider di certificati SSL Let’s Encrypt, il registro A DNS del tuo dominio deve essere impostato su questo indirizzo IP prima di eseguire la guida. Tieni presente che l’aggiornamento del registro DNS potrebbe richiedere del tempo.
ansible_ssh_pass=”your_droplet_ssh_password” - nel caso in cui desideri utilizzare l’autenticazione con password SSH, puoi impostare qui la tua password SSH droplet se non desideri che Ansibile te la richieda ogni volta che esegui la tua guida.

Tieni presente che dovrai sovrascrivere il file del vault crittografato esistente (./group_vars/main/vault) con la copia non crittografata da ./node/ex/vault. Dopo aver modificato tutte le variabili richieste, dovrai crittografarle utilizzando il comando ansible-vault encrypt ./group_vars/main/vault dalla cartella principale del repository. In futuro, per modificare questo file potresti utilizzare il comando ansible-vault edit ./group_vars/main/vault inserito dalla cartella principale del repository.

Per evitare di dover reinserire la password di archiviazione del vault ogni volta che desideri modificarla, puoi salvarla semplicemente in un file di testo.vault_pass nella cartella principale del repository.

Devi utilizzare la stessa password per tutti i file che desideri crittografare. Nel caso del nostro repository, abbiamo 2 file crittografati:

  1. ./group_vars/main/vault- memorizzazione di variabili private.
  2. ./node/domain_pem - File PEM (Posta con Privacy Avanzata) che contiene il tuo certificato SSL.

./group_vars/main/api_keys.yaml

contiene l’elenco delle chiavi API che devono essere importate nel nodo condiviso distribuito tramite la guida.idena_shared.yaml

---
api_keys: ["key1", "key2", "key3"]

./group_vars/main/api_mgmt.yaml

contiene le chiavi API che devono essere aggiunte o rimosse dal nodo condiviso già distribuito, utilizzando la guida idena_node_mgmt.yaml. Dopo aver aggiunto o rimosso le chiavi dal nodo condiviso, tutti i duplicati delle chiavi vengono automaticamente rimossi e l’output finale sovrascrive quello originale nella cartella del repository locale.

./.vault_pass

È possibile creare e aggiungere la password del vault a questo file se non si desidera inserirla ogni volta che si desidera modificare l’archivio delle variabili del vault crittografato creato in precedenza.

Utilizziamo due archivi di vault crittografati: uno per il file delle variabili private che si trova in./group_vars/main/vault, e l’altro per il file PEM (Privacy Enhanced Mail) in ./node/domain_pem. Assicurati di utilizzare la stessa identica password per crittografarli entrambi.

Utilizzo della guida Idena Sibling per distribuire e gestire il tuo Nodo

Dopo aver configurato tutte le variabili richieste, puoi utilizzare tre guide a seconda del tipo di nodo, condiviso o normale, che desideri distribuire. Inoltre, esiste una speciale guida per gestire un nodo già distribuito.

Distribuzione del nodo Idena regolare tramite idena_node.yaml

ansible-playbook -i hosts idena_node.yaml

Distribuzione del nodo Idena condiviso tramite idena_shared.yaml

ansible-playbook -i hosts idena_shared.yaml

Gestione del nodo Idena normale o condiviso già distribuito tramite idena_node_mgmt.yaml

ansible-playbook -i hosts idena_node_mgmt.yaml --tags operation_tag_name

Possibili valori di operation_tag_name:

  • IdenaNodekeyUpdate: questa attività serve a
    new nodekey (chiave privata) dalla variabile vault_node_key di sovrascrive il file nodekey esistente sul droplet.
  • IdenaNodeStart: Avvia il nodo Idena..
  • IdenaNodeStop: Arresta il nodo Idena.
  • IdenaMiningOn: Modifica lo stato di mining su ON.
  • IdenaMiningOff: Modifica lo stato di mining su OFF.
  • IdenaApiKeysUpdate: Aggiorna le chiavi API del nodo condiviso dopo aver modificato le variabili all’interno del file ./group_vars/main/api_mgmt.yaml responsabile dell’aggiunta e della rimozione delle chiavi API sul tuo droplet.
    Tieni presente che l’elenco finale delle chiavi, dopo aver effettuato tutte le modifiche, sovrascriverà anche il file ./group_vars/main/api_keys.yaml. Come risultato, avrai sempre una copia aggiornata delle tue chiavi API nel file api_keys.yaml.
  • IdenaGoUpdate: Aggiorna il client del nodo idena-go alla versione specificata nell’opzione idena_go_ver variabile. Seidena_go_ver è impostato su “ultima versione”, questo aggiornerà il client del nodo idena-go alla versione più recente.
  • IdenaProxyUpdate: Aggiorna il tuo nodo-idena-proxy alla versione più recente.

Note a piè di pagina

Una volta completata la configurazione, puoi distribuire e gestire facilmente il tuo nodo Idena/nodo condiviso. Se hai delle domande, non esitare a contattarmi tramite Telegram o semplicemente puoi aprire un topic nel repository GitHub di Idena Sibling. Questo progetto è stato finanziato tramite il community wallet; l’intera proposta è disponibile qui. (articolo in inglese)

Articolo originale scritto da

💻 LTraveler:
💬 Telegram: https://t.me/ltrvlr
🌐 WWW: https://ltraveler.github.io
👛 0xf041640788910fc89a211cd5bcbf518f4f14d831

Idena IDENA World

--

--

Kazeru Wakabayashi
Idena
Writer for

Mi piace viaggiare ed esplorare il mondo vivo in Giappone e amo videogame e cultura pop come manga e animazione giapponese