Running an Ethereum node from source under Ubuntu 16 LTS

This howto is made to show you how to run an Ethereum node. To run an Ethereum node we need the

geth

program to start and wait for the network synchronization – our Ethereum node will receive all the blockchains of the network!
After a successful Ethereum network synchronization we can send and receive coins securely ourselves! No other online service offers us secure sending and receiving of transcations and creation of wallet, the only way a crypto user could be absolutely sure the private key is seen only from him and is generated on his server is to become part of the Ethereum network and create your wallet with “geth” manually by the user himself.
And also be warned DO NOT use insecure sources when:

  1. installing Ubuntu, install it from a cd/dvd/usb downloaded from the official Ubuntu site here.
  2. installing all the needed dependencies from official sources only, not recommended the PPA reposigories, neither!
  3. install yourself the “geth” program, which will create an Ethereum node and after network synchronization could be used to create an Ethereum node.

Three simple rules could almost eliminate leaking your private key to hackers, which in blockchain world means losing your money…
And before start the installation a performance advice do not attempt to run an Ethereum node in a hard disk –

USE SSD

If you use a hard disk even in RAID configuration it could take several days for network synchronization and probably your machine will be useless during the synchronization.

So here are the steps to create from a scratch an Ethereum node:

STEP 1) Install Ubuntu 16 – our howto will be available soon here.

STEP 2) Building from source an Ethereum node

Check out our howto“Building from source an Ethereum node under Ubuntu 16 LTS”.

STEP 3) Start the Ethereum node

if you have followed the howto in STEP 2) you probably have “geth” installed in “~/go-ethereum/build/bin”, so first running it with:

ubuntu@srv.local:~/go-ethereum/build/bin$ ./geth --rpc --fast --cache=8144 &> ./geth.log

STEP 3) Wait for the blockchain network synchronization

When you run “geth” it will check the current state of the network and the current state of your Ethereum node, so no matter it is started for the first time or not a network synchronization is needed, your node need to be synchronized with the Ethereum network to be used for all kind of actions in the network (create a wallet, transfer funds and more).
Here is the output of just started Ethereum node:

INFO [02-27|19:14:02] Maximum peer count                       ETH=25 LES=0 total=25
INFO [02-27|19:14:02] Starting peer-to-peer node               instance=Geth/v1.8.2-unstable-b574b577/linux-amd64/go1.9.4
INFO [02-27|19:14:02] Allocated cache and file handles         database=/home/ubuntu/.ethereum/geth/chaindata cache=6108 handles=512
INFO [02-27|19:14:02] Writing default main-net genesis block 
INFO [02-27|19:14:03] Persisted trie from memory database      nodes=12356 size=2.34mB time=49.406185ms gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [02-27|19:14:03] Initialised chain configuration          config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Byzantium: 4370000 Constantinople: <nil> Engine: ethash}"
INFO [02-27|19:14:03] Disk storage enabled for ethash caches   dir=/home/ubuntu/.ethereum/geth/ethash count=3
INFO [02-27|19:14:03] Disk storage enabled for ethash DAGs     dir=/home/ubuntu/.ethash               count=2
INFO [02-27|19:14:03] Initialising Ethereum protocol           versions="[63 62]" network=1
INFO [02-27|19:14:03] Loaded most recent local header          number=0 hash=d4e567…cb8fa3 td=17179869184
INFO [02-27|19:14:03] Loaded most recent local full block      number=0 hash=d4e567…cb8fa3 td=17179869184
INFO [02-27|19:14:03] Loaded most recent local fast block      number=0 hash=d4e567…cb8fa3 td=17179869184
INFO [02-27|19:14:03] Regenerated local transaction journal    transactions=0 accounts=0
INFO [02-27|19:14:03] Starting P2P networking 
INFO [02-27|19:14:05] UDP listener up                          self=enode://4ee1f43cc597fa829a04ec97dee38ad4f2c61f39f0f0e5ebd46e095c660cc95aab71eef55b0db9fd64d0afaeb589a8d9cb3eb86fdc07e32183648bc89dbd4aca@[::]:30303
INFO [02-27|19:14:05] RLPx listener up                         self=enode://4ee1f43cc597fa829a04ec97dee38ad4f2c61f39f0f0e5ebd46e095c660cc95aab71eef55b0db9fd64d0afaeb589a8d9cb3eb86fdc07e32183648bc89dbd4aca@[::]:30303
INFO [02-27|19:14:05] HTTP endpoint opened                     url=http://127.0.0.1:8545 cors= vhosts=localhost
INFO [02-27|19:14:05] IPC endpoint opened                      url=/home/ubuntu/.ethereum/geth.ipc
INFO [02-27|19:14:45] Block synchronisation started 
WARN [02-27|19:14:53] Synchronisation failed, retrying         err="block download canceled (requested)"
WARN [02-27|19:14:56] Node data write error                    err="state node 6aa064…378280 failed with all peers (1 tries, 1 peers)"
WARN [02-27|19:14:56] Synchronisation failed, retrying         err="state node 6aa064…378280 failed with all peers (1 tries, 1 peers)"
WARN [02-27|19:15:07] Node data write error                    err="state node 6aa064…378280 failed with all peers (3 tries, 3 peers)"
WARN [02-27|19:15:07] Synchronisation failed, retrying         err="state node 6aa064…378280 failed with all peers (3 tries, 3 peers)"
INFO [02-27|19:15:20] Imported new block headers               count=192 elapsed=1.115s number=192 hash=723899…123390 ignored=0
INFO [02-27|19:15:20] Imported new block receipts              count=2   elapsed=80.248µs number=2   hash=b495a1…4698c9 size=8.00B  ignored=0
INFO [02-27|19:15:20] Imported new block headers               count=192 elapsed=19.822ms number=384 hash=d3d5d5…c79cf3 ignored=0
INFO [02-27|19:15:21] Imported new block receipts              count=4   elapsed=117.07µs number=6   hash=1f1aed…6b326e size=1.10kB ignored=0
INFO [02-27|19:15:22] Imported new block headers               count=2048 elapsed=146.493ms number=2432 hash=78a9e6…079de3 ignored=0

As you can see the node connects to another nodes and receives blockchains and saves them to its local database. At present (late February 2017) a fully synchronized Ethereum node takes 59 Gigabytes of space, but this number will changed when you run your node.

STEP 3) Check the progress of the Ethereum network synchronization

The progress of Ethereum node synchronization could be checked with the “geth” program. Execute in the console:

ubuntu@srv.local:~/go-ethereum/build/bin$ ./geth --exec "web3.eth.syncing" attach
{
  currentBlock: 388,
  highestBlock: 5159514,
  knownStates: 0,
  pulledStates: 0,
  startingBlock: 0
}
ubuntu@srv.local:~/go-ethereum/build/bin$ ./geth --exec "web3.eth.syncing" attach
{
  currentBlock: 401,
  highestBlock: 5159514,
  knownStates: 0,
  pulledStates: 0,
  startingBlock: 0
}

As you can see we are at the very beginning here, we’ve received 401 of total 5159514 in the network.

After around 2 hours we are at 4882892 of total 5166333 in the network.

ubuntu@srv.local:~/go-ethereum/build/bin$ ./geth --exec "web3.eth.syncing" attach
{
  currentBlock: 4882892,
  highestBlock: 5166333,
  knownStates: 4806466,
  pulledStates: 4800942,
  startingBlock: 0
}

It is normal the highest block to increment, because the network is used intensively.
STEP 4) Successful full synchronization – how to check and to be sure
When you are almost then like in the last section of the STEP 3) you’ll begin to see lines in the geth output like:

INFO [02-28|01:46:28] Imported new block headers               count=0    elapsed=1.281ms   number=5168639 hash=433308…1a710e ignored=71

and when you execute geth with “web3.eth.syncing”:

ubuntu@srv.local:~/go-ethereum/build/bin$ ./geth --exec "web3.eth.syncing" attach
false

The node will keep on receiving new blocks, so synchronization is triggered again, syncing the received blocks and stops again. So when transferring funds or creating a wallet or any other action there will be triggered a synchronization and then execution of the action. There is a callback for when sync starts and stops. If you cannot see multiple times “false” after the last synchronization check with geth, but your are almost at the highest block, no need to worry everything is OK, you node is almost fully synchronized and can be used.

At present with SSD and 32G RAM on a intel i7 processor and a fast Internet connection 100Mbps the full synchronization took about 8 hours.

Building from source an Ethereum node under Ubuntu 16 LTS

The program, which makes an Ethereum node in your computer, is called

geth

. “geth” is written using the GO language and the latest version depends on GO version 1.7+. Ubuntu 16 LTS has GO language package version 1.6 so to build it from source we need first to install a proper version of GO Language.

STEP 1) Install a proper version of GO Language 1.7+

In our tutorial you will install 1.9 using this howto: “Install GO language in Ubuntu 16 LTS from the official site package”

STEP 2) Update your system and install dependencies

sudo apt-get update -y
sudo apt-get install -y build-essential libgmp3-dev git

STEP 3) Get the “geth” code and compile it

git clone https://github.com/ethereum/go-ethereum
cd go-ethereum
make geth

STEP 4) Check is everything is OK, installed geth version 1.8.2-unstable

srv@local:~/go-ethereum$ cd ./build/bin
srv@local:~/go-ethereum/build/bin$ ./geth version
Geth
Version: 1.8.2-unstable
Git Commit: b574b5776695eb30e034fd8c7a468b3f03d4c6b9
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.9.4
Operating System: linux
GOPATH=
GOROOT=/usr/local/go

* Next tutorial is getting the node up and running here!

* Troubleshooting

  • if you get
    ~/go-ethereum$ make geth
    build/env.sh go run build/ci.go install ./cmd/geth
    build/env.sh: 30: exec: go: not found
    Makefile:15: recipe for target 'geth' failed
    make: *** [geth] Error 127
    

    You did not install properly go, check our manual here: “Install GO language in Ubuntu 16 LTS from the official site package”. Check whether you source /etc/profile in your current ssh/console/login session, check if you exported the PATH, your PATH must include “your_goinstallation_path/bin”, it’s like “/usr/local/go”.

  • if you get
    ~/go-ethereum$ make geth
    build/env.sh go run build/ci.go install ./cmd/geth
    ci.go:190: You have Go version go1.6.2
    ci.go:191: go-ethereum requires at least Go version 1.7 and cannot
    ci.go:192: be compiled with an earlier version. Please upgrade your Go installation.
    exit status 1
    Makefile:15: recipe for target 'geth' failed
    make: *** [geth] Error 1
    

    The installation just uses the default installed GO language of your system, which is 1.6 and is not supported by the “geth” Ethereum program. There are two options:

When we talk for crypto currency the best source is always the GIT version (probably the best one is the stable tag, but it is safe to use the unstable, too), it is most secure source you could get. Do not download from 3rd party sites or unofficial repositories, you could lose your money.

* Here is the building output

