在 Ubuntu 16.04 上编译纯 CPU 挖矿程序

独服的 CPU 闲着也是闲着,小挖怡情,大挖伤身。本文主要基于 NiceHash Miner 可用的挖矿程序,在 Linux 下编译 CPU 可用的版本

Equihash miner for NiceHash

项目源码在这里,这个 miner 的编译稍稍有些麻烦,很多依赖需要自己安装。由于是纯 CPU 挖矿,尽管页面上提到了 CUDA Kit,但是我们并不需要安装这个。

需要的依赖有这些,Boost 1.62+ 和 CMake 3.5+,但是实际操作中,由于 CMake 和 Boost 库存在版本兼容性问题(Boost 1.63 / CMake 3.7+; Boost 1.64 / CMake 3.8+; Boost 1.65 & 1.65.1 / CMake 3.9.3+),因此不能采用简单的 apt 方式安装,而需要自己下载。

Boost 我选择了 1.65.1,具体安装看这里,具体命令如下:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
wget https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.bz2
tar --bzip2 -xf /path/to/boost_1_65_1.tar.bz2
cd path/to/boost_1_65_1
./bootstrap.sh
./b2 install
wget https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.bz2 tar --bzip2 -xf /path/to/boost_1_65_1.tar.bz2 cd path/to/boost_1_65_1 ./bootstrap.sh ./b2 install
wget https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.bz2
tar --bzip2 -xf /path/to/boost_1_65_1.tar.bz2
cd path/to/boost_1_65_1
./bootstrap.sh
./b2 install

