GithubHelp home page GithubHelp logo

consensys / qubernetes Goto Github PK

View Code? Open in Web Editor NEW
52.0 35.0 33.0 94.89 MB

Quorum on Kubernetes.

Home Page: https://www.goquorum.com

JavaScript 1.42% Shell 19.02% HTML 21.19% Ruby 9.01% Dockerfile 0.77% Go 48.59%

qubernetes's Introduction

Qubernetes

⚠️ Project Deprecation Notice ⚠️

Qubernetes has been deprecated on December 31st 2021, and we are no longer supporting the project.

It has been replaced by quorum-kubernetes that offers wider compatibility with Quorum products and cloud providers

We encourage all users with active projects to migrate to quorum-kubernetes

If you have any questions or concerns, please reach out to the ConsenSys protocol engineering team on #Discord or by email.

Quorum on Kubernetes, including:

  • Quickest Start:
    To deploy 7nodes Tessera with IBFT run: ./quickest-start.sh
    To create and deploy an N node Quorum network run: ./quickest-start.sh $NUM
    To terminate the network run ./quickest-stop.sh

  • qctl: 🌟
    Quberentes command line tool.
    Most comprehensive way to create / interact with a quorum k8s network.
    Quberentes command line for initializing, deploying, modifying, interacting with a quorum K8s network.

    > qctl init
    > qclt generate network --create 
    > qctl deploy network
    

    see qctl for full set of commands.

  • 7 Node Example On K8s: runs quorum-examples on K8s.
    🎬   7nodes Demo

  • N Node Quorum Network On K8s: Generates the necessary Quorum resources (keys, configs - genesis, istanbul, etc.) and Kubernetes API resource yaml for a configurable N node Quorum Network based on a minimal config qubernetes.yaml.

Quickest Start

Requires docker to be running on your machine with sufficient memory ~8GB for a 7 node cluster.

# default 4 nodes IBFT network 
$> ./quickest-start.sh
# N node network
$> ./quickest-start.sh 4
# terminate
$> ./quickest-stop.sh

This:

  1. Installs Kind, a tool for running Kubernetes in Docker.
  2. Deletes any existing kind cluster named quickest-qube if it exist locally.
  3. Creates a new Kind cluster named quickest-qube.
  4. Deploys a 7 node quorum network (or an N node network) configured to use Tessera as the Transaction Manager, and IBFT as the consensus algorithm.

⭕️  note: if you experience issues with the nodes starting up, check dockers memory and/or try running a smaller network ./quickest-start.sh 3 .

Qubernetes Command line: qctl

> qctl init
> qclt generate network --create 
> qctl deploy network

Additional Resources

Accessing Nodes on K8s

e.g. The Quorum and Transaction Manager Containers

Note: The below commands assume that the quorum deployment was deployed to the default namespace.

$> kubectl get pods
NAME                                       READY   STATUS    RESTARTS   AGE
quorum-node1-deployment-57b6588b6b-5tqdr   1/2     Running   1          40s
quorum-node2-deployment-5f776b479c-f7kxs   2/2     Running   2          40s
....

# connnect to the running transaction manager on node1 (quorum-node1-deployment-57b6588b6b-5tqdr).
# assuming tessera was deployed as the transaction manager.
$> ./connect.sh node1 tessera
connecting to POD [quorum-node1-deployment-676684fddf-9gwxk]
/ >

# connect to the running quorum container
$> ./connect.sh node1 quorum
connecting to POD [quorum-node1-deployment-676684fddf-9gwxk]
/ >

# once inside the quorum container you can run transactions and connect to the geth console.

/ > geth attach $QHOME/dd/geth.ipc
> eth.blockNumber
> 0
> exit

# create some contracts (public and private)
/ > cd $QHOME/contracts
/ > ./runscript.sh public_contract.js
/ > ./runscript.sh private_contract.js

# you should now see the transactions go through
# note: if you are running IBFT (Istanbul BFT consensus) the blockNumber will increment at the user defined  
# (configurable) time interval.

/ > geth attach $QHOME/dd/geth.ipc
> eth.blockNumber
> 2

# show connected peers
> admin.peers.length
6
> exit

There is also a helper to attach to the geth console directly.
🎬     Geth Attach Demo

# from the root of the quberenetes repository
qubernetes $>  ./geth-attach node1

 datadir: /etc/quorum/qdata/dd
 modules: admin:1.0 debug:1.0 eth:1.0 istanbul:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