srv@local:~/go-ethereum$ make geth
build/env.sh go run build/ci.go install ./cmd/geth
>>> /usr/local/go/bin/go install -ldflags -X main.gitCommit=b574b5776695eb30e034fd8c7a468b3f03d4c6b9 -v ./cmd/geth
github.com/ethereum/go-ethereum/crypto/sha3
github.com/ethereum/go-ethereum/common/math
github.com/ethereum/go-ethereum/rlp
github.com/ethereum/go-ethereum/vendor/github.com/go-stack/stack
github.com/ethereum/go-ethereum/common/hexutil
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/util
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/comparer
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/storage
github.com/ethereum/go-ethereum/crypto/secp256k1
github.com/ethereum/go-ethereum/vendor/github.com/golang/snappy
github.com/ethereum/go-ethereum/log
github.com/ethereum/go-ethereum/vendor/gopkg.in/karalabe/cookiejar.v2/collections/prque
github.com/ethereum/go-ethereum/common
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/cache
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/filter
github.com/ethereum/go-ethereum/vendor/github.com/aristanetworks/goarista/monotime
github.com/ethereum/go-ethereum/common/mclock
github.com/ethereum/go-ethereum/event
github.com/ethereum/go-ethereum/crypto/randentropy
github.com/ethereum/go-ethereum/vendor/github.com/pborman/uuid
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/opt
github.com/ethereum/go-ethereum/vendor/golang.org/x/sys/unix
github.com/ethereum/go-ethereum/vendor/golang.org/x/crypto/pbkdf2
github.com/ethereum/go-ethereum/params
github.com/ethereum/go-ethereum/vendor/golang.org/x/crypto/scrypt
github.com/ethereum/go-ethereum/vendor/gopkg.in/fatih/set.v0
github.com/ethereum/go-ethereum/cmd/internal/browser
github.com/ethereum/go-ethereum/metrics
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/errors
github.com/ethereum/go-ethereum/common/fdlimit
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/iterator
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/journal
github.com/ethereum/go-ethereum/vendor/github.com/hashicorp/golang-lru/simplelru
github.com/ethereum/go-ethereum/vendor/golang.org/x/net/context
github.com/ethereum/go-ethereum/vendor/github.com/hashicorp/golang-lru
github.com/ethereum/go-ethereum/vendor/golang.org/x/net/websocket
github.com/ethereum/go-ethereum/vendor/github.com/edsrzf/mmap-go
github.com/ethereum/go-ethereum/common/bitutil
github.com/ethereum/go-ethereum/vendor/github.com/rs/xhandler
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/memdb
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb/table
github.com/ethereum/go-ethereum/crypto/bn256
github.com/ethereum/go-ethereum/vendor/github.com/rs/cors
github.com/ethereum/go-ethereum/vendor/golang.org/x/crypto/ripemd160
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/httpu
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/scpd
github.com/ethereum/go-ethereum/vendor/github.com/syndtr/goleveldb/leveldb
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/soap
github.com/ethereum/go-ethereum/rpc
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/ssdp
github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify
github.com/ethereum/go-ethereum/vendor/github.com/elastic/gosigar
github.com/ethereum/go-ethereum/vendor/golang.org/x/net/html/atom
github.com/ethereum/go-ethereum/vendor/golang.org/x/net/html
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/internal/identifier
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/transform
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/internal/utf8internal
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/internal/tag
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/language
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/runes
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/internal
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/charmap
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/japanese
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/korean
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/simplifiedchinese
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/traditionalchinese
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/unicode
github.com/ethereum/go-ethereum/ethdb
github.com/ethereum/go-ethereum/vendor/github.com/jackpal/go-nat-pmp
github.com/ethereum/go-ethereum/p2p/netutil
github.com/ethereum/go-ethereum/eth/tracers/internal/tracers
github.com/ethereum/go-ethereum/vendor/gopkg.in/olebedev/go-duktape.v3
github.com/ethereum/go-ethereum/vendor/github.com/golang/protobuf/proto
github.com/ethereum/go-ethereum/vendor/github.com/karalabe/hid
github.com/ethereum/go-ethereum/log/term
github.com/ethereum/go-ethereum/metrics/exp
github.com/ethereum/go-ethereum/vendor/github.com/mattn/go-colorable
github.com/ethereum/go-ethereum/vendor/gopkg.in/urfave/cli.v1
github.com/ethereum/go-ethereum/vendor/github.com/prometheus/prometheus/util/flock
github.com/ethereum/go-ethereum/vendor/golang.org/x/text/encoding/htmlindex
github.com/ethereum/go-ethereum/les/flowcontrol
github.com/ethereum/go-ethereum/vendor/golang.org/x/sync/syncmap
github.com/ethereum/go-ethereum/internal/jsre/deps
github.com/ethereum/go-ethereum/vendor/golang.org/x/net/html/charset
github.com/ethereum/go-ethereum/vendor/github.com/mattn/go-isatty
github.com/ethereum/go-ethereum/vendor/github.com/fatih/color
github.com/ethereum/go-ethereum/vendor/gopkg.in/sourcemap.v1/base64vlq
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp
github.com/ethereum/go-ethereum/vendor/gopkg.in/sourcemap.v1
github.com/ethereum/go-ethereum/vendor/github.com/robertkrimen/otto/token
github.com/ethereum/go-ethereum/vendor/github.com/robertkrimen/otto/dbg
github.com/ethereum/go-ethereum/vendor/github.com/robertkrimen/otto/file
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/dcps/internetgateway1
github.com/ethereum/go-ethereum/vendor/github.com/huin/goupnp/dcps/internetgateway2
github.com/ethereum/go-ethereum/vendor/github.com/robertkrimen/otto/ast
github.com/ethereum/go-ethereum/internal/debug
github.com/ethereum/go-ethereum/vendor/github.com/robertkrimen/otto/parser
github.com/ethereum/go-ethereum/vendor/github.com/robertkrimen/otto/registry
github.com/ethereum/go-ethereum/internal/web3ext
github.com/ethereum/go-ethereum/vendor/github.com/peterh/liner
github.com/ethereum/go-ethereum/vendor/github.com/maruel/panicparse/stack
github.com/ethereum/go-ethereum/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor
github.com/ethereum/go-ethereum/p2p/nat
github.com/ethereum/go-ethereum/vendor/github.com/mattn/go-runewidth
github.com/ethereum/go-ethereum/vendor/github.com/mitchellh/go-wordwrap
github.com/ethereum/go-ethereum/vendor/github.com/naoina/go-stringutil
github.com/ethereum/go-ethereum/vendor/github.com/naoina/toml/ast
github.com/ethereum/go-ethereum/vendor/github.com/robertkrimen/otto
github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor
github.com/ethereum/go-ethereum/vendor/github.com/nsf/termbox-go
github.com/ethereum/go-ethereum/vendor/github.com/naoina/toml
github.com/ethereum/go-ethereum/vendor/github.com/gizak/termui
# github.com/ethereum/go-ethereum/vendor/gopkg.in/olebedev/go-duktape.v3
In file included from vendor/gopkg.in/olebedev/go-duktape.v3/api.go:7:0:
vendor/gopkg.in/olebedev/go-duktape.v3/api.go: In function ‘_duk_error’:
vendor/gopkg.in/olebedev/go-duktape.v3/duktape.h:510:127: warning: right-hand operand of comma expression has no effect [-Wunused-value]
  (duk_error_raw((ctx), (duk_errcode_t) (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
                                                                                                                               ^
vendor/gopkg.in/olebedev/go-duktape.v3/api.go:153:2: note: in expansion of macro ‘duk_error’
  duk_error(ctx, err_code, "%s", str);
  ^
github.com/ethereum/go-ethereum/internal/jsre
github.com/ethereum/go-ethereum/crypto
github.com/ethereum/go-ethereum/trie
github.com/ethereum/go-ethereum/crypto/ecies
github.com/ethereum/go-ethereum/p2p/discover
github.com/ethereum/go-ethereum/p2p/discv5
github.com/ethereum/go-ethereum/core/types
github.com/ethereum/go-ethereum/p2p
github.com/ethereum/go-ethereum
github.com/ethereum/go-ethereum/core/state
github.com/ethereum/go-ethereum/core/bloombits
github.com/ethereum/go-ethereum/core/vm
github.com/ethereum/go-ethereum/accounts
github.com/ethereum/go-ethereum/ethclient
github.com/ethereum/go-ethereum/accounts/keystore
github.com/ethereum/go-ethereum/accounts/usbwallet
github.com/ethereum/go-ethereum/consensus
github.com/ethereum/go-ethereum/consensus/misc
github.com/ethereum/go-ethereum/dashboard
github.com/ethereum/go-ethereum/whisper/whisperv5
github.com/ethereum/go-ethereum/consensus/clique
github.com/ethereum/go-ethereum/consensus/ethash
github.com/ethereum/go-ethereum/eth/fetcher
github.com/ethereum/go-ethereum/node
github.com/ethereum/go-ethereum/console
github.com/ethereum/go-ethereum/core
github.com/ethereum/go-ethereum/eth/downloader
github.com/ethereum/go-ethereum/eth/filters
github.com/ethereum/go-ethereum/light
github.com/ethereum/go-ethereum/internal/ethapi
github.com/ethereum/go-ethereum/miner
github.com/ethereum/go-ethereum/eth/gasprice
github.com/ethereum/go-ethereum/eth/tracers
github.com/ethereum/go-ethereum/eth
github.com/ethereum/go-ethereum/les
github.com/ethereum/go-ethereum/ethstats
github.com/ethereum/go-ethereum/cmd/utils
github.com/ethereum/go-ethereum/cmd/geth
Done building.
Run "/home/ubuntu/go-ethereum/build/bin/geth" to launch geth.
srv@local:~/go-ethereum$

Install GO language in Ubuntu 16 LTS from the official site package

Ubuntu 16 LTS comes with too old GO language version, the version in the official repository is

golang-1.6.

Many programs released past couple of years depend on go lang 1.7+, so 1.6 in Ubuntu 16 LTS is really obsolete. At present the latest version is 1.9, so we’ll show you simple steps to install the go lang on your ubuntu 16 lts server

STEP 1) Get root if you want to install it globally to be used from any user!

sudo su
cd

STEP 2) Download the GO language binaries from the official site

https://golang.org/dl/

And copy the URL link of the program from the Linux section, now it has the following text:

Linux 2.6.23 or later, Intel 64-bit processor
go1.10.linux-amd64.tar.gz (114MB)

And download it with wget:

wget https://dl.google.com/go/go1.9.4.linux-amd64.tar.gz

STEP 4) Uncompress the file with “tar”

tar xzvf go1.9.4.linux-amd64.tar.gz

STEP 5) Move the files in “/usr/local/go”

you could put the installation anywhere, but most manual installed programs go to “/usr/local”

mv go /usr/local/

STEP 6) Set properly the environment to use your GO 1.9 installation

    • Create file with path and name

      /etc/profile.d/golang.sh

    • Make the file executable with
      chmod 755 /etc/profile.d/golang.sh
      
    • Insert the following line, which will add to the environment PATH your GO executable binaries
[[ -d "/usr/local/go" ]] && export PATH="$PATH:/usr/local/go/bin"

STEP 7) Reload the environment or just log off/in and check if you could execute the GO tool

root@srv.local:~# source /etc/profile
root@srv.local:~# go version
go version go1.9.4 linux/amd64

* Here are all the commands in one place to install the specific version of GO 1.9.4 AMD64, you can use them in a script:

cd
mkdir go-installation
cd ./go-installation
sudo wget https://dl.google.com/go/go1.9.4.linux-amd64.tar.gz
sudo tar xzvf go1.9.4.linux-amd64.tar.gz
sudo mv go /usr/local/
cat <<END | sudo tee /etc/profile.d/golang.sh 1>/dev/null
[[ -d "/usr/local/go" ]] && export PATH="\$PATH:/usr/local/go/bin"
END
sudo chmod 755 /etc/profile.d/golang.sh
source /etc/profile

And do not forget to

source /etc/profile

in your current shell session. It is mandatory for your current shell if you execute the above command from a script!

* This installation of GO Language 1.9 is from the official source the home site of GO Language. There are other easier ways to do it using, for example there are PPA repositories with Ubuntu packages ready to install, but they are not supported by the official GO team! Use them at your own risk as with all other PPA repositories.

network time synchronization status with ntpq

There is a handy program called

ntpstats

, which shows the network time synchronization status of your server under Ubuntu 16, but the older version or other linux distros do not have this program. The output of the program is:

srv@local # ntpstat
synchronised to NTP server (129.250.35.250) at stratum 3 
   time correct to within 133 ms
   polling server every 1024 s

As you can see the time is correct within some interval of milliseconds. In other words your time in the server could be trusted only within these milliseconds! If your server is synchronized with the program ntp your time of the server will be correct within a tiny fractions of a second, closer to a time server much smaller interval of correctness. The interval is computed according to how away the server is and how much the latency of the network of the server is.
ntpstats compute the output with the formula:

rootdisp + rootdelay / 2.0

  • rootdisp – indicating the maximum error relative to the primary reference source. If your server gets the time from an external source (GPS, radio, high precise clock external device), this value is the estimated maximum error of that clock and if your server gets the time from another NTP server (in most cases), this value is the current NTP server’s root dispersion (to which your server is synced) plus the dispersion added by the network link between your server and the NTP server
  • rootdelay – indicating the total roundtrip delay to the primary reference source. Because it is a roundtrip we divide it to 2 to get the single trip delay of the network

You can get these two values with the ntpq program:

srv@local # ntpq -c "rv 0 rootdisp,rootdelay"
rootdelay=202.882, rootdisp=31.816

So the time correct to within 31.816+(202.882/2) = 133.257 ms, which is the output of ntpstat.

Install ethminer in a machine with NVIDIA video card under Ubuntu 16.04 LTS (only commands , real output and benchmark)

Here is the Part 2 of the Install ethminer in a machine with NVIDIA video card under Ubuntu 16.04 LTS. The Part 2 is just all executed commands, which could be put in a bash file to automate the installation of the machine and the compilation of the ethminer and the output for a much clear example with real life example with output. Here you’ll find no explanations, which are included in the “Part 1” (see link above).
So only three sections here, first the bash commands and then the output of executed commands, only the installation of the packets with apt-get is trimmed because of the long output! The example is executing first sudo su to get to the root user, if you do not feel good you can skip the root and adjust it to the user you like with sudo. The second is the output of the commands and the third is the benchmark and hardware information of the machine used for this howto.

1. Commands to execute

sudo su
cd
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
dpkg -i /root/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
add-apt-repository -y ppa:graphics-drivers/ppa
apt-get update -y
apt-get -y install git cmake libleveldb-dev libjsoncpp-dev libboost-all-dev libgmp-dev libreadline-dev libcurl4-gnutls-dev ocl-icd-libopencl1 opencl-headers mesa-common-dev libmicrohttpd-dev build-essential cuda libcrypto++-dev libjsonrpccpp-dev
reboot
sudo su
cd
echo "termcapinfo xterm* ti@:te@" > /root/.screenrc
screen -R ethminer-mining
git clone https://github.com/ethereum-mining/ethminer
mkdir -p /root/ethminer/build
cd /root/ethminer/build
export CFLAGS="-O2 -march=native -msse3 -fomit-frame-pointer -pipe"
export CHOST="x86_64-pc-linux-gnu"
export CXXFLAGS="${CFLAGS}"
export LDFLAGS="-Wl,-O1"
cmake .. -DETHASHCUDA=ON -DETHASHCL=ON
make -j 8
cd /root/ethminer/build/ethminer/
export GPU_FORCE_64BIT_PTR=0
export GPU_MAX_HEAP_SIZE=100
export GPU_USE_SYNC_OBJECTS=1
export GPU_MAX_ALLOC_PERCENT=100
export GPU_SINGLE_ALLOC_PERCENT=100
./ethminer -U -F http://<your-pool-address>/<your-ethereum-address>

2. Here is the all real output (just the configuration of Pool address and the ethereum address are changed for security reasons, use your own)

 

ubuntu@mylocal:~$ sudo su
root@ip-172-31-3-105:~# wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
--2018-02-23 09:25:04--  http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
Resolving developer.download.nvidia.com (developer.download.nvidia.com)... 192.229.211.70, 2606:2800:21f:3aa:dcf:37b:1ed6:1fb
Connecting to developer.download.nvidia.com (developer.download.nvidia.com)|192.229.211.70|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2820 (2.8K) [application/x-deb]
Saving to: ‘cuda-repo-ubuntu1604_9.1.85-1_amd64.deb’

cuda-repo-ubuntu1604_9.1.85-1_amd64.deb    100%[========================================================================================>]   2.75K  --.-KB/s    in 0s       
                                                                                                                                                                            
2018-02-23 09:25:04 (332 MB/s) - ‘cuda-repo-ubuntu1604_9.1.85-1_amd64.deb’ saved [2820/2820]                                                                                
root@ip-172-31-3-105:~# sudo dpkg -i /root/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
Selecting previously unselected package cuda-repo-ubuntu1604.
(Reading database ... 51107 files and directories currently installed.)
Preparing to unpack .../cuda-repo-ubuntu1604_9.1.85-1_amd64.deb ...
Unpacking cuda-repo-ubuntu1604 (9.1.85-1) ...
Setting up cuda-repo-ubuntu1604 (9.1.85-1) ...

The public CUDA GPG key does not appear to be installed.
To install the key, run this command:
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub

