ことばにならないなにか

「ことばにならないなにか」を言葉で近似するそんな試み

xmr-stak-cpuで仮想通貨Moneroをマイニングしてみた(Linux編)

最近仮想通貨が盛り上がっていることもあり、家に古いPCもあったことから、興味本位で仮想通貨のマイニングをしてみました。
PCは6年ほど前に、約3万円で購入したものですので、かなり古いです。当時のPCの相場価格からしてもかなり安く、低スペックPCのため、あまり収益化は期待できませんが、一体どれくらい稼げたのかも、この記事の最後に報告できればと思います。

仮想通貨・マイニングツール

まずマイニングを行う前に、どの仮想通貨をマイニングするかを選ぶ必要があります。
仮想通貨の代表例はビットコインですが、インターネット上の記事を色々と読むと、ビットコインの採掘は既にビジネス化が進んでおり、家庭用のPCでは採掘が難しいということを学びました。

インターネット上では、いろんな人が、いろんな仮想通貨を推しているのですが、今回は「Monero」という仮想通貨を選びました。選んだ理由?語感です。なんかかわいかったので。

getmonero.org


次に、採掘するマイニングツールを選びます。
今回は、Github上で公開されている「xmr-stak-cpu」というマインニグツールを利用してみました。xmr-stak-cpuは、CPUを使って仮想通貨を発行する「CPUマイナー」の1つです。
また、このxmr-stak-cpuは、上記のMoneroの公式ホームページでも紹介されているツールのため、ある程度の安全性は確保されているような気もします。

github.com


利用したPCのスペック

もともとはWindowsを積んでいたのですが、Windowsを利用することが殆どなくなったので、CentOSを入れ直しました。

はじめに申し上げておくと、私ハードウェアは詳しくないので、このへんはあまりわかりません。足りてない情報があれば教えてください。


マイニングツールのコンパイル

まずは、上記のGithubのURLから、ソースを適当な場所にcloneします。

$ git clone https://github.com/fireice-uk/xmr-stak-cpu.git


次に、コンパイルをします。

コンパイルの前にdonate-lecel.hを確認しておきましょう。この値を調整することで、今回のハッシュパワーの一部を開発者に寄付するかどうかを設定できます。デフォルトの値は2.0 / 100.0となっています。これは100 minutesのマイニングを行った時、98minutes分の成果を自分が、2minutes分の成果を、開発者が受け取る、という意味です。
もちろん、値を低くすると、自分の受け取り分が増えますが、開発者に敬意を払う意味でも、あまり低い値にすることはおすすめしません。


コンパイルコードは、Github(xmr-stak-cpu/LINUXCOMPILE.md at master · fireice-uk/xmr-stak-cpu · GitHub)にも載っていますが、以下の流れで進めていきます。

まず、必要なパッケージをインストールします。

$ sudo yum install centos-release-scl cmake3 hwloc-devel libmicrohttpd-devel openssl-devel
$ sudo yum install devtoolset-4-gcc*


SCLを使って、シェルを起動します。

$ sudo scl enable devtoolset-4 bash


CMakeLists.txtがあるディレクトリ上で、以下のコマンドでコンパイルを行います。

# cmake .
# make install

私の場合は、コンパイル中に何度か、利用しているライブラリのバージョンが古いため、コンパイルできませんというエラーメッセージが出ましたが、逐一対応していけば、問題なくコンパイルできました。
また、Githubではcmake3コマンドを利用するように記載されていましたが、うまく行かなかったのでcmakeコンパイルしています。


configファイルの設定

コンパイルが終わった状態で、いざ起動しようとすると、「configファイルを設定して下さい」というエラーメッセージが表示されるので、設定を行います。

CPUの設定

まずはCPUの設定です。私もあまり詳しくはないのですが、とりあえずconfig.txtを開き、cpu_threads_confの値を、以下のように修正します。

"cpu_threads_conf" :
 [ 
      { "low_power_mode" : false, "no_prefetch" : true, "affine_to_cpu" : false },
      { "low_power_mode" : false, "no_prefetch" : true, "affine_to_cpu" : false },
 ],

スレッド数は、各マシンのCPUのスペックに合わせて調整すれば良いと思います。私のマシンでは、CentOSが認識している仮想プロセッサの数が4つだったので、始めは4つ記載していたのですが、何故か2つのほうがTotalのマイニング効率が高かったので、上記のように設定しています。

2chを見ていると、物理コアの数にスレッドの数を合わせると最速になる、という情報もありました。以下のコマンドで、コア数を確認できます。私のマシンの場合は、やはり「2」でした。

