仮想通貨のRingoの公式ウォレットのデーモンをCentOS 6.9で動かす方法です。本記事ではサーバとして動かします。
CentOS 6.9のyumリポジトリで管理されるパッケージのバージョンが一部対応しておらず、その分は個別にインストールしています。CentOS 7以降ではまた違ってくると思います。
※ソフトウェアのインストール・実行は自己責任です。特に仮想通貨はお金の絡むことなので、十分にお気をつけください。また基本的なことは知っている、もしくは調べられる人向けに書いているため、コマンドなど細かく説明していません。
<環境>
https://github.com/dkwzjw/ringo
https://github.com/dkwzjw/ringo/archive/v1.1.1.1.tar.gz
※Ringoは手始めの頃はPoWで掘れたり、もなとれやallcoin等で取引できましたが、執筆時点ではPoSのみとなり取得する手段が人に貰うくらいしか見当たらないので、Ask Mona等で配ってるタイミングで貰ってください。
ソースコードからRingoをビルドする
1-1. yumで揃うパッケージのインストール
~ $ sudo yum install gcc gcc-c++ kernel-devel ~ $ sudo yum install libtool automake autoconf ~ $ sudo yum install pkgconfig ~ $ sudo yum install pkgconfig ~ $ sudo yum install qrencode-devel
ここからはyumでインストールしたパッケージとバッティングするのが嫌なので、/home/wallet/common_blackに仮想通貨用のライブラリを配置します。
1-2. Berkeley DB 4.8のインストール
~ $ wget http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz ~ $ tar xvzf db-4.8.30.NC.tar.gz ~ $ cd db-4.8.30.NC/build_unix/ ~/db-4.8.30.NC/build_unix $ ../dist/configure --prefix=/home/wallet/common_black --enable-cxx ~/db-4.8.30.NC/build_unix $ make ~/db-4.8.30.NC/build_unix $ make install
1-3. OpenSSL(1.0.2系最新)のインストール
~ $ wget https://www.openssl.org/source/openssl-1.0.2n.tar.gz ~ $ tar xvzf openssl-1.0.2n.tar.gz ~ $ cd openssl-1.0.2n/ ~/openssl-1.0.2n $ ./config --prefix=/home/wallet/common_black --openssldir=/home/wallet/common_black/openssl -fPIC shared ~/openssl-1.0.2n $ make ~/openssl-1.0.2n $ make install
※1.1.0系のOpenSSLは別のコインでmake時にエラーとなりました。
1-4. Boost(最新)のインストール
~ $ wget https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.gz ~ $ tar xvzf boost_1_65_1.tar.gz ~ $ cd boost_1_65_1/ ~/boost_1_65_1 $ ./bootstrap.sh ~/boost_1_65_1 $ ./b2 --prefix=/home/wallet/common_black link=static runtime-link=static install
1-5. MiniUPnP(1.9)のインストール
~ $ wget https://github.com/miniupnp/miniupnp/archive/miniupnpc_2_0.tar.gz ~ $ tar xvzf miniupnpc_1_9.tar.gz ~ $ cd miniupnp-miniupnpc_1_9/miniupnpc ~/cd miniupnp-miniupnpc_1_9/miniupnpc $ make ~/cd miniupnp-miniupnpc_1_9/miniupnpc $ INSTALLPREFIX=/home/wallet/common_black make install
※2.0のMiniUPnPは別のコインでmake時にエラーとなりました。
1-6. Ringoのビルド
今回はバージョン1.1.1.1のtar.gzをダウンロードしますが、1点変更が必要です。
~ $ wget https://github.com/dkwzjw/ringo/archive/v1.1.1.1.tar.gz ~ $ tar xvzf v1.1.1.1.tar.gz ~ $ cd ringo-1.1.1.1/src/ ※src/makefile.unixのLIBSに -l rt を追加する ~/ringo-1.1.1.1/src $ vi makefile.unix ※修正前 before # for boost 1.37, add -mt to the boost libraries LIBS += \ -Wl,-B$(LMODE) \ -l boost_system$(BOOST_LIB_SUFFIX) \ -l boost_filesystem$(BOOST_LIB_SUFFIX) \ -l boost_program_options$(BOOST_LIB_SUFFIX) \ -l boost_thread$(BOOST_LIB_SUFFIX) \ -l db_cxx$(BDB_LIB_SUFFIX) \ -l ssl \ -l crypto ↓ ※修正後 after # for boost 1.37, add -mt to the boost libraries LIBS += \ -Wl,-B$(LMODE) \ -l boost_system$(BOOST_LIB_SUFFIX) \ -l boost_filesystem$(BOOST_LIB_SUFFIX) \ -l boost_program_options$(BOOST_LIB_SUFFIX) \ -l boost_thread$(BOOST_LIB_SUFFIX) \ -l db_cxx$(BDB_LIB_SUFFIX) \ -l ssl \ -l crypto \ -l rt ~/ringo-1.1.1.1/src $ OPENSSL_INCLUDE_PATH=/home/wallet/common_black/include \ OPENSSL_LIB_PATH=/home/wallet/common_black/lib \ BDB_INCLUDE_PATH=/home/wallet/common_black/include \ BDB_LIB_PATH=/home/wallet/common_black/lib \ BOOST_INCLUDE_PATH=/home/wallet/common_black/include \ BOOST_LIB_PATH=/home/wallet/common_black/lib \ make -f makefile.unix ~/ringo-1.1.1.1/src $ ls -l ringod -rwxrwxr-x 1 wallet wallet 62070790 1月 12 06:46 2018 ringod
補足
今回のように任意の場所にライブラリを配置し、かつ、/etc/ld.so.confにパスを通さない場合、Ringoを起動する際には環境変数LD_LIBRARY_PATHにライブラリのパスを設定しなければなりません。
~ $ export LD_LIBRARY_PATH=/home/wallet/common_black/lib ~ $ ./ringod ~ $ ./ringod stop
もしくは
~ $ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod ~ $ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod stop
Ringoを起動する
2-1. Ringoの初回起動(エラー)
ringodを実行するとRingoのデーモンが起動しますが、設定ファイルが無いため、エラーになります。ただ初回起動時にデータのディレクトリを作成するため、エラーでもよいので起動します。
※初回起動は時間がかかります。
~ $ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod Error: To use ringod, you must set a rpcpassword in the configuration file: /home/wallet/.ringo/ringo.conf It is recommended you use the following random password: rpcuser=ringorpc rpcpassword=FfYxDG7hNDddgFy3RSpNgntLbSuHgfJocXBXUvyPS4rV (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; for example: alertnotify=echo %s | mail -s "Ringo Alert" admin@foo.com
2-2. ringo.confの作成
/home/ユーザ名/.ringo配下にデータが作成されたため、設定ファイルのringo.confを作成します。rpcxxxの部分は自分の環境に合わせてください。
addnodeを設定しなければ同期が始まらないため、下記サイトより取得してください。
https://lapool.me/seed/
~ $ vi /home/ユーザ名/.ringo/ringo.conf rpcuser=user rpcpassword=pass rpcallowip=127.0.0.1 rpcport=9292 daemon=1 server=1 gen=0 addnode=追加ノードIPアドレス
2-3. bootstrap.datの配置
同期が始まっても途中で止まることが多く、ウォレットの再起動が必要となります。そのため公式で公開されているbootstrap.datを使い、ある一定のブロックまでをファイルから読み込みます。
下記サイトからRingo_bootstrap_20180103.7zを取得し、解凍されたbootstrap.datを /home/ユーザ名/.ringo/ に配置します。
https://mega.nz/#F!79QwiQCK!uCX6lKEomVzfXgF1Y4iYIg
wgetやLynxでは取得できないため、配置はscp等を使ってください。
2-4. bootstrap.datの読込み
設定ファイルの作成とbootstrap.datを配置したら、再度ringodを実行し、bootstrap.datを読み込ませます。読み込みが完了するとRingoが起動します。
マシンスペックによりますがbootstrap.datの読み込みには数日かかります。状況は /home/ユーザ名/.ringo/debug.log を確認します。
~ $ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod Ringo server starting ~ $ tail -f /home/ユーザ名/.ringo/debug.log SetBestChain: new best=40a2ae4c9875ae9d12e4 height=822863 trust=11764414655884354 blocktrust=7210835832 date=04/03/16 16:51:57 ProcessBlock: ACCEPTED SetBestChain: new best=e85caaf7befbd6cba36d height=822864 trust=11764424270332130 blocktrust=9614447776 date=04/03/16 16:53:20 ProcessBlock: ACCEPTED SetBestChain: new best=5617a5ff6d3cb79325d6 height=822865 trust=11764431220674781 blocktrust=6950342651 date=04/03/16 16:52:57 ProcessBlock: ACCEPTED SetBestChain: new best=6915858ab3719a3bc205 height=822866 trust=11764440487798316 blocktrust=9267123535 date=04/03/16 16:54:14 ProcessBlock: ACCEPTED
heightはブロックナンバー、date=MM/dd/yy hh:mm:ssはブロックの発見された日時です。
読み込み中にシャットダウンとし場合、再度ringod実行後に読み込みを継続しますが、正しくシャットダウンされているとbootstrap.datがbootstrap.dat.oldにリネームされているため、bootstrap.datにファイル名を戻してください。
2-5. bootstrap.datの読込み後
~ $ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod getinfo { "version" : "v1.0.0.0-g32a928e", "protocolversion" : 60013, "walletversion" : 60000, "balance" : 0.00000000, "newmint" : 0.00000000, "stake" : 0.00000000, "blocks" : 1655903, "timeoffset" : 0, "moneysupply" : 46108622.04524344, "connections" : 16, "proxy" : "", "ip" : "xx.xx.xx.xx", "difficulty" : { "proof-of-work" : 38.54486305, "proof-of-stake" : 3.26976853 }, "testnet" : false, "keypoololdest" : 1516264796, "keypoolsize" : 100, "paytxfee" : 0.00010000, "mininput" : 0.00000000, "errors" : "" }
ウォレットを停止するには、ringod stopを実行します。
~ $ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod stop Ringo server stopping
2-6. ウォレットの暗号化
ウォレット(wallet.dat)を暗号化するには、ringod encryptwalletを実行します。実行後にはRingoが停止するため、再度起動が必要です。暗号化すると送金等一部の処理にパスフレーズが必要となります。
※Linux上ではコマンド履歴が残るため、Windowsで暗号化したwallet.datをLinuxへアップロードして使う、.bash_historyを削除するなどすることをオススメします。
~ $ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod encryptwallet パスフレーズ ~ $ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod
2-7. 受け取り用のアドレスを作る
ringod getnewaddress で受け取り用のアドレスを作ります。
~ $ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod getnewaddress ikuyani RFhgy8AzkqriwYm8ZUbt3R4f6DqWowW2kE ~ $ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod getaddressesbyaccount ikuyani [ "RFhgy8AzkqriwYm8ZUbt3R4f6DqWowW2kE" ]
PoSでマイニングする
ウォレットにある程度の枚数が入っていればPoSでマイニングできます。
3-1. 状態の確認
ringod getstakinginfo でPoSの状態を確認できます。
~ $ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod getstakinginfo { "enabled" : true, "staking" : false, "errors" : "", "currentblocksize" : 1000, "currentblocktx" : 0, "pooledtx" : 0, "difficulty" : 6.36319329, "search-interval" : 1, "weight" : 0, "netstakeweight" : 296804588, "expectedtime" : -1 }
起動して間もない頃はPoSの条件(後述)を満たしていてもstakingはfalseとなっています。後述するPoSの有効化の条件を満たした上でtrueになるまで放っておきましょう。
3-2. PoSの有効化
PoSを有効化するためには下記の条件が必要となります。
- ウォレットにある程度の枚数のコインがある
- staking=1となっている(デフォルト)
- ロックが解除されている(暗号化した場合)
まずringo.confや起動オプションでstaking=1以外を指定するとPoSは無効("enabled" : false)になります。未指定の場合はstaking=1となるため、PoSを止める必要がなければ特に指定する必要はありません。
また暗号化している場合はロックを解除します。
$ LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod walletpassphrase パスフレーズ 999999999
条件を持たし放っておくと、PoSによるマイニングが始まります。
LD_LIBRARY_PATH=/home/wallet/common_black/lib ./ringod getstakinginfo { "enabled" : true, "staking" : true, "errors" : "", "currentblocksize" : 2193, "currentblocktx" : 1, "pooledtx" : 1, "difficulty" : 2.95135711, "search-interval" : 1, "weight" : 4679, "netstakeweight" : 256371100, "expectedtime" : 3287511 }
参考になりましたらRingoを寄付していただけると幸いです。
Ringoアドレス:RFhgy8AzkqriwYm8ZUbt3R4f6DqWowW2kE