root@ip-172-31-3-105:~# sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
Executing: /tmp/tmp.Z1DJgpLxrY/gpg.1.sh --fetch-keys
http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
gpg: key 7FA2AF80: public key "cudatools <cudatools@nvidia.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
root@ip-172-31-3-105:~# sudo dpkg -i /root/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
(Reading database ... 51110 files and directories currently installed.)
Preparing to unpack .../cuda-repo-ubuntu1604_9.1.85-1_amd64.deb ...
Unpacking cuda-repo-ubuntu1604 (9.1.85-1) over (9.1.85-1) ...
Setting up cuda-repo-ubuntu1604 (9.1.85-1) ...
root@ip-172-31-3-105:~# sudo add-apt-repository -y ppa:graphics-drivers/ppa
gpg: keyring `/tmp/tmpq7st7q7i/secring.gpg' created
gpg: keyring `/tmp/tmpq7st7q7i/pubring.gpg' created
gpg: requesting key 1118213C from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpq7st7q7i/trustdb.gpg: trustdb created
gpg: key 1118213C: public key "Launchpad PPA for Graphics Drivers Team" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK
root@ip-172-31-3-105:~# sudo apt-get update -y
Hit:1 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial InRelease
Get:2 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]                 
Get:3 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]                                                                                   
Get:4 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial/main Sources [868 kB]                                                                                          
Ign:5 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64  InRelease                                  
Get:6 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64  Release [564 B]                            
Get:7 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial/restricted Sources [4,808 B]                                                  
Get:8 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial/universe Sources [7,728 kB]                                                   
Get:9 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64  Release.gpg [801 B]                                                
Get:10 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]                                                                         
Get:11 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu xenial InRelease [24.3 kB]                                                      
Get:12 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial/multiverse Sources [179 kB]                                                                   
Get:13 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [7,532 kB]                      
Get:14 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64  Packages [100 kB]                                             
Get:15 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial/universe Translation-en [4,354 kB]                                                            
Get:16 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [144 kB]                                                    
Get:17 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial/multiverse Translation-en [106 kB]           
Get:18 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/main Sources [298 kB]                      
Get:19 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/restricted Sources [2,524 B]
Get:20 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/universe Sources [191 kB]         
Get:21 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/multiverse Sources [7,968 B]   
Get:22 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [734 kB]      
Get:23 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/main Translation-en [305 kB]    
Get:24 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu xenial/main amd64 Packages [11.9 kB]           
Get:25 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [7,560 B]   
Get:26 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/restricted Translation-en [2,272 B]                           
Get:27 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [591 kB]                                    
Get:28 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/universe Translation-en [239 kB]                           
Get:29 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [16.2 kB]                              
Get:30 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/multiverse Translation-en [8,052 B]                           
Get:31 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-backports/main Sources [3,432 B]                                            
Get:32 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-backports/universe Sources [4,904 B]                                 
Get:33 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [4,836 B]                              
Get:34 http://security.ubuntu.com/ubuntu xenial-security/main Sources [116 kB]                                                     
Get:35 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-backports/main Translation-en [3,220 B]                           
Get:36 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [6,628 B]                                          
Get:37 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-backports/universe Translation-en [3,768 B]                                     
Get:38 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu xenial/main Translation-en [4,224 B]                                                   
Get:39 http://security.ubuntu.com/ubuntu xenial-security/restricted Sources [2,116 B]   
Get:40 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [59.1 kB]
Get:41 http://security.ubuntu.com/ubuntu xenial-security/multiverse Sources [1,516 B]
Get:42 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [458 kB]
Get:43 http://security.ubuntu.com/ubuntu xenial-security/main Translation-en [197 kB]
Get:44 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [7,224 B]
Get:45 http://security.ubuntu.com/ubuntu xenial-security/restricted Translation-en [2,152 B]
Get:46 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [319 kB]
Get:47 http://security.ubuntu.com/ubuntu xenial-security/universe Translation-en [119 kB]
Get:48 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [3,208 B]
Get:49 http://security.ubuntu.com/ubuntu xenial-security/multiverse Translation-en [1,408 B]
Fetched 25.1 MB in 3s (6,275 kB/s)                                  
Reading package lists... Done
root@ip-172-31-3-105:~# sudo apt-get install git cmake libleveldb-dev libjsoncpp-dev libboost-all-dev libgmp-dev libreadline-dev libcurl4-gnutls-dev ocl-icd-libopencl1 opencl-headers mesa-common-dev libmicrohttpd-dev build-essential cuda libcrypto++-dev libjsonrpccpp-dev -y
Reading package lists... Done
Building dependency tree       
Reading state information... Done
git is already the newest version (1:2.7.4-0ubuntu1.3).
The following additional packages will be installed:
  adwaita-icon-theme apg aptdaemon aspell aspell-en at-spi2-core autotools-dev avahi-daemon avahi-utils bbswitch-dkms binutils bluez bluez-obexd ca-certificates-java
  cheese-common cmake-data colord colord-data cpp cpp-5 cracklib-runtime crda cuda-9-1 cuda-command-line-tools-9-1 cuda-compiler-9-1 cuda-cublas-9-1 cuda-cublas-dev-9-1
  cuda-cudart-9-1 cuda-cudart-dev-9-1 cuda-cufft-9-1 cuda-cufft-dev-9-1 cuda-cuobjdump-9-1 cuda-cupti-9-1 cuda-curand-9-1 cuda-curand-dev-9-1 cuda-cusolver-9-1
  cuda-cusolver-dev-9-1 cuda-cusparse-9-1 cuda-cusparse-dev-9-1 cuda-demo-suite-9-1 cuda-documentation-9-1 cuda-driver-dev-9-1 cuda-drivers cuda-gdb-9-1
  cuda-gpu-library-advisor-9-1 cuda-libraries-9-1 cuda-libraries-dev-9-1 cuda-license-9-1 cuda-memcheck-9-1 cuda-misc-headers-9-1 cuda-npp-9-1 cuda-npp-dev-9-1
  cuda-nsight-9-1 cuda-nvcc-9-1 cuda-nvdisasm-9-1 cuda-nvgraph-9-1 cuda-nvgraph-dev-9-1 cuda-nvml-dev-9-1 cuda-nvprof-9-1 cuda-nvprune-9-1 cuda-nvrtc-9-1
  cuda-nvrtc-dev-9-1 cuda-nvtx-9-1 cuda-nvvp-9-1 cuda-runtime-9-1 cuda-samples-9-1 cuda-toolkit-9-1 cuda-tools-9-1 cuda-visual-tools-9-1 cups-pk-helper curl dbus-x11
  dconf-cli dconf-gsettings-backend dconf-service default-jre default-jre-headless desktop-file-utils dictionaries-common diffstat dkms dpkg-dev emacsen-common enchant
  evolution-data-server evolution-data-server-common evolution-data-server-online-accounts fakeroot fontconfig fontconfig-config fonts-dejavu-core fonts-dejavu-extra
  freeglut3 freeglut3-dev g++ g++-5 gcc gcc-5 gcc-5-base gcr geoclue geoclue-ubuntu-geoip gettext gir1.2-atk-1.0 gir1.2-freedesktop gir1.2-gdkpixbuf-2.0
  gir1.2-gnomekeyring-1.0 gir1.2-gtk-3.0 gir1.2-ibus-1.0 gir1.2-notify-0.7 gir1.2-packagekitglib-1.0 gir1.2-pango-1.0 gkbd-capplet glib-networking glib-networking-common
  glib-networking-services gnome-bluetooth gnome-desktop3-data gnome-keyring gnome-menus gnome-power-manager gnome-screensaver gnome-session-bin
  gnome-settings-daemon-schemas gnome-user-guide gnome-user-share gsettings-desktop-schemas gsettings-ubuntu-schemas gstreamer1.0-clutter-3.0 gstreamer1.0-plugins-base
  gstreamer1.0-plugins-good gstreamer1.0-x gvfs gvfs-backends gvfs-common gvfs-daemons gvfs-libs hardening-includes hicolor-icon-theme humanity-icon-theme hunspell-en-us
  hwdata ibus ibus-gtk ibus-gtk3 icu-devtools im-config indicator-applet indicator-application indicator-bluetooth indicator-datetime indicator-keyboard
  indicator-messages indicator-power indicator-session indicator-sound intltool-debian ippusbxd iputils-arping iw java-common lib32gcc1 libaa1 libaccount-plugin-1.0-0
  libaccount-plugin-generic-oauth libaccount-plugin-google libaccounts-glib0 libaccounts-qt5-1 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl
  libappindicator3-1 libapt-pkg-perl libarchive-zip-perl libarchive13 libargtable2-0 libasan2 libasound2 libasound2-data libasound2-plugins libaspell15 libasprintf-dev
  libassuan0 libasyncns0 libatasmart4 libatk-bridge2.0-0 libatk1.0-0 libatk1.0-data libatomic1 libatspi2.0-0 libauthen-sasl-perl libavahi-client3 libavahi-common-data
  libavahi-common3 libavahi-core7 libavahi-glib1 libavc1394-0 libbluetooth3 libboost-atomic-dev libboost-atomic1.58-dev libboost-atomic1.58.0 libboost-chrono-dev
  libboost-chrono1.58-dev libboost-chrono1.58.0 libboost-context-dev libboost-context1.58-dev libboost-context1.58.0 libboost-coroutine-dev libboost-coroutine1.58-dev
  libboost-coroutine1.58.0 libboost-date-time-dev libboost-date-time1.58-dev libboost-date-time1.58.0 libboost-dev libboost-exception-dev libboost-exception1.58-dev
  libboost-filesystem-dev libboost-filesystem1.58-dev libboost-filesystem1.58.0 libboost-graph-dev libboost-graph-parallel-dev libboost-graph-parallel1.58-dev
  libboost-graph-parallel1.58.0 libboost-graph1.58-dev libboost-graph1.58.0 libboost-iostreams-dev libboost-iostreams1.58-dev libboost-iostreams1.58.0 libboost-locale-dev
  libboost-locale1.58-dev libboost-locale1.58.0 libboost-log-dev libboost-log1.58-dev libboost-log1.58.0 libboost-math-dev libboost-math1.58-dev libboost-math1.58.0
  libboost-mpi-dev libboost-mpi-python-dev libboost-mpi-python1.58-dev libboost-mpi-python1.58.0 libboost-mpi1.58-dev libboost-mpi1.58.0 libboost-program-options-dev
  libboost-program-options1.58-dev libboost-program-options1.58.0 libboost-python-dev libboost-python1.58-dev libboost-python1.58.0 libboost-random-dev
  libboost-random1.58-dev libboost-random1.58.0 libboost-regex-dev libboost-regex1.58-dev libboost-regex1.58.0 libboost-serialization-dev libboost-serialization1.58-dev
  libboost-serialization1.58.0 libboost-signals-dev libboost-signals1.58-dev libboost-signals1.58.0 libboost-system-dev libboost-system1.58-dev libboost-system1.58.0
  libboost-test-dev libboost-test1.58-dev libboost-test1.58.0 libboost-thread-dev libboost-thread1.58-dev libboost-thread1.58.0 libboost-timer-dev libboost-timer1.58-dev
  libboost-timer1.58.0 libboost-tools-dev libboost-wave-dev libboost-wave1.58-dev libboost-wave1.58.0 libboost1.58-dev libboost1.58-tools-dev libc-dev-bin libc6 libc6-dev
  libc6-i386 libcaca0 libcairo-gobject2 libcairo2 libcamel-1.2-54 libcanberra-gtk3-0 libcanberra-gtk3-module libcanberra-pulse libcanberra0 libcapnp-0.5.3 libcc1-0
  libcdio-cdda1 libcdio-paranoia1 libcdio13 libcdparanoia0 libcgi-fast-perl libcgi-pm-perl libcgmanager0 libcheese-gtk25 libcheese8 libcilkrts5 libclass-accessor-perl
  libclone-perl libclutter-1.0-0 libclutter-1.0-common libclutter-gst-3.0-0 libclutter-gtk-1.0-0 libcogl-common libcogl-pango20 libcogl-path20 libcogl20 libcolord2
  libcolorhug2 libcrack2 libcroco3 libcrypto++9v5 libcuda1-390 libcups2 libcurl3 libcurl3-gnutls libdaemon0 libdata-alias-perl libdatrie1 libdbusmenu-glib4
  libdbusmenu-gtk3-4 libdconf1 libdigest-hmac-perl libdouble-conversion1v5 libdpkg-perl libdrm-amdgpu1 libdrm-common libdrm-dev libdrm-intel1 libdrm-nouveau2
  libdrm-radeon1 libdrm2 libdv4 libebackend-1.2-10 libebook-1.2-16 libebook-contacts-1.2-2 libecal-1.2-19 libedata-book-1.2-25 libedata-cal-1.2-28 libedataserver-1.2-21
  libegl1-mesa libemail-valid-perl libenchant1c2a libencode-locale-perl libepoxy0 libevdev2 libexif12 libexpat1-dev libexporter-tiny-perl libfakeroot libfcgi-perl
  libfcitx-config4 libfcitx-gclient0 libfcitx-utils0 libfftw3-single3 libfile-basedir-perl libfile-fcntllock-perl libflac8 libfontconfig1 libfontenc1 libgbm1 libgcc-5-dev
  libgck-1-0 libgcr-3-common libgcr-base-3-1 libgcr-ui-3-1 libgcrypt20-dev libgd3 libgdata-common libgdata22 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libgee-0.8-2
  libgeoclue0 libgeocode-glib0 libgeonames0 libgettextpo-dev libgettextpo0 libgif7 libgl1-mesa-dev libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libglib2.0-bin
  libglu1-mesa libglu1-mesa-dev libgmpxx4ldbl libgnome-bluetooth13 libgnome-desktop-3-12 libgnome-keyring-common libgnome-keyring0 libgnome-menu-3-0 libgnomekbd-common
  libgnomekbd8 libgnutls-dev libgnutls28-dev libgnutlsxx28 libgoa-1.0-0b libgoa-1.0-common libgomp1 libgpg-error-dev libgphoto2-6 libgphoto2-l10n libgphoto2-port12
  libgraphite2-3 libgstreamer-plugins-base1.0-0 libgstreamer-plugins-good1.0-0 libgstreamer1.0-0 libgtk-3-0 libgtk-3-bin libgtk-3-common libgtk2.0-0 libgtk2.0-bin
  libgtk2.0-common libgtop-2.0-10 libgtop2-common libgudev-1.0-0 libgusb2 libgweather-3-6 libgweather-common libharfbuzz-icu0 libharfbuzz0b libhtml-parser-perl
  libhtml-tagset-perl libhttp-date-perl libhttp-message-perl libhunspell-1.3-0 libhwloc-dev libhwloc-plugins libhwloc5 libhyphen0 libibus-1.0-5 libibverbs-dev libibverbs1
  libical1a libice-dev libice6 libicu-dev libidn11-dev libido3-0.1-0 libiec61883-0 libieee1284-3 libimobiledevice6 libindicator3-7 libinput-bin libinput10 libio-html-perl
  libio-pty-perl libio-socket-inet6-perl libio-socket-ssl-perl libio-string-perl libipc-run-perl libipc-system-simple-perl libisl15 libitm1 libjack-jackd2-0 libjansson4
  libjavascriptcoregtk-4.0-18 libjbig0 libjpeg-turbo8 libjpeg8 libjson-glib-1.0-0 libjson-glib-1.0-common libjsoncpp1 libjsonrpccpp-client0 libjsonrpccpp-common0
  libjsonrpccpp-server0 libjsonrpccpp-stub0 liblcms2-2 libldb1 libleveldb1v5 liblightdm-gobject-1-0 liblist-moreutils-perl libllvm5.0 liblsan0 libltdl-dev libltdl7
  liblwp-mediatypes-perl libmailtools-perl libmbim-glib4 libmbim-proxy libmicrohttpd10 libmirclient9 libmircommon7 libmircore1 libmirprotobuf3 libmm-glib0 libmpc3 libmpx0
  libmtdev1 libmtp-common libmtp-runtime libmtp9 libnautilus-extension1a libndp0 libnet-dns-perl libnet-domain-tld-perl libnet-ip-perl libnet-libidn-perl
  libnet-smtp-ssl-perl libnet-ssleay-perl libnih-dbus1 libnl-3-200 libnl-genl-3-200 libnm-glib4 libnm-gtk-common libnm-gtk0 libnm-util2 libnm0 libnma-common libnma0
  libnotify4 libnspr4 libnss-mdns libnss3 libnss3-nssdb libnuma-dev libnuma1 liboauth0 libogg0 libopenmpi-dev libopenmpi1.10 libopus0 liborc-0.4-0 libp11-kit-dev
  libp11-kit-gnome-keyring libpackagekit-glib2-16 libpam-gnome-keyring libpanel-applet0 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpangoxft-1.0-0
  libparse-debianchangelog-perl libpciaccess0 libpcre16-3 libpcsclite1 libperlio-gzip-perl libpixman-1-0 libplist3 libprotobuf-lite9v5 libproxy1v5 libpthread-stubs0-dev
  libpulse-mainloop-glib0 libpulse0 libpulsedsp libpwquality-common libpwquality1 libpython-dev libpython-stdlib libpython2.7 libpython2.7-dev libpython2.7-minimal
  libpython2.7-stdlib libqmi-glib5 libqmi-proxy libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5opengl5 libqt5printsupport5 libqt5qml5 libqt5quick5 libqt5sql5
  libqt5sql5-sqlite libqt5svg5 libqt5webkit5 libqt5widgets5 libqt5xml5 libquadmath0 libraw1394-11 libreadline6-dev librest-0.7-0 librsvg2-2 librsvg2-common libsamplerate0
  libsane libsane-common libsecret-1-0 libsecret-common libsensors4 libshout3 libsignon-extension1 libsignon-glib1 libsignon-plugins-common1 libsignon-qt5-1 libsm-dev
  libsm6 libsmbclient libsnappy1v5 libsndfile1 libsocket6-perl libsoup-gnome2.4-1 libsoup2.4-1 libspeex1 libspeexdsp1 libstdc++-5-dev libstdc++6 libsub-name-perl
  libtag1v5 libtag1v5-vanilla libtalloc2 libtasn1-6 libtasn1-6-dev libtasn1-doc libtdb1 libtevent0 libtext-levenshtein-perl libthai-data libthai0 libtheora0 libtiff5
  libtimedate-perl libtimezonemap-data libtimezonemap1 libtinfo-dev libtool libtsan0 libtxc-dxtn-s2tc0 libubsan0 libudisks2-0 libunistring0 libunity-control-center1
  libunity-settings-daemon1 libupower-glib3 liburi-perl liburl-dispatcher1 libusbmuxd4 libv4l-0 libv4lconvert0 libvdpau1 libvisual-0.4-0 libvorbis0a libvorbisenc2
  libvorbisfile3 libvpx3 libwacom-bin libwacom-common libwacom2 libwavpack1 libwayland-client0 libwayland-cursor0 libwayland-egl1-mesa libwayland-server0 libwbclient0
  libwebkit2gtk-4.0-37 libwebkit2gtk-4.0-37-gtk2 libwebp5 libwebrtc-audio-processing-0 libx11-dev libx11-doc libx11-xcb-dev libx11-xcb1 libxau-dev libxaw7 libxcb-dri2-0
  libxcb-dri2-0-dev libxcb-dri3-0 libxcb-dri3-dev libxcb-glx0 libxcb-glx0-dev libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-present-dev libxcb-present0 libxcb-randr0
  libxcb-randr0-dev libxcb-render-util0 libxcb-render0 libxcb-render0-dev libxcb-shape0 libxcb-shape0-dev libxcb-shm0 libxcb-sync-dev libxcb-sync1 libxcb-util1
  libxcb-xfixes0 libxcb-xfixes0-dev libxcb-xkb1 libxcb1-dev libxcomposite1 libxcursor1 libxdamage-dev libxdamage1 libxdmcp-dev libxext-dev libxfixes-dev libxfixes3
  libxfont1 libxft2 libxi-dev libxi6 libxinerama1 libxkbcommon-x11-0 libxkbcommon0 libxkbfile1 libxklavier16 libxmu-dev libxmu-headers libxmu6 libxnvctrl0 libxpm4
  libxrandr2 libxrender1 libxshmfence-dev libxshmfence1 libxslt1.1 libxt-dev libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm-dev libxxf86vm1 libyaml-libyaml-perl libyelp0
  lightdm lintian linux-libc-dev make manpages-dev mesa-vdpau-drivers mobile-broadband-provider-info modemmanager mountall mousetweaks mpi-default-bin mpi-default-dev
  nautilus-data nettle-dev network-manager network-manager-gnome network-manager-pptp notification-daemon nvidia-390 nvidia-390-dev nvidia-modprobe nvidia-opencl-icd-390
  nvidia-prime nvidia-settings openjdk-8-jre openjdk-8-jre-headless openmpi-bin openmpi-common p11-kit p11-kit-modules patchutils pinentry-gnome3 pkg-config
  policykit-1-gnome ppp pptp-linux pulseaudio pulseaudio-module-x11 pulseaudio-utils python python-dev python-minimal python-talloc python2.7 python2.7-dev
  python2.7-minimal python3-aptdaemon python3-aptdaemon.pkcompat python3-bs4 python3-cairo python3-cups python3-cupshelpers python3-defer python3-html5lib python3-lxml
  python3-xdg python3-xkit qttranslations5-l10n rtkit samba-libs screen-resolution-extra session-migration signon-keyring-extension signon-plugin-oauth2
  signon-plugin-password signon-ui signon-ui-service signon-ui-x11 signond sound-theme-freedesktop system-config-printer-common system-config-printer-gnome
  system-config-printer-udev t1utils ubuntu-mono ubuntu-system-service ubuntu-touch-sounds udisks2 unity-control-center unity-control-center-faces
  unity-control-center-signon unity-greeter unity-settings-daemon upower upstart usb-modeswitch usb-modeswitch-data usbmuxd vdpau-driver-all wamerican wireless-regdb
  wpasupplicant x11-common x11-utils x11-xkb-utils x11proto-core-dev x11proto-damage-dev x11proto-dri2-dev x11proto-fixes-dev x11proto-gl-dev x11proto-input-dev
  x11proto-kb-dev x11proto-xext-dev x11proto-xf86vidmode-dev xfonts-base xfonts-encodings xfonts-utils xorg-sgml-doctools xserver-common xserver-xorg xserver-xorg-core
  xserver-xorg-input-all xserver-xorg-input-evdev xserver-xorg-input-synaptics xserver-xorg-input-vmmouse xserver-xorg-input-wacom xserver-xorg-legacy xtrans-dev yelp
  yelp-xsl zlib1g-dev