$ grep cpu.cores /proc/cpuinfo | sort -u
2


以下のQiitaの記事にも、CPU設定の例が記載されていますので、確認してみると良いでしょう。

qiita.com


アドレスの設定

次に、マイニングプールと送金先の設定を行います。

同じくconfig.txtの中には、"pool_address"と、"wallet_address"を指定する箇所がありますので、自分で選択したマイニングプールのアドレスと、送金先(ウォレット)のアドレスを指定します。

私は、マイニングプールに「MoneroHash - Monero Mining Pool」というサービスを利用しています。特に会員登録の必要もなく、利用できます。ただ、私自身、どのプールが良いのかなど、比較検討したわけではないので、もっと良いプールがあるかもしれません。

とりあえず、

MoneroHash - Monero Mining Pool

を開くと、ポート番号などの情報が見れます。マシンのスペックに合わせて、適切なものを選択しましょう。私は弱小マシンなので、一旦3333番ポートを選択します。この場合、"pool_address"に指定する値は、「monerohash.com:3333」となります。


次に、ウォレットアドレスですが、今回は、「ビットコイン(Bitcoin)を最短10分で購入 | Coincheck(コインチェック)」という日本のサービスを利用することにしました。
最近、Moneroの受け取りが可能になったようです。

登録して運転免許証などの写真を送ると、約1日で受取先のアドレスを発行することが可能になります。免許証の写真を送るときに、自分の顔と運転免許証が1枚の写真に収まるよう、自撮り(セルフィー)した写真を要求されるので、部屋の中で1人で自撮りをするという精神的な苦行を行う必要があります。

ちなみに、ウォレットアドレスは、長くランダムな英数字となります。

2つのアドレスが発行できたら、それぞれをconfig.txtに記載します。イメージ的には、以下のようになります。パスワード欄は空欄のままでOKです。

"pool_address" : "monerohash.com:3333",
"wallet_address" : "(ランダムな英数字)",
"pool_password" : "",
HTTPサーバの設定

最後に、現在のマイニング状況を、スマホなどのブラウザから簡単に監視するため、httpサーバの設定を行います。

"httpd_port" : 0, という設定項目があるため、0ではなく、適当なポート番号を入力します。既存のサービスと競合しないよう、出来るだけ大きめの数字がおすすめです。
私は、8888と設定しているため、以下のようになります。

"httpd_port" : 8888,


ここまでくると、いよいよマイニングの開始です。

マイニングを始めよう!

マイナーの起動方法

マイナーの起動は、コンパイルを行ったところと同じディレクトリで、以下のコマンドを叩くと実行できます。

$ xmr-stak-cpu

実行中に、「h」キーや、「r」キーを押すと、ハッシュレートや結果を表示することができます。

また、httpサーバの設定を行ったので、ブラウザからでも結果にアクセスすることが可能です。
そのためには、まず、マイニングをしているマシンのローカルIPアドレスを調べます。ifconfigなどのコマンドで調べることが出来ます。

$ ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.16  netmask 255.255.255.0  broadcast 192.168.0.255

私の場合は、192.168.0.16がローカルIPアドレスでしたので、マイニングしているPCもしくは、そのPCと同じLAN内にある、スマホなどの端末から、「http://192.168.0.16:8888/」にアクセスします。

すると、現在のマイニング情報がリアルタイムで閲覧できます。アクセスが拒否される場合は、マシンのファイアウォール設定を見直す必要があるかもしれません。

マイニングの結果

さて、丸1日程度、マイニングをやってみました。
まず、ブラウザから確認できるハッシュレートは、以下のようになりました。

f:id:penoa:20171001003229p:plain

およそ43H/sということですが、これ、めちゃ遅いです。
2chなどの情報を見ると、スマホアプリでのマイニングで10〜50H/s、専用にチューニングされたマシンだと500H/s程度の速度が出るようです。

結局、プールにいくらたまったのか、MoneroHashの画面を確認してみましょう。1日稼働させ続けた結果が、以下の通りです。

f:id:penoa:20171001003924p:plain

日本円になおしてみましょう。現在の相場(1XMR = 10535 JPY:2017年10月 1日現在)で換算すると、およそ「6円」でした。6円。。。ろくえん。。。

1ヶ月稼働させ続けると、およそ180円を稼ぐ事になります。明らかに電気代のほうが高くなりそうですね。


まあ、オンボロのパソコンだったので、今回は仕方ないかと思います。
AWSとかGCPとかで、もう少しスペックのよいサーバを借りて、再度試してみたいと思います。