> eth.blockNumber
2

Demos

🎥 Step 1 Deploy 7nodes

Starts Kind K8s cluster (bottom screen) & deploy 7nodes (IBFT & Tessera) qubes-7nodes-kind

🎥 Step 2: Deploy a public and private transaction from node1

continued from above qubes-7nodes-run-contract

🎥 Step 3: Attach to the geth console

continued from above part 1 attach to geth from inside the container part 2 use helper ./geth-attach node1 qubes-7nodes-attach-geth

Generating Quorum and K8s Resources From Custom Configs

Qubernetes enables the creation of customized Quorum networks run on Kubernetes, providing a configurable number of Quorum and Transaction Manager nodes, and creating the associated genesis config, transaction manager config, permissioned-nodes.json, required keys, services, etc. to start the network.

If you have Docker installed, you are all set! Use the Docker Bootstrap Container.

If you do not wish to install Docker, follow the instructions in Install Prerequisites without Docker.

Once you have the prerequisites set up see Modifying The Qubernetes Config File for more information about configuring a custom deployment.

Docker Bootstrap Container

The Docker container quorumengineering/qubernetes has the necessary binaries installed to generate the necessary Quorum resources. If you have docker running, you don't have to worry about installing anything else.

Usage:

Note: qubernetes.yaml is not added to the docker container, as this file will change between various deployments.

The qubernetes.yaml file and the desired out directory will need to be mounted on the quorumengineering/qubernetes container using -v $PATH/ON/HOST/qubernetes.yaml:$PATH/ON/CONTAINTER/qubernetes.yaml, e.g. -v $(pwd)/cool-qubernetes.yaml:/qubernetes/qubernetes.yaml, see below:

  1. Use the default qubernetes.yaml in the base of the qubernetes repository. You may edit this file to create your custom quorum network
$> git clone https://github.com/ConsenSys/qubernetes.git
$> cd qubernetes
qubernetes $> docker run --rm -it -v $(pwd)/qubernetes.yaml:/qubernetes/qubernetes.yaml -v $(pwd)/out:/qubernetes/out  quorumengineering/qubernetes ./qube-init qubernetes.yaml
qubernetes $> ls out 

docker-qubernetes-boot-1 2. Generate Quorum and Kubernetes resources files from any directory using a custom configuration file, e.g. cool-qubernetes.yaml, you do not need to clone the repo, but mount the file cool-qubernetes.yaml and the out directory on the quorumengineering/qubernetes container, so the resources will be available after the container exits.

# from some directory containing a config file cool-qubernetes.yaml 
myDir$> ls
cool-qubernetes.yaml

# run docker and mount cool-qubernetes.yaml and the out directory
# a prompt will appear enter 1 to Delete the 'out' directory and generate new resources. 
myDir$> docker run --rm -it -v $(pwd)/cool-qubernetes.yaml:/qubernetes/cool-qubernetes.yaml -v $(pwd)/out:/qubernetes/out quorumengineering/qubernetes ./qube-init cool-qubernetes.yaml
using config file: cool-qubernetes.yaml

 The 'out' directory already exist.
 Please select the action you wish to take:

 [1] Delete the 'out' directory and generate new resources.
 [2] Update / add nodes that don't already exist.
 [3] Cancel.

1 

# The generated files and the k8s-yaml will be in the out directory.
myDir$> ls
cool-qubernetes.yaml out

docker-qubernetes-boot-2

  1. Exec into the quorumengineering/qubernetes container to run commands inside. This is useful for testing changes to the local ruby generator files. In this example, we are running the container from inside the base qubernetes directory, and mounting the entire directory, so it is as if we were running on our local host: the files from the host will be used, and generated files will be continue to exist after the container exists.
$> git clone https://github.com/ConsenSys/qubernetes.git
$> cd qubernetes 
qubernetes $> docker run --rm -it -v $(pwd):/qubernetes -ti quorumengineering/qubernetes
root@4eb772b14086:/qubernetes# ./qube-init

root@4eb772b14086:/qubernetes# ls out/
00-quorum-persistent-volumes.yaml  01-quorum-genesis.yaml  02-quorum-shared-config.yaml  03-quorum-services.yaml  04-quorum-keyconfigs.yaml  config  deployments

docker-qubernetes-boot-3

Modifying The Qubernetes Config File

example qubernetes.yaml is the simpliest config, and has many defaults set for you, which can be overridden see More Qubernetes Config Options qubernetes-yaml-marked

