プールの立て方
gikopoolを設置した記録を元にして、オープンソースのプール管理ソフトMPOSを使った、
モナーコイン採掘プールの立て方を具体的に記録します。
セットアップすべきソフトは次の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 の使用するポートは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
これで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
を追加してください。
最終更新:2017年06月25日 01:08