Bitcoin Knots
Instal·lem Bitcoin Knots, una implementació de client alternativa de la xarxa Bitcoin.
Preparacions
L’aplicació Bitcoin Knots s’executarà en segon pla com a dimoni i utilitzarà
l’usuari separat bitcoin
per motius de seguretat. Aquest usuari no té drets
d’administrador i no pot canviar la configuració del sistema.
Instal·leu dependències
Aquestes són dependències de construcció (es pot eliminar després de la instal·lació, si voleu)
$SU apk add --virtual .build-deps autoconf automake boost-dev clang chrpath \
file gnupg libevent-dev libtool make pkgconf zeromq-dev
Aquestes són dependències en temps d’execució
$SU apk add libevent libsodium libstdc++ libzmq
Creeu l’usuari/grup bitcoin
$SU addgroup -S bitcoin
$SU adduser \
-S \
-D \
-H \
-h /dev/null \
-s /sbin/nologin \
-G bitcoin \
-g bitcoin \
bitcoin
Afegiu també l’usuari satoshi
al grup bitcoin
$SU adduser satoshi bitcoin
Afegiu l’usuari bitcoin
al grup tor
Això permet a l’usuari bitcoin
utilitzar el port de control i configurar Tor
directament
$SU adduser bitcoin tor
Creeu un enllaç simbòlic bitcoin a la casa de satoshi
ln -s /var/lib/bitcoind "$HOME/.bitcoin"
Instal·lació
A Bitcoin Knots >25.1 tots els filtres d‘“spam” estan actualitzats
Baixem l’últim codi font de Bitcoin Knots i comparem aquest fitxer amb la suma de verificació signada i marcada amb l’hora. Aquesta és una precaució per assegurar-nos que es tracta d’una versió oficial i no d’una versió maliciosa que intenta robar-nos els diners.
Descarrega el codi font
- Inicieu sessió com a
satoshi
i canvieu a un directori temporal que s’esborrarà en reiniciar
cd /tmp
- Establiu una variable d’entorn de versió temporal a la instal·lació
VERSION=27.1.knots20240801
- Obteniu el codi font i les signatures més recents
wget https://bitcoinknots.org/files/${VERSION%%.*}.x/$VERSION/bitcoin-$VERSION.tar.gz \
https://bitcoinknots.org/files/${VERSION%%.*}.x/$VERSION/SHA256SUMS \
https://bitcoinknots.org/files/${VERSION%%.*}.x/$VERSION/SHA256SUMS.asc
Comprovació de la suma de comprovació
- Comproveu que la suma de comprovació de referència del fitxer
SHA256SUMS
coincideixi amb la suma de comprovació calculada per vosaltres
grep bitcoin-$VERSION.tar.gz SHA256SUMS | sha256sum -c
bitcoin-$VERSION.tar.gz: OK
Comprovació de la signatura
Els llançaments de Bitcoin estan signats per diverses persones, cadascuna utilitzant la seva pròpia clau. Per verificar la validesa d’aquestes signatures, primer heu d’importar les claus públiques corresponents a la vostra base de dades de claus GPG.
- La següent comanda baixa i importa automàticament totes les signatures de les certificacions de llançament de Bitcoin Core (Guix) repositori
wget -qO- \
"https://api.github.com/repos/bitcoinknots/guix.sigs/contents/builder-keys" |\
grep download_url |\
grep -oE "https://[a-zA-Z0-9./-]+" |\
while read url; do \
wget -qO- "$url" |\
gpg --import \
; done
- Verifiqueu que el fitxer de sumes de comprovació estigui signat criptogràficament amb les claus de signatura de la versió. L’ordre següent imprimeix comprovacions de signatura per a cadascuna de les claus públiques que van signar les sumes de comprovació
gpg --verify SHA256SUMS.asc
- Comproveu que almenys algunes signatures mostrin el text següent
gpg: Good signature from...
Primary key fingerprint:...
Extreu la font
Si esteu satisfet amb les comprovacions de la suma de verificació i la signatura, extreu el codi font de Bitcoin Knots
tar xzf bitcoin-$VERSION.tar.gz && cd bitcoin-$VERSION
Configurar, compilar i instal·lar
Per comoditat, pot ser útil tenir la pàgina de manual de bitcoin-cli
a la
mateixa màquina perquè es puguin consultar fora de línia, està instal·lada per
defecte en aquesta guia
Si NO ho voleu, executeu-ho
MAN=--disable-man
./autogen.sh
./configure \
--prefix=/usr \
"${MAN:---mandir=/usr/share/man}" \
--with-daemon \
--with-utils \
--without-bdb \
--without-gui \
--without-libs \
--without-qrencode \
--enable-hardening \
--enable-lto \
--enable-reduce-exports \
--enable-static \
--disable-bench \
--disable-ccache \
--disable-fuzz \
--disable-fuzz-binary \
--disable-gui-tests \
--disable-maintainer-mode \
--disable-shared \
--disable-tests \
--disable-wallet
make
$SU make install
[ -z $MAN ] && $SU apk add mandoc man-pages
$SU install -D -m 0660 -o bitcoin -g bitcoin ./share/examples/bitcoin.conf /etc/bitcoin/bitcoin.conf
”Strip” els binaris instal·lats
$SU strip -v /usr/bin/bitcoin*
Neteja
cd
rm -rf /tmp/bitcoin-${VERSION}* /tmp/SHA256SUMS /tmp/SHA256SUMS.asc
$SU apk del .build-deps
Genera credencials d’accés
Perquè altres programes consultin Bitcoin Knots necessiten les credencials d’accés adequades. Per evitar emmagatzemar el nom d’usuari i la contrasenya en un fitxer de configuració en text sense format, la contrasenya és hasheja. Això permet que Bitcoin Knots accepti una contrasenya, l’hash i la compare amb el hash emmagatzemat, mentre que no és possible recuperar la contrasenya original.
Una altra opció per obtenir les credencials d’accés és a través del fitxer
.cookie
al directori de dades de Bitcoin. Això es crea automàticament i pot
ser llegit per tots els usuaris que són membres del grup “bitcoin”.
Bitcoin Knots proporciona un script python
senzill per generar la línia de
configuració per al fitxer de configuració.
Però preferim fer-ho a la nostra manera, molt més senzill
read -r username password; \
[ ! "$username" ] || [ ! "$password" ] && {
printf "%s\n" "Error, must provide username and password"
} || {
sed "s/^#*rpcauth=.*$/rpcauth=${username}:${salt=$(openssl rand -hex 16)}\$$(\
printf "%s" "${password}" | \
openssl dgst -sha256 -hmac "$salt" | \
awk '{print $2}' \
)/" /etc/bitcoin/bitcoin.conf > _; \
unset salt; \
$SU mv -f _ /etc/bitcoin/bitcoin.conf
}
Configuració
"dbcache=..."
s’ha d’ajustar a la capacitat del vostre maquinari
- Modifiqueu/descomenteu aquestes línies. Guardeu i sortiu.
$SU $EDITOR /etc/bitcoin/bitcoin.conf
[...]
assumevalid=0
[...]
blockfilterindex=1
[...]
blocksonly=1
[...]
coinstatsindex=1
[...]
dbcache=8192
[...]
txindex=1
[...]
i2psam=127.0.0.1:7656
[...]
peerblockfilters=1
[...]
peerbloomfilters=1
[...]
proxy=127.0.0.1:9050
[...]
zmqpubhashblock=tcp://127.0.0.1:8433
[...]
zmqpubrawblock=tcp://127.0.0.1:28332
[...]
zmqpubrawtx=tcp://127.0.0.1:28333
[...]
debug=i2p
debug=tor
[...]
datacarrier=0
[...]
permitbaremultisig=0
[...]
server=1
[...]
Comproveu aquesta configuració de mostra de Bitcoin Knots al navegador web
Rebutjar xarxes no privades
[...]
onlynet=onion
[...]
onlynet=i2p
[...]
dns=0
[...]
dnsseed=0
[...]
I afegiu nodes de llavors, comproveu una llista de nodes de llavors aquí
##Tor seed nodes
seednode=2bqghnldu6mcug...tvci6klcwzepnjd46ikjyd.onion:8333
[...]
##I2P seed nodes
seednode=255fhcp6ajvftn...3bamyh2iu5r3gnr2rq.b32.i2p:0
[...]
Dispositius de baix rendiment
[...]
# Slow devices optimizations
## Limit the number of max peers connections
maxconnections=40
[...]
## Tries to keep outbound traffic under the given target per 24h
maxuploadtarget=5000
[...]
## Increase the number of threads to service RPC calls (default: 4)
rpcthreads=128
[...]
## Increase the depth of the work queue to service RPC calls (default: 16)
rpcworkqueue=256
[...]
#coinstatsindex=1
[...]
#assumevalid=0
[...]
Tingueu en compte que amb el paràmetre maxuploadtarget
activat, necessitareu
afegir a la llista blanca la connexió a Electrs i Bisq afegint aquests
paràmetres a bitcoin.conf
:
- Electrs:
whitelist=download@127.0.0.1
- Bisq:
whitelist=bloomfilter@192.168.0.0/16
Crea el servei init.d
El sistema ha d’executar el dimoni bitcoin automàticament en segon pla, fins i
tot quan ningú ha iniciat sessió. Utilitzem openrc
, un dimoni que controla el
procés d’inici mitjançant fitxers de configuració.
- Crea la configuració d’init.d
$SU $EDITOR /etc/init.d/bitcoind
- Introdueix la configuració següent completa. Guarda i surt
#!/sbin/openrc-run
: ${BITCOIND_CONFIGFILE:=/etc/bitcoin/bitcoin.conf}
: ${BITCOIND_DATADIR:=/var/lib/bitcoind}
: ${BITCOIND_LOGDIR:=/var/log/bitcoind}
: ${BITCOIND_USER:=bitcoin}
: ${BITCOIND_GROUP:=bitcoin}
: ${BITCOIND_BIN:=/usr/bin/bitcoind}
: ${BITCOIND_OPTS=${BITCOIND_OPTS}}
: ${BITCOIND_SIGTERM_TIMEOUT:=600}
BITCOIND_PIDDIR="/run/bitcoind"
name="Bitcoin Knots daemon"
description="Bitcoin cryptocurrency P2P network daemon"
required_files="${BITCOIND_CONFIGFILE}"
pidfile="${BITCOIND_PIDDIR}/${SVCNAME}.pid"
retry="${BITCOIND_SIGTERM_TIMEOUT}"
command="${BITCOIND_BIN}"
command_args="-pid=${pidfile}
-conf=${BITCOIND_CONFIGFILE}
-datadir=${BITCOIND_DATADIR}
-debuglogfile=${BITCOIND_LOGDIR}/debug.log
${BITCOIND_OPTS}"
command_args_background="-daemonwait"
command_user="${BITCOIND_USER}:${BITCOIND_GROUP}"
depend() {
use net
need localmount
checkdepend onion tor
checkdepend i2psam i2pd
after logger firewall
}
checkdepend() {
if grep -qs "^${1}=" "${BITCOIND_CONFIGFILE}"; then
need "${2:-$1}"
fi
}
start_pre() {
checkpath --file --mode 0660 --owner "${command_user}" "${BITCOIND_CONFIGFILE}"
checkpath --directory --mode 0750 --owner "${command_user}" "${BITCOIND_DATADIR}"
checkpath --directory --mode 0755 --owner "${command_user}" "${BITCOIND_LOGDIR}"
checkpath --directory --mode 0755 --owner "${command_user}" "${BITCOIND_PIDDIR}"
checkconfig
}
start_post() {
chmod -R u=rwX,g=rX,o= "${BITCOIND_DATADIR}" "${BITCOIND_LOGDIR}"
}
checkconfig() {
if ! grep -qs '^rpcauth=' "${BITCOIND_CONFIGFILE}"
then
eerror ""
eerror "ERROR: You must set a secure rpcauth to run bitcoind."
eerror "The setting must appear in ${BITCOIND_CONFIGFILE}"
eerror ""
eerror "This auth is security critical to securing wallets "
eerror "and must not be the same as the rpcuser setting."
eerror ""
eerror "It is recommended that you also set alertnotify so you are "
eerror "notified of problems:"
eerror ""
eerror "ie: alertnotify=echo %%s | mail -s \"Bitcoin Alert\"" \
"admin@foo.com"
eerror ""
return 1
fi
}
- Habilita el permís d’execució
$SU chmod +x /etc/init.d/bitcoind
- Habilita l’arrencada automàtica
$SU rc-update add bitcoind default
Crea la configuració de logrotate
Logrotate és una utilitat del sistema que gestiona la compressió i la rotació dels fitxers de registre en sistemes Linux. Si els registres no roten, es comprimeixen i es purguen periòdicament, eventualment poden consumir tot l’espai de disc disponible al sistema. Permet la rotació, la compressió, l’eliminació i l’enviament automàtic dels fitxers de registre. Cada fitxer de registre es pot gestionar diàriament, setmanalment, mensualment o quan creixi massa.
Normalment, logrotate s’executa com un treball cron diari.
- Creeu el fitxer de configuració de bitcoin logrotate
$SU $EDITOR /etc/logrotate.d/bitcoind
- Introdueix la configuració següent completa. Guarda i surt
/var/log/bitcoind/*.log {
weekly
missingok
rotate 104
compress
delaycompress
notifempty
create 0640 bitcoin bitcoin
sharedscripts
postrotate
killall -HUP `cat /run/bitcoind/bitcoind.pid`
endscript
}
- Prova
$SU logrotate /etc/logrotate.d/bitcoind --debug
Executa
- Inicia el servei
$SU rc-service bitcoind start
- Comprova els registres
tail -f /var/log/bitcoind/debug.log
2024-01-17T13:48:34Z Bitcoin Core version v26.0.0 (release build)
2024-01-17T13:48:34Z InitParameterInteraction: parameter interaction: -blocksonly=1 -> setting -whitelistrelay=0
2024-01-17T13:48:34Z InitParameterInteraction: parameter interaction: -blocksonly=1 -> setting -maxmempool=5
2024-01-17T13:48:34Z Using the 'sse4(1way),sse41(4way),avx2(8way)' SHA256 implementation
2024-01-17T13:48:34Z Using RdSeed as an additional entropy source
2024-01-17T13:48:34Z Using RdRand as an additional entropy source
2024-01-17T13:48:34Z Default data directory /dev/null/.bitcoin
2024-01-17T13:48:34Z Using data directory /var/lib/bitcoind
2024-01-17T13:48:34Z Config file: /etc/bitcoin/bitcoin.conf
2024-01-17T13:48:34Z Config file arg: assumevalid="0"
2024-01-17T13:48:34Z Config file arg: blockfilterindex="1"
2024-01-17T13:48:34Z Config file arg: blocksonly="1"
2024-01-17T13:48:34Z Config file arg: coinstatsindex="1"
2024-01-17T13:48:34Z Config file arg: daemon="1"
2024-01-17T13:48:34Z Config file arg: dbcache="24576"
2024-01-17T13:48:34Z Config file arg: debug="i2p"
2024-01-17T13:48:34Z Config file arg: debug="tor"
2024-01-17T13:48:34Z Config file arg: debuglogfile="/var/log/bitcoind/debug.log"
2024-01-17T13:48:34Z Config file arg: i2psam="127.0.0.1:7656"
2024-01-17T13:48:34Z Config file arg: onion="127.0.0.1:9050"
2024-01-17T13:48:34Z Config file arg: peerblockfilters="1"
2024-01-17T13:48:34Z Config file arg: peerbloomfilters="1"
2024-01-17T13:48:34Z Config file arg: rpcauth=****
2024-01-17T13:48:34Z Config file arg: server="1"
2024-01-17T13:48:34Z Config file arg: startupnotify="chmod -R u=rwX,g=rX,o= /var/lib/bitcoind /var/log/bitcoind"
2024-01-17T13:48:34Z Config file arg: txindex="1"
2024-01-17T13:48:34Z Config file arg: v2transport="1"
2024-01-17T13:48:34Z Command-line arg: conf="/etc/bitcoin/bitcoin.conf"
2024-01-17T13:48:34Z Command-line arg: datadir="/var/lib/bitcoind"
2024-01-17T13:48:34Z Command-line arg: pid="/run/bitcoind/bitcoin.pid"
2024-01-17T13:48:34Z Command-line arg: server=""
[...]
2024-01-17T13:48:46Z Pre-synchronizing blockheaders, height: 2000 (~0.25%)
[...]
Superviseu el fitxer de registre durant uns minuts per veure si funciona bé (pot
aturar-se a la dnsseed thread exit
, això està bé)
- Espereu uns minuts fins que s’iniciï Bitcoin Core i introduïu la següent ordre per obtenir les vostres adreces Tor i I2P. Preneu-ne nota, més endavant potser ho necessiteu
bitcoin-cli getnetworkinfo | grep 'address.*\.onion\|address.*\.i2p'
"address": "vctk9tie5srguvz262xpyukkd7g4z2xxxy5xx5ccyg4f12fzop8hoiad.onion",
"address": "sesehks6xyh31nyjldpyeckk3ttpanivqhrzhsoracwqjxtk3apgq.b32.i2p",
- Comproveu l’habilitació correcta de les xarxes I2P i Tor
bitcoin-cli -netinfo
Bitcoin Core client v26.0.0 - server 70016/Satoshi:26.0.0/
ipv4 ipv6 onion i2p total block
in 0 0 25 2 27
out 7 0 2 1 10 2
total 7 0 27 3 37
Local addresses
xdtk6tie4srguvz566xpyukkd7m3z3vbby5xx5ccyg5f64fzop7hoiab.onion port 8333 score 4
etehks3xyh55nyjldjdeckk3nwpanivqhrzhsoracwqjxtk8apgk.b32.i2p port 0 score 4
- Assegureu-vos que bitcoind escolti als ports RPC i P2P predeterminats
$SU netstat -lntup | grep LISTEN | grep bitcoind
tcp 0 0 0.0.0.0:8333 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 127.0.0.1:8334 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 127.0.0.1:8332 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 127.0.0.1:8433 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 127.0.0.1:28332 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 127.0.0.1:28333 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 :::8333 :::* LISTEN 28295/bitcoind
tcp 0 0 ::1:8332 :::* LISTEN 28295/bitcoind
Tingueu en compte:
-
Quan
bitcoind
encara s’està iniciant, és possible que rebeu un missatge d’error com “verifying blocks”. Això és normal, només doneu-li uns minuts. -
Entre altres dades, es mostra el “verificationprogress”. Un cop aquest valor arriba a gairebé 1 (0,99999…), la cadena de blocs està actualitzada i totalment validada.
Bitcoin Knots s’està sincronitzant
Això pot trigar entre un dia i una setmana, depenent principalment del rendiment del vostre ordinador. El millor és esperar fins que s’hagi completat la sincronització abans de continuar.
Explora bitcoin-cli
Si tot funciona bé, aquest és el moment perfecte per familiaritzar-se amb
Bitcoin, els aspectes tècnics de Bitcoin Core, i jugar amb bitcoin-cli
fins
que la cadena de blocs estigui al dia.
-
The Little Bitcoin Book és una fantàstica introducció a Bitcoin, centrada en el “per què” i menys en el “com”.
-
Mastering Bitcoin d’Andreas Antonopoulos és un bon punt de partida, especialment el capítol 3 (ignoreu la primera part com compilar des del codi font):
- Definitivament heu de tenir una còpia real d’aquest llibre!
- llegiu-lo en línia a GitHub
- Learning Bitcoin from the Command Line de Christopher Allen ofereix una immersió profunda en la comprensió dels aspectes tècnics de Bitcoin.
- A més, fes una ullada a la referència de bitcoin-cli
Activeu mempool i reduïu ‘dbcache’ després d’una sincronització completa
Un cop Bitcoin Knots estigui completament sincronitzat, podem reduir la mida de la memòria cau de la base de dades. Una memòria cau més gran accelera la descàrrega inicial del bloc, ara volem reduir el consum de memòria per permetre que el client Lightning i el servidor Electrum funcionin en paral·lel. Ara també volem habilitar el node per escoltar i transmetre transaccions.
- Comenta les línies següents al fitxer
bitcoin.conf
Bitcoin Knots només utilitzarà la mida de memòria cau predeterminada de 450 MiB
en lloc de la configuració de la memòria RAM. Si blocksonly=1
es deixa sense
comentar, evitarà que Electrum Server rebi dades de tarifes RPC i no funcionarà.
$SU $EDITOR /etc/bitcoin/bitcoin.conf
#dbcache=2048
#blocksonly=1
#assumevalid=0
- Reinicieu Bitcoin Knots perquè la configuració tingui efecte
$SU rc-service bitcoind restart
Actualització
La darrera versió es pot trobar a la pàgina de
Github del projecte
Bitcoin Knots. Llegiu sempre les RELEASE
NOTES
primer! Quan s’actualitza, pot haver-hi canvis o canvis en l’estructura de dades
que necessiten una atenció especial. Substituïu el valor de la variable d’entorn
VERSION=x.xx
per a la darrera versió si encara no s’ha modificat en aquesta
guia.