プールの立て方

gikopoolを設置した記録を元にして、オープンソースのプール管理ソフトMPOSを使った、
モナーコイン採掘プールの立て方を具体的に記録します。

https://github.com/MPOS/php-mpos/wiki/Quick-Start-Guide
の日本語版に近い内容ですが、いくつか補足を加えています。

セットアップすべきソフトは次の3つです。
  • monacoind
  • stratum mining
  • MPOS

monacoindはモナーコインのクライアントソフトです。
stratum miningは、プールの本体です。これ自身はコマンドラインのサーバです。
MPOSは、stratum mining をwebベースで管理しやすくしてくれるフロントエンドです。


0. 前提知識・必要環境

大前提として、Linuxの基本的な知識は必要です。
とはいえ高度な技術が必要というわけでもないので、
必要に応じて検索しながらやり方を確認できれば十分です。

プールには専用のサーバを用意した方が良いでしょう。
gikopoolでは、さくらインターネットのVPSサーバをレンタルして使っています。
一般公開の際にはセキュリティに十分注意を払ってください。
はじめはローカルの仮想環境をvmware playerなどで作って、
そこで色々と実験を行うことを推奨します。

以下の説明では、OSはUbuntu Server 12.04 LTS を想定します。
人気のディストリビューションで、ネット上にも情報が多いです。
gikopoolもこのOSを使っています。


1. 開発環境の構築

Ubuntuのインストールができたら、まずはサーバをアップグレードしておきましょう。
sudo apt-get update
sudo apt-get dist-upgrade

続いて、開発環境・ライブラリ類をインストールします。
今後必要なソフトはgithub上に公開されているので、gitコマンドを使えるようにしておくと
大変便利です
sudo apt-get install git
sudo apt-get install build-essential libboost-all-dev libcurl4-openssl-dev libdb5.1-dev libdb5.1++-dev

2. monacoind のセットアップ


まずはgithubからmonacoindを落としてきます。
cd ~
git clone git://github.com/monacoinproject/monacoin.git

次にコンパイルしましょう。
cd ~/monacoin/src
# コンパイル
make -f makefile.unix USE_UPNP=-
# 実行ファイル置き場にコピー
sudo cp monacoind /usr/bin

monacoindは、設定ファイル
~/.monacoin/monacoin.conf
を読みに行きます。なければ作成しましょう。
monacoin.conf の設定例は次のような感じです。
server=1
rpcallowip=localhost
rpcuser=rpcuser
rpcpassword=rpcpass
斜体の部分は適宜変更して下さい。
ユーザ名とパスワードはあとで使いますが、
ファイルに書き込んでしまえば常に覚えておく必要はないので、
適当に推測しづらいものを入れておきましょう。

なお、ポートを明示しないとStratumから見れないことがあるようです。
その場合は、
rpcport=19402
もコンフィグに追加します。

では、いよいよmonacoindを起動してみます。
monacoind -daemon
うまくいけば、Monacoin server starting とメッセージが出るはずです。
次のようにコマンドを打って、monacoindの情報を確認しましょう。
monacoind getinfo
以下のような出力があればOKです。
   "version" : 80601,
   "protocolversion" : 70002,
  "walletversion" : 60000,
   "balance" : 0.00000000,
   "blocks" : 7199,
   "timeoffset" : 0,
   "connections" : 1,
   "proxy" : "",
   "difficulty" : 0.42252295,
   "testnet" : false,
   "keypoololdest" : 1392509976,
   "keypoolsize" : 101,
   "paytxfee" : 0.00000000,
   "mininput" : 0.00001000,
   "errors" : ""
以上でmonacoindのセットアップは終わりです!

ちなみに、monacoindの同期が終わらないうちに採掘を始めようとするとエラーが出ます。
上の情報で"blocks"の値が現在のブロック数になるまでしばらく待ちましょう。
現在のブロック数は公式のクローラで見ることができます。
http://monacoin.org/crawler/block_crawler.php
ネットワークの状況にもよりますが、同期には数時間かかることもあります。