Suggested packages:
  aspell-doc spellutils avahi-autoipd bumblebee binutils-doc codeblocks eclipse ninja-build colord-sensor-argyll cpp-doc gcc-5-locales default-java-plugin debian-keyring
  evolution evolution-data-server-dbg g++-multilib g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib autoconf automake flex bison gdb gcc-doc gcc-5-multilib
  libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg gettext-doc
  autopoint apache2-bin libapache2-mod-dnssd samba-common hunspell openoffice.org-hunspell | openoffice.org-core ibus-clutter ibus-doc ibus-qt4 click powerd
  unity-system-compositor zenity unity-greeter-session-broadcast lrzip alsa-utils libgssapi-perl libboost-doc graphviz libboost1.58-doc gccxml libmpfrc++-dev libntl-dev
  xsltproc doxygen docbook-xml docbook-xsl default-jdk fop glibc-doc libcanberra-gtk0 libgles2-mesa | libgles2 cups-common libcurl4-doc libcurl3-dbg libkrb5-dev
  libldap2-dev librtmp-dev libdv-bin oss-compat libenchant-voikko fcitx libfftw3-bin libfftw3-dev libgcrypt20-doc libgd-tools gmp-doc libgmp10-doc libmpfr-dev gnutls-doc
  gnutls-bin guile-gnutls gphoto2 libvisual-0.4-plugins gstreamer1.0-tools libdata-dump-perl libhwloc-contrib-plugins libice-doc icu-doc libusbmuxd-tools jackd2
  libjsonrpccpp-tools liblcms2-utils leveldb-doc libtool-doc avahi-autoipd | zeroconf opennmpi-doc opus-tools libhtml-template-perl libxml-simple-perl pcscd
  libqt5libqgtk2 qt5-image-formats-plugins qtwayland5 libraw1394-doc readline-doc librsvg2-bin hplip libsane-extras sane-utils lm-sensors libsm-doc speex libstdc++-5-doc
  automaken gfortran | fortran95-compiler gcj-jdk libwww-perl url-dispatcher libxcb-doc libxext-doc libxt-doc bindfs binutils-multiarch libtext-template-perl make-doc
  nautilus network-manager-openconnect-gnome network-manager-openvpn-gnome network-manager-vpnc-gnome network-manager-pptp-gnome icedtea-8-plugin fonts-ipafont-gothic
  fonts-ipafont-mincho fonts-wqy-microhei fonts-wqy-zenhei fonts-indic gfortran openmpi-checkpoint pinentry-doc pavumeter pavucontrol paman paprefs python-doc python-tk
  python2.7-doc binfmt-support python3-genshi python3-lxml-dbg python-lxml-doc python3-smbc reiserfsprogs exfat-utils libcanberra-gtk-module x11-xserver-utils
  lightdm-remote-session-freerdp lightdm-remote-session-uccsconfigure remote-login-service metacity | x-window-manager upstart-monitor comgt wvdial libvdpau-va-gl1
  nvidia-vdpau-driver nvidia-legacy-340xx-vdpau-driver wpagui libengine-pkcs11-openssl mesa-utils xfonts-100dpi | xfonts-75dpi xfonts-scalable gpointing-device-settings
  touchfreeze xinput
