以下的指引是介绍在主流的Linux系统下安装Bitcoin SV节点软件可使用的工具,前提假设是你使用着类似Bourne shell的shell,比如bash
。
在开始安装Bitcoin软件之前,请确认你使用的帐户能够使用su或sudo将软件安装到根用户所拥有的目录下。
下载你选择的软件版本的压缩文件,以下示例中使用的软件是撰写本文时的最新版本v1.0.5:
$ wget https://download.bitcoinsv.io/bitcoinsv/1.0.5/bitcoin-sv-1.0.5-x86_64-linux-gnu.tar.gz
确认你下载成功的文件的sha哈希值与download.bitcoinsv.io上该软件版本提供的哈希值一致。
$ sha256sum bitcoin-sv-1.0.5-x86_64-linux-gnu.tar.gz
//Expected Output
96f7c56c7ebd4ecb2dcd664297fcf0511169ac33eaf216407ebc49dae2535578 bitcoin-sv-1.0.5-x86_64-linux-gnu.tar.gz
找到您下载的文件,使用tar
命令将其解压,使用xzf
解压参数和文件名。命令参数xzf
的意思是解压 gZip 压缩了的 tar文件。例如,对于当前目录下的64位tar文件,指令为:
$ tar xvf bitcoin-sv-1.0.5-x86_64-linux-gnu.tar.gz
从名为bitcoin
的新目录创建一个符号链接到你刚刚通过解压生成的 bitcoin-sv-1.0.5
目录,以方便使用和更新:
$ ln -s bitcoin-sv-1.0.5 bitcoin
创建一个bitcoin-data
目录,放入bitcoin数据(否则Bitcoin会默认将数据放入~/.bitcoin
):
$ mkdir bitcoin-data
在该目录下创建一个bitcoin.conf
文件,用于对你所运行的节点进行设置:
$ cd bitcoin-data/
$ vim bitcoin.conf
以下是bitcoin.conf
文件被用于在STN上配置一个节点的示例:
运行bitcoind --help
后你可以看到可选择配置的完整列表
#start in background
daemon=1
#select network -- comment out both for mainnet
#testnet=1
stn=1
#Required Consensus Rules for Genesis
excessiveblocksize=10000000000 #10GB
maxstackmemoryusageconsensus=100000000 #100MB
#Mining
#biggest block size you want to mine
blockmaxsize=4000000000
blockassembler=journaling #journaling is default as of 1.0.5
#preload mempool
preload=1
#mempool usage allowance
maxmempool=8000 #8G
dbcache=8192 #8G
#Pruning -- Uncomment to trim the chain in an effort to keep disk usage below the figure set
#prune=100000 #100GB
#orphan transaction storage
#blockreconstructionextratxn=200000
#maxorphantxsize=10000
#transaction options
#maxsigcachesize=260
#maxscriptcachesize=260
#minrelaytxfee=0.00000001
#mintxfee=0.00000001
#dustrelayfee=0.00000001
#blockmintxfee=0.00000001
#relaypriority=0
#feefilter=0
#limitfreerelay=1000
#maxscriptsizepolicy=500000
#OP Return max size
#datacarriersize=100000 #Genesis default is UINT32_MAX
#Max number and size of related Child and Parent transactions per block template
limitancestorcount=100
limitdescendantcount=100
#limitancestorsize=25000000
#limitdescendantsize=25000000
#connection options
maxconnections=80
#ZMQ
#zmqpubhashtx=tcp://127.0.0.1:28332
#zmqpubhashblock=tcp://127.0.0.1:28332
#Ports - Leave commented for defaults
#port=9333
#rpcport=9332
#rpc settings
rpcworkqueue=600
rpcthreads=16
#rpcallowip=0.0.0.0/0
rpcuser=CHANGE_ME
rpcpassword=CHANGE_ME
#debug options
#can be: net, tor,
# mempool, http, bench, zmq, db, rpc, addrman, selectcoins,
# reindex, cmpctblock, rand, prune, proxy, mempoolrej, libevent,
# coindb, leveldb, txnprop, txnsrc, journal, txnval.
# 1 = all options enabled.
# 0 = off which is default
#debug=1
#debugexclude to ignore set log items, can be used to keep log file a bit cleaner
debugexclude=libevent
debugexclude=leveldb
debugexclude=zmq
debugexclude=txnsrc
debugexclude=net
#shrinkdebugfile=0 # Setting to 1 prevents bitcoind from clearning the log file on restart. 0/off is default
#multi-threaded options
#threadsperblock=32
#maxparallelblocks
#scriptvalidatormaxbatchsize
#maxparallelblocksperpeer
maxstdtxvalidationduration=15
maxcollectedoutpoints=1000000
maxstdtxnsperthreadratio=10000
#maxnonstdtxvalidationduration
运行Bitcoind,传入配置文件的位置以及存储bitcoin数据的位置:
(在我们的示例中,使用了用户测试法)
$ /home/test/bitcoin/bin/bitcoind -conf=/home/test/bitcoin-data/bitcoin.conf -datadir=/home/test/bitcoin-data -daemon
systemctl
运行创建bitcoind.service
文件:
$ sudo vim /etc/systemd/system/bitcoind.service
bitcoind.service
:
[Unit] Description=Bitcoin service After=network.target [Service] Type=forking ExecStart=/home/test/bitcoin/bin/bitcoind -conf=/home/test/bitcoin-data/bitcoin.conf -datadir=/home/test/bitcoin-data -daemon ExecStop=/home/test/bitcoin/bin/bitcoin-cli -conf=/home/test/bitcoin-data/bitcoin.conf -datadir=/home/test/bitcoin-data stop ExecReload=/bin/kill -s HUP $MAINPID Restart=on-abnormal TimeoutStopSec=120 KillMode=none PrivateTmp=true User=test [Install] WantedBy=multi-user.target
(请确认你将上面test
替换为了你的登入用户)
接下来,我们开始:
$ sudo systemctl start bitcoind.service
此代码库中包括用于执行Bitcoin SV节点的docker映像。感谢Josh Ellithorpe和他的代码库,为我们的库提供了基础。
这个docker映像提供了bitcoind
、bitcoin-cli
、和bitcoin-tx
,它们可以被用于运行Bitcoin服务器并且与之交互。
请在此查看可用的版本Docker Hub页面。
运行最新版本的Bitcoin SV:
$ docker run bitcoinsv/bitcoin-sv
要在后台运行容器,请将-d选项传递给docker run,并为你的容器指定一个名称,以便之后参考使用:
$ docker run -d --rm --name bitcoind bitcoinsv/bitcoin-sv
在后台运行bitcoind服务后,可以显示正在运行的容器:
$ docker ps
或者查看服务日志:
$ docker logs -f bitcoind
停止或重启一个运行的容器:
$ docker stop bitcoind $ docker start bitcoind
配置服务器最好的方法就是将参数交给bitcoind指令。以下举例如何在测试网上运行Bitcoin SV:
$ docker run --name bitcoind-testnet bitcoinsv/bitcoin-sv bitcoind -testnet
或者,你可以编辑在数据目录中生成的bitcoin.conf
文件,见下。
默认情况下,Docker将创建临时容器。也就是说,区块链数据将不会长久保存,每次启用容器时都需要从头开始同步区块链。
若要在容器重启或升级之间保持区块链数据不变,只需添加-v选项即可创建一个数据卷:
$ docker run -d --rm --name bitcoind -v bitcoin-data:/data bitcoinsv/bitcoin-sv $ docker ps $ docker inspect bitcoin-data
或者,你可以将数据卷映射到你的主机某处:
$ docker run -d --rm --name bitcoind -v "$PWD/data:/data" bitcoinsv/bitcoin-sv $ ls -alh ./data
默认情况下,Docker在专用网桥上运行所有容器,这意味着您无法访问运行bitcoin-cli
命令所必需的RPC端口(8332)。
有几种方法可以针对正在运行的bitcoind
容器运行bitcoin-cli
。最简单的方法就是让你的bitcoin-cli
容器与你的bitcoind
容器共享网络:
$ docker run -d --rm --name bitcoind -v bitcoin-data:/data bitcoinsv/bitcoin-sv $ docker run --rm --network container:bitcoind bitcoinsv/bitcoin-sv bitcoin-cli getinfo
如果你计划将RPC端口公开给多个容器(比如当你正在开发直接与RPC端口通讯的应用程序),则可能要考虑创建一个用户定义的网络。然后,你可以将此网络同时用于bitcoind
和bitclin-cli
容器,并通过-rpcconnect
指定你的bitcoind容器的主机名:
$ docker network create bitcoin $ docker run -d --rm --name bitcoind -v bitcoin-data:/data --network bitcoin bitcoinsv/bitcoin-sv $ docker run --rm --network bitcoin bitcoinsv/bitcoin-sv bitcoin-cli -rpcconnect=bitcoind getinfo
以下说明将引导你逐步在GKE(Google Kubernetes Engine)中创建一个Bitcoin SV节点。
如果您想运行其他版本的bitcoind,只需在bitcoin-deployment.yml
中更改图像引用即可。
步骤如下:
1- Add a new blank disk on GCE called bitcoin-data that is 200GB. You can always expand it later. 2- Save the following code snippets and place them in a new directory kube. 3- Change the rpcuser and rpcpass values in bitcoin-secrets.yml. They are base64 encoded. To base64 a string, just run echo -n SOMESTRING | base64. 4- Run kubectl create -f /path/to/kube 5- Profit!
apiVersion: extensions/v1beta1 kind: Deployment metadata: namespace: default labels: service: bitcoin name: bitcoin spec: strategy: type: Recreate replicas: 1 template: metadata: labels: service: bitcoin spec: containers: - env: - name: BITCOIN_RPC_USER valueFrom: secretKeyRef: name: bitcoin key: rpcuser - name: BITCOIN_RPC_PASSWORD valueFrom: secretKeyRef: name: bitcoin key: rpcpass image: bitcoinsv/bitcoin-sv name: bitcoin volumeMounts: - mountPath: /data name: bitcoin-data resources: requests: memory: "2Gi" restartPolicy: Always volumes: - name: bitcoin-data gcePersistentDisk: pdName: bitcoin-data fsType: ext4
apiVersion: v1 kind: Secret metadata: name: bitcoin type: Opaque data: rpcuser: YWRtaW4= rpcpass: aXRvbGR5b3V0b2NoYW5nZXRoaXM=
apiVersion: v1 kind: Service metadata: name: bitcoin namespace: default spec: ports: - port: 8333 targetPort: 8333 selector: service: bitcoin type: LoadBalancer externalTrafficPolicy: Local
有关使用Docker Compose运行比特币节点的完整示例,请参见Docker Compose 示例。