You need to have Ubuntu 16.04 and up Virtual Machine running.
The VM MUST have 8GB RAM and 21GB free space on the HDD or the eos_build.sh will fail.
Install all the updates to brink the system up to date and restart it.
Now inside Ubuntu open a terminal (ctrl-alt-t).
sudo apt install git
git clone https://github.com/EOS-Mainnet/eos -b mainnet-18.104.22.168
git submodule update --init --recursive
./eosio_build.sh -s EOS
This takes between 1 and 2 hours and you will be asked a couple of times for your ubuntu password.
That is normal.
sudo make install
nodeos --genesis-json genesis.json
Now press (ctrl-c) to exit nodeos and type:
mv ~/.local/share/eosio/nodeos/config/config.ini ~/.local/share/eosio/nodeos/config/config.ini.orig
cat > ~/.local/share/eosio/nodeos/config/config.ini
and copy paste the following:
# the endpoint upon which to listen for incoming connections (eosio::bnet_plugin) bnet-endpoint = 0.0.0.0:4321 # the number of threads to use to process network messages (eosio::bnet_plugin) # bnet-threads = # remote endpoint of other node to connect to; Use multiple bnet-connect options as needed to compose a network (eosio::bnet_plugin) # bnet-connect = # this peer will request no pending transactions from other nodes (eosio::bnet_plugin) bnet-no-trx = false # the location of the blocks directory (absolute path or relative to application data dir) (eosio::chain_plugin) blocks-dir = "blocks" # Pairs of [BLOCK_NUM,BLOCK_ID] that should be enforced as checkpoints. (eosio::chain_plugin) # checkpoint = # Override default WASM runtime (eosio::chain_plugin) # wasm-runtime = # Maximum size (in MB) of the chain state database (eosio::chain_plugin) chain-state-db-size-mb = 1024 # Maximum size (in MB) of the reversible blocks database (eosio::chain_plugin) reversible-blocks-db-size-mb = 340 # print contract's output to console (eosio::chain_plugin) contracts-console = false # Account added to actor whitelist (may specify multiple times) (eosio::chain_plugin) # actor-whitelist = # Account added to actor blacklist (may specify multiple times) (eosio::chain_plugin) # actor-blacklist = # Contract account added to contract whitelist (may specify multiple times) (eosio::chain_plugin) # contract-whitelist = # Contract account added to contract blacklist (may specify multiple times) (eosio::chain_plugin) # contract-blacklist = # Action (in the form code::action) added to action blacklist (may specify multiple times) (eosio::chain_plugin) # action-blacklist = # Track actions which match receiver:action:actor. Actor may be blank to include all. Receiver and Action may not be blank. (eosio::history_plugin) # filter-on = # PEM encoded trusted root certificate (or path to file containing one) used to validate any TLS connections made. (may specify multiple times) # (eosio::http_client_plugin) # https-client-root-cert = # true: validate that the peer certificates are valid and trusted, false: ignore cert errors (eosio::http_client_plugin) https-client-validate-peers = 1 # The local IP and port to listen for incoming http connections; set blank to disable. (eosio::http_plugin) http-server-address = 127.0.0.1:8888 # The local IP and port to listen for incoming https connections; leave blank to disable. (eosio::http_plugin) # https-server-address = # Filename with the certificate chain to present on https connections. PEM format. Required for https. (eosio::http_plugin) # https-certificate-chain-file = # Filename with https private key in PEM format. Required for https (eosio::http_plugin) # https-private-key-file = # Specify the Access-Control-Allow-Origin to be returned on each request. (eosio::http_plugin) # access-control-allow-origin = # Specify the Access-Control-Allow-Headers to be returned on each request. (eosio::http_plugin) # access-control-allow-headers = # Specify the Access-Control-Max-Age to be returned on each request. (eosio::http_plugin) # access-control-max-age = # Specify if Access-Control-Allow-Credentials: true should be returned on each request. (eosio::http_plugin) access-control-allow-credentials = false # The actual host:port used to listen for incoming p2p connections. (eosio::net_plugin) p2p-listen-endpoint = 0.0.0.0:9876 # An externally accessible host:port for identifying this node. Defaults to p2p-listen-endpoint. (eosio::net_plugin) # p2p-server-address = p2p-peer-address = node1.eosnewyork.io:6987 p2p-peer-address = node1.eosphere.io:9876 p2p-peer-address = node2.blockeos.io:9987 p2p-peer-address = node2.eosarmy.io:3330 p2p-peer-address = node2.eosnewyork.io:6987 p2p-peer-address = node2.eosphere.io:9876 p2p-peer-address = mainnet.bepal.io:8866 p2p-peer-address = mainnet.eos.ren:9376 p2p-peer-address = mainnet.eosarabia.org:3571 p2p-peer-address = mainnet.eoscalgary.io:5222 p2p-peer-address = mainnet.eoseco.com:10010 p2p-peer-address = mainnet.eosoasis.io:9876 p2p-peer-address = mainnet.eospay.host:19876 p2p-peer-address = mainnet.eoswz.com:8866 p2p-peer-address = mainnet2.eostaxrelief.com:9876 p2p-peer-address = mars.fnp2p.eosbixin.com:443 # The public endpoint of a peer node to connect to. Use multiple p2p-peer-address options as needed to compose a network. (eosio::net_plugin) # p2p-peer-address = # Maximum number of client0nodes from any single IP address (eosio::net_plugin) p2p-max-nodes-per-host = 1 # The name supplied to identify this node amongst the peers. (eosio::net_plugin) agent-name = "EOS Test Agent" # Can be 'any' or 'producers' or 'specified' or 'none'. If 'specified', peer-key must be specified at least once. If only 'producers', peer-key is not required. 'producers' and 'specified' may be combined. (eosio::net_plugin) allowed-connection = any # Optional public key of peer allowed to connect. May be used multiple times. (eosio::net_plugin) # peer-key = # Tuple of [PublicKey, WIF private key] (may specify multiple times) (eosio::net_plugin) # peer-private-key = # Maximum number of clients from which connections are accepted, use 0 for no limit (eosio::net_plugin) max-clients = 25 # number of seconds to wait before cleaning up dead connections (eosio::net_plugin) connection-cleanup-period = 30 # True to require exact match of peer network version. (eosio::net_plugin) network-version-match = 0 # number of blocks to retrieve in a chunk from any individual peer during synchronization (eosio::net_plugin) sync-fetch-span = 100 # maximum sizes of transaction or block messages that are sent without first sending a notice (eosio::net_plugin) max-implicit-request = 1500 # Enable block production, even if the chain is stale. (eosio::producer_plugin) enable-stale-production = false # Start this node in a state where production is paused (eosio::producer_plugin) pause-on-startup = false # Limits the maximum time (in milliseconds) that is allowed a pushed transaction's code to execute before being considered invalid (eosio::producer_plugin) max-transaction-time = 30 # Limits the maximum age (in seconds) of the DPOS Irreversible Block for a chain this node will produce blocks on (use negative value to indicate unlimited) (eosio::producer_plugin) max-irreversible-block-age = -1 # ID of producer controlled by this node (e.g. inita; may specify multiple times) (eosio::producer_plugin) # producer-name = # (DEPRECATED - Use signature-provider instead) Tuple of [public key, WIF private key] (may specify multiple times) (eosio::producer_plugin) # private-key = # Key=Value pairs in the form <public-key>=<provider-spec> # Where: # <public-key> is a string form of a vaild EOSIO public key # # <provider-spec> is a string in the form <provider-type>:<data> # # <provider-type> is KEY, or KEOSD # # KEY:<data> is a string form of a valid EOSIO private key which maps to the provided public key # # KEOSD:<data> is the URL where keosd is available and the approptiate wallet(s) are unlocked (eosio::producer_plugin) signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 # Limits the maximum time (in milliseconds) that is allowd for sending blocks to a keosd provider for signing (eosio::producer_plugin) keosd-provider-timeout = 5 # Lag in number of blocks from the head block when selecting the reference block for transactions (-1 means Last Irreversible Block) (eosio::txn_test_gen_plugin) txn-reference-block-lag = 0 # The path of the wallet files (absolute path or relative to application data dir) (eosio::wallet_plugin) wallet-dir = "." # Timeout for unlocked wallet in seconds (default 900 (15 minutes)). Wallets will automatically lock after specified number of seconds of inactivity. Activity is defined as any wallet command e.g. list-wallets. (eosio::wallet_plugin) unlock-timeout = 900 # eosio key that will be imported automatically when a wallet is created. (eosio::wallet_plugin) # eosio-key = # Plugin(s) to enable, may be specified multiple timeshttps://github.com/greymass/eos-voter/releases/download/v0.1.5/eos-voter_0.1.5_amd64.deb # plugin = plugin = eosio::chain_plugin plugin = eosio::chain_api_plugin
Now press (ctrl-d) to save the config.ini
Run nodeos again without any parameters and wait for the blockchain download.
Now you can use cleos to vote.
But I prefer to use eos-voter from greymass https://github.com/greymass/eos-voter/releases
Download the eos-voter_0.x.x_amd64.deb with firefox and install it by clicking on the downloaded image.
run eos-voter and in the Wallet API URL enter:
and you are now connect to your local copy of the EOS blockchain
entering your Account Name and clicking Wallet you will see your balances.
now back to Producer Voting tab.
In order to vote you will have to enter your Private Key. It's your choice. You can also use cleos for voting at this point.
After voting you can completely remove the Ubuntu VM, together with any traces of your private key.