MacOSX
BitZeny

macOSでもBitZenyを掘りたい

BitZeny公式サイトではWindows版の採掘ソフトしかバイナリ版が提供されていないので、macOSで採掘したい場合は自分でソースコードからビルドする必要があります。

色々ハマった結果、何とか動いてくれましたので、備忘録がわりに書いておきます。

(追記)
投稿してから、既に同様の記事がQiitaに上がっていたことに気付きました……。Qiitaもしっかり探しておけばよかった。

BitZenyのMinerをMac OS Xでビルドして採掘する

依存ライブラリ・ツールのインストール

Homebrewでビルドに必要なライブラリ等をインストールします。
brewコマンドが入っていない人は、公式サイトの手順に従って入れて下さい。

$ brew install curl
$ brew install autoconf
$ brew install automake

あとは、XcodeのCommand Line Toolsが必要だと思いますので、入っていない場合はこちらもインストールしておいて下さい。

色々試行錯誤していたので、もしかしたら上記以外にも必要なライブラリがあるかも。
コメントや編集リクエストで教えて頂けると助かります。

ソースコードの入手

BitZeny公式サイトに載っている、bitzeny/cpuminerをcloneします。

$ git clone https://github.com/bitzeny/cpuminer.git
$ cd cpuminer

cpuminerをビルドするときのエラーメッセージで検索していると、「cpuminerはrelease版のtarballからビルドするのがオススメだ!」的な記載をよく見ますが、bitzeny/cpuminerは
masterブランチからcloneしてくるのが正解 です。

releaseに置いてあるtarballは、フォーク元のリポジトリそのままの内容らしく、ビルドしてもBitZeny採掘で使うyescryptが選択できません。

Mac向けの修正

README通りにビルドしようとするとエラーが出て進めませんので、一部修正します。

参考: CPU Miner & problem with libcurl

libcurl.m4を持ってくる

cpuminerディレクトリの下にm4ディレクトリを作って、そこにlibcurl.m4をコピーします。

$ mkdir m4
$ cp /usr/local/Cellar/curl/7.57.0/share/aclocal/libcurl.m4 ./m4

コピー元のパスはお使いの環境に置き換えて下さい。
HomebrewでCurlをインストールした場合、/use/local/Celler/curlの下に入っているはずです。

Makefile.amを修正する

Makefile.amACLOCAL_AMFLAGS = -I m4を追加します。

Makefile.am
(略)
minerd_LDFLAGS  = $(PTHREAD_FLAGS)
minerd_LDADD    = @LIBCURL@ @JANSSON_LIBS@ @PTHREAD_LIBS@ @WS2_LIBS@
minerd_CPPFLAGS = @LIBCURL_CPPFLAGS@

ACLOCAL_AMFLAGS = -I m4

autogen.shを修正する

aclocalaclocal -I m4に変更します。

autogen.sh
#!/bin/sh

# You need autoconf 2.5x, preferably 2.57 or later
# You need automake 1.7 or later. 1.6 might work.

set -e

aclocal -I m4
autoheader
automake --gnu --add-missing --copy
autoconf

ビルドする

あとはREADMEに書いてある手順と同じです。

$ ./autogen.sh
$ ./nomacro.pl
$ ./configure CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer" 
$ make

成功すると、cpuminerディレクトリ直下にminerdコマンドが作成されます。
パスが通ってないので、パス指定付きで実行してみましょう。
(マイニングプールのURL等は自分が使いたいものに置き換えてください。)

$ ./minerd  -a yescrypt -o stratum+tcp://<マイニングプールのURL:ポート番号> -u <マイニングプールのユーザー名> -p <パスワード>

[2017-12-10 20:33:06] Starting Stratum on stratum+tcp://<マイニングプールのURL:ポート番号>
[2017-12-10 20:33:06] Binding thread 0 to cpu 0
[2017-12-10 20:33:06] Binding thread 1 to cpu 1
[2017-12-10 20:33:06] Binding thread 2 to cpu 2
[2017-12-10 20:33:06] 4 miner threads started, using 'yescrypt' algorithm.
[2017-12-10 20:33:06] Binding thread 3 to cpu 3
[2017-12-10 20:33:08] Stratum requested work restart
[2017-12-10 20:33:14] Stratum requested work restart
[2017-12-10 20:33:14] thread 1: 2472 hashes, 0.41 khash/s
[2017-12-10 20:33:14] thread 3: 2469 hashes, 0.40 khash/s
[2017-12-10 20:33:14] thread 0: 2443 hashes, 0.40 khash/s
[2017-12-10 20:33:14] thread 2: 2465 hashes, 0.40 khash/s
[2017-12-10 20:33:47] thread 1: 13613 hashes, 0.42 khash/s
[2017-12-10 20:33:47] accepted: 1/1 (100.00%), 1.63 khash/s (yay!!!)

こんな感じのログが流れてくれば成功です。

参考にしたページ

libcurl build failure on Mac OSX 10.8.x
To build from source, binary or tarball?
CPU Miner & problem with libcurl

途中ハマったエラー

同じ箇所でハマっている人が検索で辿り着けるように、出ていたエラーを書いておきます。
どちらも上記修正で通るようになります。

./autogen.shで出てくるエラー

(略)
Makefile.am: installing './INSTALL'
Makefile.am: installing './depcomp'
configure.ac:120: error: possibly undefined macro: AC_MSG_ERROR
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.

./configureで出てくるエラー

(略)
checking whether we can compile AVX2 code... yes
checking for json_loads in -ljansson... yes
checking for pthread_create in -lpthread... yes
./configure: line 5610: syntax error near unexpected token `,'
./configure: line 5610: `LIBCURL_CHECK_CONFIG(, 7.15.2, ,'