This guide is continually updated on the wiki. Please see there to get the latest version.
Important Notes
♦ Version: 2, 17/10/2015
♦ License: Beerware Version 42++
♦ This tutorial is provided as a service to the community and if you decide to follow these instructions, you do this on your own responsibility.
♦ Never run such applications giving root rights, ie. never sudo them.
♦ Personal Note: This version of the “cpuminer-multi” opens a remote command network interface on port 4048 by default. I strongly recommend to deactivate this using the command line parameter “-b 0” or “–api-bind 0”. More information are given below.
Introduction
Mining Altcoins is sometimes quite venturesome. The various download links on the Internet are often pointing to obscure file servers. You can only rely on the “Internet crowd intelligence” (let’s call it like this), hoping you are not the first one trying out something new.
As consequence, please use this guide with educated smartness and, of course, on your own risk!
Finding the right Miner software is more complex than it should be. In this tutorial, I’m going to use Tanguy Pruvot‘s fork of lucasjones‘ “cpuminer-multi” project, itself a fork of pooler‘s original Litecoin CPU miner. Tanguy’s project is one of the most advanced CPU miner tools around and it is actively maintained by smart people that you can actually talk too.
The “cpuminer-multi” supports many hashing algorithms and among these, the cryptonight algorithm as used by CryptoNote/Monero. Please note that it is only a CPU miner and not supporting GPUs.
To avoid trusting binaries found on the web, we compile the miner on our local installation. By this, we also get the most recent – yet possibly unstable – version, and a bit of adventure too.
Hyperspeed Set-up Procedure
…to make a very long story very short:
tasha@NOSHIP ~ $ # Tooling dependencies
tasha@NOSHIP ~ $ sudo apt-get update
tasha@NOSHIP ~ $ sudo apt-get install git
tasha@NOSHIP ~ $ sudo apt-get install automake
tasha@NOSHIP ~ $ # Normally not needed on modern Linux systems
tasha@NOSHIP ~ $ # sudo apt-get install gcc
tasha@NOSHIP ~ $ sudo apt-get install g++
tasha@NOSHIP ~ $ # Compilation dependencies
tasha@NOSHIP ~ $ sudo apt-get install libcurl4-openssl-dev
tasha@NOSHIP ~ $ sudo apt-get install libssl-dev
tasha@NOSHIP ~ $ # Switch to our dedicated user account
tasha@NOSHIP ~ $ su - monero
monero@NOSHIP ~ $ # Download latest source
monero@NOSHIP ~ $ git clone https://github.com/tpruvot/cpuminer-multi.git
monero@NOSHIP ~ $ cd cpuminer-multi.git
monero@NOSHIP ~/cpuminer-multi $
monero@NOSHIP ~/cpuminer-multi $ # Compile
monero@NOSHIP ~/cpuminer-multi $ ./autogen.sh
monero@NOSHIP ~/cpuminer-multi $ ./configure --with-crypto --with-curl
monero@NOSHIP ~/cpuminer-multi $ make
monero@NOSHIP ~/cpuminer-multi $ # Test
monero@NOSHIP ~/cpuminer-multi $ ./cpuminer --cputest
monero@NOSHIP ~/cpuminer-multi $ # Run miner
monero@NOSHIP ~/cpuminer-multi $ ./cpuminer -a cryptonight -o stratum+tcp://xmr.poolto.be:2999 -u <your_username_or_coinbase> -p x --api-bind 0
:
Set-up Procedure
Prerequisite: An operational MINT Linux or UBUNTU installation. I have not tested other Linux distributions, so there might be dependency issues when compiling.
Prerequisite 2: An coin address on the desired Blockchain to receive Mining Rewards.
Security: Personally, I prefer to set-up such installations using a dedicated user account. Even better is to run them in a jail (using JailKit, or similar tool).
In this example, the user account is “monero”.
1) Dependencies
tasha@NOSHIP ~ $ # Tooling dependencies
tasha@NOSHIP ~ $ sudo apt-get update
tasha@NOSHIP ~ $ sudo apt-get install git
tasha@NOSHIP ~ $ sudo apt-get install automake
tasha@NOSHIP ~ $ # Normally not needed on modern Linux systems
tasha@NOSHIP ~ $ # sudo apt-get install gcc
tasha@NOSHIP ~ $ # sudo apt-get install g++
tasha@NOSHIP ~ $ # Compilation dependencies
tasha@NOSHIP ~ $ sudo apt-get install libcurl4-openssl-dev
tasha@NOSHIP ~ $ sudo apt-get install libssl-dev
2) Source Code Download
Important: This will download the latest main branch version, which might not be an official and stable release, and not the MASTER branch neither. If you prefer to use a well-defined release version, please select an adequate tag for the clone operation.
tasha@NOSHIP ~ $ # Switch to our dedicated user account
tasha@NOSHIP ~ $ su - monero
monero@NOSHIP ~ $
monero@NOSHIP ~ $ # Go to the directory in which the "cpuminer-multi" directory will be created.
monero@NOSHIP ~ $ # Since I use a dedicated user account, I prefer staying in the home directory.
monero@NOSHIP ~ $ #
monero@NOSHIP ~ $ # At the time of writing, this downloads "cpuminer-multi"
monero@NOSHIP ~ $ # version 1.2-dev WINDOWS branch.
monero@NOSHIP ~ $ git clone https://github.com/tpruvot/cpuminer-multi.git
monero@NOSHIP ~ $ cd cpuminer-multi.git
monero@NOSHIP ~/cpuminer-multi $
:
Note on branches:
Examining the GitHub project, we see that the WINDOWS, not the MASTER branch is the default branch when cloning. A LINUX branch exists too. At the time of writing, version 1.2-dev, 03/10/2015, there are 2 major differences between the WINDOWS and LINUX branches.
https://github.com/tpruvot/cpuminer-multi/compare/linux…tpruvot:windows
First: “if (!opt_quiet)” (LIN) becomes “if (!opt_quiet && last_bloc_height != stratum.bloc_height)” (WIN)(looks like a bug fix), and Second: “v512[62] = len » 8;” (LIN) becomes “v512[62] = (unsigned char) (len » 8);” (WIN).
Seeing these differences, I recommend to use the default/WINDOWS branch, which runs nice so far in my Linux test environments.
Note that, when comparing later versions, these statements will not be correct anymore.
More git Options:
# Get the default development MASTER branch, which is currently "WINDOWS".
git clone https://github.com/tpruvot/cpuminer-multi.git
# Get the development LINUX branch
git clone https://github.com/tpruvot/cpuminer-multi.git --branch linux
# Get the source of the release tagged as V1.1
git clone https://github.com/tpruvot/cpuminer-multi.git --branch v1.1-multi
3) Compilation
The following 3 commands have to pass without error. If something goes wrong, this has to be fixed before doing anything else.
Example console outputs can be displayed by clicking on the “unfold” links below.
:
monero@NOSHIP ~/cpuminer-multi $ ./autogen.sh
monero@NOSHIP ~/cpuminer-multi $ ./configure --with-crypto --with-curl
monero@NOSHIP ~/cpuminer-multi $ make
:
.
monero@ATREIDES ~/cpuminer-multi $ make
make all-recursive
make[1]: Entering directory `/home/monero/cpuminer-multi'
Making all in compat
make[2]: Entering directory `/home/monero/cpuminer-multi/compat'
Making all in jansson
make[3]: Entering directory `/home/monero/cpuminer-multi/compat/jansson'
depbase=`echo dump.o | sed 's|[^/]*$|.deps/&amp;amp;amp;|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -g -O2 -Iyes/include -Iyes/include -MT dump.o -MD -MP -MF $depbase.Tpo -c -o dump.o dump.c &amp;amp;amp;&amp;amp;amp;\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo error.o | sed 's|[^/]*$|.deps/&amp;amp;amp;|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -g -O2 -Iyes/include -Iyes/include -MT error.o -MD -MP -MF $depbase.Tpo -c -o error.o error.c &amp;amp;amp;&amp;amp;amp;\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo hashtable.o | sed 's|[^/]*$|.deps/&amp;amp;amp;|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -g -O2 -Iyes/include -Iyes/include -MT hashtable.o -MD -MP -MF $depbase.Tpo -c -o hashtable.o hashtable.c &amp;amp;amp;&amp;amp;amp;\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo load.o | sed 's|[^/]*$|.deps/&amp;amp;amp;|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -g -O2 -Iyes/include -Iyes/include -MT load.o -MD -MP -MF $depbase.Tpo -c -o load.o load.c &amp;amp;amp;&amp;amp;amp;\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo memory.o | sed 's|[^/]*$|.deps/&amp;amp;amp;|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -g -O2 -Iyes/include -Iyes/include -MT memory.o -MD -MP -MF $depbase.Tpo -c -o memory.o memory.c &amp;amp;amp;&amp;amp;amp;\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo pack_unpack.o | sed 's|[^/]*$|.deps/&amp;amp;amp;|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -g -O2 -Iyes/include -Iyes/include -MT pack_unpack.o -MD -MP -MF $depbase.Tpo -c -o pack_unpack.o pack_unpack.c &amp;amp;amp;&amp;amp;amp;\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo strbuffer.o | sed 's|[^/]*$|.deps/&amp;amp;amp;|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -g -O2 -Iyes/include -Iyes/include -MT strbuffer.o -MD -MP -MF $depbase.Tpo -c -o strbuffer.o strbuffer.c &amp;amp;amp;&amp;amp;amp;\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo strconv.o | sed 's|[^/]*$|.deps/&amp;amp;amp;|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -g -O2 -Iyes/include -Iyes/include -MT strconv.o -MD -MP -MF $depbase.Tpo -c -o strconv.o strconv.c &amp;amp;amp;&amp;amp;amp;\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo utf.o | sed 's|[^/]*$|.deps/&amp;amp;amp;|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -g -O2 -Iyes/include -Iyes/include -MT utf.o -MD -MP -MF $depbase.Tpo -c -o utf.o utf.c &amp;amp;amp;&amp;amp;amp;\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo value.o | sed 's|[^/]*$|.deps/&amp;amp;amp;|;s|\.o$||'`;\
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -g -O2 -Iyes/include -Iyes/include -MT value.o -MD -MP -MF $depbase.Tpo -c -o value.o value.c &amp;amp;amp;&amp;amp;amp;\
mv -f $depbase.Tpo $depbase.Po
rm -f libjansson.a
ar cru libjansson.a dump.o error.o hashtable.o load.o memory.o pack_unpack.o strbuffer.o strconv.o utf.o value.o
ranlib libjansson.a
make[3]: Leaving directory `/home/monero//puminer-multi/compat/jansson'
make[3]: Entering directory `/home/monero/cpuminer-multi/compat'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/home/monero/cpuminer-multi/compat'
make[2]: Leaving directory `/home/monero/cpuminer-multi/compat'
make[2]: Entering directory `/home/monero/cpuminer-multi'
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT cpuminer-cpu-miner.o -MD -MP -MF .deps/cpuminer-cpu-miner.Tpo -c -o cpuminer-cpu-miner.o `test -f 'cpu-miner.c' || echo './'`cpu-miner.c
mv -f .deps/cpuminer-cpu-miner.Tpo .deps/cpuminer-cpu-miner.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT cpuminer-util.o -MD -MP -MF .deps/cpuminer-util.Tpo -c -o cpuminer-util.o `test -f 'util.c' || echo './'`util.c
mv -f .deps/cpuminer-util.Tpo .deps/cpuminer-util.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT cpuminer-api.o -MD -MP -MF .deps/cpuminer-api.Tpo -c -o cpuminer-api.o `test -f 'api.c' || echo './'`api.c
mv -f .deps/cpuminer-api.Tpo .deps/cpuminer-api.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT cpuminer-sysinfos.o -MD -MP -MF .deps/cpuminer-sysinfos.Tpo -c -o cpuminer-sysinfos.o `test -f 'sysinfos.c' || echo './'`sysinfos.c
mv -f .deps/cpuminer-sysinfos.Tpo .deps/cpuminer-sysinfos.Po
g++ -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -g -O2 -MT cpuminer-uint256.o -MD -MP -MF .deps/cpuminer-uint256.Tpo -c -o cpuminer-uint256.o `test -f 'uint256.cpp' || echo './'`uint256.cpp
mv -f .deps/cpuminer-uint256.Tpo .deps/cpuminer-uint256.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_keccak.o -MD -MP -MF sha3/.deps/cpuminer-sph_keccak.Tpo -c -o sha3/cpuminer-sph_keccak.o `test -f 'sha3/sph_keccak.c' || echo './'`sha3/sph_keccak.c
mv -f sha3/.deps/cpuminer-sph_keccak.Tpo sha3/.deps/cpuminer-sph_keccak.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_hefty1.o -MD -MP -MF sha3/.deps/cpuminer-sph_hefty1.Tpo -c -o sha3/cpuminer-sph_hefty1.o `test -f 'sha3/sph_hefty1.c' || echo './'`sha3/sph_hefty1.c
mv -f sha3/.deps/cpuminer-sph_hefty1.Tpo sha3/.deps/cpuminer-sph_hefty1.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_groestl.o -MD -MP -MF sha3/.deps/cpuminer-sph_groestl.Tpo -c -o sha3/cpuminer-sph_groestl.o `test -f 'sha3/sph_groestl.c' || echo './'`sha3/sph_groestl.c
mv -f sha3/.deps/cpuminer-sph_groestl.Tpo sha3/.deps/cpuminer-sph_groestl.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_skein.o -MD -MP -MF sha3/.deps/cpuminer-sph_skein.Tpo -c -o sha3/cpuminer-sph_skein.o `test -f 'sha3/sph_skein.c' || echo './'`sha3/sph_skein.c
mv -f sha3/.deps/cpuminer-sph_skein.Tpo sha3/.deps/cpuminer-sph_skein.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_bmw.o -MD -MP -MF sha3/.deps/cpuminer-sph_bmw.Tpo -c -o sha3/cpuminer-sph_bmw.o `test -f 'sha3/sph_bmw.c' || echo './'`sha3/sph_bmw.c
mv -f sha3/.deps/cpuminer-sph_bmw.Tpo sha3/.deps/cpuminer-sph_bmw.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_jh.o -MD -MP -MF sha3/.deps/cpuminer-sph_jh.Tpo -c -o sha3/cpuminer-sph_jh.o `test -f 'sha3/sph_jh.c' || echo './'`sha3/sph_jh.c
mv -f sha3/.deps/cpuminer-sph_jh.Tpo sha3/.deps/cpuminer-sph_jh.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_shavite.o -MD -MP -MF sha3/.deps/cpuminer-sph_shavite.Tpo -c -o sha3/cpuminer-sph_shavite.o `test -f 'sha3/sph_shavite.c' || echo './'`sha3/sph_shavite.c
mv -f sha3/.deps/cpuminer-sph_shavite.Tpo sha3/.deps/cpuminer-sph_shavite.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_blake.o -MD -MP -MF sha3/.deps/cpuminer-sph_blake.Tpo -c -o sha3/cpuminer-sph_blake.o `test -f 'sha3/sph_blake.c' || echo './'`sha3/sph_blake.c
mv -f sha3/.deps/cpuminer-sph_blake.Tpo sha3/.deps/cpuminer-sph_blake.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-mod_blakecoin.o -MD -MP -MF sha3/.deps/cpuminer-mod_blakecoin.Tpo -c -o sha3/cpuminer-mod_blakecoin.o `test -f 'sha3/mod_blakecoin.c' || echo './'`sha3/mod_blakecoin.c
mv -f sha3/.deps/cpuminer-mod_blakecoin.Tpo sha3/.deps/cpuminer-mod_blakecoin.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_luffa.o -MD -MP -MF sha3/.deps/cpuminer-sph_luffa.Tpo -c -o sha3/cpuminer-sph_luffa.o `test -f 'sha3/sph_luffa.c' || echo './'`sha3/sph_luffa.c
mv -f sha3/.deps/cpuminer-sph_luffa.Tpo sha3/.deps/cpuminer-sph_luffa.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_cubehash.o -MD -MP -MF sha3/.deps/cpuminer-sph_cubehash.Tpo -c -o sha3/cpuminer-sph_cubehash.o `test -f 'sha3/sph_cubehash.c' || echo './'`sha3/sph_cubehash.c
mv -f sha3/.deps/cpuminer-sph_cubehash.Tpo sha3/.deps/cpuminer-sph_cubehash.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_simd.o -MD -MP -MF sha3/.deps/cpuminer-sph_simd.Tpo -c -o sha3/cpuminer-sph_simd.o `test -f 'sha3/sph_simd.c' || echo './'`sha3/sph_simd.c
mv -f sha3/.deps/cpuminer-sph_simd.Tpo sha3/.deps/cpuminer-sph_simd.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_echo.o -MD -MP -MF sha3/.deps/cpuminer-sph_echo.Tpo -c -o sha3/cpuminer-sph_echo.o `test -f 'sha3/sph_echo.c' || echo './'`sha3/sph_echo.c
mv -f sha3/.deps/cpuminer-sph_echo.Tpo sha3/.deps/cpuminer-sph_echo.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_hamsi.o -MD -MP -MF sha3/.deps/cpuminer-sph_hamsi.Tpo -c -o sha3/cpuminer-sph_hamsi.o `test -f 'sha3/sph_hamsi.c' || echo './'`sha3/sph_hamsi.c
mv -f sha3/.deps/cpuminer-sph_hamsi.Tpo sha3/.deps/cpuminer-sph_hamsi.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_fugue.o -MD -MP -MF sha3/.deps/cpuminer-sph_fugue.Tpo -c -o sha3/cpuminer-sph_fugue.o `test -f 'sha3/sph_fugue.c' || echo './'`sha3/sph_fugue.c
mv -f sha3/.deps/cpuminer-sph_fugue.Tpo sha3/.deps/cpuminer-sph_fugue.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_gost.o -MD -MP -MF sha3/.deps/cpuminer-sph_gost.Tpo -c -o sha3/cpuminer-sph_gost.o `test -f 'sha3/sph_gost.c' || echo './'`sha3/sph_gost.c
mv -f sha3/.deps/cpuminer-sph_gost.Tpo sha3/.deps/cpuminer-sph_gost.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_sha2.o -MD -MP -MF sha3/.deps/cpuminer-sph_sha2.Tpo -c -o sha3/cpuminer-sph_sha2.o `test -f 'sha3/sph_sha2.c' || echo './'`sha3/sph_sha2.c
mv -f sha3/.deps/cpuminer-sph_sha2.Tpo sha3/.deps/cpuminer-sph_sha2.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_sha2big.o -MD -MP -MF sha3/.deps/cpuminer-sph_sha2big.Tpo -c -o sha3/cpuminer-sph_sha2big.o `test -f 'sha3/sph_sha2big.c' || echo './'`sha3/sph_sha2big.c
mv -f sha3/.deps/cpuminer-sph_sha2big.Tpo sha3/.deps/cpuminer-sph_sha2big.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_shabal.o -MD -MP -MF sha3/.deps/cpuminer-sph_shabal.Tpo -c -o sha3/cpuminer-sph_shabal.o `test -f 'sha3/sph_shabal.c' || echo './'`sha3/sph_shabal.c
mv -f sha3/.deps/cpuminer-sph_shabal.Tpo sha3/.deps/cpuminer-sph_shabal.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT sha3/cpuminer-sph_whirlpool.o -MD -MP -MF sha3/.deps/cpuminer-sph_whirlpool.Tpo -c -o sha3/cpuminer-sph_whirlpool.o `test -f 'sha3/sph_whirlpool.c' || echo './'`sha3/sph_whirlpool.c
mv -f sha3/.deps/cpuminer-sph_whirlpool.Tpo sha3/.deps/cpuminer-sph_whirlpool.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT crypto/cpuminer-blake2s.o -MD -MP -MF crypto/.deps/cpuminer-blake2s.Tpo -c -o crypto/cpuminer-blake2s.o `test -f 'crypto/blake2s.c' || echo './'`crypto/blake2s.c
mv -f crypto/.deps/cpuminer-blake2s.Tpo crypto/.deps/cpuminer-blake2s.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT crypto/cpuminer-oaes_lib.o -MD -MP -MF crypto/.deps/cpuminer-oaes_lib.Tpo -c -o crypto/cpuminer-oaes_lib.o `test -f 'crypto/oaes_lib.c' || echo './'`crypto/oaes_lib.c
mv -f crypto/.deps/cpuminer-oaes_lib.Tpo crypto/.deps/cpuminer-oaes_lib.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT crypto/cpuminer-c_keccak.o -MD -MP -MF crypto/.deps/cpuminer-c_keccak.Tpo -c -o crypto/cpuminer-c_keccak.o `test -f 'crypto/c_keccak.c' || echo './'`crypto/c_keccak.c
mv -f crypto/.deps/cpuminer-c_keccak.Tpo crypto/.deps/cpuminer-c_keccak.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT crypto/cpuminer-c_groestl.o -MD -MP -MF crypto/.deps/cpuminer-c_groestl.Tpo -c -o crypto/cpuminer-c_groestl.o `test -f 'crypto/c_groestl.c' || echo './'`crypto/c_groestl.c
mv -f crypto/.deps/cpuminer-c_groestl.Tpo crypto/.deps/cpuminer-c_groestl.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT crypto/cpuminer-c_blake256.o -MD -MP -MF crypto/.deps/cpuminer-c_blake256.Tpo -c -o crypto/cpuminer-c_blake256.o `test -f 'crypto/c_blake256.c' || echo './'`crypto/c_blake256.c
mv -f crypto/.deps/cpuminer-c_blake256.Tpo crypto/.deps/cpuminer-c_blake256.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT crypto/cpuminer-c_jh.o -MD -MP -MF crypto/.deps/cpuminer-c_jh.Tpo -c -o crypto/cpuminer-c_jh.o `test -f 'crypto/c_jh.c' || echo './'`crypto/c_jh.c
mv -f crypto/.deps/cpuminer-c_jh.Tpo crypto/.deps/cpuminer-c_jh.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT crypto/cpuminer-c_skein.o -MD -MP -MF crypto/.deps/cpuminer-c_skein.Tpo -c -o crypto/cpuminer-c_skein.o `test -f 'crypto/c_skein.c' || echo './'`crypto/c_skein.c
mv -f crypto/.deps/cpuminer-c_skein.Tpo crypto/.deps/cpuminer-c_skein.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT crypto/cpuminer-hash.o -MD -MP -MF crypto/.deps/cpuminer-hash.Tpo -c -o crypto/cpuminer-hash.o `test -f 'crypto/hash.c' || echo './'`crypto/hash.c
mv -f crypto/.deps/cpuminer-hash.Tpo crypto/.deps/cpuminer-hash.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT crypto/cpuminer-aesb.o -MD -MP -MF crypto/.deps/cpuminer-aesb.Tpo -c -o crypto/cpuminer-aesb.o `test -f 'crypto/aesb.c' || echo './'`crypto/aesb.c
mv -f crypto/.deps/cpuminer-aesb.Tpo crypto/.deps/cpuminer-aesb.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT lyra2/cpuminer-Lyra2.o -MD -MP -MF lyra2/.deps/cpuminer-Lyra2.Tpo -c -o lyra2/cpuminer-Lyra2.o `test -f 'lyra2/Lyra2.c' || echo './'`lyra2/Lyra2.c
mv -f lyra2/.deps/cpuminer-Lyra2.Tpo lyra2/.deps/cpuminer-Lyra2.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT lyra2/cpuminer-Sponge.o -MD -MP -MF lyra2/.deps/cpuminer-Sponge.Tpo -c -o lyra2/cpuminer-Sponge.o `test -f 'lyra2/Sponge.c' || echo './'`lyra2/Sponge.c
mv -f lyra2/.deps/cpuminer-Sponge.Tpo lyra2/.deps/cpuminer-Sponge.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-axiom.o -MD -MP -MF algo/.deps/cpuminer-axiom.Tpo -c -o algo/cpuminer-axiom.o `test -f 'algo/axiom.c' || echo './'`algo/axiom.c
mv -f algo/.deps/cpuminer-axiom.Tpo algo/.deps/cpuminer-axiom.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-blake.o -MD -MP -MF algo/.deps/cpuminer-blake.Tpo -c -o algo/cpuminer-blake.o `test -f 'algo/blake.c' || echo './'`algo/blake.c
mv -f algo/.deps/cpuminer-blake.Tpo algo/.deps/cpuminer-blake.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-blakecoin.o -MD -MP -MF algo/.deps/cpuminer-blakecoin.Tpo -c -o algo/cpuminer-blakecoin.o `test -f 'algo/blakecoin.c' || echo './'`algo/blakecoin.c
mv -f algo/.deps/cpuminer-blakecoin.Tpo algo/.deps/cpuminer-blakecoin.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-blake2.o -MD -MP -MF algo/.deps/cpuminer-blake2.Tpo -c -o algo/cpuminer-blake2.o `test -f 'algo/blake2.c' || echo './'`algo/blake2.c
mv -f algo/.deps/cpuminer-blake2.Tpo algo/.deps/cpuminer-blake2.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-bmw256.o -MD -MP -MF algo/.deps/cpuminer-bmw256.Tpo -c -o algo/cpuminer-bmw256.o `test -f 'algo/bmw256.c' || echo './'`algo/bmw256.c
mv -f algo/.deps/cpuminer-bmw256.Tpo algo/.deps/cpuminer-bmw256.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-c11.o -MD -MP -MF algo/.deps/cpuminer-c11.Tpo -c -o algo/cpuminer-c11.o `test -f 'algo/c11.c' || echo './'`algo/c11.c
mv -f algo/.deps/cpuminer-c11.Tpo algo/.deps/cpuminer-c11.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-cryptonight.o -MD -MP -MF algo/.deps/cpuminer-cryptonight.Tpo -c -o algo/cpuminer-cryptonight.o `test -f 'algo/cryptonight.c' || echo './'`algo/cryptonight.c
mv -f algo/.deps/cpuminer-cryptonight.Tpo algo/.deps/cpuminer-cryptonight.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-cryptolight.o -MD -MP -MF algo/.deps/cpuminer-cryptolight.Tpo -c -o algo/cpuminer-cryptolight.o `test -f 'algo/cryptolight.c' || echo './'`algo/cryptolight.c
mv -f algo/.deps/cpuminer-cryptolight.Tpo algo/.deps/cpuminer-cryptolight.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-drop.o -MD -MP -MF algo/.deps/cpuminer-drop.Tpo -c -o algo/cpuminer-drop.o `test -f 'algo/drop.c' || echo './'`algo/drop.c
mv -f algo/.deps/cpuminer-drop.Tpo algo/.deps/cpuminer-drop.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-fresh.o -MD -MP -MF algo/.deps/cpuminer-fresh.Tpo -c -o algo/cpuminer-fresh.o `test -f 'algo/fresh.c' || echo './'`algo/fresh.c
mv -f algo/.deps/cpuminer-fresh.Tpo algo/.deps/cpuminer-fresh.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-groestl.o -MD -MP -MF algo/.deps/cpuminer-groestl.Tpo -c -o algo/cpuminer-groestl.o `test -f 'algo/groestl.c' || echo './'`algo/groestl.c
mv -f algo/.deps/cpuminer-groestl.Tpo algo/.deps/cpuminer-groestl.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-heavy.o -MD -MP -MF algo/.deps/cpuminer-heavy.Tpo -c -o algo/cpuminer-heavy.o `test -f 'algo/heavy.c' || echo './'`algo/heavy.c
mv -f algo/.deps/cpuminer-heavy.Tpo algo/.deps/cpuminer-heavy.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-ink.o -MD -MP -MF algo/.deps/cpuminer-ink.Tpo -c -o algo/cpuminer-ink.o `test -f 'algo/ink.c' || echo './'`algo/ink.c
mv -f algo/.deps/cpuminer-ink.Tpo algo/.deps/cpuminer-ink.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-luffa.o -MD -MP -MF algo/.deps/cpuminer-luffa.Tpo -c -o algo/cpuminer-luffa.o `test -f 'algo/luffa.c' || echo './'`algo/luffa.c
mv -f algo/.deps/cpuminer-luffa.Tpo algo/.deps/cpuminer-luffa.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-lyra2re.o -MD -MP -MF algo/.deps/cpuminer-lyra2re.Tpo -c -o algo/cpuminer-lyra2re.o `test -f 'algo/lyra2re.c' || echo './'`algo/lyra2re.c
mv -f algo/.deps/cpuminer-lyra2re.Tpo algo/.deps/cpuminer-lyra2re.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-lyra2rev2.o -MD -MP -MF algo/.deps/cpuminer-lyra2rev2.Tpo -c -o algo/cpuminer-lyra2rev2.o `test -f 'algo/lyra2rev2.c' || echo './'`algo/lyra2rev2.c
mv -f algo/.deps/cpuminer-lyra2rev2.Tpo algo/.deps/cpuminer-lyra2rev2.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-myr-groestl.o -MD -MP -MF algo/.deps/cpuminer-myr-groestl.Tpo -c -o algo/cpuminer-myr-groestl.o `test -f 'algo/myr-groestl.c' || echo './'`algo/myr-groestl.c
mv -f algo/.deps/cpuminer-myr-groestl.Tpo algo/.deps/cpuminer-myr-groestl.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-keccak.o -MD -MP -MF algo/.deps/cpuminer-keccak.Tpo -c -o algo/cpuminer-keccak.o `test -f 'algo/keccak.c' || echo './'`algo/keccak.c
mv -f algo/.deps/cpuminer-keccak.Tpo algo/.deps/cpuminer-keccak.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-pentablake.o -MD -MP -MF algo/.deps/cpuminer-pentablake.Tpo -c -o algo/cpuminer-pentablake.o `test -f 'algo/pentablake.c' || echo './'`algo/pentablake.c
mv -f algo/.deps/cpuminer-pentablake.Tpo algo/.deps/cpuminer-pentablake.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-quark.o -MD -MP -MF algo/.deps/cpuminer-quark.Tpo -c -o algo/cpuminer-quark.o `test -f 'algo/quark.c' || echo './'`algo/quark.c
mv -f algo/.deps/cpuminer-quark.Tpo algo/.deps/cpuminer-quark.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-neoscrypt.o -MD -MP -MF algo/.deps/cpuminer-neoscrypt.Tpo -c -o algo/cpuminer-neoscrypt.o `test -f 'algo/neoscrypt.c' || echo './'`algo/neoscrypt.c
mv -f algo/.deps/cpuminer-neoscrypt.Tpo algo/.deps/cpuminer-neoscrypt.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-nist5.o -MD -MP -MF algo/.deps/cpuminer-nist5.Tpo -c -o algo/cpuminer-nist5.o `test -f 'algo/nist5.c' || echo './'`algo/nist5.c
mv -f algo/.deps/cpuminer-nist5.Tpo algo/.deps/cpuminer-nist5.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-pluck.o -MD -MP -MF algo/.deps/cpuminer-pluck.Tpo -c -o algo/cpuminer-pluck.o `test -f 'algo/pluck.c' || echo './'`algo/pluck.c
mv -f algo/.deps/cpuminer-pluck.Tpo algo/.deps/cpuminer-pluck.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-qubit.o -MD -MP -MF algo/.deps/cpuminer-qubit.Tpo -c -o algo/cpuminer-qubit.o `test -f 'algo/qubit.c' || echo './'`algo/qubit.c
mv -f algo/.deps/cpuminer-qubit.Tpo algo/.deps/cpuminer-qubit.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-scrypt.o -MD -MP -MF algo/.deps/cpuminer-scrypt.Tpo -c -o algo/cpuminer-scrypt.o `test -f 'algo/scrypt.c' || echo './'`algo/scrypt.c
mv -f algo/.deps/cpuminer-scrypt.Tpo algo/.deps/cpuminer-scrypt.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-sha2.o -MD -MP -MF algo/.deps/cpuminer-sha2.Tpo -c -o algo/cpuminer-sha2.o `test -f 'algo/sha2.c' || echo './'`algo/sha2.c
mv -f algo/.deps/cpuminer-sha2.Tpo algo/.deps/cpuminer-sha2.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-sibcoin.o -MD -MP -MF algo/.deps/cpuminer-sibcoin.Tpo -c -o algo/cpuminer-sibcoin.o `test -f 'algo/sibcoin.c' || echo './'`algo/sibcoin.c
mv -f algo/.deps/cpuminer-sibcoin.Tpo algo/.deps/cpuminer-sibcoin.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-skein.o -MD -MP -MF algo/.deps/cpuminer-skein.Tpo -c -o algo/cpuminer-skein.o `test -f 'algo/skein.c' || echo './'`algo/skein.c
mv -f algo/.deps/cpuminer-skein.Tpo algo/.deps/cpuminer-skein.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-skein2.o -MD -MP -MF algo/.deps/cpuminer-skein2.Tpo -c -o algo/cpuminer-skein2.o `test -f 'algo/skein2.c' || echo './'`algo/skein2.c
mv -f algo/.deps/cpuminer-skein2.Tpo algo/.deps/cpuminer-skein2.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-s3.o -MD -MP -MF algo/.deps/cpuminer-s3.Tpo -c -o algo/cpuminer-s3.o `test -f 'algo/s3.c' || echo './'`algo/s3.c
mv -f algo/.deps/cpuminer-s3.Tpo algo/.deps/cpuminer-s3.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-x11.o -MD -MP -MF algo/.deps/cpuminer-x11.Tpo -c -o algo/cpuminer-x11.o `test -f 'algo/x11.c' || echo './'`algo/x11.c
mv -f algo/.deps/cpuminer-x11.Tpo algo/.deps/cpuminer-x11.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-x13.o -MD -MP -MF algo/.deps/cpuminer-x13.Tpo -c -o algo/cpuminer-x13.o `test -f 'algo/x13.c' || echo './'`algo/x13.c
mv -f algo/.deps/cpuminer-x13.Tpo algo/.deps/cpuminer-x13.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-x14.o -MD -MP -MF algo/.deps/cpuminer-x14.Tpo -c -o algo/cpuminer-x14.o `test -f 'algo/x14.c' || echo './'`algo/x14.c
mv -f algo/.deps/cpuminer-x14.Tpo algo/.deps/cpuminer-x14.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-x15.o -MD -MP -MF algo/.deps/cpuminer-x15.Tpo -c -o algo/cpuminer-x15.o `test -f 'algo/x15.c' || echo './'`algo/x15.c
mv -f algo/.deps/cpuminer-x15.Tpo algo/.deps/cpuminer-x15.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -Wno-pointer-sign -Wno-pointer-to-int-cast -g -O2 -Iyes/include -Iyes/include -MT algo/cpuminer-zr5.o -MD -MP -MF algo/.deps/cpuminer-zr5.Tpo -c -o algo/cpuminer-zr5.o `test -f 'algo/zr5.c' || echo './'`algo/zr5.c
mv -f algo/.deps/cpuminer-zr5.Tpo algo/.deps/cpuminer-zr5.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -g -O2 -MT asm/cpuminer-neoscrypt_asm.o -MD -MP -MF asm/.deps/cpuminer-neoscrypt_asm.Tpo -c -o asm/cpuminer-neoscrypt_asm.o `test -f 'asm/neoscrypt_asm.S' || echo './'`asm/neoscrypt_asm.S
mv -f asm/.deps/cpuminer-neoscrypt_asm.Tpo asm/.deps/cpuminer-neoscrypt_asm.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -g -O2 -MT asm/cpuminer-sha2-x64.o -MD -MP -MF asm/.deps/cpuminer-sha2-x64.Tpo -c -o asm/cpuminer-sha2-x64.o `test -f 'asm/sha2-x64.S' || echo './'`asm/sha2-x64.S
mv -f asm/.deps/cpuminer-sha2-x64.Tpo asm/.deps/cpuminer-sha2-x64.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -g -O2 -MT asm/cpuminer-scrypt-x64.o -MD -MP -MF asm/.deps/cpuminer-scrypt-x64.Tpo -c -o asm/cpuminer-scrypt-x64.o `test -f 'asm/scrypt-x64.S' || echo './'`asm/scrypt-x64.S
mv -f asm/.deps/cpuminer-scrypt-x64.Tpo asm/.deps/cpuminer-scrypt-x64.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -fno-strict-aliasing -I./compat/jansson -I. -g -O2 -MT asm/cpuminer-aesb-x64.o -MD -MP -MF asm/.deps/cpuminer-aesb-x64.Tpo -c -o asm/cpuminer-aesb-x64.o `test -f 'asm/aesb-x64.S' || echo './'`asm/aesb-x64.S
mv -f asm/.deps/cpuminer-aesb-x64.Tpo asm/.deps/cpuminer-aesb-x64.Po
g++ -g -O2 -Lyes/lib -Lyes/lib -Lyes/lib -Lyes/lib -o cpuminer cpuminer-cpu-miner.o cpuminer-util.o cpuminer-api.o cpuminer-sysinfos.o cpuminer-uint256.o sha3/cpuminer-sph_keccak.o sha3/cpuminer-sph_hefty1.o sha3/cpuminer-sph_groestl.o sha3/cpuminer-sph_skein.o sha3/cpuminer-sph_bmw.o sha3/cpuminer-sph_jh.o sha3/cpuminer-sph_shavite.o sha3/cpuminer-sph_blake.o sha3/cpuminer-mod_blakecoin.o sha3/cpuminer-sph_luffa.o sha3/cpuminer-sph_cubehash.o sha3/cpuminer-sph_simd.o sha3/cpuminer-sph_echo.o sha3/cpuminer-sph_hamsi.o sha3/cpuminer-sph_fugue.o sha3/cpuminer-sph_gost.o sha3/cpuminer-sph_sha2.o sha3/cpuminer-sph_sha2big.o sha3/cpuminer-sph_shabal.o sha3/cpuminer-sph_whirlpool.o crypto/cpuminer-blake2s.o crypto/cpuminer-oaes_lib.o crypto/cpuminer-c_keccak.o crypto/cpuminer-c_groestl.o crypto/cpuminer-c_blake256.o crypto/cpuminer-c_jh.o crypto/cpuminer-c_skein.o crypto/cpuminer-hash.o crypto/cpuminer-aesb.o lyra2/cpuminer-Lyra2.o lyra2/cpuminer-Sponge.o algo/cpuminer-axiom.o algo/cpuminer-blake.o algo/cpuminer-blakecoin.o algo/cpuminer-blake2.o algo/cpuminer-bmw256.o algo/cpuminer-c11.o algo/cpuminer-cryptonight.o algo/cpuminer-cryptolight.o algo/cpuminer-drop.o algo/cpuminer-fresh.o algo/cpuminer-groestl.o algo/cpuminer-heavy.o algo/cpuminer-ink.o algo/cpuminer-luffa.o algo/cpuminer-lyra2re.o algo/cpuminer-lyra2rev2.o algo/cpuminer-myr-groestl.o algo/cpuminer-keccak.o algo/cpuminer-pentablake.o algo/cpuminer-quark.o algo/cpuminer-neoscrypt.o algo/cpuminer-nist5.o algo/cpuminer-pluck.o algo/cpuminer-qubit.o algo/cpuminer-scrypt.o algo/cpuminer-sha2.o algo/cpuminer-sibcoin.o algo/cpuminer-skein.o algo/cpuminer-skein2.o algo/cpuminer-s3.o algo/cpuminer-x11.o algo/cpuminer-x13.o algo/cpuminer-x14.o algo/cpuminer-x15.o algo/cpuminer-zr5.o asm/cpuminer-neoscrypt_asm.o asm/cpuminer-sha2-x64.o asm/cpuminer-scrypt-x64.o asm/cpuminer-aesb-x64.o -lcurl -lz -lssl -lcrypto compat/jansson/libjansson.a -lpthread
make[2]: Leaving directory `/home/monero/cpuminer-multi'
make[1]: Leaving directory `/home/monero/cpuminer-multi'
monero@ATREIDES ~/cpuminer-multi $ ./autogen.sh
configure.ac:15: installing './compile'
configure.ac:4: installing './config.guess'
configure.ac:4: installing './config.sub'
configure.ac:9: installing './install-sh'
configure.ac:9: installing './missing'
Makefile.am: installing './depcomp'
monero@ATREIDES ~/cpuminer-multi $ ./configure --with-crypto --with-curl
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for gcc option to accept ISO C99... -std=gnu99
checking how to run the C preprocessor... gcc -std=gnu99 -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking whether gcc -std=gnu99 needs -traditional... no
checking dependency style of gcc -std=gnu99... gcc3
checking for ranlib... ranlib
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking sys/endian.h usability... no
checking sys/endian.h presence... no
checking for sys/endian.h... no
checking sys/param.h usability... yes
checking sys/param.h presence... yes
checking for sys/param.h... yes
checking syslog.h usability... yes
checking syslog.h presence... yes
checking for syslog.h... yes
checking for sys/sysctl.h... yes
checking whether be32dec is declared... no
checking whether le32dec is declared... no
checking whether be32enc is declared... no
checking whether le32enc is declared... no
checking whether le16dec is declared... no
checking whether le16enc is declared... no
checking for size_t... yes
checking for working alloca.h... yes
checking for alloca... yes
checking for getopt_long... yes
checking whether we can compile AVX code... yes
checking whether we can compile XOP code... yes
checking whether we can compile AVX2 code... yes
checking for json_loads in -ljansson... no
checking for pthread_create in -lpthread... yes
checking whether __uint128_t is supported... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating compat/Makefile
config.status: creating compat/jansson/Makefile
config.status: creating cpuminer-config.h
config.status: executing depfiles commands
4) Test
After a successful make operation, the “cpuminer” binary should now be located in the current directory. In order to test if everything has been compiled correctly, start a dry-run for all Hashing Algorithms like this:
monero@NOSHIP ~/cpuminer-multi $ ./cpuminer --cputest
** cpuminer-multi 1.2-dev by Tanguy Pruvot (tpruvot@github) **
BTC donation address: 1FhDPLPpw18X4srecguG3MxJYe4a1JsZnd
CPU HASH ON EMPTY BUFFER RESULTS:
axiom: 739e969d 20d307a7 6d39ddfe 737727fd 0930a28d dcb2eae5 31fc2884 09a1fe8d
blake: 0c7b1594 52328517 463db487 df5e39b7 1322afaf 14ed562c e9d18d7d 9051b305
blakecoin: 1beb6d99 60f93179 0caf8b8d de245415 f19d7efc 1a55952f 5d83aaa1 cf6d8ce0
blake2s: c4fde76a 8d68422c 5fbafde2 50f49210 9fb29ac6 6753292e 1153aa11 adae1a3a
bmw: b614159f d808ac8f 9eb6ab74 01b0d94e 3831c498 190278af f0e63ecd d0dceaaa
c11: 467fe126 a25b3117 8099c195 5d67ae09 3a84fbcd f3533e55 61dbaafc c96c3069
cryptolight: 4c3428f3 9e1f9ecd a3b0726f d4f4fca6 2843597c 480f033a e38d1132 82b273bf
cryptonight: 1ddd6d4c 6b9c41a8 9daa323b 1e140e62 d5ebf40a 5962028c d1b4acd6 8deed830
drop: 33dc013c 65f6c33d 3b66f982 47b5aaf5 5390cc56 0a1fdaa6 1f0e4958 b6229ace
fresh: 32925252 1339e557 0ebe3923 97ff19b2 a1643d5e 5475699d e4dc83a8 e7d1a13e
groestl: 8703946c 1f2630a6 1cc8e78f 93a030b3 835a6b62 4812fb99 0a243cae 6dd8ce36
heavy: fe264760 6eb16e09 ffad8b30 b333b87c c20b6b92 097bbb93 09b19fd2 28d228d6
keccak: 3a709301 f7eafe91 7c7a06e2 09b077a9 f3942799 fb24b913 407674a4 c1485893
luffa: 3f1970bb e30de539 42e9a9c2 927d7495 4fb17d85 85276ebc 91ca076d 07c69013
lyra2: c6165cb3 a82b8f39 ed9feaa5 fa5be3d7 041b0fd3 0128a42e d0b78ff2 b665f81a
lyra2v2: a297c8d9 91274c87 27f515d4 b129e18d db1c61b3 1c552c96 3efce710 95baa90c
myr-gr: b060aa77 6bc2fc23 fd991ada 252aba20 a42a3595 fd335278 664e875c f8e540cf
neoscrypt: 2c400aba 7b67aae2 eb8afe32 a31303b4 3a5b2ad8 84badd97 c7984e6b 7e3b2c7b
nist5: f793aee4 ec7c83ad 3fb06661 fc514201 ea8865a2 22eb7cc5 50fb0fcb 7644435d
pentablake: 7990b632 02388232 27ca6bd1 172b4d65 ad93fb6a 26e64b4a 88fe0b8d 71d82491
pluck: 68e34a6e 8ea6be98 1e00b036 03287344 3152cc38 c5a2c3d7 0dd367d9 d01fac81
quark: 633d8255 a00e3a1a e1ee58d7 d3a56387 fb85f106 8a6bb4eb f5a20315 e57f0602
qubit: f158d208 f1991ea5 7d073586 945f4b10 c02314e7 3f5b6360 b91eb0db ca216fae
shavite3: fc19c40b 20ba0833 1d013c3d dccf66a0 74f252c9 71e95e74 8985e550 582906a5
sha256d: e2f61c3f 71d1defd 3fa999df a3695375 5c690689 799962b4 8bebd836 974e8cf9
skein: 7556f203 d6da59fd 1baa2d05 c27dd117 de9f56ee 8ad0b3a6 1f3649df 2b87694d
skein2: f743265f 8610a912 c8d5879e e61917a8 75adf37b 56fe4a29 c1ae1e4e ce40fd3c
s3: 0e715288 561623fa 9720dd08 d13cdf5c 07824dad 99a652fa 13ce0537 6f3ceca1
x11: 83288461 80965bce 56f61e01 5db62af5 62a611d8 5e5e721d 854c8d97 e47a3ea3
x13: 8196fc09 df2b0011 13d4ef91 0a8b0919 fbc7bab8 df2a58e1 bfe6be6e eb6546c0
x14: a4d7341e 693aebc7 53dfedeb 78fd477c 3fd27dde b3e1e28e 693dae16 c074c0e7
x15: ac5e298e 62e6e569 ac4f4b76 f7ab1109 5576df2d 547e2f5b 4e202d16 fd6bddc2
zr5: 233d6389 4c0ad29a 43b445dd ece68031 36c38027 0002eeae e94213e7 94811c22
Running the Miner
Important: If you plan to let the Miner run in the background, in a terminal window or as a daemon, you need to keep an eye on the output/log. For more information, please see the section “Error Handling and Autonomous Operation” below.
Running the Miner on its own is not efficient. You will very likely only find Stale Blocks, ie. Blocks that have already been found by other Miners before you did. To increase efficiency and to obtain a relatively predicable Mining Reward input, the best is to use a Mining Pool. (Note: Pools have quite some draw back in terms of resilience and security of the Blockchain network, but this is not topic of this tutorial.)
The Mining Pool URL is configured at the command line. The exact syntax should be described on the pool’s web page. In this example, I use http://xmr.poolto.be. (Note: I’m not related to the owner of this pool, I don’t get ‘a bonus’ if you use this pool, and the server is not located in Belgium).
A classic command line looks like this:
./cpuminer -a cryptonight -o stratum+tcp://xmr.poolto.be:2999
-u <your_wallet_address> -p x --api-bind 0
-a : Mining Algorithm, "cryptonight" in case of Monero.
-u : User, in case of the Monero Pool server, it's the wallet address
that will receive the Mining Reward.
-p : Password, received from server owner, most of times 'x' for public servers.
-o : Pool server URL, with
stratum+tcp: - Protocol
//xmr.poolto.be - Server Address
:2999 - Server Port
--api-bind 0 : disables the remote API interface.
Example log/console output:
monero@NOSHIP ~/cpuminer-multi $ ./cpuminer -a cryptonight -o stratum+tcp://xmr.poolto.be:2999 -u 45mezmBHxtCivwct1xhKXycUcKHDhmkBAP9wRuEVsK1BjX7TxVVBZSYAPXY7mMbRmC8vYqYnr4ggwJDQEGCUJXLHKr56hwJ -p x --api-bind 0
** cpuminer-multi 1.2-dev by Tanguy Pruvot (tpruvot@github) **
BTC donation address: 1FhDPLPpw18X4srecguG3MxJYe4a1JsZnd
[2015-09-27 14:16:46] Using JSON-RPC 2.0
[2015-09-27 14:16:46] CPU Supports AES-NI: NO
[2015-09-27 14:16:46] Starting Stratum on stratum+tcp://xmr.poolto.be:2999
[2015-09-27 14:16:46] 4 miner threads started, using 'cryptonight' algorithm.
[2015-09-27 14:16:48] Stratum difficulty set to 500
[2015-09-27 14:16:50] CPU #1: 34.61 H/s
[2015-09-27 14:16:50] CPU #0: 33.65 H/s
[2015-09-27 14:16:50] CPU #2: 30.65 H/s
[2015-09-27 14:16:51] CPU #3: 22.59 H/s
[2015-09-27 14:16:51] CPU #0: 30.98 H/s
[2015-09-27 14:16:51] accepted: 1/1 (100.00%), 118.83 H/s yes!
[2015-09-27 14:16:52] CPU #2: 31.06 H/s
:
To exit the Miner, hit CTRL+C.
Please verify that the output shows “….H/s yes!”. If “….H/s nooooo!” appears, your result submission has not been accepted and “something” is wrong. Know that “something is wrong” is merely the only information that you get about the problem – happy debugging!
Error Handling and Autonomous Operation
(Note: This section will be updated later)
The following log output ends in only rejected packets. Note the diminishing Difficulty, ending up in a rejection of all submitted work packages. In another case, I had the miner simply be stuck on a calculation for 20 minutes.
The only way that I figured out to solve this problem is to re-start the miner and thus reset the connection to and work log on the pool server. This is something that should however be handled by a cron/script. I’m currently working on this and I’ll update this when it’s ready. In the meantime, you need to keep an eye on the log or write one yourself :).
Important: I tested only version 1.2-dev, emphasis on DEV. The official and as stable classified version might not show the same behavior.
:
[2015-09-28 08:58:25] accepted: 390/411 (94.89%), 65.05 H/s yes!
[2015-09-28 08:58:34] CPU #2: 16.83 H/s
[2015-09-28 08:58:36] Stratum difficulty set to 5600
[2015-09-28 08:58:40] CPU #3: 14.17 H/s
[2015-09-28 08:58:40] accepted: 391/412 (94.90%), 64.79 H/s yes!
[2015-09-28 08:59:01] Stratum difficulty set to 11200
[2015-09-28 08:59:12] CPU #2: 16.52 H/s
:
[2015-09-28 09:00:37] CPU #3: 14.93 H/s
[2015-09-28 09:00:40] Stratum difficulty set to 7724.01
[2015-09-28 09:01:13] CPU #2: 15.77 H/s
:
[2015-09-28 09:02:28] CPU #1: 14.66 H/s
[2015-09-28 09:02:43] Stratum difficulty set to 5149
[2015-09-28 09:02:59] CPU #2: 15.47 H/s
:
[2015-09-28 09:04:26] CPU #1: 13.94 H/s
[2015-09-28 09:04:46] Stratum difficulty set to 3433
[2015-09-28 09:04:49] CPU #2: 16.97 H/s
[2015-09-28 09:04:57] CPU #1: 16.68 H/s
:
[2015-09-28 09:06:47] CPU #2: 15.74 H/s
[2015-09-28 09:06:49] Stratum difficulty set to 2289
[2015-09-28 09:06:53] CPU #1: 16.40 H/s
:
[2015-09-28 09:08:47] CPU #1: 17.41 H/s
[2015-09-28 09:08:52] Stratum difficulty set to 1526
[2015-09-28 09:09:06] CPU #0: 16.60 H/s
:
[2015-09-28 09:10:40] CPU #2: 16.09 H/s
[2015-09-28 09:10:55] Stratum difficulty set to 1017
[2015-09-28 09:11:29] CPU #0: 17.10 H/s
:
[2015-09-28 09:11:45] CPU #1: 17.94 H/s
[2015-09-28 09:11:45] accepted: 391/413 (94.67%), 67.31 H/s nooooo
[2015-09-28 09:12:20] CPU #3: 16.43 H/s
[2015-09-28 09:12:21] accepted: 391/414 (94.44%), 67.53 H/s nooooo
[2015-09-28 09:12:30] CPU #0: 16.73 H/s
[2015-09-28 09:13:30] CPU #2: 17.25 H/s
[2015-09-28 09:13:30] accepted: 391/415 (94.22%), 64.45 H/s nooooo
[2015-09-28 09:13:34] CPU #3: 15.39 H/s
[2015-09-28 09:13:34] accepted: 391/416 (93.99%), 64.80 H/s nooooo
[2015-09-28 09:13:40] CPU #3: 16.06 H/s
[2015-09-28 09:13:40] accepted: 391/417 (93.76%), 65.47 H/s nooooo
[2015-09-28 09:13:45] CPU #1: 16.73 H/s
[2015-09-28 09:13:51] CPU #0: 18.39 H/s
[2015-09-28 09:13:52] accepted: 391/418 (93.54%), 68.44 H/s nooooo
[2015-09-28 09:13:56] CPU #2: 17.90 H/s
[2015-09-28 09:13:56] accepted: 391/419 (93.32%), 69.08 H/s nooooo
[2015-09-28 09:13:56] CPU #1: 14.58 H/s
:
System Behavior
1) Remote API
Tested Version: 1.2-dev; Source code: 1.1
Disclaimer: I looked into the code to see why port 4048 is open when the miner is running. I did not perform a deep review. Information in this section is subjective and is given without guarantees. There is no intention to express criticism against the developers, that are very likely smarter than I am :).
In version 1.0.8, a remote monitoring API has been integrated and version 1.1 adds a basic remote control API for “quit” and “seturl” operations. (Source: Bitcointalk.org)
The remote control commands are disabled by default, while the remote monitoring interface is automatically activated at start-up, listening on port 4048 for incoming network connections.
tasha@NOSHIP ~ $
tasha@NOSHIP ~ $ sudo netstat -lp | grep cpuminer
tcp 0 0 localhost:4048 *:* LISTEN 28535/cpuminer
.
Looking at the source code (here and here), we see that the allowed API endpoint is initialised to “127.0.0.1”, ie. localhost, the local machine, and to port 4043. The “– -api-bind” command also allows to define a list of allowed peer IP addresses.
The network listener can however be disabled by setting the port to 0 via the argument “-b 0” or “– -api-bind 0” (Source code: here and here). Unfortunately, this is not yet documented in the command line help message.
The remote control operations “seturl” and “quit” are DEactivated by default and have to be enabled using the “– -api-remote” command line parameter.
Personal Note: The entire remote monitoring and remote command API is relatively recent and entirely developed in low-level C code. Anyone that knows C (I do), knows that playing with pointers and 0-terminated strings is error-prone and a buffer overflow situation is quickly introduced. There is moreover not many user feedback yet on these functionalities. Seeing the malware problems from the times when Bitcoin mining wasn’t yet an ASIC-only game, I suggest to deactivate this interface for security reasons, if not used. I propose moreover to deactivate this interface by default in future versions and to implement an opt-it instead of an opt-out.
2) Memory
A test run over 11 hours of mining, 4 CPUs, ~180H/s, 255 accepted submission to the pool, much more difficulty updates, showed a very constant and light memory consumption:
Virtual Memory Size (VSZ) | All process memory including | 611 KB
| swapped out and from shared libraries |
Resident Set Size (RSS) | Physical memory allocated to this | 411 KB
| process and currently in RAM |
#!/bin/bash
while :
do
date
ps u $(pgrep cpuminer)
date >> mem.log
ps u $(pgrep cpuminer) >> mem.log
sleep 60
done
3) Network Bandwidth
A test run over 15 minutes of mining, 4 CPUs, ~180H/s, 20 accepted submission to the pool, 17 difficulty updates, showed a very constant and light network bandwidth consumption:
NetHogs version 0.8.0
PID USER PROGRAM DEV SENT RECEIVED
10923 monero ./cpuminer eth0 8.5 KB 17.3 KB
4) Processes
No (non-concealed) detached child-process is created by the miner. The miner has been started as user process and not using a root account. Attached child processes are verified by strace below. Threads are part of the parent process and do not appear.
boss@NOSHIP ~ $ sudo ps auxf
tasha 23238 0.0 0.0 89404 1504 pts/4 S Sep28 0:00 | \_ su - monero
monero 23246 0.0 0.0 23112 4740 pts/4 S Sep28 0:00 | \_ -su
monero 8269 377 0.2 546224 40136 pts/4 Sl+ 12:15 23:26 | \_ ./cpuminer -a cryptonight -o stratum+tcp://xmr.poolto.be:2999 -u 45mezmBHx...
:
5) System tracing: network
During a 5 minutes test run, which included the application start-up, only the pool server has been contacted. The strace tool has been used to start-up and monitor the process, including all sub-threads. The miner has been started as user process and not using a root account.
monero@ATREIDES ~/cpuminer-multi $
strace -f -e trace=network
-s 1000 -v -yy
./cpuminer -a cryptonight -o stratum+tcp://xmr.poolto.be:2999
-u VBZSYAPXY7.....mMbRmC8vYqYnr4ggwJDQEGCUJXLHKr56hwJ
-p x --api-bind 0
-f : Trace child processes as they are created by the currently traced processes as a
result of a fork. (fork() creates a process, not a thread.)
-e : Events to traces.
-s : Output option: string length.
-v : Print unabbreviated versions of system calls.
-yy : Print 'ip:port' pairs associated with socket file descriptors.
Rest: Process to start.
(## -> my comments)
monero@ATREIDES ~/cpuminer-multi $ strace -f -e trace=network -s 1000 -v -yy ./cpuminer -a cryptonight -o stratum+tcp://xmr.poolto.be:2999 -u 45mezmBHxtCivwct1xhKXycUcKHDhmkBAP9wRuEVsK1BjX7TxVVBZSYAPXY7mMbRmC8vYqYnr4ggwJDQEGCUJXLHKr56hwJ -p x --api-bind 0
** cpuminer-multi 1.2-dev by Tanguy Pruvot (tpruvot@github) **
BTC donation address: 1FhDPLPpw18X4srecguG3MxJYe4a1JsZnd
[2015-10-03 12:59:14] Using JSON-RPC 2.0
[2015-10-03 12:59:14] CPU Supports AES-NI: NO
Process 8411 attached
## creates miner processes
Process 8412 attached
Process 8413 attached
[2015-10-03 12:59:14] Starting Stratum on stratum+tcp://xmr.poolto.be:2999
[pid 8412] socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 3
## connects to pool server on socket 3
Process 8415 attached
Process 8414 attached
[pid 8415] socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
[pid 8415] connect(3, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
[pid 8415] socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
Process 8416 attached
[pid 8415] connect(3, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
Process 8417 attached
[2015-10-03 12:59:14] 4 miner threads started, using 'cryptonight' algorithm.
[pid 8415] socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
[pid 8415] connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.1.1")}, 16) = 0
[pid 8415] sendmmsg(3, {{{msg_name(0)=NULL, msg_iov(1)=[{"\20\341\1\0\0\1\0\0\0\0\0\0\3xmr\6poolto\2be\0\0\1\0\1", 31}], msg_controllen=0, msg_flags=0}, 31}, {{msg_name(0)=NULL, msg_iov(1)=[{"\323\313\1\0\0\1\0\0\0\0\0\0\3xmr\6poolto\2be\0\0\34\0\1", 31}], msg_controllen=0, msg_flags=0}, 31}}, 2, MSG_NOSIGNAL) = 2
[pid 8415] recvfrom(3, "\323\313\201\200\0\1\0\0\0\1\0\0\3xmr\6poolto\2be\0\0\34\0\1\300\20\0\6\0\1\0\0\2X\0'\3ns1\300\20\npostmaster\300\20x\33\264\350\0\0p\200\0\0\34 \0\t:\200\0\1Q\200", 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.1.1")}, [16]) = 82
[pid 8415] recvfrom(3, "\20\341\201\200\0\1\0\1\0\2\0\0\3xmr\6poolto\2be\0\0\1\0\1\300\f\0\1\0\1\0\0\2X\0\4\5\t\27t\300\20\0\2\0\1\0\0\2X\0\21\3ns2\7chabert\3com\0\300\20\0\2\0\1\0\0\2X\0\6\3ns1\300?", 1966, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.1.1")}, [16]) = 94
[pid 8415] +++ exited with 0 +++
[pid 8412] socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
[pid 8412] setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
[pid 8412] setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
[pid 8412] setsockopt(3, SOL_TCP, TCP_KEEPCNT, [3], 4) = 0
[pid 8412] setsockopt(3, SOL_TCP, TCP_KEEPIDLE, [50], 4) = 0
[pid 8412] setsockopt(3, SOL_TCP, TCP_KEEPINTVL, [50], 4) = 0
[pid 8412] connect(3, {sa_family=AF_INET, sin_port=htons(2999), sin_addr=inet_addr("5.9.23.116")}, 16) = -1 EINPROGRESS (Operation now in progress)
[pid 8412] getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
[pid 8412] getpeername(3, {sa_family=AF_INET, sin_port=htons(2999), sin_addr=inet_addr("5.9.23.116")}, [16]) = 0
[pid 8412] getsockname(3, {sa_family=AF_INET, sin_port=htons(42743), sin_addr=inet_addr("10.0.2.15")}, [16]) = 0
[pid 8412] sendto(3, "{\"method\": \"login\", \"params\": {\"login\": \"45mezmBHxtCivwct1xhKXycUcKHDhmkBAP9wRuEVsK1BjX7TxVVBZSYAPXY7mMbRmC8vYqYnr4ggwJDQEGCUJXLHKr56hwJ\", \"pass\": \"x\", \"agent\": \"cpuminer-multi/1.2-dev\"}, \"id\": 1}\n", 197, 0, NULL, 0) = 197
[pid 8412] recvfrom(3, "{\"id\":1,\"jsonrpc\":\"2.0\",\"error\":null,\"result\":{\"id\":\"440336626092903\",\"job\":{\"blob\":\"010086eabeb00597e5373b417bb27705f0078b333faf8184f50d882b405568f589b49abc8150f000000000d7bf2128667c04bf373fd3e5fee0376648cb886d59dbe6f573aded3d347bc14f01\",\"job_id\":\"694941113935783\",\"target\":\"6e128300\"},\"status\":\"OK\"}}\n", 2044, 0, NULL, NULL) = 303
## data exchange with pool server
[2015-10-03 12:59:15] Stratum difficulty set to 500
[pid 8412] recvfrom(3, "{\"jsonrpc\":\"2.0\",\"method\":\"job\",\"params\":{\"blob\":\"0100eeeabeb00581231695675e1012292284d65581cc936624dd81e6f3de0d8b728c5f1727e087000000003099bd70b190cdf0834fd431169bbd7a3f353b4a791b3bfb690d3a867621a61c02\",\"job_id\":\"364609261159785\",\"target\":\"6e128300\"}}\n", 2044, 0, NULL, NULL) = 253
[2015-10-03 12:59:18] CPU #0: 27.54 H/s
[2015-10-03 12:59:18] CPU #2: 25.44 H/s
[2015-10-03 12:59:18] CPU #3: 25.26 H/s
[2015-10-03 12:59:18] CPU #1: 25.25 H/s
[2015-10-03 12:59:20] CPU #0: 25.69 H/s
[pid 8411] sendto(3, "{\"method\": \"submit\", \"params\": {\"id\": \"440336626092903\", \"job_id\": \"364609261159785\", \"nonce\": \"44000000\", \"result\": \"2f6d85179be772f31675e52117f3e58b8ea26c6ca2eb250b50a56cafddc46100\"}, \"id\":4}\r\n\n", 196, 0, NULL, 0) = 196
[pid 8412] recvfrom(3, "{\"id\":4,\"jsonrpc\":\"2.0\",\"error\":null,\"result\":{\"status\":\"OK\"}}\n", 2044, 0, NULL, NULL) = 63
[2015-10-03 12:59:21] accepted: 1/1 (100.00%), 101.64 H/s yes!
[2015-10-03 12:59:22] CPU #2: 25.27 H/s
[pid 8411] sendto(3, "{\"method\": \"submit\", \"params\": {\"id\": \"440336626092903\", \"job_id\": \"364609261159785\", \"nonce\": \"62000080\", \"result\": \"e7cba7f3c9d8c701b1f466351c072240058a242fc553a233c314cfe186e23f00\"}, \"id\":4}\r\n\n", 196, 0, NULL, 0) = 196
[pid 8412] recvfrom(3, "{\"id\":4,\"jsonrpc\":\"2.0\",\"error\":null,\"result\":{\"status\":\"OK\"}}\n", 2044, 0, NULL, NULL) = 63
[2015-10-03 12:59:22] accepted: 2/2 (100.00%), 101.47 H/s yes!
[pid 8412] recvfrom(3, "{\"jsonrpc\":\"2.0\",\"method\":\"job\",\"params\":{\"blob\":\"010084ebbeb00580f040b8dabde844e590e54469b6290662dc1ae2a035d4ad47be613fe8e782f0000000008934900cc45ecba9e696fdbe031414e4ee136f782cf677113ef75b421340357801\",\"job_id\":\"994309112289920\",\"target\":\"6e128300\"}}\n", 2044, 0, NULL, NULL) = 253
[pid 8412] recvfrom(3, "{\"jsonrpc\":\"2.0\",\"method\":\"job\",\"params\":{\"blob\":\"010084ebbeb00580f040b8dabde844e590e54469b6290662dc1ae2a035d4ad47be613fe8e782f000000000827e2ec562c33f140113a777b69dd6d02990209527cd5be15da6a60251e8434b01\",\"job_id\":\"746954282117076\",\"target\":\"37894100\"}}\n", 2044, 0, NULL, NULL) = 253
[2015-10-03 12:59:43] Stratum difficulty set to 1000
[2015-10-03 12:59:55] CPU #0: 26.17 H/s
[2015-10-03 12:59:57] CPU #3: 24.99 H/s
[2015-10-03 13:00:05] CPU #0: 22.30 H/s
[pid 8411] sendto(3, "{\"method\": \"submit\", \"params\": {\"id\": \"440336626092903\", \"job_id\": \"746954282117076\", \"nonce\": \"de000000\", \"result\": \"fee2d5199a2de5a75bc2cb688f897954e136d37f12e779e1c1292f47e0c73e00\"}, \"id\":4}\r\n\n", 196, 0, NULL, 0) = 196
[pid 8412] recvfrom(3, "{\"id\":4,\"jsonrpc\":\"2.0\",\"error\":null,\"result\":{\"status\":\"OK\"}}\n", 2044, 0, NULL, NULL) = 63
[2015-10-03 13:00:05] accepted: 3/3 (100.00%), 97.80 H/s yes!
[pid 8412] recvfrom(3, "{\"jsonrpc\":\"2.0\",\"method\":\"job\",\"params\":{\"blob\":\"010084ebbeb00580f040b8dabde844e590e54469b6290662dc1ae2a035d4ad47be613fe8e782f000000000ae782f62170350c5ed5588c9910a23edb2a1b00539e6d9937a05df112a0bb5a301\",\"job_id\":\"783310842234641\",\"target\":\"f2ba2200\"}}\n", 2044, 0, NULL, NULL) = 253
[2015-10-03 13:00:08] Stratum difficulty set to 1887
[pid 8412] recvfrom(3, "{\"jsonrpc\":\"2.0\",\"method\":\"job\",\"params\":{\"blob\":\"0100b2ebbeb005fd42cff9a5319d3fcaa6584cbe9a9ca209308939a6b144a926c0d8e0a5a3dfa60000000069fd2fc4449103d092af6a825b3b5fbeb95c9f13ab80487006fee57577d4576401\",\"job_id\":\"947864302014932\",\"target\":\"f2ba2200\"}}\n", 2044, 0, NULL, NULL) = 253
[2015-10-03 13:00:13] CPU #1: 26.24 H/s
[2015-10-03 13:00:19] CPU #2: 26.22 H/s
[2015-10-03 13:00:24] CPU #0: 23.45 H/s
[pid 8412] recvfrom(3, "{\"jsonrpc\":\"2.0\",\"method\":\"job\",\"params\":{\"blob\":\"0100d8ebbeb005e447a695c172c7654d9db6595b144c5652f7fa61c374c682dc402d0b10e9fa2c000000007144e4d897e4250d8597d39c9e9acaf06982bafb14a6a3b935aeefe704ddbf1d01\",\"job_id\":\"979165434371680\",\"target\":\"f2ba2200\"}}\n", 2044, 0, NULL, NULL) = 253
[2015-10-03 13:00:50] CPU #0: 17.42 H/s
[2015-10-03 13:00:50] CPU #0: 19.64 H/s
[pid 8411] sendto(3, "{\"method\": \"submit\", \"params\": {\"id\": \"440336626092903\", \"job_id\": \"979165434371680\", \"nonce\": \"08000000\", \"result\": \"741c22d7c6caac7bddb8adc8ee07fa29ac8f9e980e642a8bd223c00e2a661800\"}, \"id\":4}\r\n\n", 196, 0, NULL, 0) = 196
[pid 8412] recvfrom(3, "{\"id\":4,\"jsonrpc\":\"2.0\",\"error\":null,\"result\":{\"status\":\"OK\"}}\n", 2044, 0, NULL, NULL) = 63
[2015-10-03 13:00:50] accepted: 4/4 (100.00%), 97.08 H/s yes!
[pid 8412] recvfrom(3, "{\"jsonrpc\":\"2.0\",\"method\":\"job\",\"params\":{\"blob\":\"0100e6ebbeb0050a3c9f3ac6c5bf6773591377af49cab3fe377065a7100fc651ef7d848d5fc44b00000000ad0353c495a33376c5a7563547b9f95947317c3ad914d159c6eba9ec6f28d1f801\",\"job_id\":\"913196588517166\",\"target\":\"f2ba2200\"}}\n", 2044, 0, NULL, NULL) = 253
[pid 8412] recvfrom(3, "{\"jsonrpc\":\"2.0\",\"method\":\"job\",\"params\":{\"blob\":\"0100e6ebbeb0050a3c9f3ac6c5bf6773591377af49cab3fe377065a7100fc651ef7d848d5fc44b00000000d455e70c5a43620561b76a66c64d83d2c500ddd2c269378437812cef10bd27a601\",\"job_id\":\"300380734982900\",\"target\":\"1dcb1300\"}}\n", 2044, 0, NULL, NULL) = 253
[2015-10-03 13:00:56] Stratum difficulty set to 3311
[2015-10-03 13:01:07] CPU #3: 20.56 H/s
[2015-10-03 13:01:19] CPU #3: 19.77 H/s
[pid 8411] sendto(3, "{\"method\": \"submit\", \"params\": {\"id\": \"440336626092903\", \"job_id\": \"300380734982900\", \"nonce\": \"e30000c0\", \"result\": \"5d62a26eca5a5a0a438842c5b37e112fad6f16277b40b17e68d4efd0291e0100\"}, \"id\":4}\r\n\n", 196, 0, NULL, 0) = 196
[pid 8412] recvfrom(3, "{\"id\":4,\"jsonrpc\":\"2.0\",\"error\":null,\"result\":{\"status\":\"OK\"}}\n", 2044, 0, NULL, NULL) = 63
[2015-10-03 13:01:19] accepted: 5/5 (100.00%), 91.86 H/s yes!
[pid 8412] recvfrom(3, "{\"jsonrpc\":\"2.0\",\"method\":\"job\",\"params\":{\"blob\":\"0100e6ebbeb0050a3c9f3ac6c5bf6773591377af49cab3fe377065a7100fc651ef7d848d5fc44b00000000a5aa3b8ef59185a90d69eec32802b9f04d3616b13d4ef85d2e216eebc892085401\",\"job_id\":\"689380009518936\",\"target\":\"8ee50900\"}}\n", 2044, 0, NULL, NULL) = 253
[2015-10-03 13:01:20] Stratum difficulty set to 6622.01
[2015-10-03 13:01:23] CPU #1: 22.35 H/s
[2015-10-03 13:01:33] CPU #2: 21.10 H/s
[2015-10-03 13:01:42] CPU #0: 21.90 H/s
[2015-10-03 13:02:15] CPU #3: 20.45 H/s
[2015-10-03 13:02:24] CPU #1: 21.77 H/s
[2015-10-03 13:02:31] CPU #2: 22.01 H/s
[2015-10-03 13:02:42] CPU #0: 21.17 H/s
[2015-10-03 13:02:51] CPU #2: 21.84 H/s
[pid 8411] sendto(3, "{\"method\": \"submit\", \"params\": {\"id\": \"440336626092903\", \"job_id\": \"689380009518936\", \"nonce\": \"a4060080\", \"result\": \"17440b930b45ad8d01c4492a00b1be9dcdae7f799449f86027676d193b0a0600\"}, \"id\":4}\r\n\n", 196, 0, NULL, 0) = 196
[pid 8412] recvfrom(3, "{\"id\":4,\"jsonrpc\":\"2.0\",\"error\":null,\"result\":{\"status\":\"OK\"}}\n", 2044, 0, NULL, NULL) = 63
[2015-10-03 13:02:51] accepted: 6/6 (100.00%), 85.23 H/s yes!
[2015-10-03 13:03:06] CPU #3: 23.63 H/s
[2015-10-03 13:03:20] CPU #1: 22.44 H/s
[2015-10-03 13:03:41] CPU #0: 21.40 H/s
[2015-10-03 13:03:50] CPU #2: 21.46 H/s
^CProcess 8410 detached
Process 8411 detached
Process 8412 detached
Process 8413 detached
Process 8414 detached
Process 8416 detached
[2015-10-03 13:03:54] SIGINT received, exiting
Process 8417 detached
monero@ATREIDES ~/cpuminer-multi $
6) System tracing: other
The following things can be tested by replacing the “strace” argument in the above strace command:
file | All files open, including system libraries loaded and system files accessed.
process | All sub-processes, including system flags and PID
ipc | All IPC (Inter Process Communication) related system calls.
| (Nothing special observed during test)
More information on the straces command line parameters, see http://man7.org/linux/man-pages/man1/strace.1.html.
Command-Line Options
monero@NOSHIP ~/cpuminer-multi $ ./cpuminer --help
** cpuminer-multi 1.2-dev by Tanguy Pruvot (tpruvot@github) **
BTC donation address: 1FhDPLPpw18X4srecguG3MxJYe4a1JsZnd
Usage: cpuminer-multi [OPTIONS]
Options:
-a, --algo=ALGO specify the algorithm to use
scrypt scrypt(1024, 1, 1) (default)
scrypt:N scrypt(N, 1, 1)
sha256d SHA-256d
axiom Shabal-256 MemoHash
blake Blake-256 (SFR)
blakecoin Blakecoin
blake2s Blake-2 S
bmw BMW 256
c11/flax C11
cryptolight Cryptonight-light
cryptonight Monero
dmd-gr Diamond-Groestl
drop Dropcoin
fresh Fresh
groestl GroestlCoin
heavy Heavy
keccak Keccak
luffa Luffa
lyra2re Lyra2RE
lyra2rev2 Lyra2REv2 (Vertcoin)
myr-gr Myriad-Groestl
neoscrypt NeoScrypt(128, 2, 1)
nist5 Nist5
pluck Pluck:128 (Supcoin)
pentablake Pentablake
quark Quark
qubit Qubit
shavite3 Shavite3
skein Skein+Sha (Skeincoin)
skein2 Double Skein (Woodcoin)
s3 S3
x11 X11
x13 X13
x14 X14
x15 X15
zr5 ZR5
-o, --url=URL URL of mining server
-O, --userpass=U:P username:password pair for mining server
-u, --user=USERNAME username for mining server
-p, --pass=PASSWORD password for mining server
--cert=FILE certificate for mining server using SSL
-x, --proxy=[PROTOCOL://]HOST[:PORT] connect through a proxy
-t, --threads=N number of miner threads (default: number of processors)
-r, --retries=N number of times to retry if a network call fails
(default: retry indefinitely)
-R, --retry-pause=N time to pause between retries, in seconds (default: 30)
--time-limit=N maximum time [s] to mine before exiting the program.
-T, --timeout=N timeout for long poll and stratum (default: 300 seconds)
-s, --scantime=N upper bound on time spent scanning current work when
long polling is unavailable, in seconds (default: 5)
--randomize Randomize scan range start to reduce duplicates
-f, --diff-factor Divide req. difficulty by this factor (std is 1.0)
-m, --diff-multiplier Multiply difficulty by this factor (std is 1.0)
-n, --nfactor neoscrypt N-Factor
--coinbase-addr=ADDR payout address for solo mining
--coinbase-sig=TEXT data to insert in the coinbase when possible
--no-longpoll disable long polling support
--no-getwork disable getwork support
--no-gbt disable getblocktemplate support
--no-stratum disable X-Stratum support
--no-extranonce disable Stratum extranonce support
--no-redirect ignore requests to change the URL of the mining server
-q, --quiet disable per-thread hashmeter output
--no-color disable colored output
-D, --debug enable debug output
-P, --protocol-dump verbose dump of protocol-level activities
-S, --syslog use system log for output messages
-B, --background run the miner in the background
--benchmark run in offline benchmark mode
--cputest debug hashes from cpu algorithms
--cpu-affinity set process affinity to cpu core(s), mask 0x3 for cores 0 and 1
--cpu-priority set process priority (default: 0 idle, 2 normal to 5 highest)
-b, --api-bind IP/Port for the miner API (default: 127.0.0.1:4048)
--api-remote Allow remote control
--max-temp=N Only mine if cpu temp is less than specified value (linux)
--max-rate=N[KMG] Only mine if net hashrate is less than specified value
--max-diff=N Only mine if net difficulty is less than specified value
-c, --config=FILE load a JSON-format configuration file
-V, --version display version information and exit
-h, --help display this help text and exit
Thank you so much for this tutorial. Works great!
thanks for the tuto
mercy
this helpme a lot :)
I started getting into mining stuff around oct. 2016. Your tutorial and all the remarks are very usefull….Next step, pick up programming where I left it at high school 15years ago (failed at C++ cause my snake didn’t get any longer and the dot kept appearing at same spot , lol)…Thank you / Bedankt / Merci for all that work… :)
Thank you for your nice comment! It made my day :-) Good luck with coding :)
Thank you so VERY much! Your comprehensive tutorial has helped me in the entry-level spectrum of mining and testing! and might I add, one of the only (very few) tutorials online that has worked for me on every set-up I have attempted. from laptops, to desktops, to rigs! thank YOU! cheers
Hello !
Thanks for you article, it helps me to understand why I had an error message regarding the 4048 binding port during mining.
created a small bash script that manage several workers started with cpuminer-multi : https://github.com/PastaGringo/PastaMiner_cpuminer-multi
As I start simultaneously cpuminer-multi workers, I should certainly disable this binding port.
I had a question, maybe you could help me… My script displays a resume from the active workers with basics informations like the coin mined, the startup pool used, etc. The last last and the most important for me could be the CPU frequency (Hz) of each worker nearly in real time.
Do you think the cpuminer-multi API could help ? If yes, do you have an idea to how to do it ?
If it’s not possible, I will try to redirect the log output into a log file and extract the frequency with some sed command…
Thanks !
Hi, I’m sorry but without further research I cannot answer your question. Best wishes, /tc
Mine is not working here is what it says:
** cpuminer-multi 1.3.3 by tpruvot@github **
BTC donation address: 1FhDPLPpw18X4srecguG3MxJYe4a1JsZnd (tpruvot)
[2017-10-21 22:56:55] Using JSON-RPC 2.0
[2017-10-21 22:56:55] CPU Supports AES-NI: YES
[2017-10-21 22:56:55] Starting Stratum on stratum+tcp://us.multipool.us:3375
[2017-10-21 22:56:55] 2 miner threads started, using ‘cryptonight’ algorithm.
[2017-10-21 22:57:25] Stratum connection failed: Connection timed out after 30001 milliseconds
[2017-10-21 22:57:25] …retry after 10 seconds
The most likely is that your server address is wrong: us.multipool.us:3375
you were really so precise in the instructions it worked for me fine!!! thank you very much!
It shows segmentation fault when i start miner
Hello,
Great Instructions ! However I am using solo mining by the below script:
./cpuminer -a sha256d -o localhost:10617 -u -p –coinbase-addr=
I get an error :
HTTP request failed: Failed to connect to localhost port 10617: Connection refused
API bind to port 4048 failed – trying again in 20sec
Do I have to alter the config file in cpuminer file to overcome this ? (Linux User)
Hi, the -o option defines what mining pool you want to use (connect to), it’s not your local host but somewhere in the wide wide interweb. You need to chose a pool and use something like “-o stratum+tcp://xmr.poolto.be:2999”.
Tengo LinuxMnt Sonya 32bits y me aparece la siguiente pantalla al ejecutar el programa. Que puedo hacer para hacer efectivo el minado?
Using JSON-RPC 2.0
[2018-03-23 18:17:22] CPU Supports AES-NI: YES
[2018-03-23 18:17:22] Starting Stratum on stratum+tcp://xmr.pool.minergate.com:45560
[2018-03-23 18:17:22] 4 miner threads started, using ‘cryptonight’ algorithm.
[2018-03-23 18:17:23] Stratum difficulty set to 1063
[2018-03-23 18:17:23] API bind to port 4048 failed – trying again in 20sec
[2018-03-23 18:17:24] CPU #0: 66.91 H/s
[2018-03-23 18:17:24] CPU #1: 62.60 H/s
[2018-03-23 18:17:24] accepted: 0/1 (diff 0.000), 129.51 H/s booooo
[2018-03-23 18:17:24] CPU #3: 61.65 H/s
[2018-03-23 18:17:24] CPU #2: 56.70 H/s
[2018-03-23 18:17:25] accepted: 0/2 (diff 0.000), 247.85 H/s booooo
[2018-03-23 18:17:28] accepted: 0/3 (diff 0.000), 256.02 H/s booooo
[2018-03-23 18:17:32] CPU #3: 74.63 H/s
[2018-03-23 18:17:33] accepted: 0/4 (diff 0.000), 269.00 H/s booooo
Thats really great tutorial Please help me how this file save and use in ec2-user linux for mining where we can launch all aws intance at once. i have created this code echo ‘#!/bin/bash
minergate-cli -user xxxxx@gmail-com -xmr’ >>script
but this is not working and i want to use this code minerd -a cryptonight -o stratum+tcp://xmr.crypto-pool.fr:3333 -u YOUR_WALLET_ADDRESS -p x