Jetson Nano ではじめるGPUマイニング（モナコイン編）

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

参考：[GPUでモナコインを掘る](https://qiita.com/bohemian916/items/baf4e3bbe19417f8a147)

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

# 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. ccminerのセットアップ
- 以下のコマンドを順次実行し、ccminerをセットアップします。

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

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

// ccminerを取得
$ git clone -b linux https://github.com/tpruvot/ccminer

// ディレクトリを移動
$ cd ccminer

// ビルド（1時間くらいかかる）
$ ./build.sh

// バージョンの確認
$ ./ccminer --version

＝＝＝
*** ccminer 2.3.2 for nVidia GPUs by tpruvot@github ***
    Built with the nVidia CUDA Toolkit 10.0 64-bits

  Originally based on Christian Buchner and Christian H. project
  Include some kernels from alexis78, djm34, djEzo, tsiv and krnlx.

BTC donation address: 1AJdfCpLWPNoAMDfHF1wD5y8VgKSSTHxPo (tpruvot)

ccminer v2.3.2
libcurl/7.58.0 OpenSSL/1.1.1 zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
＝＝＝
```

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

```plaintext:コマンドプロンプト
// マイニング実行コマンドの例
$ ./ccminer -a lyra2rev2 -o stratum+tcp://stratum1.vippool.net:8888 -u motokeikaku.user -p password
$ ./ccminer -a {アルゴリズム} -o {マイニングアドレス} -u {ユーザー名.ワーカー名} -p {パスワード}
```

- マイニングプールについては、登録制で使える「[VIPPOOL](https://vippool.net/)」を利用しました。
- VIPPOOLの登録方法は、[【モナコイン（MONA）マイニング】オススメツールや手順をどこよりも丁寧に整理しました](https://www.lecotox.net/topics/monacoin-mining-10074/)を参考にするとよいと思います。
- ウォレットについては、[《モナコインのウォレット》MONAを安全に管理するなら⇒○○ウォレットが一番！](https://www.lecotox.net/topics/monacoin-wallet-9925/)などを参考に、ご自身で安全とおもわれるウォレットを選ばれるのが良いかと思います。
- ちなみに今回はウェブウォレットの「[もにゃ](https://monya-wallet.github.io/)」を利用しました。

# 8. GPUマイニング成功時のログ
- GPUマイニングに成功すると、「(yes!)」とログに出力されるかと思います。
- VIPPOOLの場合、あらかじめワーカー設定の「指定Difficulty」値を最小値の「0.25」などに設定しておけば、起動後3分もすれば連続で「(yas!)」ログをおがめるかもしれません。
- また、マイニングに成功してもすぐに受信アドレスに受け取り反映されるわけではありません。受け取り反映されるルールについては、利用するマイニングプールのルールによって異なります。Jetson NanoのGPU処理能力であれば、数時間から半日程度、気長に待ってみましょう。

```plaintext:「(yes!)」とログ
[2020-02-24 18:13:42] Starting on stratum+tcp://stratum1.vippool.net:8888
[2020-02-24 18:13:42] GPU monitoring is not available.
[2020-02-24 18:13:42] 1 miner thread started, using 'lyra2v2' algorithm.
[2020-02-24 18:13:42] Stratum difficulty set to 32768 (128.00000)
[2020-02-24 18:13:42] lyra2v2 block 1922087, diff 2570336.496
[2020-02-24 18:13:42] GPU #0: Intensity set to 20, 1048576 cuda threads
[2020-02-24 18:14:13] Stratum difficulty set to 0.0625 (0.00024)
[2020-02-24 18:15:27] GPU #0: NVIDIA Tegra X1, 611.08 kH/s
[2020-02-24 18:15:27] accepted: 1/1 (diff 0.002), 611.08 kH/s yes!
[2020-02-24 18:15:27] accepted: 2/2 (diff 0.000), 611.08 kH/s yes!
[2020-02-24 18:15:30] accepted: 3/3 (diff 0.002), 613.59 kH/s yes!
[2020-02-24 18:15:34] GPU #0: NVIDIA Tegra X1, 613.45 kH/s
[2020-02-24 18:15:34] accepted: 4/4 (diff 0.000), 613.52 kH/s yes!
[2020-02-24 18:15:34] accepted: 5/5 (diff 0.001), 613.52 kH/s yes!
[2020-02-24 18:15:39] GPU #0: NVIDIA Tegra X1, 613.44 kH/s
[2020-02-24 18:15:39] accepted: 6/6 (diff 0.000), 613.49 kH/s yes!
[2020-02-24 18:15:41] accepted: 7/7 (diff 0.000), 612.84 kH/s yes!
[2020-02-24 18:15:41] accepted: 8/8 (diff 0.000), 612.84 kH/s yes!
```

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

```plaintext:コマンドプロンプト
// ディレクトリを移動
$ cd

// optディレクトリにコピーを作成
$ sudo cp -pr ccminer /opt/

// 自動起動設定ファイルの新規作成
$ sudo vi /opt/ccminer.service
````

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

[Service]
WorkingDirectory=/opt/ccminer
ExecStart=/opt/ccminer/ccminer -a lyra2rev2 -o stratum+tcp://stratum1.vippool.net:8888 -u motokeikaku.user -p password
Restart=always
Type=simple
TimeoutStopSec=5

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

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

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

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

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

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

// OS再起動
$ sudo shutdown -r now
````
- 補足：ccminer.serviceファイルの設定変更を反映する際は ``` sudo systemctl daemon-reload ``` コマンドを実行して反映する必要があります。

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

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

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

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

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

2020/02/24 TAKAHIRO NISHIZONO