diff --git a/blockbook.go b/blockbook.go index 280f61ba..9df288f1 100644 --- a/blockbook.go +++ b/blockbook.go @@ -79,12 +79,14 @@ var ( chanOsSignal chan os.Signal ) +func init() { + glog.MaxSize = 1024 * 1024 + glog.CopyStandardLogTo("INFO") +} + func main() { flag.Parse() - // override setting for glog to log only to stderr, to match the http handler - flag.Lookup("logtostderr").Value.Set("true") - defer glog.Flush() chanOsSignal = make(chan os.Signal, 1) diff --git a/build/bin/Dockerfile b/build/bin/Dockerfile index 0317e72f..a84074e2 100644 --- a/build/bin/Dockerfile +++ b/build/bin/Dockerfile @@ -5,7 +5,7 @@ FROM debian:9 RUN apt-get update && \ apt-get install -y build-essential git wget pkg-config lxc-dev libzmq3-dev \ libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev \ - liblz4-dev graphviz upx-ucl && \ + liblz4-dev graphviz && \ apt-get clean ENV GOLANG_VERSION=go1.10.linux-amd64 diff --git a/build/bin/Makefile b/build/bin/Makefile index 74f8a2f9..3bdee2f5 100644 --- a/build/bin/Makefile +++ b/build/bin/Makefile @@ -1,6 +1,5 @@ build: prepare-sources cd $(GOPATH)/src/blockbook && go build -o $(CURDIR)/blockbook -ldflags="-s -w" - upx $(CURDIR)/blockbook cp $(CURDIR)/blockbook /out/blockbook chown $(PACKAGER) /out/blockbook diff --git a/build/deb/build-deb.sh b/build/deb/build-deb.sh index 0c064954..21aabdde 100755 --- a/build/deb/build-deb.sh +++ b/build/deb/build-deb.sh @@ -3,7 +3,7 @@ set -e cp -r /src/build/deb/debian . cp -r /src/configs . -mkdir server && cp /src/server/testcert.* server +mkdir server && cp -r /src/server/testcert.* /src/server/static server dpkg-buildpackage -us -uc mv ../*.deb /out diff --git a/build/deb/debian/blockbook-btc-testnet.install b/build/deb/debian/blockbook-btc-testnet.install index 58ed0672..cc143232 100755 --- a/build/deb/debian/blockbook-btc-testnet.install +++ b/build/deb/debian/blockbook-btc-testnet.install @@ -1,4 +1,5 @@ #!/usr/bin/dh-exec blockbook /opt/blockbook/btc-testnet/bin server/testcert.* /opt/blockbook/btc-testnet/cert +server/static /opt/blockbook/btc-testnet configs/btc-testnet.json => /opt/blockbook/btc-testnet/config/blockchaincfg.json diff --git a/build/deb/debian/blockbook-btc-testnet.logrotate b/build/deb/debian/blockbook-btc-testnet.logrotate deleted file mode 100644 index 624d120b..00000000 --- a/build/deb/debian/blockbook-btc-testnet.logrotate +++ /dev/null @@ -1,9 +0,0 @@ -/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 index 9f310abc..f7bfccbc 100644 --- a/build/deb/debian/blockbook-btc-testnet.postinst +++ b/build/deb/debian/blockbook-btc-testnet.postinst @@ -9,10 +9,13 @@ case "$1" in 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 + for dir in /data/btc-testnet/blockbook /opt/blockbook/btc-testnet/logs + do + if [ "$(stat -c '%U' $dir)" != "blockbook" ] + then + chown -R blockbook:blockbook $dir + fi + done ;; esac diff --git a/build/deb/debian/blockbook-btc-testnet.service b/build/deb/debian/blockbook-btc-testnet.service index ab84d20a..38fa52ad 100644 --- a/build/deb/debian/blockbook-btc-testnet.service +++ b/build/deb/debian/blockbook-btc-testnet.service @@ -9,15 +9,11 @@ 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 +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/ -log_dir=/opt/blockbook/btc-testnet/logs User=blockbook -# Type=forking -# PIDFile=/run/bitcoind/btc-testnet.pid +Type=simple Restart=on-failure -StandardOutput=file:/opt/blockbook/btc-testnet/logs/blockbook.log -StandardError=file:/opt/blockbook/btc-testnet/logs/blockbook.log +WorkingDirectory=/opt/blockbook/btc-testnet # Hardening measures #################### diff --git a/build/deb/debian/blockbook-btc.install b/build/deb/debian/blockbook-btc.install index fb662d95..29961515 100755 --- a/build/deb/debian/blockbook-btc.install +++ b/build/deb/debian/blockbook-btc.install @@ -1,4 +1,5 @@ #!/usr/bin/dh-exec blockbook /opt/blockbook/btc/bin server/testcert.* /opt/blockbook/btc/cert +server/static /opt/blockbook/btc configs/btc.json => /opt/blockbook/btc/config/blockchaincfg.json diff --git a/build/deb/debian/blockbook-btc.logrotate b/build/deb/debian/blockbook-btc.logrotate deleted file mode 100644 index 16b1f999..00000000 --- a/build/deb/debian/blockbook-btc.logrotate +++ /dev/null @@ -1,9 +0,0 @@ -/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 index 721e99f6..29b2c0fd 100644 --- a/build/deb/debian/blockbook-btc.postinst +++ b/build/deb/debian/blockbook-btc.postinst @@ -9,10 +9,13 @@ case "$1" in useradd --system -M -U blockbook fi - if [ "$(stat -c '%U' /data/btc/blockbook)" != "blockbook" ] - then - chown -R blockbook:blockbook /data/btc/blockbook - fi + for dir in /data/btc/blockbook /opt/blockbook/btc/logs + do + if [ "$(stat -c '%U' $dir)" != "blockbook" ] + then + chown -R blockbook:blockbook $dir + fi + done ;; esac diff --git a/build/deb/debian/blockbook-btc.service b/build/deb/debian/blockbook-btc.service index e5cf847a..4eaad785 100644 --- a/build/deb/debian/blockbook-btc.service +++ b/build/deb/debian/blockbook-btc.service @@ -9,15 +9,11 @@ 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 +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/ -log_dir=/opt/blockbook/btc/logs User=blockbook -# Type=forking -# PIDFile=/run/bitcoind/btc.pid +Type=simple Restart=on-failure -StandardOutput=file:/opt/blockbook/btc/logs/blockbook.log -StandardError=file:/opt/blockbook/btc/logs/blockbook.log +WorkingDirectory=/opt/blockbook/btc # Hardening measures #################### diff --git a/build/deb/debian/blockbook-zec.install b/build/deb/debian/blockbook-zec.install index e696a00b..d34066f5 100755 --- a/build/deb/debian/blockbook-zec.install +++ b/build/deb/debian/blockbook-zec.install @@ -1,4 +1,5 @@ #!/usr/bin/dh-exec --with=install blockbook /opt/blockbook/zec/bin server/testcert.* /opt/blockbook/zec/cert +server/static /opt/blockbook/zec configs/zec.json => /opt/blockbook/zec/config/blockchaincfg.json diff --git a/build/deb/debian/blockbook-zec.logrotate b/build/deb/debian/blockbook-zec.logrotate deleted file mode 100644 index 2420567b..00000000 --- a/build/deb/debian/blockbook-zec.logrotate +++ /dev/null @@ -1,9 +0,0 @@ -/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 index 1212e626..271b4603 100644 --- a/build/deb/debian/blockbook-zec.postinst +++ b/build/deb/debian/blockbook-zec.postinst @@ -9,10 +9,13 @@ case "$1" in useradd --system -M -U blockbook fi - if [ "$(stat -c '%U' /data/zec/blockbook)" != "blockbook" ] - then - chown -R blockbook:blockbook /data/zec/blockbook - fi + for dir in /data/zec/blockbook /opt/blockbook/zec/logs + do + if [ "$(stat -c '%U' $dir)" != "blockbook" ] + then + chown -R blockbook:blockbook $dir + fi + done ;; esac diff --git a/build/deb/debian/blockbook-zec.service b/build/deb/debian/blockbook-zec.service index 3cc3cd63..9db3aed7 100644 --- a/build/deb/debian/blockbook-zec.service +++ b/build/deb/debian/blockbook-zec.service @@ -9,15 +9,11 @@ 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 +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/ -log_dir=/opt/blockbook/zec/logs User=blockbook -# Type=forking -# PIDFile=/run/bitcoind/zec.pid +Type=simple Restart=on-failure -StandardOutput=file:/opt/blockbook/zec/logs/blockbook.log -StandardError=file:/opt/blockbook/zec/logs/blockbook.log +WorkingDirectory=/opt/blockbook/zec # Hardening measures #################### diff --git a/build/deb/debian/control b/build/deb/debian/control index 292a1555..5ab64d64 100644 --- a/build/deb/debian/control +++ b/build/deb/debian/control @@ -2,20 +2,20 @@ Source: blockbook Section: satoshilabs Priority: optional Maintainer: jakub.matys@satoshilabs.com -Build-Depends: debhelper, dh-systemd, dh-exec, upx +Build-Depends: debhelper, dh-systemd, dh-exec Standards-Version: 3.9.5 Package: blockbook-btc Architecture: amd64 -Depends: ${shlibs:Depends}, ${misc:Depends} +Depends: ${shlibs:Depends}, ${misc:Depends}, coreutils, passwd, findutils Description: Satoshilabs blockbook server Package: blockbook-btc-testnet Architecture: amd64 -Depends: ${shlibs:Depends}, ${misc:Depends} +Depends: ${shlibs:Depends}, ${misc:Depends}, coreutils, passwd, findutils Description: Satoshilabs blockbook server Package: blockbook-zec Architecture: amd64 -Depends: ${shlibs:Depends}, ${misc:Depends} +Depends: ${shlibs:Depends}, ${misc:Depends}, coreutils, passwd, findutils Description: Satoshilabs blockbook server diff --git a/server/https.go b/server/https.go index e135818d..cf073e9e 100644 --- a/server/https.go +++ b/server/https.go @@ -8,12 +8,10 @@ import ( "errors" "fmt" "net/http" - "os" "strconv" "github.com/golang/glog" - "github.com/gorilla/handlers" "github.com/gorilla/mux" "github.com/prometheus/client_golang/prometheus/promhttp" ) @@ -30,8 +28,10 @@ type HTTPServer struct { // NewHTTPServer creates new REST interface to blockbook and returns its handle func NewHTTPServer(httpServerBinding string, certFiles string, db *db.RocksDB, chain bchain.BlockChain, txCache *db.TxCache) (*HTTPServer, error) { + r := mux.NewRouter() https := &http.Server{ - Addr: httpServerBinding, + Addr: httpServerBinding, + Handler: r, } s := &HTTPServer{ https: https, @@ -42,7 +42,6 @@ func NewHTTPServer(httpServerBinding string, certFiles string, db *db.RocksDB, c chainParser: chain.GetChainParser(), } - r := mux.NewRouter() r.HandleFunc("/", s.info) r.HandleFunc("/bestBlockHash", s.bestBlockHash) r.HandleFunc("/blockHash/{height}", s.blockHash) @@ -51,10 +50,6 @@ func NewHTTPServer(httpServerBinding string, certFiles string, db *db.RocksDB, c r.HandleFunc("/unconfirmedTransactions/{address}", s.unconfirmedTransactions) r.HandleFunc("/metrics", promhttp.Handler().ServeHTTP) - var h http.Handler = r - h = handlers.LoggingHandler(os.Stderr, h) - https.Handler = h - return s, nil } diff --git a/server/socketio.go b/server/socketio.go index 2e91a3bc..dc84af64 100644 --- a/server/socketio.go +++ b/server/socketio.go @@ -76,7 +76,7 @@ func NewSocketIoServer(binding string, certFiles string, db *db.RocksDB, chain b } // support for tests of socket.io interface - serveMux.Handle(path+"test.html", http.FileServer(http.Dir("./server/static/"))) + serveMux.Handle(path+"test.html", http.FileServer(http.Dir("./static/"))) // redirect to Bitcore for details of transaction serveMux.HandleFunc(path+"tx/", s.txRedirect) // handle socket.io