The following NEW packages will be installed:
  adwaita-icon-theme apg aptdaemon aspell aspell-en at-spi2-core autotools-dev avahi-daemon avahi-utils bbswitch-dkms binutils bluez bluez-obexd build-essential
  ca-certificates-java cheese-common cmake cmake-data colord colord-data cpp cpp-5 cracklib-runtime crda cuda cuda-9-1 cuda-command-line-tools-9-1 cuda-compiler-9-1
  cuda-cublas-9-1 cuda-cublas-dev-9-1 cuda-cudart-9-1 cuda-cudart-dev-9-1 cuda-cufft-9-1 cuda-cufft-dev-9-1 cuda-cuobjdump-9-1 cuda-cupti-9-1 cuda-curand-9-1
  cuda-curand-dev-9-1 cuda-cusolver-9-1 cuda-cusolver-dev-9-1 cuda-cusparse-9-1 cuda-cusparse-dev-9-1 cuda-demo-suite-9-1 cuda-documentation-9-1 cuda-driver-dev-9-1
  cuda-drivers cuda-gdb-9-1 cuda-gpu-library-advisor-9-1 cuda-libraries-9-1 cuda-libraries-dev-9-1 cuda-license-9-1 cuda-memcheck-9-1 cuda-misc-headers-9-1 cuda-npp-9-1
  cuda-npp-dev-9-1 cuda-nsight-9-1 cuda-nvcc-9-1 cuda-nvdisasm-9-1 cuda-nvgraph-9-1 cuda-nvgraph-dev-9-1 cuda-nvml-dev-9-1 cuda-nvprof-9-1 cuda-nvprune-9-1 cuda-nvrtc-9-1
  cuda-nvrtc-dev-9-1 cuda-nvtx-9-1 cuda-nvvp-9-1 cuda-runtime-9-1 cuda-samples-9-1 cuda-toolkit-9-1 cuda-tools-9-1 cuda-visual-tools-9-1 cups-pk-helper dbus-x11 dconf-cli
  dconf-gsettings-backend dconf-service default-jre default-jre-headless desktop-file-utils dictionaries-common diffstat dkms dpkg-dev emacsen-common enchant
  evolution-data-server evolution-data-server-common evolution-data-server-online-accounts fakeroot fontconfig fontconfig-config fonts-dejavu-core fonts-dejavu-extra
  freeglut3 freeglut3-dev g++ g++-5 gcc gcc-5 gcr geoclue geoclue-ubuntu-geoip gettext gir1.2-atk-1.0 gir1.2-freedesktop gir1.2-gdkpixbuf-2.0 gir1.2-gnomekeyring-1.0
  gir1.2-gtk-3.0 gir1.2-ibus-1.0 gir1.2-notify-0.7 gir1.2-packagekitglib-1.0 gir1.2-pango-1.0 gkbd-capplet glib-networking glib-networking-common glib-networking-services
  gnome-bluetooth gnome-desktop3-data gnome-keyring gnome-menus gnome-power-manager gnome-screensaver gnome-session-bin gnome-settings-daemon-schemas gnome-user-guide
  gnome-user-share gsettings-desktop-schemas gsettings-ubuntu-schemas gstreamer1.0-clutter-3.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-x gvfs
  gvfs-backends gvfs-common gvfs-daemons gvfs-libs hardening-includes hicolor-icon-theme humanity-icon-theme hunspell-en-us hwdata ibus ibus-gtk ibus-gtk3 icu-devtools
  im-config indicator-applet indicator-application indicator-bluetooth indicator-datetime indicator-keyboard indicator-messages indicator-power indicator-session
  indicator-sound intltool-debian ippusbxd iputils-arping iw java-common lib32gcc1 libaa1 libaccount-plugin-1.0-0 libaccount-plugin-generic-oauth libaccount-plugin-google
  libaccounts-glib0 libaccounts-qt5-1 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libappindicator3-1 libapt-pkg-perl libarchive-zip-perl
  libarchive13 libargtable2-0 libasan2 libasound2 libasound2-data libasound2-plugins libaspell15 libasprintf-dev libassuan0 libasyncns0 libatasmart4 libatk-bridge2.0-0
  libatk1.0-0 libatk1.0-data libatomic1 libatspi2.0-0 libauthen-sasl-perl libavahi-client3 libavahi-common-data libavahi-common3 libavahi-core7 libavahi-glib1
  libavc1394-0 libbluetooth3 libboost-all-dev libboost-atomic-dev libboost-atomic1.58-dev libboost-atomic1.58.0 libboost-chrono-dev libboost-chrono1.58-dev
  libboost-chrono1.58.0 libboost-context-dev libboost-context1.58-dev libboost-context1.58.0 libboost-coroutine-dev libboost-coroutine1.58-dev libboost-coroutine1.58.0
  libboost-date-time-dev libboost-date-time1.58-dev libboost-date-time1.58.0 libboost-dev libboost-exception-dev libboost-exception1.58-dev libboost-filesystem-dev
  libboost-filesystem1.58-dev libboost-filesystem1.58.0 libboost-graph-dev libboost-graph-parallel-dev libboost-graph-parallel1.58-dev libboost-graph-parallel1.58.0
  libboost-graph1.58-dev libboost-graph1.58.0 libboost-iostreams-dev libboost-iostreams1.58-dev libboost-iostreams1.58.0 libboost-locale-dev libboost-locale1.58-dev
  libboost-locale1.58.0 libboost-log-dev libboost-log1.58-dev libboost-log1.58.0 libboost-math-dev libboost-math1.58-dev libboost-math1.58.0 libboost-mpi-dev
  libboost-mpi-python-dev libboost-mpi-python1.58-dev libboost-mpi-python1.58.0 libboost-mpi1.58-dev libboost-mpi1.58.0 libboost-program-options-dev
  libboost-program-options1.58-dev libboost-program-options1.58.0 libboost-python-dev libboost-python1.58-dev libboost-python1.58.0 libboost-random-dev
  libboost-random1.58-dev libboost-random1.58.0 libboost-regex-dev libboost-regex1.58-dev libboost-regex1.58.0 libboost-serialization-dev libboost-serialization1.58-dev
  libboost-serialization1.58.0 libboost-signals-dev libboost-signals1.58-dev libboost-signals1.58.0 libboost-system-dev libboost-system1.58-dev libboost-system1.58.0
  libboost-test-dev libboost-test1.58-dev libboost-test1.58.0 libboost-thread-dev libboost-thread1.58-dev libboost-thread1.58.0 libboost-timer-dev libboost-timer1.58-dev
  libboost-timer1.58.0 libboost-tools-dev libboost-wave-dev libboost-wave1.58-dev libboost-wave1.58.0 libboost1.58-dev libboost1.58-tools-dev libc-dev-bin libc6-dev
  libc6-i386 libcaca0 libcairo-gobject2 libcairo2 libcamel-1.2-54 libcanberra-gtk3-0 libcanberra-gtk3-module libcanberra-pulse libcanberra0 libcapnp-0.5.3 libcc1-0
  libcdio-cdda1 libcdio-paranoia1 libcdio13 libcdparanoia0 libcgi-fast-perl libcgi-pm-perl libcgmanager0 libcheese-gtk25 libcheese8 libcilkrts5 libclass-accessor-perl
  libclone-perl libclutter-1.0-0 libclutter-1.0-common libclutter-gst-3.0-0 libclutter-gtk-1.0-0 libcogl-common libcogl-pango20 libcogl-path20 libcogl20 libcolord2
  libcolorhug2 libcrack2 libcroco3 libcrypto++-dev libcrypto++9v5 libcuda1-390 libcups2 libcurl3 libcurl4-gnutls-dev libdaemon0 libdata-alias-perl libdatrie1
  libdbusmenu-glib4 libdbusmenu-gtk3-4 libdconf1 libdigest-hmac-perl libdouble-conversion1v5 libdpkg-perl libdrm-amdgpu1 libdrm-common libdrm-dev libdrm-intel1
  libdrm-nouveau2 libdrm-radeon1 libdv4 libebackend-1.2-10 libebook-1.2-16 libebook-contacts-1.2-2 libecal-1.2-19 libedata-book-1.2-25 libedata-cal-1.2-28
  libedataserver-1.2-21 libegl1-mesa libemail-valid-perl libenchant1c2a libencode-locale-perl libepoxy0 libevdev2 libexif12 libexpat1-dev libexporter-tiny-perl
  libfakeroot libfcgi-perl libfcitx-config4 libfcitx-gclient0 libfcitx-utils0 libfftw3-single3 libfile-basedir-perl libfile-fcntllock-perl libflac8 libfontconfig1
  libfontenc1 libgbm1 libgcc-5-dev libgck-1-0 libgcr-3-common libgcr-base-3-1 libgcr-ui-3-1 libgcrypt20-dev libgd3 libgdata-common libgdata22 libgdk-pixbuf2.0-0
  libgdk-pixbuf2.0-common libgee-0.8-2 libgeoclue0 libgeocode-glib0 libgeonames0 libgettextpo-dev libgettextpo0 libgif7 libgl1-mesa-dev libgl1-mesa-dri libgl1-mesa-glx
  libglapi-mesa libglib2.0-bin libglu1-mesa libglu1-mesa-dev libgmp-dev libgmpxx4ldbl libgnome-bluetooth13 libgnome-desktop-3-12 libgnome-keyring-common libgnome-keyring0
  libgnome-menu-3-0 libgnomekbd-common libgnomekbd8 libgnutls-dev libgnutls28-dev libgnutlsxx28 libgoa-1.0-0b libgoa-1.0-common libgomp1 libgpg-error-dev libgphoto2-6
  libgphoto2-l10n libgphoto2-port12 libgraphite2-3 libgstreamer-plugins-base1.0-0 libgstreamer-plugins-good1.0-0 libgstreamer1.0-0 libgtk-3-0 libgtk-3-bin libgtk-3-common
  libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libgtop-2.0-10 libgtop2-common libgudev-1.0-0 libgusb2 libgweather-3-6 libgweather-common libharfbuzz-icu0 libharfbuzz0b
  libhtml-parser-perl libhtml-tagset-perl libhttp-date-perl libhttp-message-perl libhunspell-1.3-0 libhwloc-dev libhwloc-plugins libhwloc5 libhyphen0 libibus-1.0-5
  libibverbs-dev libibverbs1 libical1a libice-dev libice6 libicu-dev libidn11-dev libido3-0.1-0 libiec61883-0 libieee1284-3 libimobiledevice6 libindicator3-7 libinput-bin
  libinput10 libio-html-perl libio-pty-perl libio-socket-inet6-perl libio-socket-ssl-perl libio-string-perl libipc-run-perl libipc-system-simple-perl libisl15 libitm1
  libjack-jackd2-0 libjansson4 libjavascriptcoregtk-4.0-18 libjbig0 libjpeg-turbo8 libjpeg8 libjson-glib-1.0-0 libjson-glib-1.0-common libjsoncpp-dev libjsoncpp1
  libjsonrpccpp-client0 libjsonrpccpp-common0 libjsonrpccpp-dev libjsonrpccpp-server0 libjsonrpccpp-stub0 liblcms2-2 libldb1 libleveldb-dev libleveldb1v5
  liblightdm-gobject-1-0 liblist-moreutils-perl libllvm5.0 liblsan0 libltdl-dev libltdl7 liblwp-mediatypes-perl libmailtools-perl libmbim-glib4 libmbim-proxy
  libmicrohttpd-dev libmicrohttpd10 libmirclient9 libmircommon7 libmircore1 libmirprotobuf3 libmm-glib0 libmpc3 libmpx0 libmtdev1 libmtp-common libmtp-runtime libmtp9
  libnautilus-extension1a libndp0 libnet-dns-perl libnet-domain-tld-perl libnet-ip-perl libnet-libidn-perl libnet-smtp-ssl-perl libnet-ssleay-perl libnih-dbus1
  libnl-3-200 libnl-genl-3-200 libnm-glib4 libnm-gtk-common libnm-gtk0 libnm-util2 libnm0 libnma-common libnma0 libnotify4 libnspr4 libnss-mdns libnss3 libnss3-nssdb
  libnuma-dev liboauth0 libogg0 libopenmpi-dev libopenmpi1.10 libopus0 liborc-0.4-0 libp11-kit-dev libp11-kit-gnome-keyring libpackagekit-glib2-16 libpam-gnome-keyring
  libpanel-applet0 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpangoxft-1.0-0 libparse-debianchangelog-perl libpciaccess0 libpcre16-3 libpcsclite1
  libperlio-gzip-perl libpixman-1-0 libplist3 libprotobuf-lite9v5 libproxy1v5 libpthread-stubs0-dev libpulse-mainloop-glib0 libpulse0 libpulsedsp libpwquality-common
  libpwquality1 libpython-dev libpython-stdlib libpython2.7 libpython2.7-dev libpython2.7-minimal libpython2.7-stdlib libqmi-glib5 libqmi-proxy libqt5core5a libqt5dbus5
  libqt5gui5 libqt5network5 libqt5opengl5 libqt5printsupport5 libqt5qml5 libqt5quick5 libqt5sql5 libqt5sql5-sqlite libqt5svg5 libqt5webkit5 libqt5widgets5 libqt5xml5
  libquadmath0 libraw1394-11 libreadline-dev libreadline6-dev librest-0.7-0 librsvg2-2 librsvg2-common libsamplerate0 libsane libsane-common libsecret-1-0
  libsecret-common libsensors4 libshout3 libsignon-extension1 libsignon-glib1 libsignon-plugins-common1 libsignon-qt5-1 libsm-dev libsm6 libsmbclient libsnappy1v5
  libsndfile1 libsocket6-perl libsoup-gnome2.4-1 libsoup2.4-1 libspeex1 libspeexdsp1 libstdc++-5-dev libsub-name-perl libtag1v5 libtag1v5-vanilla libtalloc2
  libtasn1-6-dev libtasn1-doc libtdb1 libtevent0 libtext-levenshtein-perl libthai-data libthai0 libtheora0 libtiff5 libtimedate-perl libtimezonemap-data libtimezonemap1
  libtinfo-dev libtool libtsan0 libtxc-dxtn-s2tc0 libubsan0 libudisks2-0 libunistring0 libunity-control-center1 libunity-settings-daemon1 libupower-glib3 liburi-perl
  liburl-dispatcher1 libusbmuxd4 libv4l-0 libv4lconvert0 libvdpau1 libvisual-0.4-0 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx3 libwacom-bin libwacom-common libwacom2
  libwavpack1 libwayland-client0 libwayland-cursor0 libwayland-egl1-mesa libwayland-server0 libwbclient0 libwebkit2gtk-4.0-37 libwebkit2gtk-4.0-37-gtk2 libwebp5
  libwebrtc-audio-processing-0 libx11-dev libx11-doc libx11-xcb-dev libx11-xcb1 libxau-dev libxaw7 libxcb-dri2-0 libxcb-dri2-0-dev libxcb-dri3-0 libxcb-dri3-dev
  libxcb-glx0 libxcb-glx0-dev libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-present-dev libxcb-present0 libxcb-randr0 libxcb-randr0-dev libxcb-render-util0
  libxcb-render0 libxcb-render0-dev libxcb-shape0 libxcb-shape0-dev libxcb-shm0 libxcb-sync-dev libxcb-sync1 libxcb-util1 libxcb-xfixes0 libxcb-xfixes0-dev libxcb-xkb1
  libxcb1-dev libxcomposite1 libxcursor1 libxdamage-dev libxdamage1 libxdmcp-dev libxext-dev libxfixes-dev libxfixes3 libxfont1 libxft2 libxi-dev libxi6 libxinerama1
  libxkbcommon-x11-0 libxkbcommon0 libxkbfile1 libxklavier16 libxmu-dev libxmu-headers libxmu6 libxnvctrl0 libxpm4 libxrandr2 libxrender1 libxshmfence-dev libxshmfence1
  libxslt1.1 libxt-dev libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm-dev libxxf86vm1 libyaml-libyaml-perl libyelp0 lightdm lintian linux-libc-dev make manpages-dev
  mesa-common-dev mesa-vdpau-drivers mobile-broadband-provider-info modemmanager mountall mousetweaks mpi-default-bin mpi-default-dev nautilus-data nettle-dev
  network-manager network-manager-gnome network-manager-pptp notification-daemon nvidia-390 nvidia-390-dev nvidia-modprobe nvidia-opencl-icd-390 nvidia-prime
  nvidia-settings ocl-icd-libopencl1 opencl-headers openjdk-8-jre openjdk-8-jre-headless openmpi-bin openmpi-common p11-kit p11-kit-modules patchutils pinentry-gnome3
  pkg-config policykit-1-gnome ppp pptp-linux pulseaudio pulseaudio-module-x11 pulseaudio-utils python python-dev python-minimal python-talloc python2.7 python2.7-dev
  python2.7-minimal python3-aptdaemon python3-aptdaemon.pkcompat python3-bs4 python3-cairo python3-cups python3-cupshelpers python3-defer python3-html5lib python3-lxml
  python3-xdg python3-xkit qttranslations5-l10n rtkit samba-libs screen-resolution-extra session-migration signon-keyring-extension signon-plugin-oauth2
  signon-plugin-password signon-ui signon-ui-service signon-ui-x11 signond sound-theme-freedesktop system-config-printer-common system-config-printer-gnome
  system-config-printer-udev t1utils ubuntu-mono ubuntu-system-service ubuntu-touch-sounds udisks2 unity-control-center unity-control-center-faces
  unity-control-center-signon unity-greeter unity-settings-daemon upower upstart usb-modeswitch usb-modeswitch-data usbmuxd vdpau-driver-all wamerican wireless-regdb
  wpasupplicant x11-common x11-utils x11-xkb-utils x11proto-core-dev x11proto-damage-dev x11proto-dri2-dev x11proto-fixes-dev x11proto-gl-dev x11proto-input-dev
  x11proto-kb-dev x11proto-xext-dev x11proto-xf86vidmode-dev xfonts-base xfonts-encodings xfonts-utils xorg-sgml-doctools xserver-common xserver-xorg xserver-xorg-core
  xserver-xorg-input-all xserver-xorg-input-evdev xserver-xorg-input-synaptics xserver-xorg-input-vmmouse xserver-xorg-input-wacom xserver-xorg-legacy xtrans-dev yelp
  yelp-xsl zlib1g-dev
The following packages will be upgraded:
  curl gcc-5-base libc6 libcurl3-gnutls libdrm2 libnuma1 libstdc++6 libtasn1-6