For starters, let's see how to modify qubernetes.yaml to change the number of nodes deployed in your network:

nodes:

  - Node_UserIdent: quorum-node1
    Key_Dir: key1
    quorum:
      quorum:
        # supported: (raft | istanbul)
        consensus: istanbul
        Quorum_Version: 21.7.1
      tm:
        # (tessera|constellation)
        Name: tessera
        Tm_Version: 21.7.2

  - Node_UserIdent: quorum-node2
    Key_Dir: key2
    quorum:
      quorum:
        # supported: (raft | istanbul)
        consensus: istanbul
        Quorum_Version: 21.7.1
      tm:
        # (tessera|constellation)
        Name: tessera
        Tm_Version: 21.7.2
# add more nodes if you'd like
#  - Node_UserIdent: quorum-node5
#    Key_Dir: key5
#    quorum:
#      quorum:
#        # supported: (raft | istanbul)
#        consensus: istanbul
#        Quorum_Version: 21.7.1
#      tm:
#        # (tessera|constellation)
#        Name: tessera
#        Tm_Version: 21.7.2
  • You can also run the ./quick-start-gen command to generate the core config
$> ./quick-start-gen --help

Usage: ./quick-start [options]
        --consensus[ACTION]          The consensus to use for the network (raft or istanbul), default istanbul
    -q, --quorum-version[ACTION]     The version of quorum to deploy, default 21.7.1
    -t, --tm-version[ACTION]         The version of the transaction manager to deploy, default 21.7.2
        --tm-name[ACTION]            The transaction manager (tessera|constellation) for the network, default tesera
    -c, --chain_id[ACTION]           The chain id for the network manager deploy, default 1000
    -n, --num-nodes[ACTION]          The number of nodes to deploy, default 4
    -h, --help                       prints this help

$> ./quick-start-gen --chain-id=10 --consensus=raft --quorum-version=21.7.1 --tm-version=21.7.2 --tm-name=tessera --num-nodes=7
  1. Once you have your core config, e.g. qubernetes.yaml configured with your desired parameters: Run ./qube-init to generate everything needed for the quorum deployment: quorum keys, genesis.json, istanbul-config.json, permissioned-nodes.json, etc.

These resources will be written and read from the directories specified in the qubernetes.yaml file. The default qubernetes.yaml is configured to write theses to the ./out/config directory.

Key_Dir_Base: out/config 
Permissioned_Nodes_File: out/config/permissioned-nodes.json
Genesis_File: out/config/genesis.json
## in this case, an out directory exists, so select `1`.
$> ./qube-init qubernetes.yaml
The 'out' directory already exist.
Please select the action you wish to take:

[1] Delete the 'out' directory and generate new resources.
[2] Update / add nodes that don't already exist.
[3] Cancel.

..

Creating all new resources.

  Generating keys...
INFO [01-14|17:05:09.402] Maximum peer count                       ETH=25 LES=0 total=25
INFO [01-14|17:05:11.302] Maximum peer count                       ETH=25 LES=0 total=25
INFO [01-14|17:05:13.160] Maximum peer count                       ETH=25 LES=0 total=25

After the Quorum resources have been generated, the necessary K8s resources will be created from them and all generated files will be in the out directory:

# list the  generated Quorum resources
$> ls out/config
genesis.json                   key2                           key5                           key8                           tessera-config-9.0.json
istanbul-validator-config.toml key3                           key6                           nodes.yaml                     tessera-config-enhanced.json
key1                           key4                           key7                           permissioned-nodes.json        tessera-config.json

# list the Kubernetes yaml files
$> ls out
00-quorum-persistent-volumes.yaml 02-quorum-shared-config.yaml      04-quorum-keyconfigs.yaml         config
01-quorum-genesis.yaml            03-quorum-services.yaml           deployments

# list the k8s deployment files
$> ls out/deployments

# deploy the resources
$> kubectl apply -f out -f out/deployments
01-quorum-single-deployment.yaml 03-quorum-single-deployment.yaml 05-quorum-single-deployment.yaml 07-quorum-single-deployment.yaml
02-quorum-single-deployment.yaml 04-quorum-single-deployment.yaml 06-quorum-single-deployment.yaml
  1. Once the Quorum resources have been generated, the ./qubernetes command can be run to generate variations of the Kubernetes Resources using those resources, e.g. ClusterIP vs NodePort. The ./qubernetes command can be run multiple times and is idempotent as long as the underlying Quorum resources and your core configuration file do not change.
