Jetson Nano ではじめるCPUマイニング（BitZeny編）

# 1. はじめに
- 今回は、自分自身への備忘録を兼ねて、Jetson NanoでCPUマイニングをはじめる方法を、お伝えしたいと思います。

# 2. この記事を読んでできること
- Jetson NanoでBitZeny（アルトコイン）をCPUマイニングできるようになる。

# 3. 必要なもの
- Jetson Nano
- SDカード（なるべく速いもの A1）
- インターネット環境
- パソコン（Windows10など）
- sshクライアントソフト（[TeraTerm](https://ja.osdn.net/projects/ttssh2/releases/)）

# 4. Jetson Nano Developer Kitのセットアップ
- 公式の[Jetson Download Center](https://developer.nvidia.com/embedded/downloads)から、Jetson Nano Developer Kitイメージを入手し、Jetson Nanoのセットアップ（アカウント作成）まで済ませておきます。
- 最近は、JetPack なる新たなイメージも登場しているようですので、おもむきに合わせてお選ぶのもよいでしょう。

参考：この記事作成時のファイルバージョン：nv-jetson-nano-sd-card-image-r32.2.3.zip

# 5. 下準備
- 下準備として、Jetson Nanoのもろもろセットアップを済ませておきます。
- Jetson Nanoにディスプレイ、キーボードおよびマウスを接続し、ターミナル（端末）を起動し、コマンド実行をおこないます。

```plaintext:コマンドプロンプト
// terminalの起動
Ctrl + Alt + T

// IPv4アドレスの確認
$ ifconfig

// IPv6無効化
$ sudo vi /etc/sysctl.conf

# 最終行にIPv6無効化を追記する
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

// ホスト名アクセス（ホスト名.local）の有効化
$ sudo apt install avahi-daemon

// OS再起動
$ sudo shutdown -r now

// 上記コマンド実行後は、sshクライアントから接続できると思います
- sshクライアントを利用しssh接続
- IPアドレス または ホスト名.local を利用

// リポジトリ一覧の更新
$ sudo apt update

// パッケージのアップグレード
$ sudo apt upgrade
途中、Yキー押下
途中、qキー押下
```

# 6. cpuminer/minerdのセットアップ
- 以下のコマンドを順次実行し、cpuminer/minerdをセットアップします。

```plaintext:コマンドプロンプト
// gitインストール
$ sudo apt install git

// ディレクトリ移動
$ cd /opt/

// cpuminer-yescryptの取得
$ sudo git clone https://github.com/primenumber/cpuminer-yescrypt.git cpuminer

// ディレクトリ移動
$ cd /opt/cpuminer/

// gitブランチ切り替え
$ sudo git checkout bitzeny-neon

// gitブランチ確認
$ git branch

// automakeインストール
$ sudo apt install automake

// autoconfインストール
$ sudo apt install autoconf

// build-essentialインストール
$ sudo apt install build-essential

// gccコンパイラインストール
$ sudo apt install gcc

// libcurl4-openssl-devインストール
$ sudo apt install libcurl4-openssl-dev

// ビルド（メイク）
$ sudo ./autogen.sh

$ sudo ./configure CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer"

$ sudo make
```

# 7. CPUマイニングの実行
- 以下のコマンドを実行し、CPUマイニングを実行します。

```plaintext:コマンドプロンプト
// マイニング実行コマンドの例
$ /opt/cpuminer/minerd -a yescrypt -o stratum+tcp://zny.mofumofu.me:3332 -u Ztd9eoSVaX4pehagt5o9PRDnCYRAadbgxn
$ /opt/cpuminer/minerd -a yescrypt -o stratum+tcp://zny.mofumofu.me:3332 -u {この部分にご自身のBitZeny受信アドレスを設定}
```

- 今回はオンラインウォレットの「[BitZeny WALLET](https://bitzeny.jp/login)」を利用しました。
- ウォレットをまだお持ちでない方は、「[BitZeny WALLET](https://bitzeny.jp/login)」の「[新規登録](https://bitzeny.jp/register)」リンクから新規登録をおこない、ウォレット内の「受信アドレス」からご自身の「BitZeny受信アドレス」をコピーしてお使いください。
- マイニングプールについては、登録不要で使えるBitZenyのマイニングプール（NOMP：Node Open Mining Portal）である「[mofumofu.me](https://zny.mofumofu.me/)」を利用しています。

# 8. CPUマイニング成功時のログ
- CPUマイニングに成功すると、「(yay!!!)」とログに出力されるかと思います。
- ただし、マイニングに成功してもすぐにBitZeny受信アドレスに受け取り反映されるわけではありません。受け取り反映されるルールについては、利用するマイニングプールのルールによって異なります。Jetson NanoのCPU処理能力であれば、数時間から半日程度、気長に待ってみましょう。

```plaintext:マイニングプールの反映ルール例
最低支払額: 0.1 ZNY
支払間隔: 10分
使用手数料: 0.5％
支払方法: PROP
```

# 8. minerdの自動起動設定ファイルの新規作成
- 手動でCPUマイニングを起動するのも面倒かと思いますので、systemdを利用した自動起動設定ファイルを新規作成します。

```plaintext:コマンドプロンプト
// 自動起動設定ファイルの新規作成
$ sudo vi /opt/minerd.service
````

```plaintext:/opt/minerd.serviceファイル内容
[Unit]
Description=minerd is executed and resides at OS startup.
After=network.target

[Service]
WorkingDirectory=/opt/cpuminer
ExecStart=/opt/cpuminer/minerd -a yescrypt -o stratum+tcp://zny.mofumofu.me:3332 -u Ztd9eoSVaX4pehagt5o9PRDnCYRAadbgxn.JetsonNano -t 3
Restart=always
Type=simple
TimeoutStopSec=5
StandardOutput=append:/tmp/minerd.log
StandardError=append:/tmp/minerd.log

[Install]
WantedBy=multi-user.target
````

# 9. minerdの起動確認＆自動起動有効化
- 作成した自動起動設定ファイルを所定のディレクトリに移動し、minerdの起動確認および有効化をおこないます。

```plaintext:コマンドプロンプト
// 自動起動設定ファイルを所定ディレクトリに移動
$ sudo mv /opt/minerd.service /etc/systemd/system/

// minerdの起動
$ sudo systemctl start minerd.service

// 起動状況確認（設定内容が正しいか動作確認します）
$ sudo systemctl status minerd.service


// minerdの自動起動有効化（再起動後に自動起動するようになります）
$ sudo systemctl enable minerd.service

// OS再起動
$ sudo shutdown -r now

// OS再起動後の実行ログ確認（残念ながらsystemdのバージョンが240に達していないため、ログは出力されていないようです。systemdのバージョンアップを待ちましょう。）
$ tail -f /tmp/minerd.log
````
- 補足：minerd.serviceファイルの設定変更を反映する際は ``` sudo systemctl daemon-reload ``` コマンドを実行して反映する必要があります。

```plaintext:コマンドプロンプト
// minerd.serviceの編集
$ sudo vi /etc/systemd/system/minerd.service

// 設定ファイルの更新反映
$ sudo systemctl daemon-reload

// minerdのリスタート
$ sudo systemctl restart minerd.service

// 起動状況確認（設定内容が正しいか動作確認します）
$ sudo systemctl status minerd.service
```

# 10. おわりに
いかがでしたでしょうか？意外と簡単にCPUマイニングを始めることができたのではないかなと思います。
今回の記事が、みなさまの学習の参考になれば幸いです。

2019/12/15 TAKAHIRO NISHIZONO