8 upgraded, 852 newly installed, 0 to remove and 92 not upgraded.
Need to get 1,502 MB of archives.
After this operation, 4,194 MB of additional disk space will be used.
Get:1 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/main amd64 cmake-data all 3.5.1-1ubuntu3 [1,121 kB]
Get:2 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libc6 amd64 2.23-0ubuntu10 [2,580 kB]
Get:3 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libarchive13 amd64 3.1.2-11ubuntu0.16.04.3 [262 kB]
Get:4 http://us-east-2.ec2.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libcurl3 amd64 7.47.0-1ubuntu2.6 [187 kB]
...
...
Setting up nvidia-390 (390.30-0ubuntu1) ...
update-alternatives: using /usr/lib/nvidia-390/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf (x86_64-linux-gnu_gl_conf) in auto mode
update-alternatives: warning: skip creation of /usr/share/grub-gfxpayload-lists/blacklist/10_proprietary-graphics-drivers because associated file /usr/share/nvidia-390/nvidia-390.grub-gfxpayload (of link group x86_64-linux-gnu_gl_conf) doesn't exist
update-alternatives: using /usr/lib/nvidia-390/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf (x86_64-linux-gnu_egl_conf) in auto mode
update-alternatives: using /usr/lib/nvidia-390/alt_ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_GL.conf (i386-linux-gnu_gl_conf) in auto mode
update-alternatives: using /usr/lib/nvidia-390/alt_ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_EGL.conf (i386-linux-gnu_egl_conf) in auto mode
update-alternatives: using /usr/share/nvidia-390/glamor.conf to provide /usr/share/X11/xorg.conf.d/glamoregl.conf (glamor_conf) in auto mode
update-initramfs: deferring update (trigger activated)

A modprobe blacklist file has been created at /etc/modprobe.d to prevent Nouveau from loading. This can be reverted by deleting /etc/modprobe.d/nvidia-graphics-drivers.conf.
A new initrd image has also been created. To revert, please replace /boot/initrd-4.4.0-1041-aws with /boot/initrd-$(uname -r)-backup.

*****************************************************************************
*** Reboot your computer and verify that the NVIDIA graphics driver can   ***
*** be loaded.                                                            ***
*****************************************************************************