# Generate the Kubernetes resources necessary to support a Quorum deployment
# this will be written to the `out` dir.
$> ./qubernetes qubernetes.yaml
  1. Deploy to your kubernetes cluster
# apply all the generated .yaml files that are in the ./out and ./out/deployments directory.
$> kubectl apply -f out -f out/deployments
  1. Deleting the deployment
$> kubectl delete -f out -f out/deployments

More Qubernetes Config Options

The directory examples/config contains various qubernetes config examples, such as adding K8s Ingress, K8s security context, etc.

example qubes-full.yaml qubes-full-yaml-marked

Thanks! And Additional Resources

Thanks to Maximilian Meister blog and code which provided an awesome starting point! and is a good read to understand the different components.

Getting Help

Stuck at some step? Please join our slack community for support.

qubernetes's People

Contributors

apratt3377 avatar atoulme avatar bmcd avatar fixanoid avatar jbhurat avatar joshuafernandes avatar libby avatar melihbirim avatar poma avatar prd-fox avatar rajpratik71 avatar tbondarchuk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qubernetes's Issues

sh: /bin/tini: not found when running cakeshop

Related Issue: Consensys/quorum-wizard#132

Description of problem

Starting Cakeshop using quorum-wizard fails when deploying

Expected behavior

Cakeshop to start

Actual behavior


kubectl  logs cakeshop-deployment-764887f8b6-dvnsn
+ cp /etc/cakeshop/cakeshop-nodes.json /cakeshop/cakeshop-nodes.json
+ sed -i s/QUORUM_NODE1_SERVICE_HOST/10.106.231.164/g /cakeshop/cakeshop-nodes.json
+ sed -i s/QUORUM_NODE2_SERVICE_HOST/10.101.149.218/g /cakeshop/cakeshop-nodes.json
+ sed -i s/QUORUM_NODE3_SERVICE_HOST/10.106.12.64/g /cakeshop/cakeshop-nodes.json
+ /bin/tini -- /usr/local/bin/cakeshop.sh
sh: /bin/tini: not found

Steps to reproduce the behavior

from: https://github.com/ConsenSys/quorum-wizard

  • npx quorum-wizard
  • Select K8s
  • run kubectl apply -f out -f out/deployments

System information

Cakeshop version or commit hash:

https://hub.docker.com/layers/quorumengineering/cakeshop/latest/images/sha256-c94c8fd200836c7109a40ee933444d7c50a0d6fe729d4658e6da76a8f775cec5?context=explore

quorumengineering/cakeshop:latest
DIGEST:sha256:c94c8fd200836c7109a40ee933444d7c50a0d6fe729d4658e6da76a8f775cec5

Cakeshop runtime configuration: Standalone

Geth/GoQuorum version testing against: [run geth version or copy from Node Info in UI]

https://github.com/ConsenSys/quorum-wizard/releases/tag/v1.3.1

Cakeshop OS & Version: Windows/Linux/OSX

Browser OS & Version: Windows/Linux/OSX MSIE/Chrome/Firefox/Safari

Backtrace/logs

Copy all relevant log output. Use Gist for longer logs.

[stacktrace/logs]

Add nodes to cakeshop when deployed.

When cakeshop is included in an K8s/Quorum qubernetes network, the nodes in the network should be automatically added to cakeshop at startup. Currently, the nodes have to be manually added when the network starts up.

Additionally when new nodes are added to the network, they could be added to cakeshop. This could be done by either:

  1. Modifying the initial node config and redeploying cakeshop so that it picks up the changes (K8s will automatically do this is the deployment file changes and kubectl apply out as it is when new nodes are added).

  2. Have cakeshop read off a file, nodeconfig and keep this in sync (pull ever X seconds), which would be the source of truth for the nodes that cakeshop should display (similar to permissioned-nodes.json in geth).

  3. Update via the API.

see:
https://github.com/ConsenSys/qubernetes/blob/master/examples/config/cakeshop.yaml
https://github.com/ConsenSys/qubernetes/blob/master/templates/k8s/cakeshop.yaml.erb

Tessera 3rd Party CORS

Tessera configs don't have cors enabled on 3rd party server port, so unable to use with remix

Received `invalid host specified` when connecting on RPC

I got the error: Error: Invalid JSON RPC response: "invalid host specified\n" when trying to connect to the 8545 through a traefik IngressRoute.

I tried adding:

            --rpccorsdomain=\"*\" --rpcvhosts=\"*\" --ws --wsorigins=\"*\" --wsaddr 0.0.0.0 \

