VultrVPS（ubuntu18.04）で複数MNを稼働させるためにZenzo-Core（v2.0.1）をインストールする


*はじめに、私自身、Linuxだったり、プログラムだったり詳しいわけではないため、質問には答えることが難しいです。*
*また、こちらに記載した操作で、うまく行かなかったりしても、責任は取りかねますので自己責任で進めてください。

**最近、ZENZO COREのバージョンが上がりました。私は、VultrのVPSで複数MNを稼働してましたが、WindowsのWalletをv2.0にアップグレードしたタイミングでRewardが得られなくなりました。~~（そもそも、WindowsWalletさえバージョンアップできれば、問題なく動くと思っていたが、実際は、VPS側もアップしなければならなかった。そんなこと知らないよ。v1.3.0のときはWalletのアップだけで動いてたのに・・・）~~何とかVPSのZENZO COREをバージョンアップして複数MNを稼働できないかと手探りで確認していたところ一応、バージョンアップしてRewardを得ることができるようになりました。安定稼働するかは、現段階で不明です。:sweat:　まだ、すべてのMNでRewardを得られてから１日もたっていないので。。。ただし、同じような状態に陥った人が多いと思われるため、何らかの参考になればと思い、とりあえず私が行った内容を備忘録として残しておきます。**:sunny:

**ベースは、以前（ｖ1.0.0）のMNガイド（ZENZO_Masternode_Guide_JPN_WIndows_v3）を利用しているため、利用したことのある方ならイメージがつくと思います。**

**まず、概要ですが、ZENZO－COREがv2.0になったことでコマンドが変わってました。
その為、「masternode_install.sh」内で記述しているコマンドが一部動作しなく、「masternode_install.sh」を実行しただけではMNを稼働させることができませんでした。v2.0では”masternode genkey”コマンドがなく、スクリプトの記述を新しいコマンド”createmasternodekey”に修正する必要がありました。また、Ubuntu 18.04 では、rc.localファイル（ネットワークインターフェースの設定？）がなくなっている（？）ようで、スクリプト内のrc.local周りのIPv6の設定も反映されなくなってました。
スクリプト内の記述を修正できなかったため（技術力が追い付かない:cry:）、スクリプト実行後、rc.localは手動で作成し、IPv6のインターフェース（アドレス）をサーバに認識させることができました。
以降の設定は、MNガイド（v1.0.0）やZenzoのDiscordの情報で賄えるので、確認してください。**

**では、上記部分を実行した内容を記します。**

**稼働環境は以下です。**

#####[バージョンアップ前]
　Windows wallet ： v1.3.0
　Ubuntu 16.04 x64　： v1.0.0
　　※ VPSはVultrを使用
　　※ MNを4つ稼働

#####[バージョンアップ後]
　Windows wallet  ： ｖ2.0.1
　Ubuntu 18.04 x64  ： ｖ2.0.1
　　※ VPSはVultrを使用
　　※ MNを4つ稼働

#####[用語の説明]
　　・old_VPS　←　今までMNが稼働していたサーバ（Ubuntu16.04）
　　・new_VPS　←　これから新規にMNを稼働させるサーバ（Ubuntu18.04）

##[前提条件]
以降は下記３つの条件をもとに説明しています。
　　・以前稼働していたMNのサーバを参照できる。
　　・MNのサーバ（VPS）をこれから新たに作る
　　・既にWindows のWalletをv2.0.1にバージョンアップした状態

##1.new_VPSを準備する。（いろいろ割愛）
　　VultrからUbuntuの18.04を指定し、追加で「IPv6」を選択して、新規作成する。