Adding system user `nvidia-persistenced' (UID 115) ...
Adding new group `nvidia-persistenced' (GID 122) ...
Adding new user `nvidia-persistenced' (UID 115) with group `nvidia-persistenced' ...
Not creating home directory `/'.
Loading new nvidia-390-390.30 DKMS files...
First Installation: checking all kernels...
Building only for 4.4.0-1041-aws
Building for architecture x86_64
Building initial module for 4.4.0-1041-aws
Done.

nvidia_390:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.4.0-1041-aws/updates/dkms/

nvidia_390_modeset.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.4.0-1041-aws/updates/dkms/

nvidia_390_drm.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.4.0-1041-aws/updates/dkms/

nvidia_390_uvm.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.4.0-1041-aws/updates/dkms/

depmod....

DKMS: install completed.
Setting up nvidia-390-dev (390.30-0ubuntu1) ...
Setting up libcuda1-390 (390.30-0ubuntu1) ...
Setting up nvidia-modprobe (390.30-0ubuntu1) ...
....
....

done.
done.
root@ip-172-31-3-105:~# reboot
root@ip-172-31-3-105:~/ethminer/build# make -j 4
Scanning dependencies of target ethash
[  5%] Building C object libethash/CMakeFiles/ethash.dir/sha3.c.o
[  5%] Building C object libethash/CMakeFiles/ethash.dir/internal.c.o
[  5%] Built target BuildInfo.h
Scanning dependencies of target devcore
[  8%] Building CXX object libdevcore/CMakeFiles/devcore.dir/RLP.cpp.o
[ 10%] Building CXX object libdevcore/CMakeFiles/devcore.dir/Worker.cpp.o
[ 13%] Building CXX object libdevcore/CMakeFiles/devcore.dir/FixedHash.cpp.o
[ 16%] Linking C static library libethash.a
[ 16%] Built target ethash
[ 18%] Building CXX object libdevcore/CMakeFiles/devcore.dir/SHA3.cpp.o
[ 21%] Building CXX object libdevcore/CMakeFiles/devcore.dir/CommonData.cpp.o
[ 24%] Building CXX object libdevcore/CMakeFiles/devcore.dir/Log.cpp.o
[ 27%] Linking CXX static library libdevcore.a
[ 27%] Built target devcore
Scanning dependencies of target hwmon
[ 32%] Building CXX object libhwmon/CMakeFiles/hwmon.dir/wraphelper.cpp.o
[ 32%] Building CXX object libhwmon/CMakeFiles/hwmon.dir/wrapnvml.cpp.o
Scanning dependencies of target apicore
[ 35%] Building CXX object libhwmon/CMakeFiles/hwmon.dir/wrapadl.cpp.o
Scanning dependencies of target poolprotocols
[ 37%] Building CXX object libhwmon/CMakeFiles/hwmon.dir/wrapamdsysfs.cpp.o
[ 40%] Building CXX object libapicore/CMakeFiles/apicore.dir/Api.cpp.o
[ 43%] Building CXX object libapicore/CMakeFiles/apicore.dir/ApiServer.cpp.o
[ 45%] Building CXX object libpoolprotocols/CMakeFiles/poolprotocols.dir/PoolClient.cpp.o
[ 48%] Linking CXX static library libhwmon.a
[ 48%] Built target hwmon
[ 51%] Building CXX object libpoolprotocols/CMakeFiles/poolprotocols.dir/PoolManager.cpp.o
[ 54%] Building CXX object libpoolprotocols/CMakeFiles/poolprotocols.dir/testing/SimulateClient.cpp.o
[ 56%] Building CXX object libpoolprotocols/CMakeFiles/poolprotocols.dir/stratum/EthStratumClient.cpp.o
[ 59%] Linking CXX static library libapicore.a
[ 59%] Built target apicore
[ 62%] Building NVCC (Device) object libethash-cuda/CMakeFiles/ethash-cuda.dir/ethash-cuda_generated_ethash_cuda_miner_kernel.cu.o
/root/ethminer/libpoolprotocols/testing/SimulateClient.cpp:41:52: warning: unused parameter ‘rate’ [-Wunused-parameter]
 void SimulateClient::submitHashrate(string const & rate)
                                                    ^
[ 64%] Building CXX object libpoolprotocols/CMakeFiles/poolprotocols.dir/getwork/EthGetworkClient.cpp.o
ptxas info    : 0 bytes gmem, 264 bytes cmem[3]
ptxas info    : Compiling entry function '_Z25ethash_calculate_dag_itemj' for 'sm_30'
ptxas info    : Function properties for _Z25ethash_calculate_dag_itemj
    656 bytes stack frame, 1136 bytes spill stores, 844 bytes spill loads
ptxas info    : Used 63 registers, 324 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj8EEvPV14search_resultsm' for 'sm_30'
ptxas info    : Function properties for _Z13ethash_searchILj8EEvPV14search_resultsm
    160 bytes stack frame, 408 bytes spill stores, 420 bytes spill loads
ptxas info    : Used 63 registers, 336 bytes cmem[0], 96 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj4EEvPV14search_resultsm' for 'sm_30'
ptxas info    : Function properties for _Z13ethash_searchILj4EEvPV14search_resultsm
    104 bytes stack frame, 288 bytes spill stores, 276 bytes spill loads
ptxas info    : Used 63 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj2EEvPV14search_resultsm' for 'sm_30'
ptxas info    : Function properties for _Z13ethash_searchILj2EEvPV14search_resultsm
    72 bytes stack frame, 236 bytes spill stores, 212 bytes spill loads
ptxas info    : Used 63 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj1EEvPV14search_resultsm' for 'sm_30'
ptxas info    : Function properties for _Z13ethash_searchILj1EEvPV14search_resultsm
    72 bytes stack frame, 224 bytes spill stores, 204 bytes spill loads
ptxas info    : Used 63 registers, 336 bytes cmem[0]
ptxas info    : 0 bytes gmem, 264 bytes cmem[3]
ptxas info    : Compiling entry function '_Z25ethash_calculate_dag_itemj' for 'sm_35'
ptxas info    : Function properties for _Z25ethash_calculate_dag_itemj
    272 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 79 registers, 324 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj8EEvPV14search_resultsm' for 'sm_35'
ptxas info    : Function properties for _Z13ethash_searchILj8EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 101 registers, 336 bytes cmem[0], 96 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj4EEvPV14search_resultsm' for 'sm_35'
ptxas info    : Function properties for _Z13ethash_searchILj4EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj2EEvPV14search_resultsm' for 'sm_35'
ptxas info    : Function properties for _Z13ethash_searchILj2EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 79 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj1EEvPV14search_resultsm' for 'sm_35'
ptxas info    : Function properties for _Z13ethash_searchILj1EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 79 registers, 336 bytes cmem[0]
[ 67%] Linking CXX static library libpoolprotocols.a
[ 67%] Built target poolprotocols
ptxas info    : 0 bytes gmem, 264 bytes cmem[3]
ptxas info    : Compiling entry function '_Z25ethash_calculate_dag_itemj' for 'sm_50'
ptxas info    : Function properties for _Z25ethash_calculate_dag_itemj
    272 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 96 registers, 324 bytes cmem[0], 4 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj8EEvPV14search_resultsm' for 'sm_50'
ptxas info    : Function properties for _Z13ethash_searchILj8EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 107 registers, 336 bytes cmem[0], 96 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj4EEvPV14search_resultsm' for 'sm_50'
ptxas info    : Function properties for _Z13ethash_searchILj4EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj2EEvPV14search_resultsm' for 'sm_50'
ptxas info    : Function properties for _Z13ethash_searchILj2EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj1EEvPV14search_resultsm' for 'sm_50'
ptxas info    : Function properties for _Z13ethash_searchILj1EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : 0 bytes gmem, 264 bytes cmem[3]
ptxas info    : Compiling entry function '_Z25ethash_calculate_dag_itemj' for 'sm_52'
ptxas info    : Function properties for _Z25ethash_calculate_dag_itemj
    272 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 96 registers, 324 bytes cmem[0], 4 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj8EEvPV14search_resultsm' for 'sm_52'
ptxas info    : Function properties for _Z13ethash_searchILj8EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 107 registers, 336 bytes cmem[0], 96 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj4EEvPV14search_resultsm' for 'sm_52'
ptxas info    : Function properties for _Z13ethash_searchILj4EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj2EEvPV14search_resultsm' for 'sm_52'
ptxas info    : Function properties for _Z13ethash_searchILj2EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj1EEvPV14search_resultsm' for 'sm_52'
ptxas info    : Function properties for _Z13ethash_searchILj1EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : 0 bytes gmem, 264 bytes cmem[3]
ptxas info    : Compiling entry function '_Z25ethash_calculate_dag_itemj' for 'sm_53'
ptxas info    : Function properties for _Z25ethash_calculate_dag_itemj
    272 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 96 registers, 324 bytes cmem[0], 4 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj8EEvPV14search_resultsm' for 'sm_53'
ptxas info    : Function properties for _Z13ethash_searchILj8EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 107 registers, 336 bytes cmem[0], 96 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj4EEvPV14search_resultsm' for 'sm_53'
ptxas info    : Function properties for _Z13ethash_searchILj4EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj2EEvPV14search_resultsm' for 'sm_53'
ptxas info    : Function properties for _Z13ethash_searchILj2EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj1EEvPV14search_resultsm' for 'sm_53'
ptxas info    : Function properties for _Z13ethash_searchILj1EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : 0 bytes gmem, 264 bytes cmem[3]
ptxas info    : Compiling entry function '_Z25ethash_calculate_dag_itemj' for 'sm_60'
ptxas info    : Function properties for _Z25ethash_calculate_dag_itemj
    272 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 96 registers, 324 bytes cmem[0], 4 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj8EEvPV14search_resultsm' for 'sm_60'
ptxas info    : Function properties for _Z13ethash_searchILj8EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 107 registers, 336 bytes cmem[0], 96 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj4EEvPV14search_resultsm' for 'sm_60'
ptxas info    : Function properties for _Z13ethash_searchILj4EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj2EEvPV14search_resultsm' for 'sm_60'
ptxas info    : Function properties for _Z13ethash_searchILj2EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj1EEvPV14search_resultsm' for 'sm_60'
ptxas info    : Function properties for _Z13ethash_searchILj1EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : 0 bytes gmem, 264 bytes cmem[3]
ptxas info    : Compiling entry function '_Z25ethash_calculate_dag_itemj' for 'sm_61'
ptxas info    : Function properties for _Z25ethash_calculate_dag_itemj
    272 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 96 registers, 324 bytes cmem[0], 4 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj8EEvPV14search_resultsm' for 'sm_61'
ptxas info    : Function properties for _Z13ethash_searchILj8EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 107 registers, 336 bytes cmem[0], 96 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj4EEvPV14search_resultsm' for 'sm_61'
ptxas info    : Function properties for _Z13ethash_searchILj4EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj2EEvPV14search_resultsm' for 'sm_61'
ptxas info    : Function properties for _Z13ethash_searchILj2EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj1EEvPV14search_resultsm' for 'sm_61'
ptxas info    : Function properties for _Z13ethash_searchILj1EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : 0 bytes gmem, 264 bytes cmem[3]
ptxas info    : Compiling entry function '_Z25ethash_calculate_dag_itemj' for 'sm_62'
ptxas info    : Function properties for _Z25ethash_calculate_dag_itemj
    272 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 96 registers, 324 bytes cmem[0], 4 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj8EEvPV14search_resultsm' for 'sm_62'
ptxas info    : Function properties for _Z13ethash_searchILj8EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 107 registers, 336 bytes cmem[0], 96 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj4EEvPV14search_resultsm' for 'sm_62'
ptxas info    : Function properties for _Z13ethash_searchILj4EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj2EEvPV14search_resultsm' for 'sm_62'
ptxas info    : Function properties for _Z13ethash_searchILj2EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj1EEvPV14search_resultsm' for 'sm_62'
ptxas info    : Function properties for _Z13ethash_searchILj1EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 336 bytes cmem[0]
ptxas info    : 0 bytes gmem, 264 bytes cmem[3]
ptxas info    : Compiling entry function '_Z25ethash_calculate_dag_itemj' for 'sm_70'
ptxas info    : Function properties for _Z25ethash_calculate_dag_itemj
    272 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 82 registers, 356 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj8EEvPV14search_resultsm' for 'sm_70'
ptxas info    : Function properties for _Z13ethash_searchILj8EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 108 registers, 368 bytes cmem[0], 104 bytes cmem[2]
ptxas info    : Compiling entry function '_Z13ethash_searchILj4EEvPV14search_resultsm' for 'sm_70'
ptxas info    : Function properties for _Z13ethash_searchILj4EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 86 registers, 368 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj2EEvPV14search_resultsm' for 'sm_70'
ptxas info    : Function properties for _Z13ethash_searchILj2EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 84 registers, 368 bytes cmem[0]
ptxas info    : Compiling entry function '_Z13ethash_searchILj1EEvPV14search_resultsm' for 'sm_70'
ptxas info    : Function properties for _Z13ethash_searchILj1EEvPV14search_resultsm
    0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 80 registers, 368 bytes cmem[0]
Scanning dependencies of target ethash-cuda
[ 70%] Building CXX object libethash-cuda/CMakeFiles/ethash-cuda.dir/CUDAMiner.cpp.o
[ 72%] Linking CXX static library libethash-cuda.a
[ 72%] Built target ethash-cuda
[ 78%] Generating OpenCL Kernel Byte Array
[ 78%] Generating OpenCL Kernel Byte Array
Scanning dependencies of target ethash-cl
[ 81%] Building CXX object libethash-cl/CMakeFiles/ethash-cl.dir/CLMiner.cpp.o
[ 83%] Linking CXX static library libethash-cl.a
[ 83%] Built target ethash-cl
Scanning dependencies of target ethcore
[ 86%] Building CXX object libethcore/CMakeFiles/ethcore.dir/EthashAux.cpp.o
[ 89%] Building CXX object libethcore/CMakeFiles/ethcore.dir/BlockHeader.cpp.o
[ 91%] Building CXX object libethcore/CMakeFiles/ethcore.dir/Miner.cpp.o
[ 94%] Linking CXX static library libethcore.a
[ 94%] Built target ethcore
Scanning dependencies of target ethminer
[ 97%] Building CXX object ethminer/CMakeFiles/ethminer.dir/main.cpp.o
[100%] Linking CXX executable ethminer
[100%] Built target ethminer
root@ip-172-31-3-105:~/ethminer/build# cd ethminer
./ethminer -U -F http://mypoolethereum.com:80/1111111111111111111111111111111111111

3. Extra section – noting the benchmark.

This installation is done in amazon EC2 p2.xlarge instance type, which has 1 GPU with 12 GiB RAM (2496 parallel processing cores), the processor is 4vcpu of Intel Xeon E5-2686 v4 (Broadwell) processors running at 2.7 GHz, Main Memory 122 GiB. You can see the virtual server is using “NVIDIA Corporation GK210GL [Tesla K80] (rev a1)”. So the benchmark of the virutal server is total of 6.5~6.6 millions hashes per second of Ethash with highest value of 6.65 millions hashes per second.
Here is the output of the lspci:

00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 01)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 Ethernet controller: Device 1d0f:ec20
00:1e.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)
00:1f.0 Unassigned class [ff80]: XenSource, Inc. Xen Platform Device (rev 01)

And the output of the nvidia-smi:

root@ip-172-31-3-105:~# nvidia-smi 
Fri Feb 23 11:45:19 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.30                 Driver Version: 390.30                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 00000000:00:1E.0 Off |                    0 |
| N/A   71C    P0   125W / 149W |   2501MiB / 11441MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0     11042      C   ./ethminer                                  2490MiB |
+-----------------------------------------------------------------------------+

Install ethminer in a machine with NVIDIA video card under Ubuntu 16.04 LTS

This is simple “how to” to get started mining crypto currency with explanations using Ethash algorithm like Ethererum. Just follow the simple steps and you’ll have an optimized GPU for Ethash crypto currencies:

STEP 1) Download latest CUDA from NVDIA site.

Open your favorite browser and go to

http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/

and search for copy the link

cuda-repo-ubuntu1604-

in our case the latest version of CUDA 9.1.85 is

http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb

There is also

cuda-repo-ubuntu1604_8.0.44-1_amd64.deb 4.0KB 2017-09-22 22:08
cuda-repo-ubuntu1604_8.0.61-1_amd64.deb 4.0KB 2017-09-22 22:08
cuda-repo-ubuntu1604_9.0.176-1_amd64.deb 4.0KB 2017-09-22 22:09
cuda-repo-ubuntu1604_9.1.85-1_amd64.deb 4.0KB 2017-12-02 01:29

you could try them to see if you have a better performance for your video card with some of the older CUDA platform.
So now we download the file with wget just execute

cd ~
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb

STEP 2) Install the NVIDIA CUDA repository in you UBUNTU with

sudo dpkg -i /root/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
* If you encounter error

The public CUDA GPG key does not appear to be installed.
To install the key, run this command:
sudo apt-key adv –fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub

Just execute the command it says and then again, so in our case:

sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
dpkg -i /root/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb

STEP 3) Install repository for your proprietary drivers of NVIDIA video cards

sudo add-apt-repository -y ppa:graphics-drivers/ppa

STEP 4) Update all repositories to download the latest package lists

sudo apt-get update -y

STEP 5) Install the dependencies for the ethminer, NVIDIA video driver and NVIDIA CUDA platform5).

Install the dependencies for the ethminer, NVIDIA video driver and NVIDIA CUDA platform

sudo apt-get -y install git cmake libleveldb-dev libjsoncpp-dev libboost-all-dev libgmp-dev libreadline-dev libcurl4-gnutls-dev ocl-icd-libopencl1 opencl-headers mesa-common-dev libmicrohttpd-dev build-essential cuda libcrypto++-dev libjsonrpccpp-dev

You probably will see how you packet manager downloads around 852 packets (arround 1.5G) and installs them all, at last you must see no errors and probably there will be double “done”

done.
done.

STEP 6) now reboot the machine to load the NVIDIA proprietary driver.

At the time of this howto we the NVIDIA driver is 390.30 (nvidia-390 (390.30-0ubuntu1)), but you can list older ones and install them to see if they are better than the last. It happens frequently an older driver (but not much old) to be slightly better in performance than the latest driver, so you can experiment with other older drivers if you like.

sudo reboot

STEP 7) Check to see if your driver is loaded properly

Execute command

dmesg|grep nvidia

Here is example output

[   11.096593] nvidia: module license 'NVIDIA' taints kernel.
[   11.116551] nvidia: module verification failed: signature and/or required key missing - tainting kernel
[   11.134454] nvidia-nvlink: Nvlink Core is being initialized, major device number 248
[   11.226239] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  390.30  Wed Jan 31 22:08:49 PST 2018 (using threaded interrupts)
[   11.265963] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  390.30  Wed Jan 31 21:32:48 PST 2018
[   11.275447] [drm] [nvidia-drm] [GPU ID 0x0000001e] Loading driver
[   14.527352] nvidia-uvm: Loaded the UVM driver in 8 mode, major device number 247

So we finished the first stage, the preparation of your machine to install the ethminer. Now we move to the actual installation of the gpu mining software (and cpu mining, of course):

STEP 8)* Tune screen for better support of your scrolling history, because usually you execute the ethminer in screen (this step is not required for proper working of ethminer)

echo "termcapinfo xterm* ti@:te@" &amp;amp;amp;amp;amp;gt; /root/.screenrc

STEP 9) Start screen and clone the ethminer repository

git clone https://github.com/ethereum-mining/ethminer

STEP 10) Compile ethminer with “native” optimizations for the compiler gnu gcc. It has probably no impact of the GPU computing, but still it is a good practice to build the source with the best suited optimization for you mining machine.

mkdir -p ./ethminer/build
cd ./ethminer/build
export CFLAGS="-O2 -march=native -msse3 -fomit-frame-pointer -pipe"
export CHOST="x86_64-pc-linux-gnu"
export CXXFLAGS="${CFLAGS}"
export LDFLAGS="-Wl,-O1"
cmake .. -DETHASHCUDA=ON -DETHASHCL=ON
make -j 4

STEP 11) Execute ethminer, but before you must execute some tuning exports for the GPU

export GPU_FORCE_64BIT_PTR=0
export GPU_MAX_HEAP_SIZE=100
export GPU_USE_SYNC_OBJECTS=1
export GPU_MAX_ALLOC_PERCENT=100
export GPU_SINGLE_ALLOC_PERCENT=100
cd ~/ethminer/build/ethminer
./ethminer -U -F http://yourpooladdress:80/11111111111111111111111111111111111/miner-01

In the example above we use a pool: yourpooladdress and the ethereum address 11111111111111111111111111111111111 – the two values are not valid, SET YOUR VALUES, do not use this fake values!

*Running the miner is simple just execute

ethminer

  • -U – When mining use the GPU via CUDA.
  • -G – When mining use the GPU via OpenCL.
  • -X,–cuda-opencl Use OpenCL + CUDA in a system with mixed AMD/Nvidia cards. May require setting –opencl-platform 1

*Here is the output of the properly built and running ethminer:

m 10:54:42|ethminer| ethminer version 0.14.0.dev2
m 10:54:42|ethminer| Build: Linux/g++ / Release
cu 10:54:45|ethminer| Using grid size 8192 , block size 128
m 10:54:45|ethminer| not-connected
ℹ 10:54:45|getwork | Connected to http://eth-eu.dwarfpool.com:80/11111111111111111111111111111111111/miner-02
ℹ 10:54:45|getwork | Spinning up miners...
ℹ 10:54:45|cuda-0 | No work. Pause for 3 s.
ℹ 10:54:45|getwork | Received new job #f0a5f915 from http://eth-eu.dwarfpool.com:80/11111111111111111111111111111111111/miner-02
ℹ 10:54:48|cuda-0 | Initialising miner 0
m 10:54:50|ethminer| Speed 0.00 Mh/s gpu/0 0.00 [A0+0:R0+0:F0] Time: 00:00
cu 10:54:50|cuda-0 | Using device: Tesla K80 (Compute 3.7)
cu 10:54:50|cuda-0 | Set Device to current
cu 10:54:50|cuda-0 | Resetting device
cu 10:54:50|cuda-0 | Allocating light with size: 39190336
cu 10:54:50|cuda-0 | Generating mining buffers
cu 10:54:50|cuda-0 | Generating DAG for GPU # 0 with dagSize: 2508191872 gridSize: 8192
m 10:54:55|ethminer| Speed 0.00 Mh/s gpu/0 0.00 [A0+0:R0+0:F0] Time: 00:00
ℹ 10:54:56|getwork | Received new job #5a34e38b from http://eth-eu.dwarfpool.com:80/11111111111111111111111111111111111/miner-02
m 10:55:00|ethminer| Speed 0.00 Mh/s gpu/0 0.00 [A0+0:R0+0:F0] Time: 00:00
ℹ 10:55:01|getwork | Received new job #d48be1aa from http://eth-eu.dwarfpool.com:80/11111111111111111111111111111111111/miner-02
m 10:55:05|ethminer| Speed 0.00 Mh/s gpu/0 0.00 [A0+0:R0+0:F0] Time: 00:00
m 10:55:10|ethminer| Speed 0.00 Mh/s gpu/0 0.00 [A0+0:R0+0:F0] Time: 00:00
m 10:55:15|ethminer| Speed 0.00 Mh/s gpu/0 0.00 [A0+0:R0+0:F0] Time: 00:00
ℹ 10:55:19|getwork | Received new job #7f50d832 from http://eth-eu.dwarfpool.com:80/11111111111111111111111111111111111/miner-02
m 10:55:20|ethminer| Speed 5.56 Mh/s gpu/0 5.56 [A0+0:R0+0:F0] Time: 00:00
ℹ 10:55:21|getwork | Received new job #b41b6784 from http://eth-eu.dwarfpool.com:80/11111111111111111111111111111111111/miner-02
ℹ 10:55:23|getwork | Received new job #b9a76ceb from http://eth-eu.dwarfpool.com:80/11111111111111111111111111111111111/miner-02
m 10:55:25|ethminer| Speed 5.86 Mh/s gpu/0 5.86 [A0+0:R0+0:F0] Time: 00:00
m 10:55:30|ethminer| Speed 6.30 Mh/s gpu/0 6.30 [A0+0:R0+0:F0] Time: 00:00
m 10:55:35|ethminer| Speed 6.57 Mh/s gpu/0 6.57 [A0+0:R0+0:F0] Time: 00:00
ℹ 10:55:38|getwork | Received new job #e0329f03 from http://eth-eu.dwarfpool.com:80/11111111111111111111111111111111111/miner-02
m 10:55:40|ethminer| Speed 6.60 Mh/s gpu/0 6.60 [A0+0:R0+0:F0] Time: 00:00
m 10:55:45|ethminer| Speed 6.50 Mh/s gpu/0 6.50 [A0+0:R0+0:F0] Time: 00:01
m 10:55:50|ethminer| Speed 6.58 Mh/s gpu/0 6.58 [A0+0:R0+0:F0] Time: 00:01
m 10:55:55|ethminer| Speed 6.58 Mh/s gpu/0 6.58 [A0+0:R0+0:F0] Time: 00:01
m 10:56:00|ethminer| Speed 6.68 Mh/s gpu/0 6.68 [A0+0:R0+0:F0] Time: 00:01
m 10:56:05|ethminer| Speed 6.58 Mh/s gpu/0 6.58 [A0+0:R0+0:F0] Time: 00:01
m 10:56:10|ethminer| Speed 6.58 Mh/s gpu/0 6.58 [A0+0:R0+0:F0] Time: 00:01
m 10:56:15|ethminer| Speed 6.68 Mh/s gpu/0 6.68 [A0+0:R0+0:F0] Time: 00:01
m 10:56:20|ethminer| Speed 6.58 Mh/s gpu/0 6.58 [A0+0:R0+0:F0] Time: 00:01
m 10:56:25|ethminer| Speed 6.68 Mh/s gpu/0 6.68 [A0+0:R0+0:F0] Time: 00:01
ℹ 10:56:25|getwork | Received new job #22e64b5b from http://eth-eu.dwarfpool.com:80/11111111111111111111111111111111111/miner-02
m 10:56:30|ethminer| Speed 6.50 Mh/s gpu/0 6.50 [A0+0:R0+0:F0] Time: 00:01
m 10:56:35|ethminer| Speed 6.50 Mh/s gpu/0 6.50 [A0+0:R0+0:F0] Time: 00:01
m 10:56:40|ethminer| Speed 6.58 Mh/s gpu/0 6.58 [A0+0:R0+0:F0] Time: 00:01
ℹ 10:56:41|cuda-0 | Nonce 0x656b10dfbe95134f submitted to http://eth-eu.dwarfpool.com:80/11111111111111111111111111111111111/miner-02
ℹ 10:56:42|getwork | **Accepted in 500 ms.
m 10:56:45|ethminer| Speed 6.68 Mh/s gpu/0 6.68 [A1+0:R0+0:F0] Time: 00:02
ℹ 10:56:47|getwork | Received new job #304cc9df from http://eth-eu.dwarfpool.com:80/11111111111111111111111111111111111/miner-02
m 10:56:50|ethminer| Speed 6.50 Mh/s gpu/0 6.50 [A1+0:R0+0:F0] Time: 00:02
m 10:56:55|ethminer| Speed 6.51 Mh/s gpu/0 6.51 [A1+0:R0+0:F0] Time: 00:02

* Here is the all options of the ethminer:

./ethminer --help
Usage ethminer [OPTIONS]
Options:

Work farming mode:
    -F,--farm <url>  Put into mining farm mode with the work server at URL (default: http://127.0.0.1:8545)
    -FF,-FO, --farm-failover, --stratum-failover <url> Failover getwork/stratum URL (default: disabled)
        --farm-retries <n> Number of retries until switch to failover (default: 3)
        -S, --stratum <host:port>  Put into stratum mode with the stratum server at host:port
        -SF, --stratum-failover <host:port>  Failover stratum server at host:port
    -O, --userpass <username.workername:password> Stratum login credentials
    -FO, --failover-userpass <username.workername:password> Failover stratum login credentials (optional, will use normal credentials when omitted)
    --work-timeout <n> reconnect/failover after n seconds of working on the same (stratum) job. Defaults to 180. Don't set lower than max. avg. block time
    -SC, --stratum-client <n>  Stratum client version. Version 1 support only.
    -SP, --stratum-protocol <n> Choose which stratum protocol to use:
        0: official stratum spec: ethpool, ethermine, coinotron, mph, nanopool (default)
        1: eth-proxy compatible: dwarfpool, f2pool, nanopool (required for hashrate reporting to work with nanopool)
        2: EthereumStratum/1.0.0: nicehash
    -RH, --report-hashrate Report current hashrate to pool (please only enable on pools supporting this)
    -HWMON [n] Displays gpu temp, fan percent and power usage. Note: In linux, the program uses sysfs, which may require running with root priviledges.
        0: Displays only temp and fan percent (default)
        1: Also displays power usage
    --exit Stops the miner whenever an error is encountered
    -SE, --stratum-email <s> Email address used in eth-proxy (optional)
    --farm-recheck <n>  Leave n ms between checks for changed work (default: 500). When using stratum, use a high value (i.e. 2000) to get more stable hashrate output

Benchmarking mode:
    -M [<n>],--benchmark [<n>] Benchmark for mining and exit; Optionally specify block number to benchmark against specific DAG.
    --benchmark-warmup <seconds>  Set the duration of warmup for the benchmark tests (default: 3).
    --benchmark-trial <seconds>  Set the duration for each trial for the benchmark tests (default: 3).
    --benchmark-trials <n>  Set the number of benchmark trials to run (default: 5).
Simulation mode:
    -Z [<n>],--simulation [<n>] Mining test mode. Used to validate kernel optimizations. Optionally specify block number.
Mining configuration:
    -G,--opencl  When mining use the GPU via OpenCL.
    -U,--cuda  When mining use the GPU via CUDA.
    -X,--cuda-opencl Use OpenCL + CUDA in a system with mixed AMD/Nvidia cards. May require setting --opencl-platform 1
    --opencl-platform <n>  When mining using -G/--opencl use OpenCL platform n (default: 0).
    --opencl-device <n>  When mining using -G/--opencl use OpenCL device n (default: 0).
    --opencl-devices <0 1 ..n> Select which OpenCL devices to mine on. Default is to use all
    -t, --mining-threads <n> Limit number of CPU/GPU miners to n (default: use everything available on selected platform)
    --list-devices List the detected OpenCL/CUDA devices and exit. Should be combined with -G or -U flag
    --display-interval <n> Set mining stats display interval in seconds. (default: every 5 seconds)
    -L, --dag-load-mode <mode> DAG generation mode.
        parallel    - load DAG on all GPUs at the same time (default)
        sequential  - load DAG on GPUs one after another. Use this when the miner crashes during DAG generation
        single <n>  - generate DAG on device n, then copy to other devices
 OpenCL configuration:
    --cl-kernel <n>  Use a different OpenCL kernel (default: use stable kernel)
        0: stable kernel
        1: experimental kernel
    --cl-local-work Set the OpenCL local work size. Default is 128
    --cl-global-work Set the OpenCL global work size as a multiple of the local work size. Default is 8192 * 128
    --cl-parallel-hash <1 2 ..8> Define how many threads to associate per hash. Default=8
 CUDA configuration:
    --cuda-block-size Set the CUDA block work size. Default is 128
    --cuda-grid-size Set the CUDA grid size. Default is 8192
    --cuda-streams Set the number of CUDA streams. Default is 2
    --cuda-schedule <mode> Set the schedule mode for CUDA threads waiting for CUDA devices to finish work. Default is 'sync'. Possible values are:
        auto  - Uses a heuristic based on the number of active CUDA contexts in the process C and the number of logical processors in the system P. If C > P, then yield else spin.
        spin  - Instruct CUDA to actively spin when waiting for results from the device.
        yield - Instruct CUDA to yield its thread when waiting for results from the device.
        sync  - Instruct CUDA to block the CPU thread on a synchronization primitive when waiting for the results from the device.
    --cuda-devices <0 1 ..n> Select which CUDA GPUs to mine on. Default is to use all
    --cuda-parallel-hash <1 2 ..8> Define how many hashes to calculate in a kernel, can be scaled to achieve better performance. Default=4
    --cuda-noeval  bypass host software re-evalution of GPU solutions.
        This will trim some milliseconds off the time it takes to send a result to the pool.
        Use at your own risk! If GPU generates errored results they WILL be forwarded to the pool
        Not recommended at high overclock.
 API core configuration:
    --api-port Set the api port, the miner should listen to. Use 0 to disable. Default=0, use negative numbers to run in readonly mode. for example -3333.
 General Options:
    -v,--verbosity <0 - 9>  Set the log verbosity from 0 to 9 (default: 5). Set to 9 for switch time logging.
    -V,--version  Show the version and exit.
    -h,--help  Show this help message and exit.
 Envionment variables:
     NO_COLOR - set to any value to disable color output. Unset to re-enable color output.

Delete millions of files slowly without loading the server

There a situations when we need to delete a great deal of files from our filesystem and if we just execute

rm -Rf

the server will surely get loaded and the service it provides will degrade! What if you cannot reformat the filesystem, because the server use it extensively, but you need to delete let’s say a couple of millions file from it? We can use find and usleep (in most linux distro this program is installed by an additional package). The idea is to delete files one by one tuning the pause between every delete. Here you can execute this command in the background or a screen:

find /mnt/storage/old/ -type f -exec echo {} \; -exec rm {} \; -exec usleep 200000 \;

usleep accepts microseconds, so 200000 microseconds are 0.2 seconds. You can tune it precisely with a step of just a microsecond. In the real world under the bash console we probably will use values of max 1/10 of a second around above 100000 microseconds. Execute the command and then watch your server load and tune.

  • usleep in CentOS 7 is installed with package “initscripts”, which is installed by default
  • usleep in Ubuntu is missing and probably won’t find any safe place to download a package to install, but it can be sort of replace with “sleep <floating_point_number>s”, GNU sleep could accept floating point number for the delay and when added “s” at the end it could sleep for a fractions of a seconds. So the command for the Ubuntu is slightly changed:
    find /mnt/storage/old/ -type f -exec echo {} \; -exec rm {} \; -exec sleep 0.2s \;
    
  • not GNU version of sleep require NUMBER, so the smallest sleep is only 1 second, which is too big for the purpose. Check your man manual to see if your system has GNU sleep command.

Gentoo emerge a package with a custom option passed to the configure

Gentoo is a source-based Linux distro and each time we want to install a package in fact we compile it with the system program emerge. In most cases, we have USE flags for everything we need about a package, but we can further pass custom options directly to the configure script of the package through the emerge program. Using this method we can tune more subtle the configuration stage of a package and still using the package manager of the system, which is always the preferred way!
For example, we can install manually additional libraries in /usr/local/ or any other directory and we can use them passing the needed configuration to the configure script of the package. Let’s say we want to use a new feature of the latest OpenSSL library, but we do not want to install it globally and re-emerge everything linked to it, so we build it manually in a directory like /usr/local/openssl-1.1.1/ and we want to link our PHP against it, but the PHP is better to be installed by the emerge (the package manager) because it has many features like init script, the global default path to configurations and so on. So we can execute the following command:

EXTRA_ECONF="--with-openssl-dir=/usr/local/openssl-1.1.1/" emerge -avt php

you can use EXTRA_ECONF=”” to include options, which do not have USE flags. However there is a limitation, EXTRA_ECONF works only for autotools based ./configure scripts when the ebuild is using econf, so package not using autotools ./configure scripts won’t include the extra options.
It is good practice to make persistent this configuration over builds, so we can use

/etc/portage/package.env

to save the configuration for future building of the package:

echo "EXTRA_ECONF=\"--with-openssl-dir=/usr/local/openssl-1.1.1/\"" > /etc/portage/env/php.conf
echo "dev-lang/php php.conf" > /etc/portage/package.env

Reset any linux system from the console as if the reset button was pushed

What if you do not have the physical access to your server and you know there is a great possibility your server won’t shutdown properly, when you issue a reboot command (halt, shutdown and so on).
Ok, here is a situation, you have a dedicated server with no panel for resets, no IPMI access and a kernel bug just left a process with Disk sleep or any uninterruptible state that even a kill -9 won’t help! So just rebooting with the normal process of shutdown (going through the init levels or systemd states) won’t help, the shutdown process will be waiting infinite time for proper process termination, which won’t happen! All you need is just a simple old reset button pushed, but you have only a console, here what you can do and it is essentially the same as if someone pushed the server reset button:

echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger

This technique is known as magic SysRq key and have more options, but this is probably most used. It will immediately reboot the server, without unmounting or syncing filesystems. So be extremely careful and an additional advice: issue a sync command before the reset, even if you know it it won’t finish.

sync &

BE WARNED, you can break your filesystem (with the modern filesystem and their late state this is unlikely to happen) or database (this is really likely to happen, but you could always repair or at least shutdown the database software and/or make a backup before), but you can save your server!

Howto do a netinstall of CentOS 7 (7.4.1708) – minimal server installation

Minimal net install is useful when a dedicated server is installed from a IPMI KVM or Dell iDRAC, HP iLO, IBM IMM or where the initial client side download of files need to be minimal.
For amd64 CentOS 7 the net install bootable media is located here (now the current latest release is 7.4.1708, but you can check the last directory with 7. for the time you follow this howto):

http://mirror.leaseweb.com/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-NetInstall-1708.iso

Now this version is deprecated and you could have problems downloading it, so you could try the CentOS vault – http://vault.centos.org/7.4.1708/isos/x86_64/ Just follow the instructions for downloading.
Download it and put it on a cd or usb, the boot from it and follow the steps bellow:

STEP 1) Select “Install CentOS 7” and press “Enter”

main menu
Select CentOS 7 Installation

STEP 2) Wait for the installation to boot

main menu
Booting the installation

STEP 3) This is the first step, you could choose your Country and language, English is the default.

main menu
Country and language selection

STEP 4) Setup the right time and time zone of your server, this step is important, the clock of the server is really important for your software to work properly!

main menu
Date & Time

STEP 5) Often servers are set with UTC time, which is never changed (no summer saving time!). UTC is Coordinated Universal Time and first you must select “Etc” from the first dropdown menu.

main menu
Date & Time – UTC selected

STEP 6) Next let’s configure the network, because we are doing a network installation you need Internet connection to install the CentOS 7.

main menu
Network & Host Name

STEP 7) Click to configure the selected network adapter on the right.

main menu
Configure network Adapter

STEP 8) Click on the menu “IPv4 Settings”, then choose from the dropdown menu “Manual” (technically you can leave it Automattically as the default is, but this is a server howto it is not very clever your IP to be assigned by a DHCP server, but your setup could vary). Then click on “Add” and write your IP address, network mask and gateway, then in the DNS Servers write your local (and fast!) DNS server, if you have more than one separate them with comas.

main menu
IPv Settings

STEP 9) Click “General” menu and then check the “Automatically connect to this network when it is available” – this is very important, because if you do not check, when you reboot the server, it won’t start the network! Click Save.

main menu
General Adapter settings

STEP 10) You can see the network is up and connected. Set a host name to your server and click on “Apply” and that’s all for the network configuration, click on “Done”.

main menu
Host Name setup

STEP 11) Click on “Installation Source” to setup the source of your installation files, because this is network installation this step is mandatory.

main menu
Installation Destination

STEP 12) Set the URL from where the setup will download packages and installation files. Set the nearest source to your server, you can check mirrors here:

https://www.centos.org/download/mirrors/

At present the latest version of CentOS 7 is 7.4.1708, but after a while it could be other, so browse the latest version directory, then you must choose directory “/os/” (there are probably many others, but we need especially “os”) and then “/x86_64/”. And then click on “Done”. That’s all you’ve configured the installation source, so now the setup knows where to look for packages and metadata for the installation process.

main menu
URL of the OS packages.

STEP 13) Choose your software to install. Click on “Software Selection”.

main menu
Software Selection

STEP 14) Because this howto is a minimal installation you should check “Minimal Install” , but you could choose another option below, the one suited best for your future server. And then click on “Done” to save the configuration.

main menu
Minimal Install

STEP 15) Click on “Installation Destination” to set the hard drive and partitions layout configuration for your server.

main menu
Installation Destination

STEP 16) The default is to leave the how disk to the setup to manage (make sure the “Automatically configure partitioning.” is checked), it will use the how hard drive checked from the Local Standard Disks. Check all the local disks you want to use in your server if more than one. If your disk has partitions you may be prompted to acquire free space by deleting existing partitions – be careful with this option, think twice before deleting partitions! Click on “Done” to save configuration.

main menu
Device selection – hard disk and partition configuration

STEP 17) Click on “Security policy” to setup a default security policy as selinux – use it whenever it is available!

main menu
Security Policy

STEP 18) Click on the “Standard System Security Porfile”, which will enable SELINUX security in your installation and then click “Select Profile”, after clicking the button will become grayed and the selection will have a green check in the right. Then click on “Done”.

main menu
Standard System Security Profile – SELINUX

STEP 19) We are all done and it is time to start the real installation of the system. Till now we’ve just configured the installation process. So click on “Begin Installation”.

main menu
Begin Installation

STEP 20) When the installation process is running you are prompt to set the root password and to add users. For clarity we set only the root password.

main menu
Root password setup

STEP 21) Set two times your password for the root user and then click “Done”.

main menu
Enter root password

STEP 22) The installation process is still running, just wait to finish.

main menu
Starting package installation process

STEP 23) You can see how many packets are install and the current installing packet and number.

main menu
Installing packages…

STEP 24) If everything goes with no errors and probably it will be with no errors you must click on “Reboot” to reboot the server in the newly installed OS.

main menu
Installation ready. Reboot

STEP 25) Grub2 and two options to select, the default is the latest kernel installed.

main menu
Grub2, default kernel boot

STEP 26) And the server is at login. The ssh server is also installed and you can access the server via ssh on the default port 22 and root login is permitted.

main menu
Login