Bitcoin Core

Instal·lem Bitcoin Core, la implementació de client de referència de la xarxa Bitcoin.

Preparacions

L’aplicació Bitcoin Core 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ó

Hi ha un apk empaquetat de bitcoin als repositoris Alpine, però Microbolt recomana instal·lar bitcoin des del codi font per aplicar sempre pedaços anti-ordinals.

Baixem l’últim codi font de Bitcoin Core 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=28.0
  • Obteniu el codi font i les signatures més recents
wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/bitcoin-$VERSION.tar.gz \
    https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS \
    https://bitcoincore.org/bin/bitcoin-core-$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
output
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/repositories/355107265/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
output
gpg: Good signature from...
Primary key fingerprint:...

Comprovació de la marca de temps

El fitxer de suma de control d’origen també està marcat de temps amb la cadena de blocs de Bitcoin mitjançant el protocol OpenTimestamps, demostrant que el fitxer existia abans d’algun moment. Verifiquem aquesta marca de temps. Al vostre ordinador local, descarregueu el fitxer de sumes de comprovació i la seva prova de marca de temps:

  • Al navegador, obriu el lloc web d’OpenTimestamps
  • A la secció “Stamp and verify”, deixeu anar o carregueu el fitxer de prova SHA256SUMS.ots descarregat al quadre de punts
  • Al quadre següent, deixeu anar o carregueu el fitxer SHA256SUMS
  • Si es verifiquen les marques de temps, hauríeu de veure el missatge següent. La marca de temps demostra que el fitxer de sumes de comprovació existia a la data de llançament de l’última versió de Bitcoin Core

La captura de pantalla següent és només un exemple d’una de les versions:

Extreu la font

Si esteu satisfet amb les comprovacions de la suma de verificació, la signatura i la marca de temps, extreu el codi font de Bitcoin Core

tar xzf bitcoin-$VERSION.tar.gz && cd bitcoin-$VERSION

Aplicar pegats

  • Ordisrespector
sed '/stack.push_back(vchPushValue);/a \
                if ((flags & SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS) && opcode == OP_FALSE) {\
                    auto pc_tmp = pc;\
                    opcodetype next_opcode;\
                    valtype dummy_data;\
                    if (script.GetOp(pc_tmp, next_opcode, dummy_data) && next_opcode == OP_IF) {\
                        return set_error(serror, SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS);\
                    }\
                }' \
    src/script/interpreter.cpp > _
mv -f _ src/script/interpreter.cpp

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 Core 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 Core 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 Core 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
/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 Core al navegador web

Rebutjar xarxes no privades
/etc/bitcoin/bitcoin.conf
[...]
onlynet=onion
[...]
onlynet=i2p
[...]
dns=0
[...]
dnsseed=0
[...]

I afegiu nodes de llavors, comproveu una llista de nodes de llavors aquí

/etc/bitcoin/bitcoin.conf
##Tor seed nodes
seednode=2bqghnldu6mcug...tvci6klcwzepnjd46ikjyd.onion:8333
[...]
##I2P seed nodes
seednode=255fhcp6ajvftn...3bamyh2iu5r3gnr2rq.b32.i2p:0
[...]
Dispositius de baix rendiment
/etc/bitcoin/bitcoin.conf
[...]
# 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
/etc/init.d/bitcoind
#!/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 Core 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
/etc/logrotate.d/bitcoind
/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
output
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'
output
"address": "vctk9tie5srguvz262xpyukkd7g4z2xxxy5xx5ccyg4f12fzop8hoiad.onion",
"address": "sesehks6xyh31nyjldpyeckk3ttpanivqhrzhsoracwqjxtk3apgq.b32.i2p",
  • Comproveu l’habilitació correcta de les xarxes I2P i Tor
bitcoin-cli -netinfo
output
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
output
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 Core 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

Activeu mempool i reduïu ‘dbcache’ després d’una sincronització completa

Un cop Bitcoin Core 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 Core 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
/etc/bitcoin/bitcoin.conf
#dbcache=2048
#blocksonly=1
#assumevalid=0
  • Reinicieu Bitcoin Core perquè la configuració tingui efecte
$SU rc-service bitcoind restart

Client d’OpenTimestamps

Quan vam instal·lar Bitcoin Core, vam verificar la marca de temps del fitxer de suma de verificació mitjançant el lloc web OpenTimestamp. En el futur, probablement haureu de verificar més segells de temps, quan instal·leu programes addicionals (per exemple, LND) i quan actualitzeu els programes existents a una versió més nova. En lloc de confiar en un tercer, seria preferible (i més divertit) verificar les marques de temps utilitzant les vostres pròpies dades de blockchain. Ara que Bitcoin Core s’està executant i sincronitzat, podem instal·lar el client OpenTimestamp per verificar localment la marca de temps del fitxer de suma de verificació binaris.

A Alpine Linux no es recomana instal·lar paquets a nivell de sistema sense el gestor de paquets del sistema (apk). OpenTimestamp encara no està empaquetat, així que instal·lem en un entorn virtual aïllat utilitzant pipx.

  • Instal·lar dependències
$SU apk add pipx
  • Afegeix variables d’entorn
printf "%s\n" \
    "export PIPX_HOME=/var/lib/pipx" \
    "export PIPX_BIN_DIR=/usr/bin" \
    "export PIPX_MAN_DIR=/usr/share/man" \
    | $SU tee -a /etc/profile.d/pipx.sh
  • Aplica els canvis
source /etc/profile.d/pipx.sh
  • Instal·leu el client OpenTimestamp
$SU pipx install opentimestamps-client
  • Mostra la versió del client d’OpenTimestamps per comprovar que està instal·lada correctament
ots --version
output
v0.7.1
💡

Per actualitzar el client OpenTimestamps, simplement executeu

$SU pipx upgrade opentimestamps-client

Actualització

La darrera versió es pot trobar a la pàgina de Github del projecte Bitcoin Core. 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.