monacoind の使用するポートは2つです。デフォルトでは次のようになっています。

9401: P2P接続のポート
19402: rpc接続のポート

重要なので覚えておきましょう。

2.1 monacoind のテスト

慎重に行くならば、ここでmonacoind が正しく動いているかテストしてみましょう。
monacoindが起動していないなら、
monacoind -daemon
で起動させてください。

手持ちの採掘ツール(ここではcpuminerを例に取ります)で、monacoindに接続できるか実験してみましょう。
cpuminerの実行ファイル名をminerdとしたとき、
./minerd -a scrypt -o サーバのIPアドレス:19402 -u rpcuser -p rpcpass
を実行してみましょう。
rpcuserとrpcpassはmonacoin.confで設定したやつです。
また、monacoindの動いているのと別のサーバから接続するときは、
monacoin.conf でそのIPを許可する必要があります。
まあテストなので、
rpcallowip=localhost
rpcallowip=*
とでもしておきましょう。

接続が成功してハッシュレートが表示されればOKです!

エラーが出るときは、monacoindの同期を待つとうまくいくこともあります。


3. stratum-mining のセットアップ

まずは必要なライブラリ類をインストールします。
cd ~
sudo apt-get install python-twisted python-mysqldb python-dev python-setuptools python-memcache python-simplejson
sudo easy_install -U distribute

つぎにstratum mining他、必要なパッケージをgithubから入手します。

これらのソフトをインストールします。
cd stratum-mining
git submodule init
git submodule update
cd externals/litecoin_scrypt
sudo python setup.py install
cd ~/stratum-mining/externals/stratum
sudo python setup.py install

続いてstratum mining の設定です。
設定ファイルは、~/stratum-mining/conf/config.py なのですが、
最初は存在しないのでテンプレートのconfing_sample.pyをコピーしてきます。
cd ~
cp stratum-mining/conf/config_sample.py stratum-mining/conf/config.py
こいつを適切に編集してやりましょう。
vi stratum-mining/conf/config.py
(もちろんエディタはviでもemacsでもnanoでもかまいません。)
編集すべき点は次の通りです。
CENTRAL_WALLET = 'Monacoin_Address'
[...]
COINDAEMON_TRUSTED_HOST = 'localhost'
COINDAEMON_TRUSTED_PORT = 19402
COINDAEMON_TRUSTED_USER = 'rpcuser'
COINDAEMON_TRUSTED_PASSWORD = 'rpcpassword'
COINDAEMON_ALGO = 'scrypt'
COINDAEMON_Reward = 'POW'
COINDAEMON_SHA256_TX = 'no
[...]
HOSTNAME = 'yourservername'
[...]
DATABASE_DRIVER = 'mysql'
DB_MYSQL_HOST = 'localhost'
DB_MYSQL_DBNAME = 'mpos'
DB_MYSQL_USER = 'root'
DB_MYSQL_PASS = 'root'
[...]
POOL_TARGET = 16
[...]
SOLUTION_BLOCK_HASH = True
斜体部分は自分の環境に合わせて変えてください。
CENTRAL_WALLETには、サーバ上のmonacoindのウォレットアドレスを入力します。
ウォレットアドレスは次のコマンドで調べられます。
monacoind getaccountaddress ""
rpcuser, rpcpasswordは、monacoin.confで設定した値に書き換えます。
下線部のmysql のルートユーザパスワードも、適切に設定して下さい。
(プール公開時はroot以外のユーザにするのが無難です)

最後に、私が試したバージョンではstratumにちょっとしたバグがあり、
修正する必要がありました。ファイル
/usr/local/lib/python2.7/dist-packages/stratum-0.2.13-py2.7.egg/stratum/websocket_transport.py
をエディタで開き、
from autobahn.websocket import
の行を
from autobahn.twisted.websocket import
と書き換える必要があります。
このバグは、pythonのライブラリのバージョンアップで起きてしまうようです。
参考: https://github.com/Crypto-Expert/stratum-mining/issues/90