##2.new_VPSにZenzo-Core v2.0.1をダウンロードする。
元ファイルはこちら　→　[ZENZO Core v2.0.1 | Kiyori Patch #1 ](https://github.com/ZENZO-Ecosystem/ZENZO-Core/releases/tag/v2.0.1)

```
#apt-get install unzip
#wget https://github.com/ZENZO-Ecosystem/ZENZO-Core/archive/v2.0.1.zip
#unzip v2.0.1.zip
#rm v2.0.1.zip
#cd ZENZO-Core-2.0.1
```

##3.sFTPでold_VPSに接続し、自分のPCに必要なファイルとフォルダをダウンロードする。
どうも最新のCOREには、複数MNを建てるスクリプトが含まれていないようなので、old_VPSで使用していたファイルを利用します。
ファイルパスはそれぞれ下記参照　　※sftp接続は、[rlogin](http://nanno.dip.jp/softlib/man/rlogin/) を利用しました。
適当に、sFTPでいったん自分のPCに保存しておきます。

```
/root/ZENZO-Core/masternode_install.sh　---(A)ファイル
/root/ZENZO-Core/doc/mnguide　---(B)フォルダ
/etc/rc.local  ---(C)ファイル

```

##4.「masternode_install.sh」を修正する。

masternode genkey　→　createmasternodekey　

```masternode_install.sh
#変更前
PRIVKEY[${NUM}]=$(${CODENAME}-cli -conf=${MNODE_CONF_BASE}/${CODENAME}_test.conf -datadir=${MNODE_DATA_BASE}/${CODENAME}_test masternode genkey)

#変更後
PRIVKEY[${NUM}]=$(${CODENAME}-cli -conf=${MNODE_CONF_BASE}/${CODENAME}_test.conf -datadir=${MNODE_DATA_BASE}/${CODENAME}_test createmasternodekey)

```

##5.sFTPでnew_VPSに接続して(A)(B)をアップロードする。
自分のPCにダウンロードした(A)(B)をnew_VPSにsFTPで接続して以下のパスにアップロードする。

```
/root/ZENZO-Core-2.0.1/masternode_install.sh
/root/ZENZO-Core-2.0.1/doc/mn_guide
```

##6.sshでnew_VPSに接続する。

保存したファイルに実行権限を付ける。

```
chmod u+x /root/ZENZO-Core-2.0.1/masternode_install.sh
```

##7.インストールを実行する。（ここはMNガイドを確認ください。）

私はMNが4台のため
「 ./masternode_install.sh -p zenzo -g -x -c 4 」を実行する。

```
root@popzenmn:~/ZENZO-Core-2.0.1# ./masternode_install.sh -p zenzo -g -x -c 4
```

完了すると以下の結果が表示されます。

```
Adding new system user masternode
* Creating masternode directories
ZENZO server starting
ZENZO server stopping
* Configuring firewall rules
* Firewall ufw is active and enabled on system startup
* (over)writing systemd config files for masternodes

 ????   ??? ??????? ??????? ????????????   ???? ?????? ????????????????????????????????
 ?????  ????????????????????????????????? ??????????????????????????????????????????????
 ?????? ??????   ??????  ?????????  ???????????????????????????   ???   ??????  ????????
 ?????????????   ??????  ?????????  ???????????????????????????   ???   ??????  ????????
 ??? ?????????????????????????????????? ??? ??????  ???????????   ???   ???????????  ???
 ???  ????? ??????? ??????? ???????????     ??????  ???????????   ???   ???????????  ???
                                                             ?? @marsmensch 2016-2018 ??
Have fun, this is crypto after all!
Donations for @marsmensch (BTC): 33ENWZ9RCYBG7nv6ac8KxBUSuQX64Hx3x3
************! ALMOST DONE !******************************
There is still work to do in the configuration templates.
These are located at /etc/masternodes, one per masternode.
If you didn't set generate or key option, add your masternode private keys now.
eg in /etc/masternodes/zenzo_n1.conf

=>  All configuration files are in: /etc/masternodes 
=>  All Data directories are in: /var/lib/masternodes 

Important: run  /usr/local/bin/activate_masternodes_zenzo  as root to activate your nodes.

** Your nodes are starting up. If you haven't set masternode private key, Don't forget to change the masternodeprivkey later.
Created symlink /etc/systemd/system/multi-user.target.wants/zenzo_n1.service → /etc/systemd/system/zenzo_n1.service.
Created symlink /etc/systemd/system/multi-user.target.wants/zenzo_n2.service → /etc/systemd/system/zenzo_n2.service.
Created symlink /etc/systemd/system/multi-user.target.wants/zenzo_n3.service → /etc/systemd/system/zenzo_n3.service.
Created symlink /etc/systemd/system/multi-user.target.wants/zenzo_n4.service → /etc/systemd/system/zenzo_n4.service.
**ALL YOUR MASTERNODE CONFIGURATION IS HERE. INPUT THESE LINES TO YOUR MASTERNODE.CONF**

zenzoMN1 [xxxx:xxxx:xxxx:xxxx:xxxx::1]:26210 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx COLLATERAL_TX_FOR_zenzoMN1 OUTPUT_NO_FOR_zenzoMN1
zenzoMN2 [xxxx:xxxx:xxxx:xxxx:xxxx::2]:26210 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx COLLATERAL_TX_FOR_zenzoMN2 OUTPUT_NO_FOR_zenzoMN2
zenzoMN3 [xxxx:xxxx:xxxx:xxxx:xxxx::3]:26210 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx COLLATERAL_TX_FOR_zenzoMN3 OUTPUT_NO_FOR_zenzoMN3
zenzoMN4 [xxxx:xxxx:xxxx:xxxx:xxxx::4]:26210 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx COLLATERAL_TX_FOR_zenzoMN4 OUTPUT_NO_FOR_zenzoMN4

**This configuration lines are on /tmp/zenzo_masternode.conf. You can check this file with**
```

##8.old_VPSから取得した「rc.local」のファイルをnew_VPS用に修正する。
自分のPCに保存した「rc.local」を項目6の結果で表示されたIPv6のアドレスに修正する。

例　以下の []内の” xxx～::1 ”がIPv6 アドレス ここの値を取得し、rc.local を修正する。
zenzoMN1 [xxxx:xxxx:xxxx:xxxx:xxxx::1]:26210 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx COLLATERAL_TX_FOR_zenzoMN1 OUTPUT_NO_FOR_zenzoMN1


```rc.local 
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

ip -6 addr add xxxx:xxxx:xxxx:xxxx:xxxx::1/64 dev ens3
ip -6 addr add xxxx:xxxx:xxxx:xxxx:xxxx::2/64 dev ens3
ip -6 addr add xxxx:xxxx:xxxx:xxxx:xxxx::3/64 dev ens3
ip -6 addr add xxxx:xxxx:xxxx:xxxx:xxxx::4/64 dev ens3
```

##9.sFTPでnew_VPSに接続して「rc.local」をアップロードする。

またまた、rloginのsFTP接続でファイルをアップロードします。
ファイルパスは以下

```
/etc/rc.local
```

##10.SSHでnew_VPSに接続して「rc.local」に実行権限を付与する。

######実行権限の付与

```
chmod u+x /etc/rc.local
```

######new_VPSを再起動

```
shutdown -r now
```

######再起動後、IPv6 の反映状況を確認する。rc.localに記入したIPv6が全部表示されればOK。

```
root@popzenmn:~/ZENZO-Core-2.0.1# ip a | grep inet6
    inet6 ::1/128 scope host 
    inet6 xxxx:xxxx:xxxx:xxxx:xxxx::4/64 scope global 　　　←　rc.localに記入したIPv6アドレス
    inet6 xxxx:xxxx:xxxx:xxxx:xxxx::3/64 scope global 　　　←　rc.localに記入したIPv6アドレス
    inet6 xxxx:xxxx:xxxx:xxxx:xxxx::2/64 scope global 　　　←　rc.localに記入したIPv6アドレス
    inet6 xxxx:xxxx:xxxx:xxxx:xxxx::1/64 scope global 　　　←　rc.localに記入したIPv6アドレス
    inet6 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr noprefixroute 
    inet6 xxxx::xxxx:xxx:xxxx:xxxx/64 scope link 
```

##11.SSHでnew_VPSに接続してサービスをスタートする。

サービスのスタート

```
service zenzo_n* start
```

コマンドを打って以下のように表示されれば、※上手くいけば、コマンドを何回か叩くとblocksが増えていくのがわかる。
MN台数分コマンドを打って確認する。

```
root@popzenmn:~# zenzo-cli -conf=/etc/masternodes/zenzo_n1.conf -datadir=/var/lib/masternodes/zenzo1 getinfo
{
  "version": 2000100,
  "protocolversion": 70005,
  "services": "NETWORK/BLOOM/",
  "walletversion": 169900,
  "balance": 0.00000000,
  "staking status": "Staking Not Active",
  "blocks": 947447,
  "timeoffset": 0,
  "connections": 17,
  "proxy": "",
  "difficulty": 2460.51725323226,
  "testnet": false,
  "moneysupply": 25640512.82329230,
  "zerocoinsupply": {
    "1": 1865.00000000,
    "5": 130.00000000,
    "10": 970.00000000,
    "50": 1850.00000000,
    "100": 4300.00000000,
    "500": 14500.00000000,
    "1000": 57000.00000000,
    "5000": 15000.00000000,
    "total": 95615.00000000
  },
  "keypoololdest": 1595508699,
  "keypoolsize": 1000,
  "paytxfee": 0.00000000,
  "relayfee": 0.00010000,
  "errors": ""
}
```


##12.WindowsのPCで Windows Wallet の masternode.conf にMNの情報を追記する。（既にWindows Wallet v2.0.1にしていることを前提）
　項目7で出力された以下の情報を元にWindows Wallet側のmasternode.conf を修正する。（詳しくはMNガイド記載のため**割愛**）

```
zenzoMN1 [xxxx:xxxx:xxxx:xxxx:xxxx::1]:26210 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx COLLATERAL_TX_FOR_zenzoMN1 OUTPUT_NO_FOR_zenzoMN1
zenzoMN2 [xxxx:xxxx:xxxx:xxxx:xxxx::2]:26210 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx COLLATERAL_TX_FOR_zenzoMN2 OUTPUT_NO_FOR_zenzoMN2
zenzoMN3 [xxxx:xxxx:xxxx:xxxx:xxxx::3]:26210 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx COLLATERAL_TX_FOR_zenzoMN3 OUTPUT_NO_FOR_zenzoMN3
zenzoMN4 [xxxx:xxxx:xxxx:xxxx:xxxx::4]:26210 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx COLLATERAL_TX_FOR_zenzoMN4 OUTPUT_NO_FOR_zenzoMN4
```

##13.Windows Walletからマスターノードを稼働させる。

**※このコマンドを実行する前に、項目11のBlocks同期が完了している必要がある。**

Windows Walletのdebugコンソールで以下のコマンドを実行する。上手くいけば、MN稼働数だけ”Success”と表示されます。

```
startmasternode all false
```

##14.SSHでnew_VPSに接続してマスターノードの稼働状態を確認する。
コマンドを入力すると、"Masternode successfully started"と表示することを確認する。
MN分確認する。

```
root@popzenmn:~# zenzo-cli -conf=/etc/masternodes/zenzo_n1.conf -datadir=/var/lib/masternodes/zenzo1 getmasternodestatus
{
  "txhash": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "outputidx": 1,
  "netaddr": "[xxxx:xxxx:xxxx:xxxx:xxxx::1]:26210",
  "addr": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "status": 4,
  "message": "Masternode successfully started"

```

以上で、完了です。あとは、Rewardされることを祈りつつ待つのみ:sparkles::sparkles:

![zenzo2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680885/e6177cd9-565e-54d4-dd89-adc89c63328c.png)
![zenzo.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680885/d8a849f1-d464-3edc-0b81-82fdb7a6d7f7.png)


※ほんと、ここまで動かすのに色々試し、覚えていることを流れで記載したので、書き漏れがあるかもわかりません。:fearful:

※私は、old_VPSをまだ残したままにしていますが、new_VPSが安定稼働したら、old_VPSは、削除します。今のところ何かあった場合に過去の設定情報を見れるように残しています。~~（課金されるので早く削除したい~~*