From e1420e5103df9d08deb8f4171608d996b627c5f0 Mon Sep 17 00:00:00 2001 From: Kim Neunert Date: Mon, 3 Feb 2020 22:37:41 +0100 Subject: [PATCH 1/2] docker improvements and tag support --- src/specter/bitcoind.py | 7 +++++-- src/specter/cli.py | 34 +++++++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/specter/bitcoind.py b/src/specter/bitcoind.py index 589f27df6..7e43092a5 100644 --- a/src/specter/bitcoind.py +++ b/src/specter/bitcoind.py @@ -185,10 +185,11 @@ class BitcoindPlainController(BitcoindController): class BitcoindDockerController(BitcoindController): ''' A class specifically controlling a docker-based bitcoind-container ''' - def __init__(self,rpcport=18443): + def __init__(self,rpcport=18443, docker_tag="latest"): self.btcd_container = None super().__init__(rpcport=rpcport) self.docker_exec = which('docker') + self.docker_tag=docker_tag if self.docker_exec == None: raise("Docker not existing!") if self.detect_bitcoind_container(rpcport) != None: @@ -204,7 +205,8 @@ class BitcoindDockerController(BitcoindController): '{}/tcp'.format(self.rpcconn.rpcport): self.rpcconn.rpcport } logging.debug("portmapping: {}".format(ports)) - self.btcd_container = dclient.containers.run("registry.gitlab.com/k9ert/specter-desktop/python-bitcoind:latest", bitcoind_path, ports=ports, detach=True) + image = dclient.images.get("registry.gitlab.com/cryptoadvance/specter-desktop/python-bitcoind:{}".format(self.docker_tag)) + self.btcd_container = dclient.containers.run("registry.gitlab.com/cryptoadvance/specter-desktop/python-bitcoind:{}".format(self.docker_tag), bitcoind_path, ports=ports, detach=True) def cleanup_docker_bitcoind(): self.btcd_container.stop() self.btcd_container.remove() @@ -217,6 +219,7 @@ class BitcoindDockerController(BitcoindController): raise Exception("Couldn't find container or it died already. Check the logs!") else: self.rpcconn = rpcconn + return def stop_bitcoind(self): diff --git a/src/specter/cli.py b/src/specter/cli.py index 62c7df26d..05fc3e9ec 100644 --- a/src/specter/cli.py +++ b/src/specter/cli.py @@ -2,6 +2,7 @@ via docker. ''' import os +import sys import atexit import logging import shutil @@ -23,20 +24,39 @@ def cli(): @cli.command() @click.option('--debug/--no-debug', default=False) @click.option('--mining/--no-mining', default=True) -def bitcoind(debug,mining): +@click.option('--docker-tag', "docker_tag", default="latest") +def bitcoind(debug,mining, docker_tag): mining_every_x_seconds = 15 if debug: logging.getLogger().setLevel(logging.DEBUG) click.echo(" --> starting or detecting container") - my_bitcoind = BitcoindDockerController() - my_bitcoind.start_bitcoind() - click.echo(" --> containerId: %s" % my_bitcoind.btcd_container.id) - click.echo(" --> url: %s" % my_bitcoind.rpcconn.render_url()) + my_bitcoind = BitcoindDockerController(docker_tag=docker_tag) + try: + my_bitcoind.start_bitcoind() + except docker.errors.ImageNotFound: + click.echo(" --> Image with tag {} does not exist!".format(docker_tag)) + click.echo(" --> Try to download first with docker pull registry.gitlab.com/cryptoadvance/specter-desktop/python-bitcoind:{}".format(docker_tag)) + sys.exit(1) + tags_of_image = [ image.split(":")[-1] for image in my_bitcoind.btcd_container.image.tags] + if not docker_tag in tags_of_image: + click.echo(" --> The running docker container is not the tag you requested!") + click.echo(" --> please stop first with docker stop {}".format(my_bitcoind.btcd_container.id)) + sys.exit(1) + click.echo(" --> containerImage: %s" % my_bitcoind.btcd_container.image.tags) + click.echo(" --> url: %s" % my_bitcoind.rpcconn.render_url()) + click.echo(" --> user, password: bitcoin, secret") + click.echo(" --> host, port: localhost, 18443") + click.echo(" --> bitcoin-cli: bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=secret getblockchaininfo ") if mining: click.echo(" --> Now, mining a block every %i seconds. Avoid it via --no-mining" % mining_every_x_seconds) # Get each address some coins - for address in fetch_wallet_addresses_for_mining(): - my_bitcoind.mine(address=address) + try: + for address in fetch_wallet_addresses_for_mining(): + my_bitcoind.mine(address=address) + except FileNotFoundError: + # might happen if there no ~/.specter folder yet + pass + # make them spendable my_bitcoind.mine(block_count=100) click.echo(" --> ",nl=False) From bc401ebf680bfdb869790f3a4cdd060bacfe1bce Mon Sep 17 00:00:00 2001 From: Kim Neunert Date: Tue, 4 Feb 2020 07:06:13 +0100 Subject: [PATCH 2/2] fix the build --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 2030a0f76..9d041d24b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,6 +40,7 @@ addons: - ccache before_install: + - docker pull registry.gitlab.com/cryptoadvance/specter-desktop/python-bitcoind:latest - set -o errexit; source ./tests/install_bitcoind.sh script: - pip install -e .