├── images ├── 06_06.ssh.PNG ├── 06_08.Ufw.PNG ├── 06_05.lsla.PNG ├── 07_03.LsLa.PNG ├── 08_02.lsla.PNG ├── 04_01.Etcher.PNG ├── 06_09.Fail2Ban.PNG ├── 06_10.sshkeys.PNG ├── 07_01.CheckPGP.PNG ├── 08_01.CheckSig.PNG ├── 08_04.LNDsetup.PNG ├── 099_01ABTweet.JPG ├── 09_01.WinSCP.PNG ├── 09_02.WinSCP.PNG ├── 09_03.NodoLive.JPG ├── 10_01.Status.png ├── 10_014.Status.jpg ├── 06_11.sshconfig.PNG ├── 06_12.filelimit.PNG ├── 06_13.pamlimits.PNG ├── 08_05.LNDGetinfo.PNG ├── 08_06.LNDStartup.PNG ├── 08_07.LNDPayment.PNG ├── 03_01.Dos4Everyone.PNG ├── 03_02.BitcoinFolder.PNG ├── 06_04.DCHPAddress.PNG ├── 06_07.Raspiconfig.PNG ├── 07_02.Systemcheck.PNG ├── 08_03.LNDpassword.PNG ├── 09_03.Bitcoinnode.PNG ├── 05_01.20MinutesLater.jpg ├── 06_02.AttachedDevices.PNG ├── 06_03.PortForwarding.PNG ├── 06_14.pamlimitssession.PNG ├── 07_04.masteringbitcoin.jpg ├── 01_01.Bandwidthconsumption.png ├── 02_02.MaterialeTemporaneo.jpg ├── 02_01.SomeAssemblyRequired.jpeg ├── 03_03.BitcoinBlockchainFolder.PNG ├── 03_04.ArmateviDiSanaPazienza.JPG └── 06_01.xkcd_password_strength.png ├── 999.2do.md ├── 11.Systemoverview.md ├── 05.Assemblaggio_Hardware_del_nodo.md ├── 04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md ├── README.md ├── 10.Bonus.md ├── 12.LNDAutomaticUnlock.md ├── 01.Perchè_avere_un_nodo_Bitcoin.md ├── 02.Preparativi.md ├── 03.Configurazione_iniziale_dell'Hardware.md ├── 07.Bitcoin.md ├── 09.Mainnet.md ├── 099.FAQ.md ├── 08.Lightning.md └── 06.Configurazione_RaspberryPi.md /images/06_06.ssh.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_06.ssh.PNG -------------------------------------------------------------------------------- /images/06_08.Ufw.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_08.Ufw.PNG -------------------------------------------------------------------------------- /images/06_05.lsla.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_05.lsla.PNG -------------------------------------------------------------------------------- /images/07_03.LsLa.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/07_03.LsLa.PNG -------------------------------------------------------------------------------- /images/08_02.lsla.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/08_02.lsla.PNG -------------------------------------------------------------------------------- /images/04_01.Etcher.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/04_01.Etcher.PNG -------------------------------------------------------------------------------- /images/06_09.Fail2Ban.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_09.Fail2Ban.PNG -------------------------------------------------------------------------------- /images/06_10.sshkeys.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_10.sshkeys.PNG -------------------------------------------------------------------------------- /images/07_01.CheckPGP.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/07_01.CheckPGP.PNG -------------------------------------------------------------------------------- /images/08_01.CheckSig.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/08_01.CheckSig.PNG -------------------------------------------------------------------------------- /images/08_04.LNDsetup.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/08_04.LNDsetup.PNG -------------------------------------------------------------------------------- /images/099_01ABTweet.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/099_01ABTweet.JPG -------------------------------------------------------------------------------- /images/09_01.WinSCP.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/09_01.WinSCP.PNG -------------------------------------------------------------------------------- /images/09_02.WinSCP.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/09_02.WinSCP.PNG -------------------------------------------------------------------------------- /images/09_03.NodoLive.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/09_03.NodoLive.JPG -------------------------------------------------------------------------------- /images/10_01.Status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/10_01.Status.png -------------------------------------------------------------------------------- /images/10_014.Status.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/10_014.Status.jpg -------------------------------------------------------------------------------- /images/06_11.sshconfig.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_11.sshconfig.PNG -------------------------------------------------------------------------------- /images/06_12.filelimit.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_12.filelimit.PNG -------------------------------------------------------------------------------- /images/06_13.pamlimits.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_13.pamlimits.PNG -------------------------------------------------------------------------------- /images/08_05.LNDGetinfo.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/08_05.LNDGetinfo.PNG -------------------------------------------------------------------------------- /images/08_06.LNDStartup.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/08_06.LNDStartup.PNG -------------------------------------------------------------------------------- /images/08_07.LNDPayment.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/08_07.LNDPayment.PNG -------------------------------------------------------------------------------- /images/03_01.Dos4Everyone.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/03_01.Dos4Everyone.PNG -------------------------------------------------------------------------------- /images/03_02.BitcoinFolder.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/03_02.BitcoinFolder.PNG -------------------------------------------------------------------------------- /images/06_04.DCHPAddress.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_04.DCHPAddress.PNG -------------------------------------------------------------------------------- /images/06_07.Raspiconfig.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_07.Raspiconfig.PNG -------------------------------------------------------------------------------- /images/07_02.Systemcheck.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/07_02.Systemcheck.PNG -------------------------------------------------------------------------------- /images/08_03.LNDpassword.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/08_03.LNDpassword.PNG -------------------------------------------------------------------------------- /images/09_03.Bitcoinnode.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/09_03.Bitcoinnode.PNG -------------------------------------------------------------------------------- /images/05_01.20MinutesLater.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/05_01.20MinutesLater.jpg -------------------------------------------------------------------------------- /images/06_02.AttachedDevices.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_02.AttachedDevices.PNG -------------------------------------------------------------------------------- /images/06_03.PortForwarding.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_03.PortForwarding.PNG -------------------------------------------------------------------------------- /images/06_14.pamlimitssession.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_14.pamlimitssession.PNG -------------------------------------------------------------------------------- /images/07_04.masteringbitcoin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/07_04.masteringbitcoin.jpg -------------------------------------------------------------------------------- /images/01_01.Bandwidthconsumption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/01_01.Bandwidthconsumption.png -------------------------------------------------------------------------------- /images/02_02.MaterialeTemporaneo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/02_02.MaterialeTemporaneo.jpg -------------------------------------------------------------------------------- /images/02_01.SomeAssemblyRequired.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/02_01.SomeAssemblyRequired.jpeg -------------------------------------------------------------------------------- /images/03_03.BitcoinBlockchainFolder.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/03_03.BitcoinBlockchainFolder.PNG -------------------------------------------------------------------------------- /images/03_04.ArmateviDiSanaPazienza.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/03_04.ArmateviDiSanaPazienza.JPG -------------------------------------------------------------------------------- /images/06_01.xkcd_password_strength.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fillippone/NodoBitcoinforDummies/HEAD/images/06_01.xkcd_password_strength.png -------------------------------------------------------------------------------- /999.2do.md: -------------------------------------------------------------------------------- 1 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[***TO DO***](999.2do.md)] 2 | 3 | ------- 4 | 5 | 6 | To do List 7 | 8 | - [X] Terminare la traduzione della guida di Stadicus 9 | - [ ] Terminare la traduzione dei bonus della guida di Stadicus 10 | 11 | - [ ] FAQ 12 | - [ ] ~~Electrum Server (merita promozione alla guida principale)~~ 13 | - [ ] TOR 14 | 15 | 16 | - [ ] Controllo del RasPI da Terminale Android 17 | - [ ] Monitoraggio del nodo da PC 18 | 19 | 20 | -------------------------------------------------------------------------------- /11.Systemoverview.md: -------------------------------------------------------------------------------- 1 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- 2 | [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- 3 | [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- 4 | [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- 5 | [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- 6 | [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[***Bonus***](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 7 | 8 | ------- 9 | 10 | ## Bonus: Overview di Sistema 11 | 12 | *Difficoltà: facile* 13 | 14 | Per avere una veloce overview dello status di sistema, Stadicus ha creato un piccolo [script per linea di comando](https://github.com/Stadicus/guides/blob/master/raspibolt/resources/20-raspibolt-welcome) 15 | che viene eseguito come "messaggio del giorno” (Message Of The Day - MotD) per essere mostrato in fase di accesso oppure su richiesta. 16 | 17 | ![MotD system overview](images/10_014.Status.jpg) 18 | 19 | Questo script verrà eseguito come root, quindi controllatelo per bene prima di fidarvi dell’autore (Stadicus). 20 | 21 | ``` 22 | $ sudo apt-get install jq net-tools 23 | $ cd /home/admin/download/ 24 | $ wget https://raw.githubusercontent.com/Stadicus/guides/master/raspibolt/resources/20-raspibolt-welcome 25 | 26 | # check script & exit 27 | $ nano 20-raspibolt-welcome 28 | 29 | # delete existing welcome scripts and install 30 | $ sudo mv /etc/update-motd.d /etc/update-motd.d.bak 31 | $ sudo mkdir /etc/update-motd.d 32 | $ sudo cp 20-raspibolt-welcome /etc/update-motd.d/ 33 | $ sudo chmod +x /etc/update-motd.d/20-raspibolt-welcome 34 | $ sudo ln -s /etc/update-motd.d/20-raspibolt-welcome /usr/local/bin/raspibolt 35 | ``` 36 | 37 | Nel caso in cui ci siano problem sullo script, potrebbe teoricamente impedirvi di accedere al Sistema. Quindi disabiliteremo tutte le esecuzioni del MoTD per l’utente *root*, quindi sarete sempre in grado di loggarvi come utente *root* per disabilitarlo. 38 | ``` 39 | $ sudo su 40 | $ touch /root/.hushlogin 41 | $ exit 42 | ``` 43 | 44 | Potete ora avviare lo script con la stringa che sarà mostrato ogni volta che vi collegherete oppure potrà essere richiamato con la stringa `sudo raspibolt`. 45 | 46 | --- 47 | Avanti: [10.Bonus](10.Bonus.md) 48 | -------------------------------------------------------------------------------- /05.Assemblaggio_Hardware_del_nodo.md: -------------------------------------------------------------------------------- 1 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[***Assemblaggio Hardware Nodo***](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 2 | 3 | ------- 4 | 5 | # Assemblaggio Hardware del nodo. # 6 | 7 | 8 | A questo punto possiamo procedere ad assemblare il nodo, il Raspberry è funzionante, quindi possiamo mettere assieme l'hardware del nodo. 9 | Il setup sotto riportato è quello che minimizza l’hardware richiesto assicurando un funzionamento corretto e stabile. 10 | 11 | 12 | Per prima cosa dovremo assemblare il Raspberry. Se avete acquistato un case simile al mio non dovrebbe essere un problema attaccare i dissipatori ai chip seguendo le immagini dimostrative, avvitare la scheda madre al case usando le apposite viti con il cacciavite in dotazione e per ultimo chiudere il case e montare i piedini di gomma. Come vedete vi è una lunga apertura del case in corrispondenza della porta GPIO (General Purpose Input/Output port, quella lunga con tutti quei pin, insomma) del Raspberry: visto che non sarà utile nel nostro caso, si può pensare di chiuderla con del nastro adesivo, uno sticker o qualche altra decorazione: il raffreddamento del case non ne soffrirà, ed in compenso limiteremo l’accesso alla polvere: quella è sicuramente dannosa. 13 | 14 | 15 | A questo punto potremo inserire la scheda Micro SD nello slot del Raspberry. 16 | 17 | 18 | Colleghiamo alla presa micro usb di alimentazione del Raspberry uno dei due cavi di alimentazioni dell’alimentatore. L’altro invece andrà ad alimentare l’HUB, che a sua volta collegheremo ad una delle 4 prese USB del Raspberry stesso. A questo punto sia il Raspberry che l’HUB sono correttamente alimentati e collegati, possiamo quindi collegare l’Hard Disk all’HUB: sarà quindi solo l’HUB ad alimentare l’Hard disk, che pertanto non andrà a sottrarre amperaggio al funzionamento del Raspberry. 19 | Credo che sia stato tutto abbastanza facile, alla fine dovremmo avere ottenuto un setup simile al seguente: 20 | 21 | 22 | 23 | ![Non è stato difficile alla fine](/images/05_01.20MinutesLater.jpg) 24 | ###### Figura 3. That was easy ####### 25 | 26 | L'unico cavo qui non rappresentato è il cavo ethernet che dovrà essere ovviamente inserito nel Raspberry. Come abbiamo visto nella sezione precedente il Raspberry Pi potrebbe funzionare anche con una connessione Wi-Fi, ma ancora una volta lo sconsiglio. 27 | 28 | Quindi collegate la presa nella corrente ed il Cavo Ethernet ad una porta libera del Router. 29 | 30 | Non dovrebbe essere stato difficile, ma non riposiamo sugli allori ed andiamo oltre verso parti ben più ostiche. 31 | 32 | 33 | --- 34 | Avanti: [6.Configurazione Software del Nodo](06.Configurazione_RaspberryPi.md) 35 | -------------------------------------------------------------------------------- /04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md: -------------------------------------------------------------------------------- 1 | 2 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[***Preparazione Software Raspberry PI***](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 3 | 4 | ------- 5 | 6 | 7 | # Installiamo il sistema operativo e configuriamo il Raspberry Pi 8 | *Prepariamo il RasPi all' uso* 9 | 10 | Il nodo opererà in modalità "headless", questo significa senza tastiera e senza display, visto che sarà amministrato, a parte la configurazione iniziale, da remoto (sempre all'interno della rete domestica) da un PC, quindi useremo un sistema il più leggero possibile: Raspbian Stretch Lite. 11 | 12 | 1. Scaricate l'immagine del sistema operativo [Raspbian Stretch Lite](https://www.raspberrypi.org/downloads/raspbian/) 13 | 2. Formattate (full format) la MicroSD usando [SD Card Formatter](https://www.sdcard.org/downloads/formatter_4/eula_windows/), spesso la formattazione nativa di Windows bisticcia con le MircoSD 14 | 3. Scrivete l'immagine del sistema operativo sulla memory card usando Etcher seguendo [questa guida](https://www.raspberrypi.org/documentation/installation/installing-images/README.md) :GB: 15 | 16 | 17 | 18 | ![Flash!](/images/04_01.Etcher.PNG) 19 | 20 | 21 | ### Abilitiamo Secure Shell 22 | Senza una tastiera ed uno schermo non sarà possibile avere nessuna iterazione diretta don il RaspiPi durante il setup iniziale. Dopo aver scritto l'immagine iniziale sulla scheda Micro SD, create un nuovo file vuoto chiamato “ssh” (senza virgolette, senza estensione) nella directory principale della scheda stessa. Questo segnalerà alla Secure Shell (ssh) di essere abilitata al bootstrap del RasPi e quindi ci sarà possibile effettuare il login. 23 | 24 | * Create un file vuoto nominato `ssh` nella directory principale della scheda MicroSD 25 | 26 | ### Abilitiamo il Wifi 27 | Non è consigliabile, ma potete collegare il RasPi ad una connessione di rete wireless. Se volete evitare di usare il cavo per il setup iniziale, potere pre-configurare i settaggi del wireless: 28 | 29 | * Create un file `wpa_supplicant.conf` sulla MicroSD con il seguente contenuto. Notate che il nome dell network (ssid) e la password devono essere tra doppie virgolette (come ad esempio `psk="password"`) 30 | ``` 31 | country=[COUNTRY_CODE] 32 | ctrl_interface=/var/run/wpa_supplicant GROUP=netdev 33 | update_config=1 34 | network={ 35 | ssid="[WIFI_SSID]" 36 | psk="[WIFI_PASSWORD]" 37 | } 38 | ``` 39 | * Sostituite `[COUNTRY_CODE]` con il [codice ISO2](https://www.iso.org/obp/ui/#search) della vostra nazione (es: `IT`) 40 | * Sostituite `[WIFI_SSID]` ed il `[WIFI_PASSWORD]` con le credenziali del vostro WiFi. 41 | 42 | 43 | ### Installiamo il sistema operativo del RasPi 44 | 45 | Più semplice del previsto, è da interpretarsi in maniera quasi letterale: 46 | * Rimuovete in maniera sicura la MicroSD dal vostro computer (esatto, non siete amanti del rischio) 47 | * Inserite la MicroSD nello slot del RasPi 48 | 49 | Fatto! 50 | 51 | --- 52 | Avanti: [5.Assemblaggio Hardware del Nodo](05.Assemblaggio_Hardware_del_nodo.md) 53 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [[***Introduzione***](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 2 | 3 | ------- 4 | 5 | 6 | 7 | # Perché questa guida. 8 | 9 | *Digressione filosofica ed introduttiva. Saltare a piè pari per andare subito 10 | all’azione.* 11 | 12 | 13 | Bitcoin mi ha dato tanto. Non solo in termini monetari, ma soprattutto la possibilità di 14 | allargare i miei orizzonti, pensare in modo diverso dagli schemi prevalenti ed 15 | approcciarmi in modo critico a dei concetti che avevo sempre dato, nonostante la 16 | mia formazione, piuttosto scontati. 17 | 18 | Bitcoin è l’intersezione di diversi campi del sapere umano (crittografia, 19 | tecnologia delle reti distribuite, teoria della economica, teoria dei giochi). 20 | Per la mia formazione personale conosco piuttosto bene, o pensavo di conoscere 21 | piuttosto bene, come accennato sopra, gli aspetti più prettamente economici del 22 | bitcoin, mentre rimanevano per me piuttosto misteriosi gli aspetti più 23 | prettamente tecnologici. 24 | 25 | Visto che uno degli aspetti più interessanti, quello della sovranità finanziaria 26 | individuale, è emanazione diretta della tecnologia di bitcoin, allora è da 27 | qualche tempo che mi frullava l’idea di non essere più un semplice utente di 28 | bitcoin, ma di iniziare a restituire qualcosa alla comunità. 29 | 30 | Questo significa principalmente avere un nodo. Come vedremo nella sezione 31 | successiva sono tante le ragioni per avere un nodo, e poche quelle per cui forse 32 | non ne vale la pena. Quindi il bilancio è sicuramente a favore dell’averlo. 33 | 34 | L’idea della guida è quindi venuta fuori mentre cercavo di raccapezzarmi tra le 35 | varie fonti trovate su internet, Github, il forum di Bitcointalk.org, Youtube etc, ognuna con le proprie 36 | peculiarità, punti di forza e debolezza, determinate soprattutto rispetto al 37 | pubblico cui si rivolgevano. 38 | 39 | Per questo ho deciso di scrivere una guida in italiano: gli utenti più 40 | smaliziati sono sicuramente padroni della lingua inglese, e sono sicuramente in 41 | grado di seguire le molte guide disponibili online, ma io vorrei rivolgermi ad 42 | un pubblico diverso: quello degli utenti meno avvezzi alla esplorazione del web, 43 | magari proprio per limiti linguistici, ma che non si facciano scoraggiare dalla 44 | mole di lavoro necessaria. 45 | 46 | La guida quindi nasce proprio con questo obiettivo: quello di traghettare un 47 | utente poco esperto, dall’idea di partecipare al network bitcoin, fino alla sua 48 | completa realizzazione, passo-passo, senza tralasciare nessun passaggio che, 49 | seppur logico o necessario, potrebbe lasciare interdetto un utente meno smaliziato. 50 | 51 | La mole di lavoro è tanta, e spesso quando ci si imbarca in queste guide non è ben chiaro quanto sia in effetti impegnativo effettuare tutti i passaggi. Certo che la ricompensa è grande: aumentare l'antifragilità della rete bitcoin contribuendo in prima persona alla creazione del consenso. diciamo quindi che il mio obiettivo è quello di provare ad invogliare quelli che come me sono stati troppo a lungo indecisi sul bordo del "lo faccio o non lo faccio" provando, con una guida chiara, completa e soprattutto onesta, a farli propendere per la decisione...giusta. 52 | 53 | Per assicurarmi di questo ho pensato di redigere questa guida come un “diario di bordo”, ovvero sarò io in prima persona a 54 | mettere online un nodo, il mio primo nodo tra l'altro, annotando allo stesso tempo tutti i passaggi effettuati: 55 | le difficoltà della guida saranno quindi le mie difficoltà incontrate. 56 | 57 | La fonte principale di questa guida è la guida migliore che ho trovato, ovvero quella di Stadicus: 58 | 59 | [Beginner’s Guide to ⚡Lightning️⚡ on a Raspberry Pi](https://github.com/Stadicus/guides/blob/master/raspibolt/README.md) 60 | 61 | diciamo che condividendone ampiamente gli obiettivi, ho provato a farne una "versione italiana", secondo i miei criteri un pò migliorata colmandone quelle che secondo me ne erano le pochissime lacune. 62 | 63 | Tutti i crediti vanno a Stadicus, e gli errori, ovviamente, sono miei. 64 | 65 | 66 | --- 67 | Avanti: [1.Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md) 68 | -------------------------------------------------------------------------------- /10.Bonus.md: -------------------------------------------------------------------------------- 1 | 2 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 3 | 4 | ------- 5 | # Bonus 6 | 7 | 8 | *Fatto il necessario, dedichiamoci ai dettagli* 9 | 10 | 11 | **Al momento questa sezione fa ancora riferimento alla guida di Stadicus, non ho ancora implementato questi dettagli in prima persona! Appena lo farò, aggiornerò la guida** 12 | 13 | In questa sezione, troverete diversi argomenti opzionali che renderanno l’operatività del vostro NodoBitcoin ancora più semplice ed efficace. I contenuti sono suddivisi in alcune sottosezioni, visto che ogni singolo argomento può essere piuttosto lungo. 14 | 15 | ## [**Pannello di controllo**](11.Systemoverview.md) 16 | 17 | *Difficoltà: facile* 18 | 19 | Il vostro NodoBitcoin vi saluterà con un breve resoconto di sistema in fase di login: 20 | 21 | ![MotD system overview](images/10_01.Status.png) 22 | 23 | ## [Sblocco automatico di LND al riavvio](12.LNDAutomaticUnlock.md) 24 | 25 | *Difficoltà: media* 26 | 27 | Sbloccare manualmente il portafoglio LND ogni volta che il sistema si riavvia non è realmente fattibile se il vostro NodoBitcoin è destinato a funzionare da solo in un armadio. Questo script sblocca automaticamente il portafoglio LND in fase di riavvio del servizio LND. Questo comporta un minimo vostro in termini di sicurezza, visto che la password dovrà essere salvata in chiaro nel sistema. 28 | 29 | ## [**Electrum Personal Server**]( https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_64_electrum.md) 30 | 31 | *Difficoltà: intermedia* 32 | 33 | 34 | Il vostro NodoBitcoin è un perfetto motore (*backend*) trustless Bitcoin per le vostre transazioni usuali on-chain. Assieme al vostro wallet Electrum, può funzionare anche in accoppiata ai vostri hardware wallet legger o Trezor. 35 | 36 | [![Electrum]( https://github.com/Stadicus/guides/blob/master/raspibolt/images/60_eps_electrumwallet.png)]( https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_64_electrum.md) 37 | 38 | ## [**Shango Mobile Wallet**]( https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_68_shango.md) 39 | 40 | *Difficoltà: intermedia* 41 | 42 | La app Shango, disponibile per iOS ed Android, fornisce un’interfaccia pulita per il NodoBitcoin, per gestire I peers ed I canali LND, effettuare pagamenti e creare richieste di pagamento. 43 | 44 | [![Electrum]( https://github.com/Stadicus/guides/blob/master/raspibolt/images/60_shango.png)]( https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_68_shango.md) 45 | 46 | ## [**Nodo anonimo con Tor**]( https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_69_tor.md) 47 | 48 | *Difficoltà: media* 49 | 50 | Indirizzate tutto il vostro traffico Bitcoin sulla rete Tor per restare anonimi ed evitare che informazioni private, come il vostro IP pubblico, siano diffuse sulla rete. 51 | 52 | [![Tor]( https://github.com/Stadicus/guides/blob/master/raspibolt/images/69_tor.png)]( https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_69_tor.md) 53 | 54 | ## [**Potenziate la linea di comando**]( https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_62_commandline.md) 55 | 56 | *Difficoltà: facile* 57 | 58 | Fate risplendere la vostra linea di comando con un ฿ dorato ed usando più colori: 59 | 60 | [![Prompt potenziato]( https://github.com/Stadicus/guides/blob/master/raspibolt/images/60_pimp_prompt_result.png)](raspibolt_62_commandline.md) 61 | 62 | ## [**Usate`lncli`da un computer diverso**]( https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_66_remote_lncli.md) 63 | 64 | *Difficoltà: facile* 65 | 66 | Controllate il vostro nodo Lightning da un computer all’interno della vostra rete (ad esempio: un PC Windows). 67 | 68 | ## [**Ripristino di sistema**]( https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_65_system-recovery.md) 69 | 70 | Difficoltà: facile 71 | 72 | In caso che la vostra scheda SD si corrompa o che danneggiate irrimediabilmente il nodo, è comodo avere una immagine di ripristino sotto mano. Non si tratta di una soluzione di backup integrale, ma almeno permette un ripristino del sistema. 73 | 74 | ## [Scripts addizionali: mostrate il saldo ed i canali LND]( https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_67_additional-scripts.md) 75 | 76 | Difficoltà: facile 77 | 78 | Questi script aggiuntivi mostrano sia un’overview del saldo del portafoglio (on-chain & nei canali, attivo e non attivo) che una overview altrettanto curata dei canali LND creati dal nostro nodo. 79 | 80 | ## Ancora altri Extra 81 | 82 | **[RaspiBolt-Extras](https://github.com/robclark56/RaspiBolt-Extras/blob/master/README.md)** di Rob Clark 83 | * Lights-Out: automatic unlocking of wallet and dynamic ip 84 | * RaspiBoltDuo: testnet & mainnet running simultaneously 85 | * Using REST access 86 | * Receiving Lightning payments: automatically create invoices / qr codes 87 | 88 | ------ 89 | 90 | Avanti: [FAQ](099.FAQ.md) 91 | -------------------------------------------------------------------------------- /12.LNDAutomaticUnlock.md: -------------------------------------------------------------------------------- 1 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- 2 | [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- 3 | [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- 4 | [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- 5 | [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- 6 | [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[***Bonus***](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 7 | 8 | ------- 9 | ## Sblocco automatico di LND in fase di Avvio 10 | *Difficoltà: media* 11 | 12 | :warning: Questa guida non è ancora stata aggiornata alle versione 0.5 di LND e quindi potrebbe non funzionare correttamente. :warning: 13 | 14 | Ci vuole un po’ ad abituarsi al fatto che il portafoglio LND debba essere sbloccato manualmente ogni volta che il demone LND viene riavviato, qualsivoglia sia il motive. Questo ha molto senso da un punto di vista di sicurezza, dato che il portafoglio è crittato e la chiave di sicurezza non è archiviata sulla medesima macchina. Per un’operatività affidabile, ad ogni modo, non è ottimale, dato che potete riavviare LND dopo un riavvio del raspi (dovuto magari ad un crash o ad una mancanza di corrente), ma poi questo resterà inattivo a causa del portafoglio bloccato e non potrà quindi operare. 15 | 16 | Per questo può tornare untile uno script che sblocchi automaticamente il portafoglio. La password è archiviata nella directory root in formato testo, quindi non è chiaramente sicura, ma per un ammontare allocato ragionevole (:warning: mettete in un nodo LND solo quello che siete ragionevolmente disposti a perdere :warning:) è una buona via di mezzo. Potete sempre decidere di restare sullo sbloccaggio manuale, o implementare una soluzione che sblocchi il portafoglio da una macchina remota. 17 | 18 | :warning: Importante: questo script funziona solo con una versione di "systemd" superiore alla 230. Potete controllare la vostra versione con il codice che segue: 19 | 20 | `$ systemd --version` 21 | 22 | 23 | * Come utente *admin*, create una nuova directory e salvate la vostra password [C] in un file di testo 24 | 25 | `$ sudo mkdir /etc/lnd` 26 | `$ sudo nano /etc/lnd/pwd` 27 | 28 | * Lo script che segue sblocca il portafoglio LND tramite il servizio web (interfaccia REST - REpresentational State Transfer). 29 | Qualche informazione in più: 30 | * Prima di tutto lo script verifica se il RasPi si sia appena avviato o se si sia riavviato solo il servizio A seconda del risultato di questo check aspetta o 3 minuti (180 secondi) o 10 secondi in modo che LND sia pronto. Questi settaggi sono adatti nella maggior parte dei casi, ma sono comunque configurabili a piacere nel caso si verificassero degli errori di time-out nella vostra implementazione 31 | * Successivamente lo script verifica se stiate operando sulla rete Bitcoin di Test o di produzione. 32 | * L’output della chiamata API è scritto in coda al file `debug.log`. Controllate qui per capire cosa stia succedendo nel caso che il portafoglio non si sblocchi (non si vedranno ulteriori errori). 33 | * Tutte le volte che un portafoglio è sbloccato viene registrato nel file `audit.log`. 34 | 35 | * Copiate lo script seguente in un nuovo file. 36 | 37 | `$ sudo nano /etc/lnd/unlock` 38 | 39 | ```bash 40 | #!/bin/sh 41 | # LND wallet auto-unlock script (Updated for LND 0.5 and above) 42 | # 2018 by meeDamian, robclark56 (Updated by zwarbo, martinatime, CodingMuziekwijk) 43 | 44 | LN_ROOT="/home/bitcoin/.lnd" 45 | BITCOIN_DIR="/home/bitcoin/.bitcoin" 46 | 47 | upSeconds="$(cat /proc/uptime | grep -o '^[0-9]\+')" 48 | upMins=$((${upSeconds} / 60)) 49 | 50 | if [ "${upMins}" -lt "5" ] 51 | then 52 | /bin/sleep 180s 53 | else 54 | /bin/sleep 10s 55 | fi 56 | 57 | chain="$(bitcoin-cli -datadir=${BITCOIN_DIR} getblockchaininfo | jq -r '.chain')" 58 | 59 | curl -s \ 60 | -H "Grpc-Metadata-macaroon: $(xxd -ps -u -c 1000 ${LN_ROOT}/data/chain/bitcoin/${chain}net/admin.macaroon))" \ 61 | --cacert ${LN_ROOT}/tls.cert \ 62 | -X POST -d "{\"wallet_password\": \"$(cat /etc/lnd/pwd | tr -d '\n' | base64 -w0)\"}" \ 63 | https://localhost:8080/v1/unlockwallet >> /etc/lnd/debug.log 2>&1 64 | 65 | echo "$? $(date)" >> /etc/lnd/audit.log 66 | exit 0 67 | ``` 68 | 69 | * Create la directory e rendete la direcoty medesima e tutto il contenuto accessibile solo all’utente *root*. 70 | 71 | ```bash 72 | $ sudo chmod 400 /etc/lnd/pwd 73 | $ sudo chmod 100 /etc/lnd/unlock 74 | $ sudo chown root:root /etc/lnd/* 75 | ``` 76 | 77 | * Modificate la configurazione di lnd.systemd. In modo da avviare lo script appena dopo che LND sia stato avviato 78 | 79 | `$ sudo nano /etc/systemd/system/lnd.service ` 80 | 81 | ```bash 82 | # Eliminate questa linea, se presente: 83 | # PIDFile=/home/bitcoin/.lnd/lnd.pid 84 | 85 | # Aggiungete questa linea immediatamente sotto la sezione ExecStart: 86 | ExecStartPost=+/etc/lnd/unlock 87 | 88 | # Assicuratevi che iltempo di timeout sia maggiore tel tempo di esecuzione dello script aspresso in secondi , es. 240s 89 | TimeoutSec=240 90 | ``` 91 | 92 | * Modificate il file di configurazione di LND per abilitare l’interfaccia REST sulla porta 8080 93 | 94 | `$ sudo nano /home/bitcoin/.lnd/lnd.conf` 95 | 96 | ```bash 97 | # Aggiungete la linea seguente nella sezione [Application Options]: 98 | restlisten=localhost:8080 99 | ``` 100 | 101 | * Riavviate il demone systemd, riavviate LND ed osservate il processo di avvio per monitorare se il portafoglio sia automaticamente sbloccato 102 | 103 | ```bash 104 | $ sudo systemctl daemon-reload 105 | $ sudo systemctl restart lnd 106 | ``` 107 | 108 | * Potete osservare come LND si avvi ed il portafoglio venga sbloccacato collegandovi in una seconda sessione ed analizzando il file di log: 109 | 110 | `$ sudo journalctl -u lnd -f` 111 | 112 | --- 113 | Avanti: [10.Bonus](10.Bonus.md) 114 | -------------------------------------------------------------------------------- /01.Perchè_avere_un_nodo_Bitcoin.md: -------------------------------------------------------------------------------- 1 | [[Introduzione](README.md)] -- [[***Perché avere un nodo Bitcoin***](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 2 | 3 | ------- 4 | 5 | 6 | 7 | # Perché avere un proprio nodo bitcoin? 8 | *Cui prodest tutto ciò?* 9 | 10 | 1. **Irrobustire il network Bitcoin** 11 | 12 | I nodi sono i punti più importanti della rete Bitcoin: si occupano di verificare che tutte le transazioni, e quindi i blocchi che vengono in contatto con il nodo seguano le regole del protocollo. Gestire il proprio nodo significa quindi assicurare alla rete bitcoin un ulteriore punto di controllo sulle regole del protocollo Bitcoin: il nostro nodo inoltrerà ai nodi connessi nella rete 13 | solamente le transazioni ed i blocchi che ne rispettino le regole. Al contempo tutto quello visto dal nostro nodo, ma al di fuori di queste regole non sarebbero inoltrato, rendendo quindi la rete intrinsecamente più resiliente: sono i nodi 14 | che quindi in ultima istanza validano la longest proof of work chain, assicurando che alla fine siano sempre integralmente seguite le regole del protocollo. 15 | 16 | 2. **Garantire la sicurezza delle proprie transazioni: "Don’t trust, verify."** 17 | 18 | Avere un wallet non abbinato ad un full node (SPV Wallet – Simplified Payment Verification Wallet – Wallet a verifica semplificata del pagamento) implica che per il broadcast, la verifica e la ricezione delle transazioni ci si debba per forza affidare ad un nodo esterno che ci riferisca sullo stato della blockchain, ipotizzando che questo nodo non sia malevolo , riponendo in questo quindi un elevato grado di fiducia: nel protocollo *trustless* di bitcoin questa è un’ipotesi assolutamente non necessaria, ed anzi è una caratteristica fondamentale del protocollo quella di poter verificare indipendentemente lo stato della blockchain e quindi di validare le transazioni. 19 | 20 | 3. **Garantire la privacy transazionale.** 21 | 22 | Come abbiamo visto , usare un SPV comporta il fatto di dover usare un nodo terzo per il broadcast delle transazioni: questo permette al nodo di abbinare ad un indirizzo IP gli indirizzi bitcoin associati: la soluzione per la massima tutela della privacy delle proprie transazioni comporta quindi l’utilizzo del proprio nodo per il broadcast della propria transazione. 23 | 24 | 4. **Diritto di scelta delle regole del protocollo da validare.** 25 | 26 | Come abbiamo visto, sono i nodi della rete a garantire l’aderenza delle transazioni contenute nei blocchi al protocollo di bitcoin. Avere il controllo di un nodo ci obbliga quindi ad avere voce in capitolo su quali regole seguire per determinare la “longest POW chain” che di fatto determina lo stato corrente delle transazioni: le nostre scelte quindi influiranno direttamente sulle transazioni e blocchi inoltrati nella rete, contribuendo alla diffusione delle regole che noi riteniamo corrette 27 | 28 | 5. **Non è costoso** 29 | 30 | Fare il setup di un nodo bitcoin è sempre meno costoso, sia in termini di conoscenze richieste, che di hardware necessario. Guide come questa, come molte altre che si trovano in giro per la rete, permettono anche a chi ha poche conoscenze di essere up&running con il proprio nodo in breve tempo (il tempo è denaro) e senza necessità di fare riferimento a fonti diverse o avere chissà quali nozioni specifiche. D’altra parte l’hardware richiesto, come vedremo, è sempre meno costoso connessione a banda larga inclusa. Per chi non avesse voglia di intraprendere questo viaggio, sono disponibili anche delle soluzioni “chiavi in mano” pronte da essere attivate senza conoscenze e senza tempi morti. Potete consultare le [FAQ](https://github.com/Fillippone/NodoBitcoinforDummies/blob/master/099.FAQ.md#d9-questa-guida-%C3%A8-bellissima-ma-non-ho-tempo-eo-capacit%C3%A0-voglio-avere-la-vita-ancora-pi%C3%B9-semplice-cosa-mi-consigli) per avere qualche suggerimento. 31 | 32 | # Perché NON avere un proprio nodo Bitcoin? 33 | 34 | Così come avere un nodo Bitcoin ha indubbiamente dei vantaggi, così senz’altro vi sono degli elementi da valutare prima di decidere di avere un nodo up&running H24/7. 35 | 36 | 1. **Limiti di Banda** 37 | 38 | Come vedremo in seguito, se non appositamente configurato per ridurre alcune funzioni, un nodo Bitcoin può generare circa 20 GB al giorno di traffico, questo espone a notevoli costi se sul piano sono previsti limiti di utilizzo, se non addirittura delle rescissioni contrattuali per uso eccessivo. Dovrete quindi ovviamente controllare nei vostri contratti di fornitura di accesso ad internet la presenza di eventuali tetti massimi mensili e/o giornalieri ed impostare il nodo di conseguenza, seguendo le istruzioni di questa guida, i parametri di configurazione del nodo, onde scongiurare il superamento di suddetti limiti. 39 | 40 | Dalle mie prime evidenze il traffico generato dal nodo è comunque ben inferiore al valore sopra indicato, nei primi mesi mi sono attestato attorno ai 5GB al giorno come potete vedere dall'immagine di vnstat relativa al nodo sotto riportata: 41 | 42 | 43 | ![Banda mensile](images/01_01.Bandwidthconsumption.png) 44 | 45 | 2. **Antivirus:** 46 | 47 | Qualche buontempone ha inserito delle parti di codice di virus nella blockchain. Questo codice non può infettare in alcun modo il PC; ma qualche programma antivirus metterà ugualmente in quarantena i blocchi incriminati, rendendo quindi difficile tenere il nodo attivo. 48 | 49 | 3. **Target di attacco:** 50 | 51 | I nodi Bitcoin alimentano il network Bitcoin, quindi in caso di attacco al network Bitcoin, chi ha un nodo attivo potrebbe esserne in qualche modo vittima designata. Le tecniche che un attaccante potrebbe usare sono molteplici, ma potrebbero risolversi in un DDoS verso il proprio IP, quindi l’impossibilità di accedere al nodo oltre che ad una riduzione della banda disponibile per la connessione. 52 | 53 | 4. **Rischi legali** 54 | 55 | Al momento Bitcoin e la partecipazione al network sono legali. In alcune aree del mondo avere un nodo Bitcoin potrebbe essere illegale, così come potrebbe essere regolato od in qualche modo normato. Una lista attivamente aggiornata di tale aree del mondo può essere consultata [qui](https://coin.dance/poli). Ovviamente chi volesse gestire un nodo dovrebbe quindi sottostare alle suddette norme monitorandone l’evoluzione. Altro rischio è legato al fatto che come qualche buontempone si è divertito ad inserire codice di virus informatici nella blockchain, qualche poveretto ha inserito in blockchain qualche file con contenuto pedopornografico, scaricando la blockchain in linea puramente teorica sarebbe possibile accedere a tali immagini, con i rischi legali che ne conseguono. Non mi risulta però che nessuno sia mai stato condannato per questo, né che sia una minaccia reale dal punto di vista legale. 56 | 57 | 58 | 59 | 60 | --- 61 | Avanti: [2.Preparativi - Lista della spesa](02.Preparativi.md) 62 | 63 | 64 | -------------------------------------------------------------------------------- /02.Preparativi.md: -------------------------------------------------------------------------------- 1 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[***Preparativi***](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 2 | 3 | ------- 4 | # Preparativi - Componenti necessari 5 | *Lista della spesa* 6 | 7 | 8 | 9 | Di seguito elencherò tutto quello di cui avrete bisogno. Diciamo che cercherò di 10 | essere più esaustivo possibile, per cercare soprattutto di evitare che dobbiate 11 | andare alla ricerca di qualcosa su Amazon all’ultimo secondo: non darò nulla per 12 | scontato, nella sezione hardware elencherò tutto fino all’ultimo cavetto. 13 | Ovviamente sarà possibile riciclare quello che avrete in casa. 14 | 15 | Dove possibile inserirò il link Amazon di quello che vedrete, è solo un 16 | suggerimento per rendervi la vita facile, non guadagno nulla dai link. 17 | 18 | **Componenti Hardware** 19 | 20 | 1. Raspberry Pi 3 Model B+. 21 | 22 | Questo computer-on-a-chip sarà il cuore del nostro nodo, il costo dell’hardware 23 | è limitato, così come il consumo di corrente, permettendovi quindi di tenere 24 | acceso il nodo H24 (uno degli aspetti più importanti per un nodo Bitcoin) 25 | 26 | [Link Amazon: 27 | Raspberry](https://www.amazon.it/gp/product/B07BDR5PDW/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1) 28 | 29 | 2. Case per il Raspberry 30 | 31 | Abbiamo intenzione di fare funzionare a lungo il nostro nodo. Nella migliore 32 | delle ipotesi finirà dimenticato da qualche parte, facendo il suo silenzioso 33 | lavoro per anni. Il fido Raspberry si merita quindi un case che lo difenda dalla 34 | polvere. Ho trovato una versione trasparente con in omaggio alcuni graditi 35 | dissipatori per i chip. Il montaggio è davvero semplice: i dissipatori hanno 36 | degli adesivi che permettono di incollarli sui chip del Raspberry. Per fissare 37 | la scheda al case ci sono 3 viti (cacciavite incluso). Per il nostro uso forse 38 | vi sono troppe aperture in corrispondenza di porte non usate: si possono 39 | chiudere con del nastro adesivo o degli sticker per evitare che entri troppa 40 | polvere. 41 | 42 | [Link Amazon: 43 | Case](https://www.amazon.it/gp/product/B00UCSO6SW/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1) 44 | 45 | 3. Hard disk esterno USB 3.0 da 500 GB o più. 46 | 47 | The bigger, the better. La blockchain attualmente è circa 200 GB e cresce al 48 | ritmo di [5 GB al mese](https://www.blockchain.com/charts/blocks-size?). 500 GB sono più che sufficienti. Io ho trovato 49 | un’offerta per un disco da 1 TB e ne ho approfittato (sono a posto per 15 anni). 50 | 51 | [Link Amazon: 52 | HDD](https://www.amazon.it/gp/product/B07997KKSK/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1) 53 | 54 | 4. Hub USB Esterno alimentato. 55 | 56 | Il Raspberry è sulla carta in grado di alimentare l’HDD esterno, ma di fatto 57 | l’amperaggio della porta è insufficiente. Per far funzionare correttamente il 58 | tutto, la soluzione più facile è acquistare un hub esterno alimentato. Ho 59 | trovato questo che si presenta bene esteticamente, anche se ha nella confezione 60 | l’alimentatore esterno che di fatto non useremo. Magari voi sarete più bravi e 61 | riuscite a trovarne uno più adatto alle nostre esigenze. 62 | 63 | [Link Amazon: Hub 64 | USB](https://www.amazon.it/gp/product/B0192W3HX8/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1) 65 | 66 | 5. Micro SD 8GB o più 67 | 68 | Ancora una volta ho approfittato di una promozione e ho comprato una scheda da 69 | 32 GB. 70 | 71 | [Link Amazon: Micro 72 | SD](https://www.amazon.it/gp/product/B06XFSZGCC/ref=oh_aui_detailpage_o01_s01?ie=UTF8&psc=1) 73 | 74 | 6. Alimentatore USB: due porte da 2A 75 | 76 | Per dare energia al nostro nodo dobbiamo alimentare Raspberry ed HD. Ho scelto 77 | questo alimentatore perché è in grado di assicurare fino a 2A per ciascuna delle 78 | due porte: più che sufficiente per fare funzionare il tutto. 79 | 80 | [Link Amazon: 81 | Alimentatore](https://www.amazon.it/gp/product/B01BELJRBQ/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) 82 | 83 | 7. Cavi USB per la ricarica. Due cavi USB per i collegamenti elettrici, 84 | sceglieteli resistenti, visto che serviranno solo al collegamento elettrico 85 | lo standard non importa, basta che siano resistenti. Io ho scelto questa 86 | versione da 30 cm, più che sufficienti allo scopo (meno cavi in giro, meno 87 | disordine nell’assemblaggio). 88 | 89 | [Link Amazon: Cavi USB 90 | ricarica](https://www.amazon.it/gp/product/B019PZPYK6/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) 91 | 92 | 8. Cavo di rete Ethernet. 93 | 94 | Per collegare il Raspberry al router. Anche qui basta un cavo da 30 cm. 95 | 96 | 9. Connessione ad Internet permanente + porta libera sul Router 97 | 98 | Il nodo Bitcoin consuma traffico, per il normale funzionamento potrete 99 | aspettarvi circa 2 Gigabyte al giorno in ricezione, più circa 20 GB al 100 | giorno in upload, sia per il broadcast delle transazioni, sia per tenere 101 | conto delle connessioni di altri nodi che vorranno scaricarsi blockchain. 102 | Vedremo che vi nono numerosi parametri da configurare per trovare il consumo 103 | ottimale, con il giusto bilanciamento a secondo della connessione, necessità 104 | di ciascuno. Sebbene il Raspberry sia dotato di un modulo Wi-Fi, vista la 105 | mole di dati vorrete che il vostro sia collegato alla rete via cavo: per 106 | questo è necessario che abbiate almeno una porta ethernet libera sul Router/ 107 | Modem Router. 108 | 109 | ![Some assembly required](/images/02_01.SomeAssemblyRequired.jpeg) 110 | 111 | 112 | ###### Figura 1. Some assembly required ###### 113 | 114 | **Componenti necessari al solo setup** 115 | 116 | In aggiunta ai componenti sopra elencati, che sono quelli strettamente 117 | necessari al funzionamento del nodo, dovrete anche avere a portata di mano 118 | altri componenti solamente per il setup iniziale del medesimo: 119 | 120 | a. PC 121 | 122 | Vi avevo avvertito che la guida sarebbe stata completa vero? Avremo bisogno 123 | di un PC per il setup iniziale del sistema operativo del Raspberry, 124 | scaricare la blockchain e configurare il Raspberry nella rete domestica. La guida ipotizzerà che il PC abbia installato Windows, ma è possibile farlo anche avendo un Mac o un sistema Linux (in quel caso qualcosa mi dice che non avrete bisogno di questa guida). 125 | 126 | b. Adattatore Micro USB 127 | 128 | Per formattare e copiare il software dal PC. Va bene un qualsiasi lettore di 129 | SD Micro o qualsiasi formato di adattatore abbia la vostra scheda. 130 | 131 | c. Tastiera USB 132 | In caso qualcosa vada storto in fase di inizializzazione potreste aver bisogno, per accedere al Raspberry avremo bisogno di 133 | una tastiera USB: potrà sembrare banale, ma in epoca di tablet e laptop 134 | potrebbe non essere facile recuperarne una (quella che vedete è stata 135 | momentaneamente cannibalizzata dal KANO di un componente della mia 136 | famiglia). 137 | 138 | d. Cavo HDMI 139 | Come nel caso della tastiera, potremmo aver bisogno di connettere il Raspberry ad un monitor in caso non funzioni l’accesso da remoto. Basta un normalissimo cavo HDMI. 140 | 141 | 142 | 143 | 144 | ![Qualche pezzo extra](/images/02_02.MaterialeTemporaneo.jpg) 145 | 146 | 147 | ###### Figura 2. Materiale Temporaneo ###### 148 | 149 | --- 150 | Avanti: [3.Configurazione iniziale dell'Hardware](03.Configurazione_iniziale_dell'Hardware.md) 151 | -------------------------------------------------------------------------------- /03.Configurazione_iniziale_dell'Hardware.md: -------------------------------------------------------------------------------- 1 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[***Configurazione Iniziale da PC***](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 2 | 3 | ------- 4 | 5 | # Configurazione Iniziale da PC 6 | *Passi preliminari con il PC prima di sporcarci le mani*. 7 | 8 | 9 | 10 | Prima ancora di assemblare fisicamente il nodo dovremo fare qualche passo preliminare con il PC. 11 | 12 | Il menù della sezione quindi è il seguente: 13 | 14 | 1. Scaricare la Blockchain sul PC, per poi copiarla sull'HD del Raspberry. 15 | 2. Scaricare il sistema operativo del Raspberry sul PC e copiarlo sulla MicroSD. 16 | 3. Finalmente Assemblare l'Hardware del nodo. 17 | 18 | 19 | 20 | 21 | ## 1. Scaricare la blockchain di Bitcoin 22 | 23 | La Blockchain di bitcoin registra tutte le transazioni e definisce in pratica a chi appartengano quanti bitcoin. Questo database è il punto critico di avere un nodo bitcoin, e quindi dobbiamo porre su di esso molta attenzione. É fondamentale quindi scaricare la blockchain in modo sicuro: l'unico modo di farlo è tramite il software di Bitcoin sul PC, installandolo e poi e lasciandolo sincronizzare. Sarà sicuramente un processo lungo, ma solo in questo modo saremo sicuri che la blockchain scaricata sia quella effettivamente associata alla catena di proof of work più lunga, e quindi quella valida per bitcoin. 24 | 25 | Potremmo scaricare la blockchain da torrent o da molti siti, e poi lasciarla analizzare dal nodo. Il rischio sarebbe minimo, o quasi nullo, visto che anche una singola transazione non valida muterebbe irrimediabilmente la validità della blockchain. Ma davvero siamo così pigri? 26 | 27 | Una volta scaricata l'intera blockchain (a novembre 2018 circa 220 GB) il nostro nodo quindi sarà quindi in grado di 28 | 29 | 1. verificare l'aderenza alle regole del protocollo di ogni transazione Bitcoin che sia mai stata effettuata ed ogni blocco mai minato. 30 | 2.creare un database dell'indice di tutte le transazioni, che possa poi essere interrogato dal software del nodo 31 | 3. calcolare il saldo ti tutti gli indirizzi bitcoin mai creati (il cosiddetto UTXO set, il Unspent Transaction Ouputs set, ovvero, letteralmente, il set delle uscite (output) di transazione non spese. 32 | 33 | :point_right: Consultate [Running a Full Node](https://bitcoin.org/en/full-node) :gb: per avere maggiori informazioni su come gestire un nodo bitcoin. 34 | 35 | ### Accendiamo il PC 36 | 37 | La validazione della Blockchain, più che il download stesso, è un processo ad intenso uso di CPU, disco e di RAM che può impiegare giorni. Per questo vogliamo farlo su un PC che ha caratteristiche Hardware molto migliori del Raspberry, e soprattutto vogliamo iniziare subito: possono essere necessari diversi giorni, a seconda delle caratteristiche hardware del PC (connessione inclusa, naturalmente). Se al contrario provassimo ad usare un Raspberry probabilmente potrebbero volerci settimane o mesi viste le limitazioni di CPU e soprattutto RAM. 38 | L'obiettivo di questa prima parte è quindi quello di scaricare e verificare la blockchain installando Bitcoin Core su un PC e quindi trasferire i dati sul Raspberry. Questo sarà necessario solo all'inizio. Una volta inizializzata la blockchain il Pi potrà facilmente stare dietro all'aggiornamento dei singoli blocchi. 39 | 40 | 41 | In questa guida ipotizzeremo di usare un PC Windows, ma il funzionamento è il medesimo per la maggior parte dei sistemi operativi. Avrete bisogno di circa 300GB di spazio su disco, o interno o esterno (ma non quello che useremo per il Raspberry). Poiché la creazione dell' indice crea un elevato traffico di lettura/scrittura, più rapido è l'Hard disk, meglio è. Un disco rigido interno o esterno USB3 saranno significativamente più rapidi di un disco con una connessione USB2. 42 | 43 | Per copiare la blockchain sul Raspberry Pi abbiamo diverse opzioni 44 | * **Migliore**: la modalità migliore è quella di formattare il disco esterno del RaspPi con il file system Ext4, che è il migliore per il nostro caso. Potremo poi copiare la blockchain dal PC attraverso la rete locale usando un programmino chiamato SPC. 45 | 46 | * **Oppure**, se volete usare un Hard Disk esterno per il vostro RaspPi che già contiene dati, mi auguro perché avete già scaricato la blockchain sul disco, si può fare lo stesso. Si potrà usare il disco così come è, saltando la parte della guida relativa alla formattazione del disco. 47 | 48 | :warning: Questa seconda opzione è poco "robusta" ed a meno di forti motivazioni, da non preferire rispetto alla prima :warning: 49 | 50 | ### Download e verifica di Bitcoin Core 51 | Scaricate il Bitcoin Core installer della Versione 32 o 64 bit, a seconda del vostro sistema operativo, da [bitcoincore.org/en/download](https://bitcoincore.org/en/download) e salvatelo nella directory che vorrete usare per salvare la Blockchain. Per garantirci che stiamo usando il programma originale dovremo calcolare l'hash del file scaricato e verificare che corrisponda all'hash segnalato sul sito. Solo in questo modo saremo sicuri di scaricare un programma inalterato rispetto al codice originale. 52 | 53 | Nella guida, quando inserirò dei comandi da inserire in Windows, saranno sempre preceduti dal simbolo `>`, quindi il comando `> cd bitcoin` dovrà essere inserito semplicemente come `cd bitcoin` più Invio. 54 | 55 | 56 | Aprite il prompt dei comandi di Windows (`Win+R`, scrivete `cmd`, premete `Invio`, oppure più semplicemente cercate "cmd" nella barra di ricerca di Windows10 e selezionate "Prompt dei comandi" tra i risultati), navigate fino alla directory bitcoin (ad esempio nel drive `O:`. Il minimo necessario che vi servirà sarà il comando `>cd` + directory per scendere in una sottodirectory rispetto a dove vi trovate, oppure `>cd..` per risalire di uno step rispetto a dove vi trovate, per cambiare drive sarà sufficiente digitare la lettera ad esso associato) e create quindi una nuova directory `Blockchain`. 57 | 58 | A questo punto siamo pronti per calcolare l'hash del file che abbiamo appena scaricato 59 | ``` 60 | > O: 61 | > cd \Bitcoin 62 | > mkdir Blockchain 63 | > dir 64 | > certutil -hashfile bitcoin-0.17.0-win64-setup.exe sha256 65 | 66 | ``` 67 | ![Verifichiamo l'hash del file scaricato](images/03_01.Dos4Everyone.PNG) 68 | 69 | 70 | Dobbiamo assicurarci che questo hash sia identico al valore indicato nelle release signatures della versione corrispondente: possiamo trovare il file .asc (Armoured ASCII file) che contiene tutti gli hash all'indirizzo: [release signatures](https://bitcoin.org/bin/bitcoin-core-0.17.0/SHA256SUMS.asc). Nel nostro caso, abbiamo scaricato il file eseguibile per Windows, e quindi i checksum dei file bitcoin-0.17.0-winXX-setup.exe sono: 71 | ``` 72 | 32 bit: 1f4091f6f32685aac3f790edae8657abe0c96448720b165762399a31499f8ee7 73 | 64 bit: b37f738ab17a93e24028fa74280b74c353653cf03fc2fb7da6ead8669e440b1a 74 | ``` 75 | Dobbiamo controllare che corrispondano TUTTE le cifre dell'hash, è importante, ci vogliono pochi minuti, fatelo. 76 | In realtà poi dovremo essere sicuri che stiamo leggendo il file .asc giusto, e non uno corrotto (da un attacco *man in the middle*, per esempio). Dobbiamo quindi anche verificare la firma del file stesso (*"dont'trust, verify"*, ricordate?). Per comodità lo faremo successivamente sul RasPI, in quanto è molto più semplice farlo in UNIX che in Windows. 77 | 78 | 79 | 80 | ### Installiamo Bitcoin Core 81 | 82 | Eseguite il file di installazione di Bitcoin Core (potreste avere bisogno di avere i privilegi di amministratore: selezionate il file con il tasto destro e selezionate "Esegui come amministratore") ed installatelo usando i settings di default. Create una directory Bitcoin, nel mio caso sarà "O:\Bitcoin". 83 | 84 | 85 | ![Bitcoin Core](images/03_02.BitcoinFolder.PNG) 86 | 87 | 88 | Avviate il programma `bitcoin-qt.exe` nella directory "O:\Bitcoin", anche procedendo semplicemente con l'installazione . Create sotto O:\Bitcoin\ una nuova sottodirectory “Blockchain” come directory di dati personalizzata 89 | 90 | ![Bitcoin Core directory selection](images/03_03.BitcoinBlockchainFolder.PNG) 91 | 92 | 93 | Bitcoin Core inizierà immediatamente a sincronizzare la blockchain. 94 | 95 | 96 | Se il vostro computer ha molta memoria, inoltre potete aumentare la dimensione del database tenuto nella memoria cache aggiungendo la seguente riga di comando(specificando l'ammontare in megabytes di memoria da usare, a seconda della configurazione del vostro PC, il default è `dbcache=300`): 97 | 98 | ``` 99 | dbcache=6000 100 | ``` 101 | 102 | Salvate e chiudete il file di testo, uscite da Bitcoin Core usando `File` / `Exit` e riavviate il programma. Il programma inizierà autonomamente a sincronizzarsi scaricando la blockchain. 103 | 104 | 105 | 106 | ![Finalmente Stiamo Scaricando](images/03_04.ArmateviDiSanaPazienza.JPG) 107 | 108 | 109 | Lasciamolo lavorare in pace: a seconda della velocità della vostra connessione di rete e delle caratteristiche hardware della vostra workstation (RAM in primis) saranno necessarie dalle 12 ore a diversi giorni perché il download e la verifica della blockchain siano completati. 110 | Nella finestra riportata nell'immagine potremo avere una preview del progresso della sincronizzazione, per un maggior dettaglio, aprire la finestra di debug tramite `Aiuto` / `Finestra di debug`: qui potremo tenere sotto controllo le connessioni ai peer della rete Bitcoin, il traffico generato per il download della blockchain ed altre informazioni. 111 | 112 | 113 | --- 114 | Avanti: [4. Configurazione iniziale del Raspberry Pi](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md ) 115 | -------------------------------------------------------------------------------- /07.Bitcoin.md: -------------------------------------------------------------------------------- 1 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[***Bitcoin***](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 2 | 3 | ------- 4 | 5 | 6 | # Installazione di Bitcoin Core. # 7 | *Installiamo Bitcoin e Lightning. Iniziamo da Bitcoin su testnet* 8 | 9 | 10 | Lightning per funzionare ha bisogno di un nodo [Bitcoin Core](https://bitcoin.org/en/bitcoin-core/). Come abbiamo visto un nodo Bitcoin ha la copia completa della blockchain e valida tutte le transazioni ed i blocchi che vede in maniera trustless. Facendo tutto questo lavoro da soli, non abbiamo bisogno di avere fiducia in nessuno, quindi abbiamo tutto l'incentivo ad essere cittadini di serie A della rete bitcoin ed avere il nostro full node. 11 | 12 | Per iniziare installeremo sia Bitcoin che Lightning in ambiente di test, in modo da impratichirci con le operazioni di base senza metter a rischio i nostri preziosi fondi. 13 | In questa fase non avremo bisogno ancora della blockchain di Bitcoin, che andremo a copiare sul Raspi solamente quando vorremo passare sulla rete di produzione (mainnet). Tutto il processo di sincronizzazione sarà fatto dal Raspberry, ci vorrà qualche ora, ma è gestibile, diciamo nel corso di una nottata. 14 | Se non siete interessati a lightning, passate oltre nella configurazione, il percorso riguarderà solamente bitcoin, ma consiglio comunque il passaggio in testnet prima di avventurarci nella vera rete bitcoin. 15 | 16 | 17 | ### Download ed installazione di Bitcoin Core 18 | Scaricheremo il software direttamente da bitcoin.org, ne verificheremo la firma per assicurarci di usare una versione ufficiale e non corrotta e la installeremo sul nodo. Già che ci siamo, verificheremo inoltre la firma del programma che abbiamo usato per scaricare la blockchain sul pc ausiliario. 19 | 20 | * Accedete come "admin" e create una cartella di download 21 | `$ mkdir /home/admin/download` 22 | `$ cd /home/admin/download` 23 | * Se state upgradando la versione ed avete dei file scaricati, prima di tutto cancellateli 24 | `$ rm * ` 25 | 26 | Scaricheremo l'ultima versione dei binari di Bitcoin Core (ovvero dell'applicazione: [Bitcoin Core é l'implementazione più diffusa del protocollo Bitcoin](https://coin.dance/nodes)) e verificheremo l'hash del file scaricato con la firma del file originale. Questa è una precauzione necessaria per essere sicuri che sia una release ufficiale e non una versione modificata, in modo malevolo, che possa mettere a rischio i nostri fondi. 27 | 28 | * Procuratevi i link di download dell'ultima versione sul sito di Bitcoin Core [bitcoincore.org/en/download](https://bitcoincore.org/en/download) versione (ARM Linux 32 bit), cambiano ad ogni versione. Eseguite quindi i seguenti comandi, modificando come necessario i nomi dei file, e controllate l'output a video: 29 | 30 | `$ wget https://bitcoincore.org/bin/bitcoin-core-0.19.0.1/bitcoin-0.19.0.1-arm-linux-gnueabihf.tar.gz` 31 | `$ wget https://bitcoincore.org/bin/bitcoin-core-0.19.0.1/SHA256SUMS.asc` 32 | `$ wget https://bitcoin.org/laanwj-releases.as` 33 | 34 | * Controlliamo che la checksum del file scaricato sia la medesima del file di riferimento: 35 | 36 | `$ sha256sum --check SHA256SUMS.asc --ignore-missing` 37 | 38 | `> bitcoin-0.19.0.1-arm-linux-gnueabihf.tar.gz: OK` 39 | 40 | Potete tranquillamente ignorare il warning sulle linee non correttamente formattate: 41 | 42 | `>sha256sum: WARNING: 20 lines are improperly formatted` 43 | 44 | * Importate quindi la chiave pubblica di Wladimir van der Laan, aggiornate le firme e verificate il file firmato contenente tutte le checksum e controllate ancora l'impronta in caso di chiave malevola: 45 | 46 | `$ gpg --import ./laanwj-releases.asc` 47 | 48 | `$ gpg --refresh-keys` 49 | 50 | `$ gpg --verify SHA256SUMS.asc` 51 | 52 | `> gpg: Good signature from "Wladimir J. van der Laan ..."` 53 | 54 | `> Primary key fingerprint: 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964` 55 | 56 | 57 | 58 | ![Comandi per controllare le firme di bitcoind](images/07_01.CheckPGP.PNG) 59 | 60 | * Ora che sappiamo che le chiavi da bitcoin.org sono valide, possiamo anche verificare i checksum dei binari di Windows. Confrontate l'output che segue con il checksum del vostro file di download di Bitcoin Core per Windows. 61 | 62 | `$ cat SHA256SUMS.asc | grep win` 63 | ``` 64 | 4abca9419e83581209a3654a33da504998cf2f470993ee6d71f6b47fefe631a0 bitcoin-0.19.0.1-win64-setup.exe 65 | 7706593de727d893e4b1e750dc296ea682ccee79acdd08bbc81eaacf3b3173cf bitcoin-0.19.0.1-win64.zip 66 | ``` 67 | * Estraete i binari di Bitcoin Core, installateli e controllate la versione. 68 | 69 | 70 | `$ tar -xvf bitcoin-0.19.0.1-arm-linux-gnueabihf.tar.gz` 71 | 72 | `$ sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.19.0.1/bin/*` 73 | 74 | `$ bitcoind --version` 75 | 76 | `> Bitcoin Core version v0.19.0.1` 77 | 78 | 79 | ### Prepariamo la directory per Bitcoin Core 80 | 81 | Il nodo Bitcoin userà il demone Bitcoin, chiamato bitcoind, che scriverà tutti i dati nella directory `/home/bitcoin/.bitcoin`. Invece di creare una vera directory sulla scheda SD, creiamo un link che punta alla directory sull'hard disk esterno. 82 | 83 | :point_right: :raising_hand: Nel mondo Linux un "demone", *daemon* in inglese, è un programma eseguito in background, cioè senza che sia sotto il controllo diretto dell'utente, senza interfaccia e che tipicamente fornisce un servizio all'utente. Di solito i demoni hanno nomi che finiscono per "d" :point_left: 84 | 85 | * Mentre siamo collegati come utente *admin*, cambiamo l'utente in *bitcoin* 86 | `$ sudo su - bitcoin` 87 | 88 | * Aggiungiamo il link simbolico che punta al disco esterno. 89 | `$ ln -s /mnt/hdd/bitcoin /home/bitcoin/.bitcoin` 90 | 91 | * Navighiamo nella home directory e controlliamo il link simbolico che abbiamo appena creato (la destinazione non deve essere di colore rosso). Il contenuto di questa directory è in effetti sull'hard disk esterno. 92 | 93 | `$ ls -la` 94 | 95 | ![verifichiamo il link simbolico a .bitcoin](images/07_02.Systemcheck.PNG ) 96 | 97 | ### Configurazione di bitcoind 98 | 99 | Ora andremo a creare il file di configurazione di bitcoind. Copiate la configurazione riportate di seguito, aprite Nano ed incollatela. 100 | 101 | 102 | `$ nano /home/bitcoin/.bitcoin/bitcoin.conf` 103 | 104 | ```bash 105 | # NodoBitcoin: bitcoind configuration 106 | # /home/bitcoin/.bitcoin/bitcoin.conf 107 | 108 | # Rimuovete (Commentate) la linea di seguito per passare da testnet a mainnet 109 | testnet=1 110 | 111 | # Opzioni Bitcoind 112 | server=1 113 | daemon=1 114 | 115 | # Impostazioni di connessione 116 | rpcuser=NodoBitcoin 117 | rpcpassword=PASSWORD_[B] 118 | 119 | onlynet=ipv4 120 | zmqpubrawblock=tcp://127.0.0.1:28332 121 | zmqpubrawtx=tcp://127.0.0.1:28333 122 | 123 | # Ottimizzazioni per RaspberryPi 124 | dbcache=100 125 | maxorphantx=10 126 | maxmempool=50 127 | maxconnections=40 128 | maxuploadtarget=5000 129 | ``` 130 | 131 | :warning: Sostituite la password `rpcpassword` con la vostra `password [B]`, altrimenti i vostri fondi saranno a rischio furto. 132 | 133 | Salvate ed uscite 134 | 135 | 136 | `Ctrl-O` 137 | 138 | 139 | `Ctrl-X` 140 | 141 | 142 | :point_right: Se volete approfondire potete consultare la voce sulle [opzioni di configurazione ](https://en.bitcoin.it/wiki/Running_Bitcoin#Command-line_arguments) :gb: su Bitcoin Wiki 143 | 144 | ### Avviate bitcoind 145 | 146 | Mentre siete ancora loggati come l'utente *bitcoin*, avviate "bitcoind" manualmente. Monitorate il file di log per qualche minuto per controllare che tutto vada bene (potrebbe interrompersi su "dnsseed thread exit", ma va bene). 147 | Uscite dal file di log con `Ctrl-C`, controllate le informazioni sulla blockchain e, se non ci sono errori, stoppate ancora bitcoind. 148 | 149 | 150 | ``` 151 | $ bitcoind 152 | $ tail -f /home/bitcoin/.bitcoin/testnet3/debug.log 153 | $ bitcoin-cli getblockchaininfo 154 | $ bitcoin-cli stop 155 | ``` 156 | 157 | ### Avvio automatico di bitcoind 158 | 159 | Per poter funzionare il nodo ha bisogno che il demone bitcoind sia avviato automaticamente in background, anche senza che nessun utente sia loggato. Per fare questo abbiamo bisogno di un altro demone “systemd“, che controlla il processo di startup usando dei file di configurazione. 160 | 161 | * Uscite dalla sessione utente *bitcoin* per tornare nella sessione utente *admin* 162 | `$ exit` 163 | 164 | * Create il file di configurazione nell'editor di testo Nano 165 | 166 | `$ sudo nano /etc/systemd/system/bitcoind.service` 167 | 168 | copiate il codice seguente: 169 | 170 | ```bash 171 | # NodoBitcoin: systemd unit for bitcoind 172 | # /etc/systemd/system/bitcoind.service 173 | 174 | [Unit] 175 | Description=Bitcoin daemon 176 | After=network.target 177 | 178 | [Service] 179 | ExecStartPre=/bin/sh -c 'sleep 30' 180 | ExecStart=/usr/local/bin/bitcoind -daemon -conf=/home/bitcoin/.bitcoin/bitcoin.conf -pid=/home/bitcoin/.bitcoin/bitcoind.pid 181 | PIDFile=/home/bitcoin/.bitcoin/bitcoind.pid 182 | User=bitcoin 183 | Group=bitcoin 184 | Type=forking 185 | KillMode=process 186 | Restart=always 187 | TimeoutSec=120 188 | RestartSec=30 189 | 190 | [Install] 191 | WantedBy=multi-user.target 192 | ``` 193 | Salvate ed uscite 194 | 195 | 196 | `Ctrl-O` 197 | 198 | 199 | `Ctrl-X` 200 | 201 | 202 | 203 | * Abilitate il file di configurazione 204 | `$ sudo systemctl enable bitcoind.service` 205 | * Copiate `bitcoin.conf` nella home directory dell'utente *admin* per abilitare le credenziali RPC 206 | `$ mkdir /home/admin/.bitcoin` 207 | `$ sudo cp /home/bitcoin/.bitcoin/bitcoin.conf /home/admin/.bitcoin/` 208 | * Riavviate il Raspberry Pi 209 | `$ sudo shutdown -r now` 210 | 211 | ### Verifica della funzionalità di bitcoind 212 | Dopo aver riavviato, il demone bitcoind dovrebbe iniziare a scaricare e validare la Bitcoin blockchain. 213 | 214 | * Aspettate qualche minuto, ricollegatevi via SSH e fate login con l'utenza *admin*. 215 | 216 | * Controllate lo status del demone bitcoind che è stato a sua volta avviato dal demone systemd 217 | 218 | `$ systemctl status bitcoind.service` 219 | 220 | (potete uscire con `Ctrl-C`) 221 | 222 | ![Bitcoind status ](images/07_03.LsLa.PNG) 223 | 224 | * Potete esaminare bitcoind in azione monitorando il suo file di log 225 | `$ sudo tail -f /home/bitcoin/.bitcoin/testnet3/debug.log` 226 | 227 | (exit with `Ctrl-C`) 228 | 229 | * Usate il client Bitcoin Core `bitcoin-cli` per avere informazioni sulla blockchain che state usando (testnet o mainnet che sia) 230 | 231 | `$ bitcoin-cli getblockchaininfo` 232 | 233 | * Attenzione: 234 | * Mentre “bitcoind” si sta ancora avviando, potreste avere un messaggio di errore del tipo `verifying blocks`. É normale, ci vuole qualche minuto perché il demone verifichi i blocchi appena scaricati. 235 | * Tra le altre informazioni, è mostrata anche “verificationprogress”. Una volta che questo valore raggiunge valori prossimi ad 1( es: 0.999…), la blockchain è aggiornata e validata. 236 | 237 | ### Vi presento la bitcoin-cli 238 | Se tutto va bene, allora siamo live sulla testnet. Questo è il momento migliore per familiarizzare con il client Bitcoin Core e giocare con la `bitcoin-cli` mentre attendiamo che la blockchain sia interamente scaricata ed aggiornata. 239 | 240 | * Un ottimo punto di partenza è i libro **Mastering Bitcoin** di Andreas Antonopoulos @aantonop - pubblicato sotto licenza open source. In particolare ci interessa il capitolo 3 (ignorate la prima parte su come compilare dal codice sorgente): 241 | * :pray: Sarebbe obbligatorio avere una [copia fisica ](https://bitcoinbook.info/) di questo libro! 242 | * Se proprio non ce la fate, potete trovarlo online su [Github](https://github.com/bitcoinbook/bitcoinbook) 243 | 244 | ![Mastering Bitcoin](images/07_04.masteringbitcoin.jpg) 245 | 246 | * Per i più audaci ed esperti di Linux e linguaggi di programmazione [**Learning Bitcoin from the Command Line**](https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line/blob/master/README.md) di Christopher Allen. 247 | 248 | 249 | :point_right: Ulteriori informazioni: [bitcoin-cli reference](https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list) :gb: 250 | 251 | Una volta che abbiamo scaricato e verificato la blockchain su testnet, possiamo dedicarci al settaggio del nodo Lightning. 252 | 253 | ----- 254 | 255 | ### Upgrade del software Bitcoin Core 256 | Se vorrete in futuro aggiornare la versione di Bitcoin Core ad una nuova release, controllate le FAQ: 257 | [Come aggiornare Bitcoin Core](099faq.md#Come-Aggiornare-Bitcoin-Core) 258 | 259 | ----- 260 | Avanti: [8.Lightning](08.Lightning.md) 261 | -------------------------------------------------------------------------------- /09.Mainnet.md: -------------------------------------------------------------------------------- 1 | 2 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[***Mainnet***](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 3 | 4 | ------- 5 | 6 | 7 | # Mainnet 8 | 9 | *E' giunto il momento di levare i braccioli e buttarsi nella piscina dei grandi* 10 | 11 | 12 | 13 | ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ 14 | 15 | Disclaimer importante: se non siete pratici di Linux, o non avete intenzione di impararlo approfonditamente per arrivare almeno a compilarvi da soli i codici, c'è un'elevata probabilità che prima o poi perderete dei fondi. Lightning Network non è ancora pronto per la produzione ed LND è ancora in beta. 16 | 17 | 18 | ``` 19 | Disclaimer manleva, altrettanto importante: questa guida è fornita tale e quale, senza alcuna garanzia. 20 | Come ho già detto, è una traduzione piuttosto fedele della guida di Stadicus, 21 | anch'essa senza garanzie di buon funzionamento. 22 | Molti dei programmi, moduli, codici e componenti di questa guida sono ancora in sviluppo 23 | e questa guida può contenere molti errori, concettuali, fattuali o semplici typos, che possono portare 24 | alla perdita dei vostri bitcoin. 25 | 26 | Usate questa guida a vostro rischio e pericolo. 27 | 28 | Soprattutto su mainnet. 29 | ``` 30 | ``` 31 | Disclaimer Lightning Labs : Visto che questo è il primo rilascio su mainnet di lnd, raccomandiamo che gli utenti 32 | sperimentino solo con piccole somme (#craefulgang #craefulgang #craefulgang). 33 | ``` 34 | 35 | ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ 36 | 37 | Ancora convinti di procedere? Andate avanti a vostro rischio e pericolo. 38 | 39 | ## Copiate la Blockchain Mainnet 40 | 41 | Il setup del nodo girava sulla blockchain di testnet, fisicamente diversa da quella di produzione (Mainnet). All'inizio della guida però abbiamo iniziato a scaricare la blockchain di bitcoin sul nostro pc regolare. Controllate il download e la verifica dei blocchi dalla finestra di Bitcoin Core direttamente su quel computer. Per procedere avrete bisogno che il nodo sia sincronizzato al 100% (verificatelo nella status bar). 42 | 43 | Non appena il nodo è sincronizzato e la blockchain verificata, chiudete Bitcoin Core su Windows. Andremo ora a copiare l'intera struttura di dati sul RasPi. Saranno necessarie circa 6 ore. 44 | 45 | ### Abilitiamo temporaneamente il login con password 46 | Per poter copiare i dati con l'utente *bitcoin*, dobbiamo riabilitare temporaneamente il login con password. 47 | 48 | * Come utente "admin", editate il file di configurazione SSH e commentate con un `#` "PasswordAuthentication no" per disabilitare la relativa linea di comando. Salvate ed uscite. 49 | 50 | `$ sudo nano /etc/ssh/sshd_config` 51 | `# PasswordAuthentication no` 52 | 53 | `CTRL - O` 54 | 55 | `CTRL - X` 56 | 57 | * Riavviate il demone SSH. 58 | `$ sudo systemctl restart ssh` 59 | 60 | ### Copiate la blockchain usando WinSCP 61 | Useremo la "Secure Copy" (SCP), quindi [scaricate ed installate WinSCP](https://winscp.net), un programma free ed open-source che permette la copia bit per bit tra due computer. 62 | 63 | * Con WinSCP, potete connettervi al RasPi usando le credenziali utente di *bitcoin*. 64 | ![WinSCP connection settings](images/09_01.WinSCP.PNG) 65 | 66 | 67 | * Accettate il certificato del server e navigate fino alle directories di bitcoin sia sul PC (locale) che sul Raspi (Remoto): 68 | * Local: `o:\bitcoin\bitcoin_mainnet\` 69 | * Remote: `\mnt\hdd\bitcoin\` 70 | 71 | * Potete ora copiare le due sottodirectories `blocks` e `chainstate` da Local a Remote. Saranno necessarie circa 8 ore. 72 | 73 | ![WinSCP copy](images/09_02.WinSCP.PNG) 74 | 75 | :warning: Il trasferimento non deve essere interrotto. Assicuratevi che il PC non abbia attive delle impostazioni di risparmio energetico che ne comportino lo spegnimento o comunque la sospensione dell'attività. 76 | 77 | :point_right:_ Ulteriori informazioni: [Bitcoin Core data directory structure](https://en.bitcoin.it/wiki/Data_directory) :GB: 78 | 79 | ### Disabilitate nuovamente il password login 80 | 81 | * Come utente *admin*, rimuovete ancora il commento `#` di fronte a "PasswordAuthentication no" per abilitare nuovamente la linea di comando. Salvate ed uscite. 82 | `$ sudo nano /etc/ssh/sshd_config` 83 | `PasswordAuthentication no` 84 | 85 | `CTRL - O` 86 | 87 | `CTRL - X` 88 | 89 | * Riavviate il demone SSH daemon. 90 | `$ sudo systemctl restart ssh` 91 | 92 | ## Restituite i Bitcoin di testnet 93 | Per evitare di bruciare i Bitcoin di testnet, e come cortesia verso il tester successivo, chiudiamo tutti i canali Lightning e ritiriamo i fondi. Resitutuiamo poi i Bitcoin seguendo le istruzioni sul sito [Bitcoin Testnet Faucet](https://testnet.manu.backend.hamburg/faucet) :GB: . 94 | 95 | * `$ lncli --network=testnet closeallchannels` 96 | 97 | * Attendete fino a quando il saldo dei canali è zero ed i fondi siano tornati nel nostro wallet on-chain principale. 98 | 99 | `$ lncli --network=testnet channelbalance` 100 | `$ lncli --network=testnet walletbalance` 101 | 102 | - Mandate l'ammontare fornito da `walletbalance`, meno 500 satoshis come fees. Se avete un messaggio di errore "insufficient funds", detraete un importo leggermente superiore fino a quando la transazione non viene divulgata. 103 | 104 | `$ lncli --network=testnet sendcoins 2N8hwP1WmJrFF5QWABn38y63uYLhnJYJYTF [amount]` 105 | 106 | ## Sistemate la configurazione per la Mainnet 107 | 108 | * Arrestate i demoni di Lightning e Bitcoin. 109 | `$ sudo systemctl stop lnd` 110 | `$ sudo systemctl stop bitcoind` 111 | 112 | * Editate il file di configurazione di Bitcoin "bitcoin.conf" commentando `testnet=1`. Salvate ed uscite. 113 | `$ sudo nano /home/bitcoin/.bitcoin/bitcoin.conf` 114 | ``` 115 | # remove the following line to enable Bitcoin mainnet 116 | #testnet=1 117 | ``` 118 | 119 | `CTRL - O` 120 | 121 | `CTRL - X` 122 | 123 | * Copiate il file aggiornato "bitcoin.conf" per l'utente "admin" per le credenziali 124 | 125 | `$ sudo cp /home/bitcoin/.bitcoin/bitcoin.conf /home/admin/.bitcoin/` 126 | 127 | 128 | * Editate il file di configurazione di Lightning "lnd.conf" spostando il commento dalla riga `bitcoin.testnet=1` alla riga `bitcoin.mainnet=1`. Salvate ed uscite. 129 | 130 | `$ sudo nano /home/bitcoin/.lnd/lnd.conf` 131 | ``` 132 | # enable either testnet or mainnet 133 | #bitcoin.testnet=1 134 | bitcoin.mainnet=1 135 | ``` 136 | 137 | `CTRL - O` 138 | 139 | `CTRL - X` 140 | 141 | 142 | ## Riavviate i demoni bitcoind e lnd sulla mainnet 143 | 144 | :warning: **NON ANDATE AVANTI** fino a quando la copia della blockchain non sia completamente terminata. :warning: 145 | 146 | * Avviate Bitcoind e controllate che stia lavorando sulla mainnet (potete uscire da debug.log con `Ctrl-C`). 147 | 148 | ``` 149 | $ sudo systemctl start bitcoind 150 | $ systemctl status bitcoind.service 151 | $ sudo tail -f /home/bitcoin/.bitcoin/debug.log 152 | $ bitcoin-cli getblockchaininfo 153 | ``` 154 | 155 | * **Aspettate ora che la blockchain sia totalmente sincronizzata**: ovvero fino a quando avrete "blocks" = "headers", altrimenti potreste avere in problemi di performance o memoria mentre creerete un nuovo portafoglio lnd di mainnet. 156 | 157 | * Avviate LND e controllate la sua operatività 158 | 159 | ``` 160 | $ sudo systemctl start lnd 161 | $ systemctl status lnd 162 | $ sudo journalctl -f -u lnd 163 | ``` 164 | 165 | Se tutto funziona bene, riavviate il RaspiPi e controllate ancora una volta l'operatività a seguito del riavvio. 166 | `$ sudo shutdown -r now` 167 | 168 | * Monitorate il processo di startup prima di `bitcoind` e successivamente di `lnd` 169 | 170 | ``` 171 | $ sudo tail -f /home/bitcoin/.bitcoin/debug.log 172 | $ sudo journalctl -f -u lnd 173 | ``` 174 | 175 | * Create il portafoglio Lightning sulla mainnet con **esattamente la stessa** `password [C]` che avete usato per la testnet. Se scegliete una password differente, dovrete ricreare le credenziali di accesso. 176 | `$ lncli create ` 177 | 178 | * Copiate i file di permission ed il certificato TLS all'utente "admin" in modo che possa usare `lncli` 179 | 180 | ``` 181 | $ sudo cp /home/bitcoin/.lnd/tls.cert /home/admin/.lnd 182 | $ cd /home/bitcoin/ 183 | $ sudo cp --parents .lnd/data/chain/bitcoin/mainnet/admin.macaroon /home/admin/ 184 | $ sudo chown admin:admin /home/admin/.lnd/ -R 185 | ``` 186 | 187 | * Riavviate `lnd` e sbloccate il vostro portafoglio (usando la `password [C]` ) 188 | 189 | ``` 190 | $ sudo systemctl restart lnd 191 | $ lncli unlock 192 | ``` 193 | 194 | * Monitorate l'avanzamento del processo di *startup* LND fino a quando si allinea con la blockchain di produzione (circa 600k blocchi al momento). Possono volerci fino a due ore, quindi vedrete un sacco di scritte muoversi molto velocemente nel registro (uscite con `Ctrl-C`). 195 | `$ sudo journalctl -f -u lnd` 196 | 197 | * Assicuratevi che `lncli` funzioni interrogando alcune informazioni sul nodo. 198 | `$ lncli getinfo` 199 | 200 | :point_right: **Importante**: dovrete sbloccare manualmente il portafoglio LND dopo ogni riavvio del servizio lnd! 201 | 202 | :point_right: Se volete automatizzare lo sblocco potete usare questo [script per lo sblocco automatico dei portafogli LND](https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_6A_auto-unlock.md) 203 | 204 | ## Iniziamo ad usare Lightning Network 205 | 206 | ### Finanziamo il Nodo 207 | 208 | Congratulazioni! Il vostro NodoBitcoin è live sulla rete di produzione di Bitcoin! Per aprire i canali ed iniziare ad usarlo su Lightning, dovremo finanziarlo con qualche (frazione di) bitcoin. Per iniziare, mettete nel vostro nodo solo quello che siete disposti a perdere. Soldi del Monopoli. 209 | 210 | * Generate un nuovo indirizzo Bitcoin per ricevere dei fondi onchain. 211 | `$ lncli newaddress np2wkh` 212 | `> "address": "3.........................."` 213 | 214 | * Mandate, nel modo che preferite, a questo indirizzo la frazione di bitcoin di cui sopra. 215 | 216 | * Controllate il saldo del vostro wallet 217 | `$ lncli walletbalance` 218 | 219 | * Monitorate la vostra transazione su un explorer Blockchain. 220 | https://smartbit.com.au 221 | 222 | ### LND in azione 223 | 224 | Non appena la vostra transazione di finanziamento del nodo sarà stata minata e confermata, LND inizierà ad aprire e mantenere canali. Questa funzione è chiamata *Autopilot* ed é configurata nel file "lnd.conf". Se voleste mantenere i vostri canali manualmente, dovreste disabilitare *Autopilot*. 225 | 226 | Alcuni comandi da provare: 227 | 228 | * elencare tutti gli argomenti dell' interfaccia a linea di comando (cli): 229 | `$ lncli` 230 | 231 | * ottenere aiuto su uno specifico argomento: 232 | `$ lncli help [ARGUMENT]` 233 | 234 | * elencare alcune statistiche generali sul vostro nodo: 235 | `$ lncli getinfo` 236 | 237 | * connettersi ad un peer (potete trovare un elenco di nodi ai quali connettervi qui: https://1ml.com/): 238 | `$ lncli connect [NODE_URI]` 239 | 240 | * controllare l'elenco dei nodi ai quali si é attualmente connessi: 241 | `$ lncli listpeers` 242 | 243 | * aprire un canale con un determinato nodo: 244 | `$ lncli openchannel [NODE_PUBKEY] [AMOUNT_IN_SATOSHIS] 0` 245 | *ricordatevi che il [NODE_URI] include @IP:PORT alla fine, mentre il [NODE_PUBKEY] non lo contiene* 246 | 247 | * controllate lo status dei vostri canali provvisori: 248 | `$ lncli pendingchannels` 249 | 250 | * controllate lo status dei vostri canali aperti e funzionanti: 251 | `$ lncli listchannels` 252 | 253 | * Prima di pagare una richiesta, dovreste decodificarla per verificare che l'ammontare e le altre informazioni siano corretti: 254 | `$ lncli decodepayreq [INVOICE]` 255 | 256 | * pagate una richiesta di pagamento: 257 | `$ lncli payinvoice [INVOICE]` 258 | 259 | * controllate lo status dei vsotri pagamenti inviati: 260 | `$ lncli listpayments` 261 | 262 | * create una richiesta di pagamento: 263 | `$ lncli addinvoice [AMOUNT_IN_SATOSHIS]` 264 | 265 | * elencate tutte le richieste di pagamento: 266 | `$ lncli listinvoices` 267 | 268 | * per chiudere un canale, avrete bisogno dei due seguenti argomenti che potranno essere determinati attraverso la funzione `listchannels` e sono elencati come "channelpoint": `FUNDING_TXID` : `OUTPUT_INDEX` . 269 | `$ lncli listchannels` 270 | `$ lncli closechannel [FUNDING_TXID] [OUTPUT_INDEX]` 271 | 272 | * per forzare la chiusura di un canale (se il vostro peer è offline o non cooperativo), usate 273 | `$ lncli closechannel --force [FUNDING_TXID] [OUTPUT_INDEX] ` 274 | 275 | 👉 consultate [LND API reference](http://api.lightning.community/) :gb: per informazioni addizionali 276 | 277 | ### Fate una prova 278 | Per provare il vostro nuovo nodo, potete provare ad inviare un micro pagamento a Stadicus su Y'all: 279 | [Article 'Beginner’s Guide to ️⚡Lightning️⚡ on a Raspberry Pi'](https://mainnet.yalls.org/articles/97d67df1-d721-417d-a6c0-11d793739be9:0965AC5E-56CD-4870-9041-E69616660E6F/70858a49-d91c-40fb-ae34-bddc2e938704) 280 | 281 | ### Esplorate la rete di produzione di Lightning mainnet 282 | Esistono un sacco di ottime risorse per esplorare la rete di produzione di Lightning. 283 | * [Casa Starmap Explorer](https://explore.casa/starmap): Lightning Network Map with Channel Capacity 284 | * [1ML](https://1ml.com): Lightning Network Search and Analysis Engine 285 | * [lnroute.com](http://lnroute.com): comprehensive Lightning Network resources list 286 | 287 | ### Fate parte della rete di Bitcoin! Avete appena conquistato la sovranità finanziaria! 288 | 289 | ![Siamo live!](images/09_03.Bitcoinnode.PNG) 290 | 291 | Potete verificare lo status del vostro nodo sul sito https://bitnodes.earn.com/ 292 | 293 | --- 294 | Avanti: [10.Bonus](10.Bonus.md) 295 | -------------------------------------------------------------------------------- /099.FAQ.md: -------------------------------------------------------------------------------- 1 | 2 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[***FAQ***](099.FAQ.md)] -- [[TO DO](999.2do.md)] 3 | 4 | ------- 5 | 6 | 7 | 8 | # FAQ 9 | 10 | ### D1) Posso diventare ricco indirizzando pagamenti Lightning? 11 | R1) Non lo sa nessuno. Probabilmente no, le fees sono minime, i nodi più grandi riescono ad incassare circa 50K satoshi al mese con le fees. Troppo poco. 12 | 13 | 14 | @alexbosworth ha un nodo LN con un commit di 10BTC, ed a gennaio 2019 ha [dichiarato un profitto](https://twitter.com/alexbosworth/status/1084166549307441153) di 1 mBTC (0.001). 15 | 16 | Il fatto è significativo in quanto lui stesso ha pubblicato un'interessante guida su come ottimizzare lo status del proprio nodo LN. 17 | 18 | [Alex Bosworth - Lightning channel Management](https://www.youtube.com/watch?v=HlPIB6jt6ww) :gb: 19 | 20 | Sempre Alex Bosworth ha scritto un [interessante tweet](https://twitter.com/alexbosworth/status/1102643785748570113) :gb: sostenendo che avere un nodo LN profittevole, ovvero che facia Routing di transazioni, non è equiparabile a girare un interruttore (es: averre un nodo Bitcoin), ma piuttosto al trading, ovvero ad assumersi dei rischi per massimizzare i profitti. 21 | 22 | ![tweet](images/099_01ABTweet.JPG) 23 | 24 | Personalmente credo che mettere su un canale LN sia un bellissimo esperimento, soprattutto se ti piace il tinkering, ma riguardo al ROE, meglio lasciar perdere. 25 | Non so neanche se dovessi essere lieto di essere smentito btw: se le fees su LN dovessero salire, verrebbe meno proprio la funzione di "digital cash per micropagamenti" che al momento LN ambisce a vole assumere. Una delle delle promesse e condizioni per il successo di LN è proprio la risibilità delle fees. 26 | Ritengo che LN sia un’ottima cosa per l’ecosistema bitcoin, per diversi motivi: 27 | * scalabilità transazionale 28 | * digital cash 29 | * JENGA EFFECT-ogni layer secondario oltre al base layer di blockchain, contribuisce irrobustimento del rbase layer, appunto) 30 | 31 | 32 | Ma in fondo non ci importa! Siamo qui per divertirci! 33 | 34 | ### D2) Posso attaccare l'hard disk formattato con Ext4 al mio PC windows? 35 | R2) Il file system Ext4 non è compatibile con un Windows standard, ma con un software tipo [Linux File Systems](https://www.paragon-software.com/home/linuxfs-windows/#faq) di Paragon Software (è disponibile un periodo di free trial di 10 giorni) è possibile. 36 | 37 | ### D3) Come si usano questi comandi Linux? 38 | R3) Questa è una (molto) breve lista deo comandi Linux più usati. Per ciascun comando, potete inserire `man [command]` per avere la relativa pagina del manuale (potete uscire con `q`). 39 | 40 | | comando | descrizione | esempio | 41 | | -- | -- | -- | 42 | | `cd` | change to directory | `cd /home/bitcoin` | 43 | | `ls` | list directory content | `ls -la /mnt/hdd` | 44 | | `cp` | copy | `cp file.txt newfile.txt` | 45 | | `mv` | move | `mv file.txt moved_file.txt` 46 | | `rm` | remove | `rm temporaryfile.txt` 47 | | `mkdir` | make directory | `mkdir /home/bitcoin/newdirectory` 48 | | `ln` | make link | `ln -s /target_directory /link` 49 | | `sudo` | run command as superuser | `sudo nano textfile.txt` 50 | | `su` | switch to different user account | `sudo su bitcoin` 51 | | `chown` | change file owner | `chown bitcoin:bitcoin myfile.txt` 52 | | `chmod` | change file permissions | `chmod +x executable.script` 53 | | `nano` | text file editor | `nano textfile.txt` 54 | | `tar` | archive tool | `tar -cvf archive.tar file1.txt file2.txt` 55 | | `exit` | exit current user session | `exit` 56 | | `systemctl` | control systemd service | `sudo systemctl start bitcoind` 57 | | `journalctl` | query systemd journal | `sudo journalctl -u bitcoind` 58 | | `htop` | monitor processes & resource usage | `htop` 59 | | `shutdown` | shutdown or restart Pi | `sudo shutdown -r now` 60 | 61 | 62 | In più la linea di comando di Linux ha le seguenti scorciatoie: 63 | 64 | * **Auto completamento dei comandi**: Quando inserite un comando, potete usare il tasto TAB per l'auto completamento, ad esempio per comandi, nome di directories o di files. 65 | 66 | * **Cronologia dei comandi**: con la pressione dei tasti ⬆️ e ⬇️ sulla tastiera, potete scorrere la lista dei comandi inseriti precedentemente, e confermarli dando INVIO. 67 | 68 | * **Copia / Incolla**: Se state usando Windows e PuTTY come client SSH, potete copiare il testo dalla interfaccia di comando selezionandolo con il mouse (senza bisogno di alcun click) ed incollarlo nella posizione del cursore con un click del tasto destro ovunque nella finestra di SSH. 69 | 70 | 71 | 72 | ### D4) Che risorse online consigli su Bitcoin? 73 | 74 | R4) Il numero di risorse è sterminato, ma mi permetto di segnalarne qualcuna, sono tutte in inglese :gb: purtroppo: 75 | 76 | * :gb: https://bitcoin.org/en/full-node Guida ufficiale di Bitcoin Core su come gestire un nodo Bitcoin Core 77 | 78 | * :gb: https://www.youtube.com/watch?v=oX0Yrv-6jVs video di Andreas Antonopoulos sul perché è importante avere un nodo Bitcoin. 79 | 80 | * :gb: https://lopp.net/bitcoin.html Alcune risorse su Bitcoin proposte da Jameson Loop 81 | 82 | * :gb: https://medium.com/@lopp/who-controls-bitcoin-core-c55c0af91b8a Spiega efficacemente chi scriva il software che viene inserito nei nostri nodi, e di come il software sia sottoposto ad un rigoroso audit per evitare bugs, regressioni, o addirittura attacchi malevoli, il tutto in un'ottica trustless. 83 | 84 | * :gb: [What is Bitcoin?](https://bitcoinmagazine.com/guides/what-bitcoin) 85 | * :gb: [Understanding the Lightning Network](https://bitcoinmagazine.com/articles/understanding-the-lightning-network-part-building-a-bidirectional-payment-channel-1464710791/) 86 | * :gb: Lightning Network resources: [lnroute.com](http://lnroute.com) 87 | 88 | 89 | ### D5) Che libri consigli su Bitcoin? 90 | 91 | R5) Due sopra tutti: 92 | * [Mastering Bitcoin](https://github.com/bitcoinbook/bitcoinbook) di Andreas Antonopoulos. Un libro tecnico, che ci permetterà di capire esattamente come funzioni il protocollo bitcoin, padroneggiandone gli elementi più tecnici. 93 | 94 | * [The Bitcoin Standard](https://www.amazon.it/Bitcoin-Standard-Decentralized-Alternative-Central/dp/1119473861) di Saifedean Ammous: un'interessante analisi del bitcoin come moneta: sul perché sia una "buona moneta" secondo i dettami della scuola austriaca. Non ci si addentra negli aspetti tecnici del protocollo, ma in quelli "filosofici" e rilevanti dal punto di vista economico. 95 | 96 | 97 | ### D6) Come posso upgradare la versione di Bitcoin Core? 98 | R6) L'ultima versione del software può essere trovata sulla pagina Github del progetto Bitcoin Core. Assicuratevi di leggere le Release Notes, visto che queste possono contenere informazioni importanti sull'upgrade. 99 | 100 | https://github.com/bitcoin/bitcoin/releases 101 | 102 | * Magari prima volete creare un [backup del sistema](raspibolt_65_system-recovery.md). 103 | 104 | * Come utente "admin", arrestate i demoni lnd e bitcoind 105 | `$ sudo systemctl stop lnd` 106 | `$ sudo systemctl stop bitcoind` 107 | 108 | * Scaricate, verificate, estraete ed installate i binari di Bitcoin Core come descritto nella sezione [Bitcoin](07.Bitcoin.md) della guida. 109 | 110 | * Riavviate i demoni di sistema bitcoind e lnd 111 | `$ sudo systemctl start bitcoind` 112 | `$ sudo systemctl start lnd` 113 | 114 | ### D7) Come aggiorno LND? 115 | R7) Aggiornare LND non è mai semplice e può portare a molti problemi. Meglio leggere **sempre e per intero** le [LND release notes](https://github.com/lightningnetwork/lnd/releases/tag/v0.5-beta) per comprendere al meglio i cambiamenti. Quelle note inoltre coprono molti aspetti aggiuntivi e molte nuove funzionalità che qui non tratteremo, ma che sarebbe meglio conoscere. 116 | 117 | * Forse prima è meglio creare un [backup del sistema](raspibolt_65_system-recovery.md). 118 | 119 | * Mentre aggiornate, soprattutto se **aggiornate a LND 0.5**, vi suggerisco di chiudere i vostri canali prima, visto che ci sono stati parecchi casi di fondi bloccati che hanno richiesto molto lavoro con molte difficoltà per recuperare i fondi. 120 | 121 | * Con l'utente "admin" arrestate il demone 122 | `$ sudo systemctl stop lnd` 123 | 124 | * Se state aggiornando da una versione precedente alla v0.5, cancellate i file macaroon. 125 | `$ sudo rm /home/bitcoin/.lnd/*.macaroon` 126 | 127 | * Cancellate le cose inutili sull'HD, quindi scaricate, verificate ed installate gli ultimi binari LND. 128 | 129 | ``` 130 | $ cd /home/admin/download 131 | $ rm -f lnd-linux* manifest* pgp_keys.asc 132 | $ wget https://github.com/lightningnetwork/lnd/releases/download/v0.6.1-beta/lnd-linux-armv7-v0.6.1-beta.tar.gz 133 | $ wget https://github.com/lightningnetwork/lnd/releases/download/v0.6.1-beta/manifest-v0.6.1-beta.txt 134 | $ wget https://github.com/lightningnetwork/lnd/releases/download/v0.6.1-beta/manifest-v0.6.1-beta.txt.sig 135 | $ wget https://keybase.io/roasbeef/pgp_keys.asc 136 | 137 | $ sha256sum --check manifest-v0.6.1-beta.txt --ignore-missing 138 | > lnd-linux-armv7-v0.6.1-beta.tar.gz: OK 139 | 140 | $ gpg ./pgp_keys.asc 141 | > BD599672C804AF2770869A048B80CD2BB8BD8132 142 | 143 | $ gpg --import ./pgp_keys.asc 144 | $ gpg --verify manifest-v0.6.1-beta.txt.sig 145 | > gpg: Good signature from "Olaoluwa Osuntokun " [unknown] 146 | > Primary key fingerprint: BD59 9672 C804 AF27 7086 9A04 8B80 CD2B B8BD 8132 147 | > Subkey fingerprint: F803 7E70 C12C 7A26 3C03 2508 CE58 F7F8 E20F D9A2 148 | 149 | $ tar -xzf lnd-linux-armv7-v0.6.1-beta.tar.gz 150 | $ sudo install -m 0755 -o root -g root -t /usr/local/bin lnd-linux-armv7-v0.6.1-beta/* 151 | $ lnd --version 152 | > lnd version 0.6.1-beta commit=v0.6.1-beta 153 | ``` 154 | 155 | * A partire da questa release, LND si aspetta due differenti *sockets* ZMQ per i blocchi e le transazioni. Editate quindi `bitcoin.conf` di conseguenza, salvate ed uscite. 156 | ``` 157 | $ sudo nano /home/bitcoin/.bitcoin/bitcoin.conf 158 | zmqpubrawblock=tcp://127.0.0.1:28332 159 | zmqpubrawtx=tcp://127.0.0.1:28333 160 | ``` 161 | * L'opzione `debughtlc` è stata deprecata, quindi non è più permessa e deve essere cancellata (commentata). Editate il file `lnd.conf`, salvate ed uscite. 162 | ``` 163 | $ sudo nano /home/bitcoin/.lnd/lnd.conf 164 | #debughtlc=true 165 | ``` 166 | * Riavviate i servizi con le nuove configurazioni e sbloccate il portafoglio con l'utente "bitcoin". Questo creerà automaticamente un nuovo set di file macaroons (come spiegato sotto). 167 | ``` 168 | $ sudo systemctl restart bitcoind 169 | $ sudo systemctl restart lnd 170 | $ sudo su - bitcoin 171 | $ lncli unlock 172 | $ exit 173 | ``` 174 | 175 | I file macaroons sono ora salvati sotto la directory dei dati della chain del relativo network.Per esempio, i macaroon dell'utente admin sulla rete di produzione si trovano in: 176 | `/home/bitcoin/.lnd/data/chain/bitcoin/mainnet/admin.macaroon` 177 | 178 | * Copiate il nuovo set di macaroons per l'utente *admin*, altrimenti questo utente non potrà usare la `lncli`. Attenzione: la nuova posizione dei file macaroon deve essere recepita nello [script di auto-unlock](https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_6A_auto-unlock.md) che potreste stare usando. 179 | * Per la **mainnet** usate questi comandi: 180 | ``` 181 | $ rm /home/admin/.lnd/admin.macaroon 182 | $ mkdir -p /home/admin/.lnd/data/chain/bitcoin/mainnet/ 183 | $ sudo cp /home/bitcoin/.lnd/data/chain/bitcoin/mainnet/admin.macaroon /home/admin/.lnd/data/chain/bitcoin/mainnet/ 184 | $ sudo cp /home/bitcoin/.lnd/tls.cert /home/admin/.lnd 185 | $ sudo chown -R admin:admin /home/admin/.lnd 186 | $ lncli getinfo 187 | ``` 188 | 189 | * Se siete su **testnet**, usate gli stessi comandi, ma sostituite la directory "mainnet" con "testnet". Avrete anche bisogno di usare sempre il comando `lncli --network=testnet `, quindi per esempio `lncli --network=testnet getinfo`. Controllate le [release notes](https://github.com/lightningnetwork/lnd/releases) su come creare degli alias per evitare di dover riscrivere ogni volta questi comandi. 190 | 191 | * Non dimenticate di sbloccare i wallet e controllare i log 192 | `$ lncli unlock` 193 | `$ sudo journalctl -u lnd -f` 194 | 195 | ### D8) Perché ho bisogno della versione a 32 bit di Bitcoin se io ho un Raspberry Pi 3 con un processore a 64 bit? 196 | 197 | R8) Al momento (Dec 2018) non è ancora stato sviluppato e sufficientemente testato un sistema operativo a 64 bit per il Raspberry Pi. Il processore a 64 bit del Raspberry 3 quindi gira in modalità compatibilità a 32 bit i sistemi operativi a 32 bit. 198 | 199 | 200 | 201 | ### D9) Questa guida è bellissima, ma non ho tempo e/o capacità. Voglio avere la vita ancora più semplice. Cosa mi consigli? 202 | 203 | R9) Se vuoi avere la pappa pronta, hai le risorse hardware per avere un nodo, ma non il tempo/voglia, allora ti consiglio alcune alternative. 204 | 205 | Ho provato ad ordinarle dalla più Plug&Play a quella più "difficile": 206 | 207 | * [Nodo Bitcoin di Casa](https://store.casa/lightning-node/): ancora più semplice: è la prima soluzione Bitcoin Node Plug&Play: basta attaccare la spina ed il cavo di rete (o quasi) per avere un nodo bitcoin e lightning perfettamente funzionante in pochi minuti (la blockchain è già sinconizzzata fino al momento della spedizione). Fondamentalmente è un'installazione ultra customizzata di Bitcoin Core su un Raspberry PI. 208 | 209 | * [Bitseed](https://bitseed.org/): una soluzione per certi versi simile a quella di CASA, ma basata su un Hardware diverso e più potente. Il sistema operativo è UBUNTU, quindi sono disponibili diverse applicazioni, che comunque vengono rette agevolmente dall'hardware. In questa soluzione non è presente la blockchain, che quindi dovrà essere scaricata interamente dall'utente. 210 | 211 | * [Node Launcher](https://github.com/PierreRochard/node-launcher): progetto di @pierre_rochard: setup automatico di un nodo Bitcoin+LND avendo a disposzione un PC da dedicarvi. 212 | 213 | * [Raspiblitz](https://github.com/rootzoll/raspiblitz): una guida per certi versi simile a questa, sempre basata su Raspberry, con il vantaggio di avere già il software configurato e pronto all'uso. Il nodo può essere configurato, in pochi click, e può essere up&running in poche ore (per lo più passate ad aspettare che termini il download della blockchain-se ci si accontenta di scaricarla da un file torrent **con i soliti caveat che questa scelta**, facolativa ad ogni modo, **comporta**) 214 | 215 | A proposito di Raspiblitz, Riccardo Masutti sta mettendo online alcuni video sull'installazione di un nodo Raspberry basato su Raspiblitz. 216 | Potete trovare il primo video [qui](https://youtu.be/4cDNKfdkllM) 217 | 218 | 219 | 220 | -------------------------------------------------------------------------------- /08.Lightning.md: -------------------------------------------------------------------------------- 1 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[Configurazione Software Nodo](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 2 | 3 | ------- 4 | 5 | # Lightning: LND 6 | *Attivato il nodo bitcoin, attiviamo il nodo Lightning Network* 7 | 8 | 9 | Scaricheremo ed installeremo il LND (Lightning Network Daemon) by [Lightning Labs](http://lightning.engineering/). Potete trovare tutta la documentazione relativa sul protocollo Lightning in generale e sulla loro specifica implementazione open source sul loro [repository Github](https://github.com/lightningnetwork/lnd/blob/master/README.md) :gb: . 10 | 11 | Scarichiamo, verifichiamo le firme, ed installiamo il software dal GitHub ufficiale. 12 | Olaoluwa Osuntokun @roasbeef è il CTO di Lightning Labs 13 | 14 | ``` 15 | $ cd /home/admin/download 16 | $ rm -rf /home/admin/download/* 17 | $ wget https://github.com/lightningnetwork/lnd/releases/download/v0.9.1-beta/lnd-linux-armv7-v0.9.1-beta.tar.gz 18 | $ wget https://github.com/lightningnetwork/lnd/releases/download/v0.9.1-beta/manifest-v0.9.1-beta.txt 19 | $ wget https://github.com/lightningnetwork/lnd/releases/download/v0.9.1-beta/manifest-v0.9.1-beta.txt.sig 20 | $ wget https://keybase.io/roasbeef/pgp_keys.asc 21 | 22 | $ sha256sum --check manifest-v0.9.1-beta.txt --ignore-missing 23 | > lnd-linux-armv7-v0.9.1-beta.tar.gz: OK 24 | 25 | $ gpg ./pgp_keys.asc 26 | > BD599672C804AF2770869A048B80CD2BB8BD8132 27 | 28 | $ gpg --import ./pgp_keys.asc 29 | $ gpg --verify manifest-v0.9.1-beta.txt.sig 30 | 31 | > gpg: Good signature from "Olaoluwa Osuntokun " [unknown] 32 | > Primary key fingerprint: BD59 9672 C804 AF27 7086 9A04 8B80 CD2B B8BD 8132 33 | > Subkey fingerprint: F803 7E70 C12C 7A26 3C03 2508 CE58 F7F8 E20F D9A2 34 | 35 | $ tar -xzf lnd-linux-armv7-v0.9.1-beta.tar.gz 36 | $ sudo install -m 0755 -o root -g root -t /usr/local/bin lnd-linux-armv7-v0.9.1-beta/* 37 | $ lnd --version 38 | > lnd version 0.9.1-beta commit=v0.9.1-beta 39 | ``` 40 | ![Checksum LND](images/08_01.CheckSig.PNG) 41 | 42 | ### Configurazione di LND 43 | Ora che LND è installato, dobbiamo prima di tutto configurarlo per poter funzionare con Bitcoin Core e successivamente abilitarne l'avvio automatico in fase di *startup*. 44 | 45 | * Ancora collegati come utente *Admin*, create un link simbolico al file binario `ip` che si trova nella directory `/bin/ip`, visto che sembra che LND fatichi a trovarlo in qualche caso. 46 | 47 | `$ sudo ln -s /bin/ip /usr/bin/ip` 48 | 49 | * Aprite una sessione utente "bitcoin" 50 | `$ sudo su - bitcoin` 51 | 52 | * Create la directory di lavoro per LND ed il corrispondente link simbolico 53 | `$ mkdir /mnt/hdd/lnd` 54 | `$ ln -s /mnt/hdd/lnd /home/bitcoin/.lnd` 55 | `$ ls -la` 56 | 57 | ![Check symlink LND](images/08_02.lsla.PNG) 58 | 59 | * Create il file di configurazione LND ed incollate il codice seguente (cambiatelo nella parte rilevante per adattarlo al vostro alias). 60 | Salvate ed uscite. 61 | 62 | `$ nano /home/bitcoin/.lnd/lnd.conf` 63 | 64 | ```bash 65 | # Nodobitcoin: lnd configuration 66 | # /home/bitcoin/.lnd/lnd.conf 67 | 68 | [Application Options] 69 | debuglevel=info 70 | maxpendingchannels=5 71 | alias=IL_VOSTRO_NOME[LND] 72 | color=#68F442 73 | 74 | # Se il vostro router supporta ed ha UPnP attivo inserite la seguente linea, altrimenti commentatela 75 | nat=true 76 | 77 | [Bitcoin] 78 | bitcoin.active=1 79 | 80 | # Abilitate la testnet o la mainnet di bitcoin 81 | bitcoin.testnet=1 82 | #bitcoin.mainnet=1 83 | 84 | bitcoin.node=bitcoind 85 | 86 | [autopilot] 87 | autopilot.active=1 88 | autopilot.maxchannels=5 89 | autopilot.allocation=0.6 90 | ``` 91 | Qualche spiegazione su questa configurazione: 92 | 93 | * L'opzione di configurazione **nat=true** implica che il vostro router sia compatibile con Universal Plug'n'Play (UPnP) e lo abbia abilitato. Questo permette al nodo LND di rendere il vostro nodo raggiungibile dall'esterno della vostra rete configurando automaticamente il port forwarding, annunciando il vostro indirizzo IP esterno ed aggiornando questa informazione se il vostro IP cambia. Questa è al momento l'unica configurazione affidabile per avere un nodo LND che faccia routing delle transazioni esterne. 94 | 95 | **Se il vostro router non supporta UPnP**, LND funzionerà ugualmente, ma il vostro nodo sarà un nodo privato solo per i vostri pagamenti e non sarà in grado di indirizzare pagamenti per altri. In questo caso, dovrete cancellare la riga `nat=true` nel file di configurazione sopra, altrimenti LND non si avvierà. Un'altra opzione è quella di passare il vostro indirizzo IP all'avvio di LND (consultate questa [guida esterna :gb:](https://github.com/robclark56/RaspiBolt-Extras/blob/master/RB_extra_02.md)). 96 | 97 | * La configurazione riportata sopra ha **autopilot** abilitato ed aprirà automaticamente fino a **5** canali con il **60%** dei vostri fondi. Potete in ogni caso aggiustare queste configurazioni a vostro piacimento. Con `autopilot.active=0` potete disabilitare completamente l'autopilot e gestire i vostri canali interamente in modalità manuale. 98 | 99 | :point_right: Informazioni supplementari: [sample-lnd.conf](https://github.com/lightningnetwork/lnd/blob/master/sample-lnd.conf) nel repository del progetto LND :gb: 100 | 101 | ### Avviate LND 102 | 103 | Come per la parte Bitcoin, prima cambiamo l'utente attivo in *bitcoin*, successivamente avviamo il programma manualmente per controllare che tutto funzioni correttamente. 104 | 105 | ``` 106 | $ sudo su - bitcoin 107 | $ lnd 108 | ``` 109 | 110 | Il demone LN stampa le proprie informazioni di status direttamente nella linea di comando. Questo significa che non possiamo usare questa sessione senza fermare il server. Dobbiamo quindi aprire una seconda sessione SSH. 111 | 112 | 113 | ### Setup del wallet LND 114 | 115 | Avviate il vostro programma SSH (es. PuTTY) una seconda volta, connettetevi al Pi e loggatevi come "admin". I comandi per la **seconda sessione** saranno evidenziati con `$2` (che non dovrete inserire nella riga di comando, naturalmente). 116 | 117 | Una volta che LND si è avviato, il processo aspetta che venga creato il portafoglio Bitcoin integrato (non userà difatti il portafoglio del demone "bitcoind"). 118 | 119 | * Avviate una sessione utente *bitcoin* (dalla seconda sessione quindi) 120 | `$2 sudo su - bitcoin` 121 | 122 | * Create il wallet LND 123 | 124 | `$2 lncli --network=testnet create` 125 | 126 | * Se volete creare un nuovo wallet, inserite la vostra `password [C]` come password del portafoglio e selezionate `n` come risposta alla domanda riguardo al seed, in quanto non lo avete e volete crearne uno nuovo, ed infine inserite la password opzionale `password [D]` come password per generare il nuovo seed. Questo creerà un nuovo seed da 24 parole. 127 | 128 | ![LND new cipher seed](images/08_03.LNDpassword.PNG ) 129 | 130 | Queste 24 parole, assieme alla vostra password (la password opzionale `password [D]`) è tutto ciò di cui avrete bisogno in caso dobbiate recuperare il vostro portafoglio Bitcoin e tutti i canali Lightning. Lo stato attuale dei canali, invece, non potrà essere ricreato da questo seed: questo richiede un backup continuo ed è ancora in sviluppo da parte di LND. 131 | 132 | :warning: La passphrase deve essere tenuta segreta! **Scrivete queste 24 parole su un pezzo di carta e conservatele in un luogo sicuro.** Questo pezzo di carta è tutto ciò che serve ad un agente malevolo a sottrarvi i vostri fondi! Non conservatelo in chiaro su un computer, non fate una foto con il vostro telefonino. **Questa stringa di parole non dovrebbe mai essere conservata da nessuna parte in modo digitale.** Applicate in pratica tutte le cure che applicate per la conservazione del seed del vostro portafoglio Bitcoin principale 133 | 134 | * Uscite dalla sessione utente *bitcoin* 135 | `$2 exit` 136 | 137 | Autorizziamo l'utente "admin" a lavorare con LND usando l'interfaccia a riga di comando `lncli`. Per far sì che questo funzioni, dobbiamo copiare il certificato del Transport Layer Security (TLS- Sicurezza dello Strato di Trasporto) ed i file di permesso (macaroons) nella directory home dell'utente "admin". 138 | 139 | * Controllate che i certificati TLS siano stati creati 140 | `$2 sudo ls -la /home/bitcoin/.lnd/` 141 | 142 | * Controllate che i file di permesso `admin.macaroon` e `readonly.macaroon` siano stati creati. 143 | `$2 sudo ls -la /home/bitcoin/.lnd/data/chain/bitcoin/testnet/` 144 | 145 | ![Macaroon](images/08_04.LNDsetup.PNG) 146 | 147 | * Copiate i macaroons ed il certificato TLS nella directory home di "admin" 148 | `$2 cd /home/bitcoin/` 149 | `$2 sudo cp --parents .lnd/data/chain/bitcoin/testnet/admin.macaroon /home/admin/` 150 | `$2 sudo cp /home/bitcoin/.lnd/tls.cert /home/admin/.lnd` 151 | `$2 sudo chown -R admin:admin /home/admin/.lnd/` 152 | 153 | * Assicuratevi che l'interfaccia da riga di comando `lncli` funzioni sbloccando il portafoglio (utilizzate la vostra `password [C]` ) e interrogando il nodo su alcune informazioni di base. 154 | `$2 lncli --network=testnet unlock` 155 | * Controllate lo stato corrente del nodo LND 156 | 157 | `$2 lncli --network=testnet getinfo` 158 | 159 | ![Informazioni sul Nodo LND!](images/08_05.LNDGetinfo.PNG) 160 | 161 | Potete anche vedere il progresso della sincronizzazione iniziale di LND con Bitcoin nella prima sessione SSH. 162 | 163 | Controllate che nel dump a schermo siano presenti le seguenti linee per assicurarvi che il port forwarding abbia avuto successo con UPnP. Se LND non riesce a configurare il router (nel caso quest'ultimo non supporti UPnP, per esempio), il nodo funzionerà ugualmente, ma non sarà in grado di effettuare il routing di transazioni di altri partecipanti al network. 164 | 165 | ``` 166 | [INF] SRVR: Scanning local network for a UPnP enabled device 167 | [INF] SRVR: Automatically set up port forwarding using UPnP to advertise external IP 168 | ``` 169 | 170 | Fermiamo un attimo il server e torniamo ad occuparci della prima sessione SSH. 171 | 172 | * `$2 lncli --network=testnet stop` 173 | * `$2 exit` 174 | 175 | Questo arresterà LND in modo corretto nella prima sessione SSH, in modo che questa possa essere nuovamente utilizzata. 176 | 177 | ### Autostart di LND 178 | 179 | Impostiamo LND in modo che parta automaticamente con lo startup del sistema. 180 | 181 | * Uscite dalla sessione utente *bitcoin* per tornare ad *Admin* 182 | 183 | `$ exit` 184 | * Create un file di configurazione per il demone LND systemd con il seguente contenuto 185 | 186 | `$ sudo nano /etc/systemd/system/lnd.service` 187 | 188 | ```bash 189 | # NodoBitcoin: configurazione systemd per lnd 190 | # /etc/systemd/system/lnd.service 191 | 192 | [Unit] 193 | Description=LND Lightning Daemon 194 | Wants=bitcoind.service 195 | After=bitcoind.service 196 | 197 | [Service] 198 | ExecStart=/usr/local/bin/lnd 199 | 200 | User=bitcoin 201 | Group=bitcoin 202 | Type=simple 203 | KillMode=process 204 | LimitNOFILE=128000 205 | TimeoutSec=240 206 | Restart=always 207 | RestartSec=60 208 | 209 | [Install] 210 | WantedBy=multi-user.target 211 | ``` 212 | 213 | Salvate ed uscite. 214 | 215 | `Ctrl - O` 216 | 217 | `Ctrl - X` 218 | 219 | 220 | * Abilitate, avviate e sbloccate LND 221 | 222 | `$ sudo systemctl enable lnd` 223 | `$ sudo systemctl start lnd` 224 | `$ systemctl status lnd` 225 | `$ lncli --network=testnet unlock` 226 | 227 | Ora il demone non mostrerà più le informazioni a schermo sulla linea di comando, ma saranno registrate nel registro di sistema. Potrete monitorare il progresso dell'avvio di LND fino a quando non sarà sincronizzato con la blockchain di testnet (circa 1.3 milioni di blocchi al momento). Saranno necessarie fino a due ore, dopo di che vedrete un sacco di scritte veloci (uscite con Ctrl-C). 228 | 229 | `$ sudo journalctl -f -u lnd` 230 | 231 | ![Startup log di LND!](images/08_06.LNDStartup.PNG) 232 | 233 | 234 | 235 | ### Otteniamo qualche Bitcoin Testnet 236 | 237 | Ora è tutto pronto, Bitcoin Core e nodo Lightning Network. Possiamo quindi iniziare ad impratichirci. Per fare questo avremo bisogno di Bitcoin sulla rete testnet: possiamo averli da un *faucet* (letteralmente: "rubinetto") 238 | 239 | 240 | * Generate un indirizzo Bitcoin per ricevere fondi sulla blockchain 241 | 242 | `$ lncli --network=testnet newaddress np2wkh` 243 | `> "address": "2NCoq9q7............dkuca5LzPXnJ9NQ"` 244 | 245 | * Mandate dei Bitcoin di Testnet al vostro indirizzo: 246 | https://testnet-faucet.mempool.co 247 | 248 | * Controllate il saldo del vostro wallet LND 249 | `$ lncli --network=testnet walletbalance` 250 | 251 | * Monitorate le vostre transazioni (il *faucet* mostra l'identificativo della transazione, TX ID) su un Blockchain explorer: 252 | https://testnet.smartbit.com.au 253 | 254 | ### LND in azione 255 | Non appena la vostra transazione per alimentare il nodo bitcoin è stata confermata, LND inizierà ad aprire e mantenere i canali. Questa feature è chiamata *Autopilot* ed è configurata nel file "lnd.conf". Se volete mantenere i canali in modalità manuale, disabilitate *Autopilot*. 256 | 257 | Procuratevi una richiesta di pagamento su [StarBlocks](https://starblocks.acinq.co/#/) o [Y’alls](https://yalls.org/) e muovete qualche bitcoin! 258 | 259 | * `$ lncli --network=testnet listpeers` 260 | * `$ lncli --network=testnet listchannels` 261 | * `$ lncli --network=testnet sendpayment --pay_req=lntb32u1pdg7p...y0gtw6qtq0gcpk50kww` 262 | * `$ lncli --network=testnet listpayments` 263 | 264 | 265 | ![Il primo pagamento del Nodo LND!](images/08_07.LNDPayment.PNG) 266 | 267 | :point_right: visitate il sito [Lightning API reference](http://api.lightning.community/) :gb: per tutte le informazioni di dettaglio 268 | 269 | ----- 270 | 271 | ### Upgrade di LND 272 | 273 | Se vorrete upgradare ad una nuova release di LND in futuro, controllate la sezione dedicata alle FAQ: 274 | [Come aggiornare LND](https://github.com/Fillippone/NodoBitcoinforDummies/blob/master/099.FAQ.md#d7-come-aggiorno-lnd) 275 | 276 | ----- 277 | 278 | ### Prima di procedere alla mainnet 279 | Questo è il punto di non ritorno. Fino ad ora si poteva benissimo ricominciare tutto da capo. Fate esperimenti con i bitcoin di testnet, aprite e chiudete canali sulla testnet. 280 | Una volta che passate sulla mainnet e manderete veri bitcoin con il vostro "nodo bitcoin", allora avrete la "Skin in the game" - "interessi in gioco") 281 | 282 | 283 | * Assicuratevi che il vostro RasPi funzioni come atteso. 284 | * Fate un pò di pratica con la `bitcoin-cli` e le relative opzioni (controllate [Bitcoin Core RPC documentation](https://bitcoin-rpc.github.io/)) 285 | * Fate esperimenti con la `lncli` e le sue varie opzioni (consultate le [Lightning API reference](http://api.lightning.community/)) :GB: 286 | * Provate a fare qualche *restart* (`sudo shutdown -r now`): funziona tutto come vi sareste aspettati? 287 | 288 | Se sì, possiamo andare avanti 289 | 290 | --- 291 | Avanti: [9.Mainnet](09.Mainnet.md) 292 | -------------------------------------------------------------------------------- /06.Configurazione_RaspberryPi.md: -------------------------------------------------------------------------------- 1 | [[Introduzione](README.md)] -- [[Perché avere un nodo Bitcoin](01.Perchè_avere_un_nodo_Bitcoin.md)] -- [[Preparativi](02.Preparativi.md)] -- [[Configurazione Iniziale da PC](03.Configurazione_iniziale_dell'Hardware.md)] -- [[Preparazione Software Raspberry PI](04.Configurazione_Iniziale_dell'Hardware_RaspberryPI.md )] -- [[Assemblaggio Hardware Nodo](05.Assemblaggio_Hardware_del_nodo.md)] -- [[***Configurazione Software Nodo***](06.Configurazione_RaspberryPi.md)] -- [[Bitcoin](07.Bitcoin.md)] -- [[Lightning](08.Lightning.md)] -- [[Mainnet](09.Mainnet.md)] -- [[Bonus](10.Bonus.md)]-- [[FAQ](099.FAQ.md)] -- [[TO DO](999.2do.md)] 2 | 3 | ------- 4 | 5 | 6 | 7 | # Raspberry Pi 8 | *Configuriamo il RasPi perché possa far girare al meglio il software Bitcoin Core* 9 | 10 | ## Scegliamo delle password 11 | Avrete bisogno, nel prosieguo di questa guida di molte password; il metodo migliore è quello di stabilirle tutte all'inizio del percorso, e poi "riciclandole" nel modo più opportuno durante il percorso. Dovrebbero essere password uniche (possiamo riutilizzare all'interno del Nodo alcune password, ma sconsiglio di usare password già utilizzate per altri scopi), e sicure: dovrebbero essere lunghe 12 caratteri ricordatevi però di **non usare caratteri speciali poco comuni e facili da confondere**, spazi o virgolette (‘ o “). 12 | ``` 13 | [ A ] Master user password 14 | [ B ] Bitcoin RPC password 15 | [ C ] LND wallet password 16 | [ D ] LND seed password (optional) 17 | ``` 18 | ![xkcd: Password Strength](images/06_01.xkcd_password_strength.png) 19 | 20 | Se avete bisogno di ispirazione per creare una nuova password potete ispirarvi alla striscia [xkcd: Password Strength](https://xkcd.com/936/). Oltre ad essere molto divertente contiene molta saggezza. Scrivete le password da qualche parte di sicuro (l'ideale sarebbe un password manager tipo [KeePass](https://keepass.info/) o [1Password](https://1password.com/)) e tenete al riparo da occhi indiscreti i vostri appunti una volta che il sistema è up&running. 21 | 22 | Siamo finalmente pronti ad accendere per la prima volta il Raspberry Pi. Colleghiamo il nodo alla spina, il Pi si avvia! 23 | 24 | 25 | 26 | "Dagli vita, dagli vita alla mia creatura!!" (Frederick Frankenstein) 27 | 28 | ## Colleghiamo il Raspberry Pi alla rete 29 | Quando il Pi viene collegato alla rete domestica gli verrà assegnato un indirizzo dal router, questo indirizzo varierà ogni volta che il Pi si ricollega alla rete. Perché però il Pi sia raggiungibile dall'esterno in sicurezza e per rendere più facili le operazioni di amministrazione dovremo dotarlo di un indirizzo statico, ovvero dovremo obbligate il router ad assegnargli sempre il medesimo indirizzo LAN. Dovremo quindi configurare il router in tal senso. 30 | 31 | ### Accedere al Router 32 | Dovremo quindi accedere al router per configurare l'indirizzo statico del Pi: a seconda della configurazione domestica questo potrà essere il modem di rete dell'operatore telefonico o un punto di accesso Wifi, o entrambi addirittura. Dovremo quindi prima trovare l'indirizzo di rete associato al router stesso: 33 | 34 | * avviamo il prompt dei comandi da un computer connesso alla rete domestica (in Windows, digitate cmd direttamente in una barra di ricerca, e date Invio) 35 | * inserite il comando `ipconfig` e poi Invio 36 | * cercate “Default Gateway” e prendete nota dell'indirizzo(es: “192.168.0.1") 37 | 38 | :point_right:per avere più informazioni: [come accedere al vostro router](https://www.robadainformatici.it/trovare-indirizzo-ip-router-gateway/). 39 | 40 | Ora potete accedere al vostro router tramite il browser, digitando l'indirizzo del router medesimo come un indirizzo web qualsiasi. Probabilmente vi chiederà un'utenza di admin ed una password. 41 | 42 | :point_right: Se non conoscete la password del router provate [routerpasswords.com](http://www.routerpasswords.com/) :uk: . 43 | :warning: Se avete ancora la password di default è arrivato il momento di cambiarla! 44 | 45 | 46 | Ora che siete collegati dovreste trovare facilmente una sezione dove siano elencati tutti i dispositivi collegati alla rete domestica. Dovrebbe essercene un chiamato “raspberrypi”, con associato il proprio indirizzo IP locale (es. “192.168.0.240” o "10.0.0.15" come nel mio caso). 47 | 48 | ![Router client list](images/06_02.AttachedDevices.PNG) 49 | 50 | 51 | 52 | ### Configuriamo l'indirizzo di rete statico 53 | 54 | Ora dovremo fare in modo che il router assegni al Raspberry Pi un indirizzo di rete costante (IP statico). Di solito potete trovare questo settaggio sotto "DHCP server". L'indirizzo manuale dovrebbe essere il medesimo dell'indirizzo corrente, con solo l'ultima parte dell'indirizzo configurata su un numero inferiore(es: da 192.168.0.240 → 192.168.0.20, nel mio caso 10.0.0.15 è già sufficientemente basso, quindi lo fisserò a questo livello). 55 | 56 | :point_right: Avete bisogno di maggior informazioni? Cercate ["configurare indirizzo ip statico dhcp"](https://duckduckgo.com/?q=configurare+indirizzo+ip+statico+dhcp&t=h_&ia=web) aggiungendo alla ricerca il vostro modello di Router. 57 | 58 | ### Port Forwarding / UPnP 59 | 60 | Ora dobbiamo fare in modo che il traffico in arrivo nella vostra rete venga indirizzato al dispositivo giusto: applicazioni differenti usano porte differenti, quindi il router deve sapere a quale dispositivo della rete domestica deve indirizzare il traffico in arrivo su una specifica porta. Per fare questo dovremo configurare correttamente il “Port Forwarding” ("Inoltro Porte" in italiano). 61 | 62 | Il port forwarding deve essere configurato come segue: 63 | 64 | | Applicazione | Porta Esterna | Porta Interna |Indirizzo IP interno | Protocollo (TCP o UDP)| 65 | | ---------------- | ------------- | ------------- | ------------------- | --------------------- | 66 | | bitcoin | 8333 | 8333 | 10.0.0.15 | TCP + UDP | 67 | | bitcoin test | 18333 | 18333 | 10.0.0.15 | TCP + UDP | 68 | 69 | :point_right: Informazioni addizionali: [configurare il port forwarding](https://www.aranzulla.it/come-aprire-le-porte-del-router-31808.html). 70 | 71 | ![Port Forwarding](images/06_03.PortForwarding.PNG) 72 | 73 | :point_right: Se volete effettuare un test della corretta apertura delle porte controllate con questo [Test](https://ping.eu/port-chk/) 74 | 75 | Il demone del Lightning network (LND) supporta **UPnP** per configurare il port forwarding automaticamente e per pubblicizzare il suo IP esterno al network: dovremo quindi abilitare questo protocollo di connessione. 76 | 77 | * Abilitare UPnP sul router. 78 | 79 | :point_right: Se non sapete come fare ad abilitare l'UPnP sul vostro router, cercate ["abilitare upnp sul router"](https://duckduckgo.com/?q=abilitare+upnp+router+&t=h_&ia=web) specificando il vostro modello di Router. 80 | 81 | Salvate ed applicate le impostazioni del router, le controlleremo in ogni modo in seguito. Scollegate il Raspberry Pi dalla corrente per qualche secondo e ricollegatelo. Il nodo dovrebbe ora avere un indirizzo IP di rete statico. 82 | 83 | ![Fixed network address](images/06_04.DCHPAddress.PNG) 84 | 85 | ## Configuriamo il Raspberry Pi 86 | ### Introduzione alla riga di comando 87 | Lavoreremo sulla riga di comando del Pi, che potrebbe essere una novità per voi. Meglio allora riassumere alcune informazioni di base che ci aiuteranno a muoverci all'interno del sistema operativo ed ad interagire con il Pi. 88 | 89 | #### Inserire i comandi. 90 | Ogni volta che inseriremo un comando il Pi risponderà stampando a schermo i risultati nelle righe sotto il comando. Per rendere più chiaro quando inizi un comando, ogni comando in questa guida inizierà con un simbolo `$`. La risposta del sistema è marcata dal simbolo`>`. 91 | 92 | Nell'esempio seguente, inserite semplicemente `ls -la` e premete Invio: 93 | ``` 94 | $ ls -la 95 | > example system response 96 | ``` 97 | ![command ls -la](images/06_05.lsla.PNG) 98 | 99 | * **Auto-completamento dei comandi**: Mentre state inserendo i vostri comandi, potete usare il tasto `Tab` per l'autocompletamento per esempio di comandi, directories o nomi di file. 100 | 101 | * **Cronologia comandi**: premendo :arrow_up: o :arrow_down: sulla tastiera, potrete scorrere la cronologia dei comandi inseriti precedentemente. 102 | 103 | * **Comandi Linux comuni**: Per una lista dei principali comandi di Linux, potete fare riferimento alla pagina di [Domande Frequenti](raspibolt_faq.md). 104 | 105 | * **Usare i privilegi di admin**: L'utente che useremo di solito non ha privilegi di admin. Se un comando ha bisogno di editare la configurazione di sistema, avremo bisogno di usare il comando `sudo` ("superuser do") come prefisso del comando da eseguire. 106 | Ad esempio, invece di editare un file di sistema con `nano /etc/fstab`, useremo i privilegi di admin tramite la stringa `sudo nano /etc/fstab`. 107 | Per ragioni di sicurezza, l'utente "bitcoin" non sarà autorizzato ad usare il comando `sudo`. 108 | 109 | * **Usare l'editor di testo Nano**: Useremo l'editor di testo Nano per creare e salvare nuovi file di testo o modificare e salvare file di testo esistenti. Non è affatto complicato, l'unica attenzione deve essere data al processo di salvataggio ed uscita dall'editor: 110 | * Salvare: digitate `Ctrl-O` (per Output), confermate il nome del file, e date `Invio`. 111 | * Uscire: digitate `Ctrl-X` 112 | 113 | * **Copia / Incolla**: Se state usando un PC windows con il client SSH Putty (vedete sotto), potrete copiare il testo dalla shell selezionandolo con il mouse (non c'è motivo di cliccare da nessuna parte); potete poi incollare quanto copiato alla posizione del cursore con un click destro ovunque nella finestra ssh. 114 | 115 | ### Colleghiamoci al Pi 116 | Per collegarci al Pi per configurarlo dobbiamo collegarci tramite una connessione SSH (Secure SHell). Per fare questo avremo bisogno di un apposito client: 117 | 118 | - Windows: PuTTY ([Website](https://www.putty.org)) 119 | 120 | 121 | Installate, avviate e configurate la connessione SHH con i seguenti parametri: 122 | - host name: l'indirizzo statico del Pi che avrete configurato nel router, ad esempio `192.168.0.20` 123 | - port: `22` 124 | - username: `pi` 125 | - password: `raspberry`. 126 | 127 | ![login](images/06_06.ssh.PNG) 128 | 129 | :point_right: informazioni aggiuntive: [collegarsi al PI con SSH with Raspberry Pi](http://www.dallaf.it/simo/wp/2015/09/07/controllare-da-remoto-raspberry-pi-usando-ssh/) 130 | 131 | ### Raspi-Config 132 | Abbiamo quindi ora accesso alla riga di comando del nostro Pi. Dobbiamo però terminarne la configurazione prima di installare ed iniziare a far funzionare il nodo. 133 | L'obiettivo è aumentare il grado di sicurezza del nodo ed, essendo un dispositivo collegato alla rete 24/7, diminuire la superficie di attacco per eventuali malintenzionati. 134 | 135 | Per prima cosa accediamo al menù di configurazione generale e modifichiamo i settaggi basilari. 136 | 137 | Inseriamo i seguenti comandi: 138 | 139 | `$ sudo raspi-config` 140 | 141 | ![raspi-config](images/06_07.Raspiconfig.PNG) 142 | 143 | * Per prima cosa cambiamo la password di default, su `1` cambiate la password con la `password [A]` che abbiamo stabilito precedentemente. . 144 | * Aggiorniamo il software di configurazione con `8` 145 | * Settaggi di rete, Opzione `2`: 146 | * diamo al nodo un nome (come “NodoBitcoin”, premio nome originale 2018/2019), 147 | * inoltre possiamo configurare la connessione Wifi (solo Pi 3), non è obbligatorio. 148 | * Opzioni di Boot `3`: 149 | * scegliete `Desktop / CLI` → `Console` e quindi 150 | * `Wait for network at boot` 151 | * Localizzazione `4`: inserite il fuso orario corretto 152 | * Avanzate `7`: eseguite `Expand Filesystem` e configurate `Memory Split` su 16 153 | * Uscite selezionando `` e di seguito `` visto che non è necessario riavviare 154 | 155 | ### Software update 156 | È importante mantenere il sistema aggiornato con le patch di sicurezza e gli aggiornamenti delle applicazioni. Per questa tediosa operazione ci viene in soccorso l' “Advanced Packaging Tool” (apt): 157 | `$ sudo apt-get update` 158 | `$ sudo apt-get upgrade` 159 | 160 | :point_right: sarebbe meglio effettuare questa operazione regolarmente per assicurarsi di avere installate le ultime releases e patch di sicurezza. 161 | 162 | Assicuriamoci quindi di avere le ultime versioni di tutti i pacchetti software installati: 163 | `$ sudo apt-get install htop git curl bash-completion jq dphys-swapfile dirmngr --install-recommends` 164 | 165 | A questo punto vedrete il Pi scaricare tutti gli ultimi pacchetti ed aggiornare le installazioni: di solito non è necessario il riavvio. 166 | 167 | ### Aggiungere l'utente *admin* 168 | Questa guida considera come utente principale *admin*, proprio degli ambienti Linux, anziché l'utente *pi* caratteristico dei sistemi Raspberry: cerchiamo di essere più compatibile con un ambiente Linux generico. 169 | 170 | * Create il nuovo utente, configuriamo la password [A] ed aggiungiamolo al gruppo "sudo" 171 | `$ sudo adduser admin` 172 | `$ sudo adduser admin sudo` 173 | * Già che ci siamo, cambiamo la password dell'utente admin *root* con la solita password [A]. 174 | `$ sudo passwd root` 175 | * Riavviamo il Pi e colleghiamoci con il nuovo utente *admin* 176 | `$ sudo shutdown -r now` 177 | 178 | ### Aggiungiamo l'utente di servizio *bitcoin* 179 | Per ragioni di sicurezza i processi di bitcoin e di lightning verranno eseguiti in background (come *daemon*) ed useranno l'utente separato *bitcoin*. Questo utente non avrà prerogative di amministratore e non potrà cambiare le configurazioni di sistema. 180 | 181 | 182 | * Quando useremo il comando `sudo` , ci verrà richiesta talvolta la password di admin per aumentare il livello di sicurezza. 183 | * Inserite il seguente comando, configurate la `password [A]` e confermate tutte le domande con il tasto Invio. 184 | `$ sudo adduser bitcoin` 185 | 186 | ### Montiamo l'hard disk esterno 187 | Per archiviare la blockchain abbiamo bisogno di un sacco di spazio. Visto che si tratta di una installazione sever, il file system nativo di linux Ext4 è la miglior scelta per l'hard disk esterno, quindi formatteremo l'hard disk, cancellando tutti i dati presenti sull'hard disk stesso. L'hard disk esterno sarà quindi aggiunto al file system e vi si potrà accedere come una normale cartella (questo è quello che si definisce "montare" un disco esterno. 188 | 189 | :warning: **tutti i dati presenti sull'hard disk saranno cancellati!** 190 | 191 | * Se non lo avete ancora fatto, attaccate il disco esterno al nodo e dategli corrente (assemblaggio del nodo). 192 | 193 | * Troviamo il nome (NAME) della partizione principale del disco esterno 194 | `$ lsblk -o UUID,NAME,FSTYPE,SIZE,LABEL,MODEL` 195 | 196 | * Formattiamo il disco esterno con Ext4 (usate il [NAME] trovato sopra, es `/dev/sda1`) 197 | `$ sudo mkfs.ext4 /dev/[NAME]` 198 | 199 | * Copiate l'UUID che viene fornito come risultato del comando precedente nel Notepad del Windows locale del vostro PC. 200 | 201 | * Editate il file fstab ed inserite la riga sotto come una nuova riga alla fine del file (sostituite `UUID=123456` con l'UUID copiato sopra) 202 | `$ sudo nano /etc/fstab` 203 | `UUID=123456 /mnt/hdd ext4 rw,nosuid,dev,noexec,noatime,nodiratime,auto,nouser,async,nofail 0 2` 204 | 205 | 👉 informazioni addizionali su tutte le configurazioni e parametri di fstab: [Guida Completa di fstab](http://www.linuxstall.com/fstab) :uk: 206 | Salvate le modifiche ed uscite dall'editor 207 | 208 | `CTRL+O` 209 | 210 | `CTRL+X` 211 | * Create la directory dove montare l'hard disk e settatene il proprietario corretto 212 | 213 | `$ sudo mkdir /mnt/hdd` 214 | 215 | * Montate tutti i dischi e controllate il file system. Il folder “/mnt/hdd” è elencato? Dovrebbe esserlo! 216 | 217 | `$ sudo mount -a` 218 | `$ df /mnt/hdd` 219 | ``` 220 | Filesystem 1K-blocks Used Available Use% Mounted on 221 | /dev/sda1 479667880 73756 455158568 1% /mnt/hdd 222 | ``` 223 | * Settate il proprietario del disco 224 | `$ sudo chown -R bitcoin:bitcoin /mnt/hdd/` 225 | 226 | * Passate all'utente *bitcoin*, navigate sull'hard disk e create una bitcoin directory. 227 | `$ sudo su - bitcoin` 228 | `$ cd /mnt/hdd` 229 | `$ mkdir bitcoin` 230 | `$ ls -la` 231 | 232 | * Create un file di testo nella nuova directory e poi cancellatelo per controllare che sia tutto a posto. 233 | `$ touch bitcoin/test.file` 234 | `$ rm bitcoin/test.file` 235 | 236 | * Uscite dalla sessione utente *bitcoin*. 237 | `$ exit` 238 | 239 | Se questo comando vi da un errore, allora vi sono chances che il vostro Hard Disk sia montato come *read only*. Ovviamente dovremo correggere questo errore prima di procedere. Se non ce la fate provate a ripartire da zero in quest'ultima parte e formattare nuovamente da zero l'unità. 240 | 👉 informazioni addizionali: [external storage configuration](https://www.raspberrypi.org/documentation/configuration/external-storage.md) :uk: 241 | 242 | ### Spostare lo Swap File 243 | 244 | L'uso del file di swap sulla SD card può degradarne le prestazioni molto velocemente. Dovremo quindi muovere lo swap file sull'hard disk esterno. 245 | 246 | * Come user *admin*, cancelliamo il vecchio file di swap 247 | `$ sudo dphys-swapfile swapoff` 248 | `$ sudo dphys-swapfile uninstall` 249 | 250 | * Editiamo il file di configurazione e sostituiamo le vecchie entries con quelle configurate come sotto, dopodiché salvate ed uscite. 251 | `$ sudo nano /etc/dphys-swapfile` 252 | 253 | ``` 254 | CONF_SWAPFILE=/mnt/hdd/swapfile 255 | ``` 256 | Commentate o cancellate la linea CONF_SWAPSIZE. Sarà creata dinamicamente 257 | ``` 258 | #CONF_SWAPSIZE= 259 | ``` 260 | 261 | Salvate ed uscite 262 | 263 | `CTRL+O` 264 | 265 | `CTRL+X` 266 | 267 | * Creiamo manualmente un nuovo swap file 268 | `$ sudo dd if=/dev/zero of=/mnt/hdd/swapfile count=1000 bs=1MiB` 269 | `$ sudo chmod 600 /mnt/hdd/swapfile` 270 | `$ sudo mkswap /mnt/hdd/swapfile` 271 | 272 | * Abilitiamo la nuova configurazione swap 273 | `$ sudo dphys-swapfile setup` 274 | `$ sudo dphys-swapfile swapon` 275 | 276 | ## Irrobustiamo il Pi 277 | 278 | I passi seguenti necessitano i privilegi di admin e devono essere eseguiti dall'utente *admin*. 279 | 280 | ### Abilitiamo Uncomplicated Firewall 281 | Il Pi sarà visibile ed accessibile da internet e dovrà quindi essere messo in sicurezza contro gli attacchi, o per lo meno dovremo rendere la vita più difficile ad un attaccante. Un firewall è un software che controlla che tipo di traffico può arrivare al nostro RaspPi e quindi chiude possibili falle di sicurezza. 282 | 283 | Il comando riportato sotto `ufw allow from 10.0.0.0/24…` ipotizza che l'indirizzo IP nella rete locale del vostro RaspPi sia qualcosa del tipo `10.0.0.???`, dove la parte ??? rappresenta qualsiasi numero da 0 a 255 (questo esempio ricalca la mia configurazione di rete). Se l'IP del Raspberry fosse `12.34.56.78`, allora dovreste modificare la linea in `ufw allow from 12.34.56.0/24…`. 284 | ``` 285 | $ sudo apt-get install ufw 286 | $ sudo su 287 | $ ufw default deny incoming 288 | $ ufw default allow outgoing 289 | $ ufw allow from 10.0.0.0/24 to any port 22 comment 'allow SSH from local LAN' 290 | $ ufw allow proto udp from 10.0.0.0/24 port 1900 to any comment 'allow local LAN SSDP for UPnP discovery' 291 | $ ufw allow 9735 comment 'allow Lightning' 292 | $ ufw allow 8333 comment 'allow Bitcoin mainnet' 293 | $ ufw allow 18333 comment 'allow Bitcoin testnet' 294 | $ ufw enable 295 | $ systemctl enable ufw 296 | $ ufw status 297 | $ exit 298 | ``` 299 | ![UFW status](images/06_08.Ufw.PNG) 300 | 301 | :point_right: informazioni aggiuntive: [UFW Essentials](https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands) :gb: 302 | 303 | :point_right: Se vi trovate chiusi fuori per errore dovrete collegarvi fisicamente con uno schermo ed una tastiera al Pi e fare un login da locale per correggere le impostazioni (in particolare per la porta SSH 22). 304 | 305 | ### Fail2ban 306 | Dobbiamo proteggere in tutti i modi il login via SSH del Pi. Il firewall dovrebbe bloccare tutti i tentativi di login al di fuori del network, ma step addizionali dovrebbero essere presi per prevenire la possibilità che un attaccante, magari dall'interno della vostra rete, semplicemente provi tutte le possibili password (brute force attack - attacco con forza bruta). 307 | 308 | La prima contromisura è quella di installare “Fail2ban”, un servizio che impedisce ogni tentativo di accesso al sistema per dieci minuti dopo 5 tentativi di login non riusciti. Lo scopo di questo time out è proprio quello di penalizzare i tentativi a vuoto, rendendo quindi di fatto non praticabile i tentativi basati sulla forza bruta. 309 | 310 | ![fail2ban](images/06_09.Fail2Ban.PNG) 311 | 312 | 313 | *Oops ho sbagliato la password 5 volte* :wink: 314 | 315 | `$ sudo apt-get install fail2ban` 316 | 317 | La configurazione iniziale è assolutamente ok, non è necessario toccare nulla. Se proprio volete addentravi nei dettagli potete consultare il seguente link: :point_right: [settare la configurazione di fail2ban ](https://linode.com/docs/security/using-fail2ban-for-security/) :gb:. 318 | 319 | ### Login con le chiavi di sicurezza SSH 320 | 321 | Uno dei modi più robusti per rendere sicuro il login in SSH è quello di disabilitare completamente la password e di richiedere per il login un certificato SSH. Solo gli utenti con il possesso fisico del certificato potranno quindi effettuare il login. 322 | 323 | * Configuriamo le chiavi di accesso SSH per l'utenza *admin*: 324 | seguite questa semplice guida, in inglese [Configure “No Password SSH Keys Authentication” with PuTTY on Linux Servers](https://www.tecmint.com/ssh-passwordless-login-with-putty) :GB: 325 | 326 | Ora dovreste aver generato tre files. Teneteli al sicuro, ora andremo a disabilitare il login tramite password. 327 | 328 | ![SSH keys files](images/06_10.sshkeys.PNG) 329 | 330 | * Uscite dal sistema (`exit`) ed effettuate dei test per essere sicuri che riusciate a collegarvi con l'utenza *admin* con le vostre chiavi SSH. 331 | 332 | * Editiamo il file di configurazione SSH 333 | `$ sudo nano /etc/ssh/sshd_config` 334 | 335 | * Cambiamo i settaggi "ChallengeResponseAuthentication" e "PasswordAuthentication" a "no" (levate il commento alle linee di codice rimuovendo il simbolo # dove necessario) 336 | 337 | ![SSH config](images/06_11.sshconfig.PNG) 338 | 339 | * Salvate la configurazione ed uscite 340 | 341 | 342 | `CTRL+O` 343 | 344 | 345 | `CTRL+X` 346 | 347 | * Copiate la chiave SSH pubblica per l'utenza *root*, per prudenza. 348 | `$ sudo mkdir /root/.ssh` 349 | `$ sudo cp /home/admin/.ssh/authorized_keys /root/.ssh/` 350 | `$ sudo chown -R root:root /root/.ssh/` 351 | `$ sudo chmod -R 700 /root/.ssh/` 352 | `$ sudo systemctl restart ssh` 353 | 354 | * Uscite ed effettuate nuovamente il login. Ora non potrete più effettuare il login con le utenze *pi* o *bitcoin*, potrete usare solo *admin* e *root* che sono gli unici ad avere le necessari chiavi SSH. 355 | `$ exit` 356 | 357 | :warning: **Fate un backup sicuro delle vostre chiavi SSH!** Avrete bisogno di attaccare uno schermo ed una tastiera al vostro RasPi se le perderete. 358 | 359 | ### Aumentate il vostro limite di file aperti 360 | Nel caso il vostro Raspi sia travolto da una moltitudine di connessioni internet (oneste o financo malevole come nel caso di un attacco DDoS, incontrete rapidamente l'errore `can't accept connection: too many open files`. Questo è dovuto al limite dei file aperti (che non sono altro che singole connessioni tcp) che è impostato come troppo basso. 361 | 362 | Editate i seguenti tre files, aggiungete le linee addizionali appena prima del commento finale, dopodiché salvate ed uscite. 363 | 364 | ``` 365 | $ sudo nano /etc/security/limits.conf 366 | * soft nofile 128000 367 | * hard nofile 128000 368 | root soft nofile 128000 369 | root hard nofile 128000 370 | ``` 371 | 372 | 373 | 374 | ![Edit pam.d/limits.conf](images/06_12.filelimit.PNG ) 375 | 376 | 377 | 378 | ``` 379 | $ sudo nano /etc/pam.d/common-session 380 | session required pam_limits.so 381 | ``` 382 | 383 | 384 | ![Edit pam.d/common-session](images/06_13.pamlimits.PNG ) 385 | 386 | 387 | 388 | ``` 389 | $ sudo nano /etc/pam.d/common-session-noninteractive 390 | session required pam_limits.so 391 | ``` 392 | 393 | ![Edit pam.d/common-session-noninteractive](images/06_14.pamlimitssession.PNG ) 394 | 395 | Siamo ora pronti ad installare sul RasPI il software Bitcoin. 396 | 397 | --- 398 | Avanti: [7.Installiamo il software bitcoin](07.Bitcoin.md) 399 | --------------------------------------------------------------------------------