これでstratum miningの設定ができました!
いよいよ起動、と言いたいところですが、まだデータベースを作っていません。
データベースにはMPOS付属のテンプレートを書き込む必要があるので、先にMPOSをインストールします。

4. MPOSのセットアップ

MPOSはwebベースのphpアプリなので、まずはwebサーバとphpモジュールをインストールします。
apt-get install apache2 php5 libapache2-mod-php5
また、mysqlのクライアントとサーバが必要なのでインストールします。
apt-get install mysql-common
その他の必要なライブラリ類をインストールし、apacheをリロードします。
sudo apt-get install memcached php5-memcached php5-mysqlnd php5-curl php5-json libapache2-mod-php5
sudo apache2ctl -k stop; sleep 2; sudo apache2ctl -k start

さらに、MPOSはメールを送信するので、メールサーバを立てる必要があります。
例えばpostfixを入れるなら、
sudo apt-get install postfix
とします。メールサーバの設定は長大になってしまうので、ここでは割愛します。
※スパム判定される確率を減らすため、ちゃんとしたSMPTサーバーにリレーして送信するようにしておいたほうが良いでしょう。

では、MPOSをダウンロードしましょう。
ここではwebのルートである/var/www以下に設置することにします。
cd /var/www
sudo git clone git://github.com/TheSerapher/php-mpos.git MPOS
cd MPOS
sudo git checkout next

ダウンロードしたファイルの中に、MPOSで利用するデータベースのひな形が入っているので、
それを利用して新しくデータベースを作ります。
# DB作成
sudo mysql -p -e "create database mpos"
# structure のインポート
sudo mysql -p mpos < sql/000_base_structure.sql

次にMPOS の設定です。
まずはファイルに適切な権限を与えましょう。
sudo chown www-data public/templates/compile public/templates/cache logs
Ubuntuの場合はこれで良いですが、一般に他のOSでは設定方法が異なるので注意してください。
要するにサーバがcompileとcacheフォルダを書き換えられるようにすればOKです。

次に設定ファイルの編集です。
テンプレートをコピーして必要な部分を書き換えます。
sudo cp public/include/config/global.inc.dist.php public/include/config/global.inc.php
vi public/include/config/global.inc.php
要点は以下のとおりです。
$config['db']['host'] = 'localhost';
$config['db']['user'] = 'root';
$config['db']['pass'] = 'root';
$config['db']['port'] = 3306;
$config['db']['name'] = 'mpos';
[...]
$config['wallet']['type'] = 'http';
$config['wallet']['host'] = 'localhost:19402';
$config['wallet']['username'] = 'rpcuser';
$config['wallet']['password'] = 'rpcpassword;
[...]
$config['coindiffchangetarget'] = 1056;
$config['cointarget'] = '90';

斜体の部分はあなたの環境に合わせて書き換えましょう。
coindiffchangetargetの数値は、80000番ブロック以降は1にします。
また、cointargetの数値はモナコインの場合です。他のコインの場合はそのコインにあった数値にします。

以上で最低限の設定が完了しました!
さっそく動作テストしてみましょう。

まずはstratum-miningの起動をしましょう。
cd ~/stratum-mining
twistd -ny launcher.tac

つぎにブラウザで次のアドレスにアクセスします。
http://サーバのIPアドレス/MPOS/public

見慣れたマイニングプールの画面が表示されましたか?
エラーが出ていなければ成功です!

4.1. stratum mining と MPOSのテスト

まずはMPOSのインターフェイスからアカウントを作りましょう。
次にログインしてワーカーを作ります。
例によって採掘ソフトをminerdとした時、
./minerd -a scrypt -o stratum+tcp://localhost:3333 -u user.worker -p workerpass
とやって試しに採掘してみてください。
ハッシュレートが適切に表示されれば成功です!

最後に、MPOSの定期実行ジョブを設定しておきましょう。
/var/www/MPOS/cronjobs/run-crons.sh
を、適当な間隔で実行するようにします。
5分おきに実行するならば、
crontab -u root -e
*/5 * * * * /var/www/MPOS/cronjobs/run-crons.sh
といった感じです。