to the deployment.yaml but did not work

Path Error when following Generating Quorum and K8s Resources From Custom Configs

I get a path error when trying to follow the https://github.com/ConsenSys/qubernetes#generating-quorum-and-k8s-resources-from-custom-configs process and running the following command on Windows with Git Bash.

docker run --rm -it -v $(pwd)/qubernetes.yaml:/qubernetes/qubernetes.yaml -v $(pwd)/out:/qubernetes/out  quorumengineering/qubernetes ./qube-init qubernetes.yaml

Error:

 docker run --rm -it -v $(pwd)/qubernetes.yaml:/qubernetes/qubernetes.yaml -v $(pwd)/out:/qubernetes/out  quorumengineering/qubernetes ./qube-init qubernetes.yaml

The command should generate the out directory but because of some interesting behavior between Windows + Docker and Qubernetes it generates a directory out;C and also a directory qubernetes.yaml;C. This suggests the volume mapping is a little weird. I may try to reproduce on a different windows PC.

error parsing out\01-quorum-shared-config.yaml: error converting YAML to JSON: yaml: line 5: mapping values are n ot allowed in this context

Ok,

generated a set of deployment files from a slightly modified config from the examples by using the Docker container, tried a deployment, and got the following error:

error parsing out\01-quorum-shared-config.yaml: error converting YAML to JSON: yaml: line 5: mapping values are not allowed in this context

When I did a diff with the working seven node example, I noticed that the generator creates one more file, which seems to have been merged in the 7 nodes examples. So, I replicated the exact same merge but without success.

Files attached.

Is there any practical way deploy the generated files on K8s?

gkes-gen.zip

Allow quorum/tessera ports to be configurable

In a previous commit, quorum and tessera ports (raft_port, tm_port, tm_3party_port, node_rpcPort, node_wsPort) are defaulted in qubernetes and the option to have them configurable was commented out.

Wizard uses these configurable ports when generating resources for a docker network to make sure that the docker-compose file it generates matches the port configurations in the resources that the qubernetes project generates. Wizard generates a containerPorts object in its config.json: https://github.com/ConsenSys/quorum-wizard/blob/master/src/model/ResourceConfig.js#L33

[Error] pull access denied for jpmorganchase/qubernetes

When trying out the bootstrap container, the following error occurs:

docker run -ti jpmorganchase/qubernetes

Unable to find image 'jpmorganchase/qubernetes:latest' locally
docker: Error response from daemon: pull access denied for jpmorganchase/qubernetes, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.

A quick look at dockerhub confirms, indeed, that there is no matching public repo.

Has the repo changed or is the bootstrap container just gone?

Fatal: Consensus not specified. Exiting!!

I use qctl to deploy quorum on k8s which is created by two nodes.
and I try use qubernetes(21.4.2 and 21.10.0 ver.) and tessera(21.4.1and 21.10.0) but every time I all get this fail on quorum container run.
image

Any one can give some suggesstion? 2 day spend block on this trouble for me

istanbul-tools fail to install.

updated: Replicated the error with go-lang v.1.13.

Trying to generate a custom configuration as outlined in the Readme.
However, istanbul-tools fail to install.

   # install
   $> go get github.com/getamis/istanbul-tools/cmd/istanbul  

Results in:

github.com/getamis/istanbul-tools/cmd/utils
github.com/getamis/istanbul-tools/cmd/istanbul/extra
# github.com/getamis/istanbul-tools/cmd/utils
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/utils/app.go:30:5: app.Author undefined (type *cli.App has no field or method Author)
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/utils/app.go:31:5: app.Email undefined (type *cli.App has no field or method Email)
github.com/getamis/istanbul-tools/vendor/github.com/ethereum/go-ethereum/rpc
# github.com/getamis/istanbul-tools/cmd/istanbul/extra
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/istanbul/extra/cmd.go:32:14: cannot use []cli.Command literal (type []cli.Command) as type []*cli.Command in field value
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/istanbul/extra/cmd.go:39:6: cannot use extraDataFlag (type cli.StringFlag) as type cli.Flag in array or slice literal:
        cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/istanbul/extra/cmd.go:51:6: cannot use configFlag (type cli.StringFlag) as type cli.Flag in array or slice literal:
        cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/istanbul/extra/cmd.go:52:6: cannot use validatorsFlag (type cli.StringFlag) as type cli.Flag in array or slice literal:
        cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/istanbul/extra/cmd.go:53:6: cannot use vanityFlag (type cli.StringFlag) as type cli.Flag in array or slice literal:
        cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