然后安装 CMake 3.9.3+,这里我一开始就被坑了,如果不选择合适的 CMake 版本,则编译时无法找到 Boost 库。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
wget https://cmake.org/files/v3.9/cmake-3.9.6-Linux-x86_64.sh
chmod +x /path/to/cmake-3.9.6-Linux-x86_64.sh
sudo /path/to/cmake-3.9.6-Linux-x86_64.sh #Set your own install path during the process
sudo ln -s /path/to/cmake-3.9.6-Linux-x86_64/bin/* /usr/local/bin
wget https://cmake.org/files/v3.9/cmake-3.9.6-Linux-x86_64.sh chmod +x /path/to/cmake-3.9.6-Linux-x86_64.sh sudo /path/to/cmake-3.9.6-Linux-x86_64.sh #Set your own install path during the process sudo ln -s /path/to/cmake-3.9.6-Linux-x86_64/bin/* /usr/local/bin
wget https://cmake.org/files/v3.9/cmake-3.9.6-Linux-x86_64.sh
chmod +x /path/to/cmake-3.9.6-Linux-x86_64.sh
sudo /path/to/cmake-3.9.6-Linux-x86_64.sh #Set your own install path during the process
sudo ln -s /path/to/cmake-3.9.6-Linux-x86_64/bin/* /usr/local/bin

然后运行

cmake --version
cmake --version 查看版本,应该已经是 3.9.3+ 了

接下来按照 GitHub 页面操作

  1. git clone https://github.com/nicehash/nheqminer.git
    git clone https://github.com/nicehash/nheqminer.git
  2. 修改根目录下的 CMakeList.txt,修改这样一行:
    option(USE_CUDA_DJEZO "USE CUDA_DJEZO" ON)
    option(USE_CUDA_DJEZO "USE CUDA_DJEZO" ON) 后面的 ON 为 OFF,这是因为我们要纯 CPU 挖矿,不编译 CUDA 版本。
  3. cd nheqminer/cpu_xenoncat/asm_linux/
    cd nheqminer/cpu_xenoncat/asm_linux/
  4. chmod +x fasm
    chmod +x fasm
  5. sh assemble.sh
    sh assemble.sh
  6. cd ../../../
    cd ../../../
  7. mkdir build && cd build
    mkdir build && cd build
  8. cmake ../nheqminer
    cmake ../nheqminer
  9. make -j $(nproc)
    make -j $(nproc)

接下来在 build 目录下就会看到编译好的 nheqminer 程序,使用 

nheqminer -l equihash.eu.nicehash.com:3357 -u <NH_BTC_ADDRESS>.<worker_name> -t <n_threads>
nheqminer -l equihash.eu.nicehash.com:3357 -u <NH_BTC_ADDRESS>.<worker_name> -t <n_threads> 开始挖矿

CPUMiner-Multi

  1. git clone https://github.com/tpruvot/cpuminer-multi.git
    git clone https://github.com/tpruvot/cpuminer-multi.git
  2. 安装依赖
    apt install automake autoconf libcurl4-openssl-dev libjansson-dev libssl-dev
    apt install automake autoconf libcurl4-openssl-dev libjansson-dev libssl-dev
  3. cd cpuminer-multi
    cd cpuminer-multi
  4. ./build.sh
    ./build.sh
  5. ./cpuminer -a <algo> -o stratum+tcp://<pool_addr> -u <NH_BTC_ADDRESS>.<worker_name> -t <n_threads>
    ./cpuminer -a <algo> -o stratum+tcp://<pool_addr> -u <NH_BTC_ADDRESS>.<worker_name> -t <n_threads>

CPUMiner-Multi Help:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Usage: cpuminer-multi [OPTIONS]
Options:
-a, --algo=ALGO specify the algorithm to use
axiom Shabal-256 MemoHash
bitcore Timetravel with 10 algos
blake Blake-256 14-rounds (SFR)
blakecoin Blake-256 single sha256 merkle
blake2s Blake2-S (256)
bmw BMW 256
c11/flax C11
cryptolight Cryptonight-light
cryptonight Monero
decred Blake-256 14-rounds 180 bytes
dmd-gr Diamond-Groestl
drop Dropcoin
fresh Fresh
groestl GroestlCoin
heavy Heavy
jha JHA
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
scrypt scrypt(1024, 1, 1) (default)
scrypt:N scrypt(N, 1, 1)
scrypt-jane:N (with N factor from 4 to 30)
shavite3 Shavite3
sha256d SHA-256d
sia Blake2-B
sib X11 + gost (SibCoin)
skein Skein+Sha (Skeincoin)
skein2 Double Skein (Woodcoin)
s3 S3
timetravel Timetravel (Machinecoin)
vanilla Blake-256 8-rounds
x11evo Permuted x11
x11 X11
x13 X13
x14 X14
x15 X15
x17 X17
xevan Xevan (BitSend)
yescrypt Yescrypt
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
--max-log-rate limit per-core hashrate logs (default: 5s)
--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
--hide-diff Hide submitted block and net difficulty
-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
Usage: cpuminer-multi [OPTIONS] Options: -a, --algo=ALGO specify the algorithm to use axiom Shabal-256 MemoHash bitcore Timetravel with 10 algos blake Blake-256 14-rounds (SFR) blakecoin Blake-256 single sha256 merkle blake2s Blake2-S (256) bmw BMW 256 c11/flax C11 cryptolight Cryptonight-light cryptonight Monero decred Blake-256 14-rounds 180 bytes dmd-gr Diamond-Groestl drop Dropcoin fresh Fresh groestl GroestlCoin heavy Heavy jha JHA 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 scrypt scrypt(1024, 1, 1) (default) scrypt:N scrypt(N, 1, 1) scrypt-jane:N (with N factor from 4 to 30) shavite3 Shavite3 sha256d SHA-256d sia Blake2-B sib X11 + gost (SibCoin) skein Skein+Sha (Skeincoin) skein2 Double Skein (Woodcoin) s3 S3 timetravel Timetravel (Machinecoin) vanilla Blake-256 8-rounds x11evo Permuted x11 x11 X11 x13 X13 x14 X14 x15 X15 x17 X17 xevan Xevan (BitSend) yescrypt Yescrypt 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 --max-log-rate limit per-core hashrate logs (default: 5s) --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 --hide-diff Hide submitted block and net difficulty -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
Usage: cpuminer-multi [OPTIONS]
Options:
  -a, --algo=ALGO       specify the algorithm to use
                          axiom        Shabal-256 MemoHash
                          bitcore      Timetravel with 10 algos
                          blake        Blake-256 14-rounds (SFR)
                          blakecoin    Blake-256 single sha256 merkle
                          blake2s      Blake2-S (256)
                          bmw          BMW 256
                          c11/flax     C11
                          cryptolight  Cryptonight-light
                          cryptonight  Monero
                          decred       Blake-256 14-rounds 180 bytes
                          dmd-gr       Diamond-Groestl
                          drop         Dropcoin
                          fresh        Fresh
                          groestl      GroestlCoin
                          heavy        Heavy
                          jha          JHA
                          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
                          scrypt       scrypt(1024, 1, 1) (default)
                          scrypt:N     scrypt(N, 1, 1)
                          scrypt-jane:N (with N factor from 4 to 30)
                          shavite3     Shavite3
                          sha256d      SHA-256d
                          sia          Blake2-B
                          sib          X11 + gost (SibCoin)
                          skein        Skein+Sha (Skeincoin)
                          skein2       Double Skein (Woodcoin)
                          s3           S3
                          timetravel   Timetravel (Machinecoin)
                          vanilla      Blake-256 8-rounds
                          x11evo       Permuted x11
                          x11          X11
                          x13          X13
                          x14          X14
                          x15          X15
                          x17          X17
                          xevan        Xevan (BitSend)
                          yescrypt     Yescrypt
                          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
      --max-log-rate    limit per-core hashrate logs (default: 5s)
      --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
      --hide-diff       Hide submitted block and net difficulty
  -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

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注