MPOSのcronは、エラーを検知すると次回以降自動的に動かなくなります。
./run-crons.sh -f
で、cronを1度強制的に動かすとあっさり解決したりします。
ただ、複雑な要因でCronが止まる場合もありますので、上記のやり方でもうまくいかない場合がありますし、最悪システムがうまく動かなくなったりするかもしれませんので、ご注意ください。



5. セキュリティについて

採掘プールを一般公開する場合は、セキュリティに十分注意を払う必要があります。
すべてを書ききることはできませんが、いくつかのヒントだけ書いておきます
  • MPOS専用のDBユーザを作り、rootは使わない
  • バーチャルホストを新しく作り、/var/www/MPOS/public をルートにする
  • ログの監視。最低限logwatchくらいは入れましょう。
  • sshでログインするときは設定に注意する
    • rootでログイン出来ないようにしたり、ポート番号を変えたり、
    • 鍵交換方式でログインしたり。
  • ファイアウォールを構築する
    • ufwがモダンで便利です。
    • 開けるべきポートは、80(http)と3333(stratum mining)です。
    • monacoindのP2Pポート、9401は微妙な所です。
    • 開けないほうが無難ですが、P2P接続ノード数が減って、orphanブロックが増える?
    • また、リモートで繋ぐならsshのポートも開けましょう。
    • それ以外の不要なポートは塞いでおきましょう。

6. TIPS

  • stratum miningもMPOSも活発に開発されているので、最新版がバグっててうまく動かないことがあります。
(たいていgithubのissuesで騒いでます)
そんな時は、安全そうな過去バージョンのcommit番号を
git log
で調べて、
git reset --hard xxxxxxx
(xxxxxxx=commit番号)でバージョンを巻き戻しましょう
  • MPOSで最初に作ったユーザが管理者になります。管理者には専用メニューが表示されます
  • 管理者メニューでテンプレートの編集ができますが、phpをいじることになるので、あまり変なことをするとadmin panelすら表示されなくなって詰みます。そうなったら手動でDBを書き換えるしかないです。(1度やったことある)


ユーザー登録やユーザー情報変更時にメール送信確認をしないで、諸々の登録をさせたい場合が利便性が上がる場合があります。
その場合は、
security.inc.dist.phpを以下のようにしてください。
$config['twofactor']['enabled'] = false;
$config['twofactor']['options']['details'] = false;
$config['twofactor']['options']['withdraw'] = false;
$config['twofactor']['options']['changepw'] = false;

あわせて、

global.inc.phpから
$config['twofactor']['enabled']
を削除。
security.inc.phpに
$config['twofactor']['enabled'] = false
を追加してください。

  • 2014.08.25時点で試してみて変わってたところ2点。(1)sudo git checkout next のnextはmasterになってるぽい。https://github.com/MPOS/php-mpos/wiki/Quick-Start-Guide#download-1 (2)cronはrun-crons.shになってる https://github.com/MPOS/php-mpos/wiki/Cronjobs#setup ほかは特に困らなかった。おかげで俺々プールができました。ありがとう。 -- 通りスガヲ (2014-08-25 19:42:10)
  • 2015.09.22時点で試してみた結果2点。(1)MPOSのフォルダ構成が変更している。必要なファイルをpublicの下にcpすること。(2)twistd -ny launcher.tacする前にbitcoin_rpc.py差し替えが必要。https://github.com/vanch/stratum-mining/commit/187aa9f88208e5694b6ee1fec04eb42c4b4da941 やらないと実行時に謎の404エラー頻発。 -- 名無しさん (2015-09-22 12:41:18)
  • twistd -ny launcher.tacする前にbitcoin_rpc.py差し替えしても謎のエラー404。どうしても動かないです -- 名無しさん (2015-10-02 04:31:22)
  • 他の超マイナーコインでもここを参考に作ることができました。ありがとうございます。 -- 名無しさん (2017-06-25 01:08:59)
名前:
コメント:

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2017年06月25日 01:08