# github.com/getamis/istanbul-tools/vendor/github.com/ethereum/go-ethereum/rpc
/home/marvin/go/src/github.com/getamis/istanbul-tools/vendor/github.com/ethereum/go-ethereum/rpc/server.go:49:9: cannot use set.New() (type set.Interface) as type *set.Set in field value: need type assertion
/home/marvin/go/src/github.com/getamis/istanbul-tools/vendor/github.com/ethereum/go-ethereum/rpc/server.go:49:20: not enough arguments in call to set.New
        have ()
        want (set.SetType)
/home/marvin/go/src/github.com/getamis/istanbul-tools/vendor/github.com/ethereum/go-ethereum/rpc/websocket.go:59:20: not enough arguments in call to set.New
        have ()
        want (set.SetType)

Go version: 1.10
Also tested with go-lang version 1.13. Same error.

Go env

GOARCH="amd64"
GOBIN=""
GOCACHE="/home/marvin/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/marvin/go"
GORACE=""
GOROOT="/usr/lib/go-1.10"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go-1.10/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build780641180=/tmp/go-build -gno-record-gcc-switches"

When cloning the repo & running make to install manually, about the same error happens:

git clone https://github.com/getamis/istanbul-tools.git
cd istanbul-tools/
make

Results in:

go build -v -o ./build/bin/istanbul ./cmd/istanbul
github.com/getamis/istanbul-tools/cmd/utils
github.com/getamis/istanbul-tools/cmd/istanbul/extra
github.com/getamis/istanbul-tools/vendor/github.com/ethereum/go-ethereum/rpc
# github.com/getamis/istanbul-tools/cmd/utils
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/utils/app.go:30:5: app.Author undefined (type *cli.App has no field or method Author)
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/utils/app.go:31:5: app.Email undefined (type *cli.App has no field or method Email)
# github.com/getamis/istanbul-tools/cmd/istanbul/extra
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/istanbul/extra/cmd.go:32:14: cannot use []cli.Command literal (type []cli.Command) as type []*cli.Command in field value
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/istanbul/extra/cmd.go:39:6: cannot use extraDataFlag (type cli.StringFlag) as type cli.Flag in array or slice literal:
        cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/istanbul/extra/cmd.go:51:6: cannot use configFlag (type cli.StringFlag) as type cli.Flag in array or slice literal:
        cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/istanbul/extra/cmd.go:52:6: cannot use validatorsFlag (type cli.StringFlag) as type cli.Flag in array or slice literal:
        cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
/home/marvin/go/src/github.com/getamis/istanbul-tools/cmd/istanbul/extra/cmd.go:53:6: cannot use vanityFlag (type cli.StringFlag) as type cli.Flag in array or slice literal:
        cli.StringFlag does not implement cli.Flag (Apply method has pointer receiver)
# github.com/getamis/istanbul-tools/vendor/github.com/ethereum/go-ethereum/rpc
/home/marvin/go/src/github.com/getamis/istanbul-tools/vendor/github.com/ethereum/go-ethereum/rpc/server.go:49:9: cannot use set.New() (type set.Interface) as type *set.Set in field value: need type assertion
/home/marvin/go/src/github.com/getamis/istanbul-tools/vendor/github.com/ethereum/go-ethereum/rpc/server.go:49:20: not enough arguments in call to set.New
        have ()
        want (set.SetType)
/home/marvin/go/src/github.com/getamis/istanbul-tools/vendor/github.com/ethereum/go-ethereum/rpc/websocket.go:59:20: not enough arguments in call to set.New
        have ()
        want (set.SetType)
Makefile:6: recipe for target 'istanbul' failed
make: *** [istanbul] Error 2

Allow users to define nodePorts of services

Currently when defining quorum services as nodePort type, only the port and targetPort are set. Kubernetes selects the nodePort that allows external access to the services. Allowing users to choose nodePorts will provide further customization to the project

Clique Support

In addition to supporting RAFT and IBFT consensus qubernetes should also support Clique consensus

unable to access --asexternal tag as shown in quorum documentation

image
I have go version of 1.17 and qctl 0.20 version.
when i check for available tags in qctl ls nodes --help, i dont see --asexternal as available tag. I tried to use command anyway but it gave tag doesnt exist error.
Could you please help me in finding what is missing?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.