diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..4faed853 --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +PACKAGER = $(shell id -u):$(shell id -g) + +.PHONY: build test deb + +build: + docker run -t --rm -e PACKAGER=$(PACKAGER) -v $(CURDIR):/src -v $(CURDIR)/build:/out blockbook-build make build + strip build/blockbook + +test: + docker run -t --rm -e PACKAGER=$(PACKAGER) -v $(CURDIR):/src blockbook-build make test + +deb: + docker run -t --rm -e PACKAGER=$(PACKAGER) -v $(CURDIR):/src -v $(CURDIR)/build:/out blockbook-build-deb + +clean: + rm -f build/blockbook + rm -f build/*.deb diff --git a/docker/Dockerfile b/build/bin/Dockerfile similarity index 73% rename from docker/Dockerfile rename to build/bin/Dockerfile index 380128b6..a19b2740 100644 --- a/docker/Dockerfile +++ b/build/bin/Dockerfile @@ -26,14 +26,8 @@ RUN cd /opt/rocksdb && CFLAGS=-fPIC CXXFLAGS=-fPIC make static_lib RUN go get github.com/golang/dep/cmd/dep -# clone repo and ensure dependencies -RUN cd $GOPATH/src && git clone https://github.com/jpochyla/blockbook.git -RUN cd $GOPATH/src/blockbook && dep ensure +ADD Makefile /build/Makefile -# install gorocksdb -RUN cd $GOPATH/src/blockbook/vendor/github.com/tecbot/gorocksdb && \ - go install . +VOLUME /out -WORKDIR $GOPATH/src/blockbook - -CMD go build -o /out/blockbook +WORKDIR /build diff --git a/build/bin/Makefile b/build/bin/Makefile new file mode 100644 index 00000000..d5bb9393 --- /dev/null +++ b/build/bin/Makefile @@ -0,0 +1,12 @@ +build: prepare-sources + cd $(GOPATH)/src/blockbook && go build -o $(CURDIR)/blockbook + cp $(CURDIR)/blockbook /out/blockbook + chown $(PACKAGER) /out/blockbook + +test: prepare-sources + cd $(GOPATH)/src/blockbook && go test -v ./bchain/coins/zec + +prepare-sources: + @ [ -n "`ls /src 2> /dev/null`" ] || (echo "/src doesn't exist or is empty" 1>&2 && exit 1) + cp -r /src $(GOPATH)/src/blockbook + cd $(GOPATH)/src/blockbook && dep ensure -vendor-only diff --git a/build/deb/Dockerfile b/build/deb/Dockerfile new file mode 100644 index 00000000..5782d98b --- /dev/null +++ b/build/deb/Dockerfile @@ -0,0 +1,12 @@ +# initialize from the image + +FROM blockbook-build:latest + +RUN apt-get update && apt-get install -y \ + devscripts debhelper make dh-systemd dh-exec + +ADD build-deb.sh /build/build-deb.sh + +WORKDIR /build + +CMD /build/build-deb.sh diff --git a/build/deb/build-deb.sh b/build/deb/build-deb.sh new file mode 100755 index 00000000..0c064954 --- /dev/null +++ b/build/deb/build-deb.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -e + +cp -r /src/build/deb/debian . +cp -r /src/configs . +mkdir server && cp /src/server/testcert.* server + +dpkg-buildpackage -us -uc +mv ../*.deb /out +chown $PACKAGER /out/*.deb diff --git a/build/deb/debian/blockbook-btc-testnet.conffiles b/build/deb/debian/blockbook-btc-testnet.conffiles new file mode 100644 index 00000000..354f62ae --- /dev/null +++ b/build/deb/debian/blockbook-btc-testnet.conffiles @@ -0,0 +1 @@ +/opt/blockbook/btc-testnet/config/blockchaincfg.json diff --git a/build/deb/debian/blockbook-btc-testnet.dirs b/build/deb/debian/blockbook-btc-testnet.dirs new file mode 100644 index 00000000..e1d51287 --- /dev/null +++ b/build/deb/debian/blockbook-btc-testnet.dirs @@ -0,0 +1,2 @@ +/data/btc-testnet/blockbook +/opt/blockbook/btc-testnet/logs diff --git a/build/deb/debian/blockbook-btc-testnet.install b/build/deb/debian/blockbook-btc-testnet.install new file mode 100755 index 00000000..58ed0672 --- /dev/null +++ b/build/deb/debian/blockbook-btc-testnet.install @@ -0,0 +1,4 @@ +#!/usr/bin/dh-exec +blockbook /opt/blockbook/btc-testnet/bin +server/testcert.* /opt/blockbook/btc-testnet/cert +configs/btc-testnet.json => /opt/blockbook/btc-testnet/config/blockchaincfg.json diff --git a/build/deb/debian/blockbook-btc-testnet.links b/build/deb/debian/blockbook-btc-testnet.links new file mode 100644 index 00000000..d8166b72 --- /dev/null +++ b/build/deb/debian/blockbook-btc-testnet.links @@ -0,0 +1,2 @@ +/opt/blockbook/btc-testnet/cert/testcert.crt /opt/blockbook/btc-testnet/cert/blockbook.crt +/opt/blockbook/btc-testnet/cert/testcert.key /opt/blockbook/btc-testnet/cert/blockbook.key diff --git a/build/deb/debian/blockbook-btc-testnet.logrotate b/build/deb/debian/blockbook-btc-testnet.logrotate new file mode 100644 index 00000000..624d120b --- /dev/null +++ b/build/deb/debian/blockbook-btc-testnet.logrotate @@ -0,0 +1,9 @@ +/opt/blockbook/btc-testnet/logs/blockbook.log +{ + rotate 7 + daily + compress + missingok + notifempty + copytruncate +} diff --git a/build/deb/debian/blockbook-btc-testnet.postinst b/build/deb/debian/blockbook-btc-testnet.postinst new file mode 100644 index 00000000..9f310abc --- /dev/null +++ b/build/deb/debian/blockbook-btc-testnet.postinst @@ -0,0 +1,20 @@ +#!/bin/bash +set -e + +case "$1" in + + configure) + if ! id -u blockbook &> /dev/null + then + useradd --system -M -U blockbook + fi + + if [ "$(stat -c '%U' /data/btc-testnet/blockbook)" != "blockbook" ] + then + chown -R blockbook:blockbook /data/btc-testnet/blockbook + fi + ;; + +esac + +#DEBHELPER# diff --git a/build/deb/debian/blockbook-btc-testnet.service b/build/deb/debian/blockbook-btc-testnet.service new file mode 100644 index 00000000..ab84d20a --- /dev/null +++ b/build/deb/debian/blockbook-btc-testnet.service @@ -0,0 +1,43 @@ +# It is not recommended to modify this file in-place, because it will +# be overwritten during package upgrades. If you want to add further +# options or overwrite existing ones then use +# $ systemctl edit blockbook-btc-testnet.service +# See "man systemd.service" for details. + +[Unit] +Description=Blockbook daemon (BTC testnet) +After=network.target + +[Service] +ExecStart=/opt/blockbook/btc-testnet/bin/blockbook -coin=btc-testnet -blockchaincfg=/opt/blockbook/btc-testnet/config/blockchaincfg.json -datadir=/data/btc-testnet/blockbook/db -sync -httpserver=:18335 -socketio=:18336 -certfile=/opt/blockbook/btc-testnet/cert/blockbook -explorer=https://bitcore1.trezor.io/ +# Creates /run/blockbook owned by blockbook +RuntimeDirectory=blockbook +User=blockbook +# Type=forking +# PIDFile=/run/bitcoind/btc-testnet.pid +Restart=on-failure +StandardOutput=file:/opt/blockbook/btc-testnet/logs/blockbook.log +StandardError=file:/opt/blockbook/btc-testnet/logs/blockbook.log + +# Hardening measures +#################### + +# Provide a private /tmp and /var/tmp. +PrivateTmp=true + +# Mount /usr, /boot/ and /etc read-only for the process. +ProtectSystem=full + +# Disallow the process and all of its children to gain +# new privileges through execve(). +NoNewPrivileges=true + +# Use a new /dev namespace only populated with API pseudo devices +# such as /dev/null, /dev/zero and /dev/random. +PrivateDevices=true + +# Deny the creation of writable and executable memory mappings. +MemoryDenyWriteExecute=true + +[Install] +WantedBy=multi-user.target diff --git a/build/deb/debian/blockbook-btc.conffiles b/build/deb/debian/blockbook-btc.conffiles new file mode 100644 index 00000000..1714ce0f --- /dev/null +++ b/build/deb/debian/blockbook-btc.conffiles @@ -0,0 +1 @@ +/opt/blockbook/btc/config/blockchaincfg.json diff --git a/build/deb/debian/blockbook-btc.dirs b/build/deb/debian/blockbook-btc.dirs new file mode 100644 index 00000000..907b5d84 --- /dev/null +++ b/build/deb/debian/blockbook-btc.dirs @@ -0,0 +1,2 @@ +/data/btc/blockbook +/opt/blockbook/btc/logs diff --git a/build/deb/debian/blockbook-btc.install b/build/deb/debian/blockbook-btc.install new file mode 100755 index 00000000..fb662d95 --- /dev/null +++ b/build/deb/debian/blockbook-btc.install @@ -0,0 +1,4 @@ +#!/usr/bin/dh-exec +blockbook /opt/blockbook/btc/bin +server/testcert.* /opt/blockbook/btc/cert +configs/btc.json => /opt/blockbook/btc/config/blockchaincfg.json diff --git a/build/deb/debian/blockbook-btc.links b/build/deb/debian/blockbook-btc.links new file mode 100644 index 00000000..519988cb --- /dev/null +++ b/build/deb/debian/blockbook-btc.links @@ -0,0 +1,2 @@ +/opt/blockbook/btc/cert/testcert.crt /opt/blockbook/btc/cert/blockbook.crt +/opt/blockbook/btc/cert/testcert.key /opt/blockbook/btc/cert/blockbook.key diff --git a/build/deb/debian/blockbook-btc.logrotate b/build/deb/debian/blockbook-btc.logrotate new file mode 100644 index 00000000..16b1f999 --- /dev/null +++ b/build/deb/debian/blockbook-btc.logrotate @@ -0,0 +1,9 @@ +/opt/blockbook/btc/logs/blockbook.log +{ + rotate 7 + daily + compress + missingok + notifempty + copytruncate +} diff --git a/build/deb/debian/blockbook-btc.postinst b/build/deb/debian/blockbook-btc.postinst new file mode 100644 index 00000000..721e99f6 --- /dev/null +++ b/build/deb/debian/blockbook-btc.postinst @@ -0,0 +1,20 @@ +#!/bin/bash +set -e + +case "$1" in + + configure) + if ! id -u blockbook &> /dev/null + then + useradd --system -M -U blockbook + fi + + if [ "$(stat -c '%U' /data/btc/blockbook)" != "blockbook" ] + then + chown -R blockbook:blockbook /data/btc/blockbook + fi + ;; + +esac + +#DEBHELPER# diff --git a/build/deb/debian/blockbook-btc.service b/build/deb/debian/blockbook-btc.service new file mode 100644 index 00000000..e5cf847a --- /dev/null +++ b/build/deb/debian/blockbook-btc.service @@ -0,0 +1,43 @@ +# It is not recommended to modify this file in-place, because it will +# be overwritten during package upgrades. If you want to add further +# options or overwrite existing ones then use +# $ systemctl edit blockbook-btc.service +# See "man systemd.service" for details. + +[Unit] +Description=Blockbook daemon (BTC mainnet) +After=network.target + +[Service] +ExecStart=/opt/blockbook/btc/bin/blockbook -coin=btc -blockchaincfg=/opt/blockbook/btc/config/blockchaincfg.json -datadir=/data/btc/blockbook/db -sync -httpserver=:8335 -socketio=:8336 -certfile=/opt/blockbook/btc/cert/blockbook -explorer=https://bitcore1.trezor.io/ +# Creates /run/blockbook owned by blockbook +RuntimeDirectory=blockbook +User=blockbook +# Type=forking +# PIDFile=/run/bitcoind/btc.pid +Restart=on-failure +StandardOutput=file:/opt/blockbook/btc/logs/blockbook.log +StandardError=file:/opt/blockbook/btc/logs/blockbook.log + +# Hardening measures +#################### + +# Provide a private /tmp and /var/tmp. +PrivateTmp=true + +# Mount /usr, /boot/ and /etc read-only for the process. +ProtectSystem=full + +# Disallow the process and all of its children to gain +# new privileges through execve(). +NoNewPrivileges=true + +# Use a new /dev namespace only populated with API pseudo devices +# such as /dev/null, /dev/zero and /dev/random. +PrivateDevices=true + +# Deny the creation of writable and executable memory mappings. +MemoryDenyWriteExecute=true + +[Install] +WantedBy=multi-user.target diff --git a/build/deb/debian/blockbook-zec.conffiles b/build/deb/debian/blockbook-zec.conffiles new file mode 100644 index 00000000..d3e9eb1c --- /dev/null +++ b/build/deb/debian/blockbook-zec.conffiles @@ -0,0 +1 @@ +/opt/blockbook/zec/config/blockchaincfg.json diff --git a/build/deb/debian/blockbook-zec.dirs b/build/deb/debian/blockbook-zec.dirs new file mode 100644 index 00000000..6d0f5523 --- /dev/null +++ b/build/deb/debian/blockbook-zec.dirs @@ -0,0 +1,2 @@ +/data/zec/blockbook +/opt/blockbook/zec/logs diff --git a/build/deb/debian/blockbook-zec.install b/build/deb/debian/blockbook-zec.install new file mode 100755 index 00000000..e696a00b --- /dev/null +++ b/build/deb/debian/blockbook-zec.install @@ -0,0 +1,4 @@ +#!/usr/bin/dh-exec --with=install +blockbook /opt/blockbook/zec/bin +server/testcert.* /opt/blockbook/zec/cert +configs/zec.json => /opt/blockbook/zec/config/blockchaincfg.json diff --git a/build/deb/debian/blockbook-zec.links b/build/deb/debian/blockbook-zec.links new file mode 100644 index 00000000..251168f7 --- /dev/null +++ b/build/deb/debian/blockbook-zec.links @@ -0,0 +1,2 @@ +/opt/blockbook/zec/cert/testcert.crt /opt/blockbook/zec/cert/blockbook.crt +/opt/blockbook/zec/cert/testcert.key /opt/blockbook/zec/cert/blockbook.key diff --git a/build/deb/debian/blockbook-zec.logrotate b/build/deb/debian/blockbook-zec.logrotate new file mode 100644 index 00000000..2420567b --- /dev/null +++ b/build/deb/debian/blockbook-zec.logrotate @@ -0,0 +1,9 @@ +/opt/blockbook/zec/logs/blockbook.log +{ + rotate 7 + daily + compress + missingok + notifempty + copytruncate +} diff --git a/build/deb/debian/blockbook-zec.postinst b/build/deb/debian/blockbook-zec.postinst new file mode 100644 index 00000000..1212e626 --- /dev/null +++ b/build/deb/debian/blockbook-zec.postinst @@ -0,0 +1,20 @@ +#!/bin/bash +set -e + +case "$1" in + + configure) + if ! id -u blockbook &> /dev/null + then + useradd --system -M -U blockbook + fi + + if [ "$(stat -c '%U' /data/zec/blockbook)" != "blockbook" ] + then + chown -R blockbook:blockbook /data/zec/blockbook + fi + ;; + +esac + +#DEBHELPER# diff --git a/build/deb/debian/blockbook-zec.service b/build/deb/debian/blockbook-zec.service new file mode 100644 index 00000000..3cc3cd63 --- /dev/null +++ b/build/deb/debian/blockbook-zec.service @@ -0,0 +1,43 @@ +# It is not recommended to modify this file in-place, because it will +# be overwritten during package upgrades. If you want to add further +# options or overwrite existing ones then use +# $ systemctl edit blockbook-zec.service +# See "man systemd.service" for details. + +[Unit] +Description=Blockbook daemon (ZEC mainnet) +After=network.target + +[Service] +ExecStart=/opt/blockbook/zec/bin/blockbook -coin=zec -blockchaincfg=/opt/blockbook/zec/config/blockchaincfg.json -datadir=/data/zec/blockbook/db -sync -httpserver=:8235 -socketio=:8236 -certfile=/opt/blockbook/zec/cert/blockbook -explorer=https://zec-bitcore1.trezor.io/ +# Creates /run/blockbook owned by blockbook +RuntimeDirectory=blockbook +User=blockbook +# Type=forking +# PIDFile=/run/bitcoind/zec.pid +Restart=on-failure +StandardOutput=file:/opt/blockbook/zec/logs/blockbook.log +StandardError=file:/opt/blockbook/zec/logs/blockbook.log + +# Hardening measures +#################### + +# Provide a private /tmp and /var/tmp. +PrivateTmp=true + +# Mount /usr, /boot/ and /etc read-only for the process. +ProtectSystem=full + +# Disallow the process and all of its children to gain +# new privileges through execve(). +NoNewPrivileges=true + +# Use a new /dev namespace only populated with API pseudo devices +# such as /dev/null, /dev/zero and /dev/random. +PrivateDevices=true + +# Deny the creation of writable and executable memory mappings. +MemoryDenyWriteExecute=true + +[Install] +WantedBy=multi-user.target diff --git a/build/deb/debian/changelog b/build/deb/debian/changelog new file mode 100644 index 00000000..900e7276 --- /dev/null +++ b/build/deb/debian/changelog @@ -0,0 +1,5 @@ +blockbook (0.0.1-satoshilabs1) unstable; urgency=medium + + * Initial build + + -- Jakub Matys Fri, 06 Apr 2018 12:44:25 +0200 diff --git a/build/deb/debian/compat b/build/deb/debian/compat new file mode 100644 index 00000000..ec635144 --- /dev/null +++ b/build/deb/debian/compat @@ -0,0 +1 @@ +9 diff --git a/build/deb/debian/control b/build/deb/debian/control new file mode 100644 index 00000000..842894b8 --- /dev/null +++ b/build/deb/debian/control @@ -0,0 +1,21 @@ +Source: blockbook +Section: satoshilabs +Priority: optional +Maintainer: jakub.matys@satoshilabs.com +Build-Depends: debhelper, dh-systemd, dh-exec +Standards-Version: 3.9.5 + +Package: blockbook-btc +Architecture: amd64 +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Satoshilabs blockbook server + +Package: blockbook-btc-testnet +Architecture: amd64 +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Satoshilabs blockbook server + +Package: blockbook-zec +Architecture: amd64 +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Satoshilabs blockbook server diff --git a/build/deb/debian/rules b/build/deb/debian/rules new file mode 100755 index 00000000..6fc7e595 --- /dev/null +++ b/build/deb/debian/rules @@ -0,0 +1,9 @@ +#!/usr/bin/make -f + +DH_VERBOSE = 1 + +%: + dh $@ --with=systemd + +override_dh_strip: + dh_strip --no-automatic-dbgsym diff --git a/configs/btc-testnet.json b/configs/btc-testnet.json index 17275838..a58b662a 100644 --- a/configs/btc-testnet.json +++ b/configs/btc-testnet.json @@ -1,8 +1,8 @@ { - "rpcURL": "http://localhost:8332", + "rpcURL": "http://localhost:18332", "rpcUser": "rpc", "rpcPass": "rpc", "rpcTimeout": 25, "parse": true, - "zeroMQBinding": "tcp://127.0.0.1:28332" -} \ No newline at end of file + "zeroMQBinding": "tcp://127.0.0.1:18334" +} diff --git a/configs/btc.json b/configs/btc.json new file mode 100644 index 00000000..754f04b1 --- /dev/null +++ b/configs/btc.json @@ -0,0 +1,8 @@ +{ + "rpcURL": "http://127.0.0.1:8332", + "rpcUser": "rpc", + "rpcPass": "rpc", + "rpcTimeout": 25, + "parse": true, + "zeroMQBinding": "tcp://127.0.0.1:8334" +} diff --git a/configs/zec.json b/configs/zec.json new file mode 100644 index 00000000..e99cbf54 --- /dev/null +++ b/configs/zec.json @@ -0,0 +1,8 @@ +{ + "rpcURL": "http://127.0.0.1:8232", + "rpcUser": "rpc", + "rpcPass": "rpc", + "rpcTimeout": 25, + "parse": true, + "zeroMQBinding": "tcp://127.0.0.1:8234" +} diff --git a/docker/build.sh b/docker/build.sh deleted file mode 100755 index 106f3bef..00000000 --- a/docker/build.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -set -e - -cd `dirname $0` - -# prepare build image -docker build -t blockbook-build . - -if [ "$1" == "local" ]; then - SRC_BIND="-v $(pwd)/..:/go/src/blockbook" -fi - -# build binary -docker run -t --rm -v $(pwd):/out $SRC_BIND blockbook-build - -strip blockbook