上記のページでは、環境はVirtualbox + ubuntuで、ソースからビルドしましたが、今回はバイナリー版を使ってみます。
環境はRaspbian Stretchです。
(現RaspbianはBusterです。Stretchのイメージ->Lite、Full)
今回はこんな感じのプライベートネットです。
例えばこんな風になっているとします。
B+ (RaspberryPi 3 Model B+) 192.168.0.31
B (RaspberryPi 3 Model B) 192.168.0.28
Win10 (Windows 10 PC 64bit) 192.168.0.23
PCはWindowsでもLinuxでもなんでもいいのですが、以前ubuntuでやったので今回はWindows….というだけの理由です。
これをマイニングに使います。
現ラズパイ(3B,B+,Zero)ではメモリやらマシンパワーやらの問題でマイニングは実行できませんでした。
ので、こういう作業はPCにやってもらいます。
Geth(Go-ethereum)をラズパイにインストール
ラズパイ3のカーネルをチェックしてマシン名を確認
$uname -m
B,B+こうなってると思います。
armv7l
Zeroはこうです。
armv6l
Gethバイナリーの最新はここを参照。
以下はB、B+についてですがZeroの場合はarm7をarm6に置き換えるだけです。
注:やってみたところ、Zeroでは何故かアカウントを作成できませんでした。なので、Zeroは今回は不採用。原因が分かれば復活するかもしれませんが…..。
Linux ARMv7のSignatureを参照。
geth-linux-arm7-1.8.27-4bcc0a37.tar.gz
バイナリーのアーカイブをダウンロードします。
1 2 |
$wget https://gethstore.blob.core.windows.net/builds/<strong>geth-linux-arm7-1.8.27-4bcc0a37.tar.gz </strong> |
/usr/localにgethをインストール
1 |
$sudo tar -C /usr/local -xzf geth-linux-arm7-1.8.27-4bcc0a37.tar.gz |
パスを通しておきます。
$sudo leafpad /home/pi/.bashrc
以下を追加
export PATH=$PATH:/usr/local/geth
$source /home/pi/.bashrc
シンボリックリンクを張っておきます。
1 |
$sudo ln -s /usr/local/geth-linux-arm7-1.8.27-4bcc0a37 /usr/local/geth |
確認
$geth version
環境にはまだブロックは存在しません。
ubuntuの環境で単一のノードでやってみた場合に倣ってみます。
まず最初のブロック(ジェネシスブロック)を生成するために、以下のファイルを/home/piに創っておきます。
【Genesis.json】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "config": { "chainId": 10, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" } |
チェーンデータを初期化します。
1 2 |
$mkdir My_eth_chain $geth --datadir My_eth_chain init Genesis.json |
Gethを起動します。
1 |
$geth --datadir My_eth_chain -networkid 10 --rpc --rpcaddr "localhost" --rpcport "8545" --rpcapi eth,web3,net,personal --rpccorsdomain "*" --nodiscover console |
自ノード情報を確認します。
>admin.nodeInfo.enode
ノード情報として、この赤線で囲った部分をコピーして使います。
塗りつぶした部分にはIPアドレスが記述されていますが、グローバルIPが表示される場合があります。
ローカルネットで使う場合はプライベートIPに置き換えます。
各ラズパイを相互接続
ノード情報を使って相互に接続します。
B -> B+
1 |
>admin.addPeer("enode://92b71e2b76c7fd62e59b91e414cc00403557f3d6216ccb8587390e2e0ddb4c720c392f8b0328dda97ffef9cd4459d46d070e75ff36c0035306527f0ef842ac18@[192.168.0.31]:30303") |
B+ -> B
1 |
>admin.addPeer("enode://45e40add42dec93c0443cd7af25698bb69e883b1dacbac62988164c1a70cf0d78842088fbca046fbd66a9d367f0ee1ed526d2abf8fb22cb957f9f9710e47ed99@[192.168.0.28]:30303") |
他も同様に接続します。
接続を確認
1 |
>admin.peers |
接続数を確認。
このプライベートネットなら2が表示されます。
1 |
>net.peerCount |
admin.addPeerコマンドを使わずに相互接続
上記で取得したノード情報を記述した以下のようなファイルを、それぞれの/home/pi/My_eth_chain/gethに置いておきます。
以下は例です。
【static-nodes.json】
1 2 3 4 5 |
[ "enode://92b71e2b76c7fd62e59b91e414cc00403557f3d6216ccb8587390e2e0ddb4c720c392f8b0328dda97ffef9cd4459d46d070e75ff36c0035306527f0ef842ac18@192.168.0.23:30303", "enode://45e40add42dec93c0443cd7af25698bb69e883b1dacbac62988164c1a70cf0d78842088fbca046fbd66a9d367f0ee1ed526d2abf8fb22cb957f9f9710e47ed99@192.168.0.28:30303", "enode://2046e5f574820a9da6023ce686176b4f6d98332059989e84859abdaf6f944972c005c253528a15769a4d2ffe5c92bd6580a941ceb7713dcc3056fb19b505635c@192.168.0.29:30303" ] |
それぞれGethを起動し、admin.peersを実行すると相互に接続しているのが確認できます。
30303というポート番号は仮のもので、最初に起動するものがこれを使用し、後続するものは順次別のポート番号が振られるようです。どういう規則なのかは……わかりません。
注:
このstatic-nodes.jsonを使用する方法は非推奨になっているようです。
代わりに「TOML config fileを使え」だそうです….。
bootnodeというツールを使うという手もあるようです。
bootnodeについて(工事中)
ラズパイからのコマンドでWindowsにマイニングしてもらう
Leave a Reply