PINE64(Ethereumマイニング中)

既にマイニング話ばかりでPINE64である必要があるのか、という感じになってきたけど、おそらくPINE64でやってるからと思われる不具合みたいなのがあるので、引き続きこのカテゴリでメモしておく。


ちなみに4分割で出力したケースが分離しかかってきたので、100均の猫デザインなマスキングテープでぐるぐる巻きにして、同じく100均マニキュアのトップコートで固めてやった。

遠目に見たらこういうデザインっぽいというか、オシャレに見えなくもない。100均の商品もなかなかいい。

 

で、PINE64をブートしてるSDカードの領域を大きくしたので、やっぱりマイニングのライブネットに再び接続することにした。
現状、じわじわと同期が完了しつつある、ように見える。

数日前、ブロック数が4000000を超えた記念。↓

 > eth.syncing

{

  currentBlock: 4001647,

  highestBlock: 4274474,

  knownStates: 13769,

  pulledStates: 12193,

  startingBlock: 3998602

}

 

が、これが最近むちゃくちゃ重い。
ブロック数が増えたためか、気付くとライブネットが切断されている。根性無しめ。
(いつの間にか「> killed」が表示されている)
当初SDカードを変えたせいかと思ったけど、通常のLinuxとしての動きは問題ないのでやはり処理が厳しくなってきたようだ。

接続してすぐ切れて、の繰り返し。実際に自分のブロック数を増やすのは難しいと思う。


ストレージはまだ半分ぐらいしか使ってないからいいとしても、メモリが1GBのほうにしちゃったのは失敗だったかなあ。

PINE64より性能が良いROCK64っていうのがあるんで、そっち使ったらもっと頑張るのかもしれない。
でも現状手元にあるやつでなんとかするのを楽しんでるので、これはこれ。

キリがついたらOSはまたOpenSUSEに戻して、ゆっくり楽しみたいと思う。

Sponsered Link

PINE64(Ethereumのマイニング(ライブネット)接続)

すでにPINE64話というより、Ethereumのマイニング話でどっぷり。

おかげで数日、PINE64起動しっぱなし。

でもそれも今回でいったん区切り。

ちなみにマニュアルに記載されていた、「Contractを作成する」の項目はすっ飛ばした。

「solcのインストール」でさっそく失敗したんで、これは長くなるぞと思ったため。でもこっちの方が面白そうだし、いつか挑戦してみたい。

 

とりあえず続き。ここまでやったんだから、試しにライブネットにも接続してみる。

参考にしたのはいつものところ。

 https://book.ethereum-jp.net/first_use/connect_to_livenet.html

プライベートネットに接続するよりオプションが少ない。

 $ mkdir /home/ubuntu/livenet_data
 $ geth --datadir "/home/ubuntu/livenet_data" 2>> /home/ubuntu/livenet_data/e01.log

これだけでいいの?という不安もあるが、これだけしか書いてないんでやってみる。

マニュアルでは最後に&が付いているので、バックグラウンドで動かすことができる。

でも他の用途に使ってないし(フルでマイニングに活用しないとたぶん無理)、たまに状況を確認できるようにしたいのでそこは外した。

 

で、起動したんだけど…いくら待っても、コマンドプロンプトが出てこない。

でもPINE64がものすごく稼働してるのはよくわかる。有線でネットに繋いでるんだけど、LED点滅しまくり。

おかしいと思ったら、オプションつけないとプロンプトに入れないのね。

PINE64ごと再起動させて(途中の止め方がわからなかった)、もう一度やってみる。

 $ geth --datadir "/home/ubuntu/livenet_data" console 2>>/home/ubuntu/livenet_data/e01.log

Welcome to the Geth JavaScript console!

instance: Geth/v1.7.0-unstable-d70536b5/linux-arm64/go1.7.4

 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

きたきた。

プライベートネットでやってたようにアカウントを二つ作って採掘開始。ブロックチェーンに同期されるのを待つ。

ちなみにアカウント作ってる最中に一度吹っ飛んだ。コンソールだけだけど。

アカウント作るだけで微妙にもっさりだったんで、やはり厳しいのか。

 

少し時間をおいて、様子を見る。

 > eth.hashrate

0

想定内。

あまりに反応ないんで、本当に繋がってるんかと心配になったけど、一応大丈夫らしい。

 > net.peerCount

25

しばらく放置しとくか、と思って一晩経ったら、また接続が切れてた。

PINE64が吹っ飛んでるわけではないので、ネットワークの方のトラブルらしい。有線で繋いでるのに。

 

もう一回やり直して、マイニング開始。

改めて、ブロックチェーンに同期されるのを待つ。現在の状況を確認。

これを最初に出すまで10分近くかかった。フリーズしたかと思ったよもう。

 > eth.syncing

{

  currentBlock: 1753610,

  highestBlock: 4231845,

  knownStates: 69652,

  pulledStates: 63372,

  startingBlock: 1718425

}

わかりやすく書くと、currentBlockが現在の数字、highestBlockが現在のブロック数、らしい。

currentBlockがhighestBlockまで行かないと、同期されない=実際の採掘は始まらないということらしい。先はむっちゃ長い。

同期されるまではたまにブロック数をチェックしておいた方がいいのかな。

公式のブロック数はこっち↓でも確認できる。LAST BLOCKのところ。

 https://etherscan.io

しかしいつまで経っても同期すらしないので現状諦めモード。

しばらく(丸一日以上)放置しておいたところ、いつの間にか接続が切れてたどころか

Fatal: Error starting protocol stack: write /home/ubuntu/livenet_data/geth/chaindata/034805.ldb: no space left on device

と出てた。

そりゃそうだ、16GBのSDカードにubuntu入れてたんだから。

この先は容量を大きくしないとダメだな。

データをコピーしてやり直すかどうかはともかく、ちょっと惜しいのでとりあえずここまで、ということしておくか。

 

ともかく、PINE64でCPUマイニングって半端なく時間がかかるということはわかった。

EthereumはBitcoinに次いで人気のある通貨だから、またさらに条件が厳しかったかもしれない。

そりゃこんなことやってみようとする人なんでいないだろうから、情報もいくら探しても出てこないよなあ。

利益が出ないのは百も承知なんでいいんだけど、待ちの状態が結構しんどい。こういうのは自分には合わん。

ただ導入するまでは楽しかったし、実際にマイニングをやってみることで仮想通貨についていろいろ勉強になったのは悪くない。

また面白そうな仮想通貨のマイニングを見つけたら、マイコンボード一枚で無理やり稼働させてみようかと思う。

Sponsered Link

PINE64(Ethereumのマイニング(プライベートネット)状況)

ここからは結果をメモしてるだけなので、あまり面白くない。

ただ、PINE64でEthereumを採掘するとこんな感じだった、という参考になればいいかと思っている。(自分用に)

現状はテスト用のネットワークだから、なんか動いてるな、というのが比較的わかりやすい。

 

では、採掘中のPINE64を一晩放置した結果。

 > eth.hashrate

0

…ハッシュレートが出てないんですが。

ここの数字が0以上なら採掘してるということなんだけど、これは動いてないということなんだろうか。

不安になったんで、miner.stop()と入れて、一旦止める。

各アカウントの状況を確認してみる。

 > eth.getBalance(eth.accounts[0])
25000000000000000000
 > eth.getBalance(eth.accounts[1])
0

んんん?採掘用のアカウントに、ちゃんと数字が出てる。もう一方は送金しないと0のままなので、これでOK。

採掘したブロック数も、少ないけど一応出てる。

 > eth.blockNumber
5

一応、こっそりとマイニングの稼働はしていたらしい。

 

もしかして、レートが1以下で表示できないか、たまに本気を出すタイプかもしれない。

採掘を再稼働して、しばらく様子をみてみると、

> eth.hashrate

110
> eth.hashrate
4
> eth.hashrate
0

ウチのPINE64はスタートダッシュが得意なタイプらしい。

 

他の方の採掘状況を検索して回ってみたけど、比べ物にならない数字が出てる。比べちゃいかんけど。

しかしハッシュレートが0だったんで慌てちゃって、アカウントに数字が入ってた感動がどっかに行ってしまったのが残念。成功したんだから、もっと感動したかった。

でもちゃんとマイニングできたということで、頑張ったPINE64ちゃんを褒めてあげたい。

 

で、プライベートネットとはいえ一応成果は出たし、自分としてはPINE64でいっぱい遊べたので満足。

この先Ethereumをいじるならマイコンボードの話から外れるが、PINE64でどこまでできるのか気になったのでもう少しだけ引っ張ろうと画策している。

Sponsered Link

PINE64(Ethereumのマイニング(プライベートネット)開始)

さて、クライアントの導入に成功したPINE64上のUbuntuだけど、ここからが問題。

PINE64でマイニングに成功した事例が見つからない(なんか動いてるっぽい、という報告は見つかる)ので、ちゃんと動くかどうかはわからない。

そもそもPINE64で採掘したところで利益が出るもんでもないので、やってる人がいないという話もある。

でも仮想通貨ってどんなもん、という興味があったら導入しようとする過程を楽しめるんで、自分みたいな物好きはぜひやってもらいたいところ。

 

参考にしていたマニュアルは、最初に見ていた日本語翻訳のもの。

 https://book.ethereum-jp.net/first_use/connect_to_private_net.html

初心に返ってみる。

とりあえずはプライベートネットという、テスト用ネットワークで発掘のシミュレーションをしてみることにする。

 

詳しい説明や手順は上記を読んでもらうとして、サクサクと進めます。

プライベートネットで作業するための環境を構築、専用のフォルダ作成。

ubuntuユーザーで作っていたらこうなると思う。
 $ mkdir /home/ubuntu/eth_private_net
 $ cd eth_private_net

ファイル作成。
 $ vi myGenesis.json

次はブロックチェーンの情報を初期化。

jsonファイルの内容はコピペしてきたんだけど、最初どうも失敗したみたいで、次のコマンドでエラーになった。

 $ geth --datadir /home/ubuntu/eth_private_net init /home/ubuntu/eth_private_net/myGenesis.json
Fatal: invalid genesis file: json: cannot unmarshal hex string of odd length into Go value of type hexutil.Bytes

いろいろ検索していたら、どうもバージョンが違う(?)らしい。

他のところを参考にして、内容を変更。これは助かった。

 http://qiita.com/oggata/items/eea4d5e37f38785f6079

下記に変更したらOKだった。

{
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x400",
"alloc": {},
"coinbase": "0x3333333333333333333333333333333333333333",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x",
"gasLimit": "0x8000000",
"config": {}
}

ここは試しにやってみて、エラーが出てから修正しても問題なかった。

 

では、いよいよコンソールに入ります。ドキドキ。

 $ geth --networkid "(適当な数字)" --nodiscover --datadir "/home/ubuntu/eth_private_net" console 2>> /home/ubuntu/eth_private_net/geth_err.log

Welcome to the Geth JavaScript console!

instance: Geth/v1.7.0-unstable-d70536b5/linux-arm64/go1.7.4
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

無事、PINE64から起動することができた。

道のりが長かった(自分がボケてたという話もあるが)もんだから、結構感動。

 

そしてここからが採掘の開始。テストだけど。

でもその前にアカウントの作成。最初は空っぽ。

 > eth.accounts
[]

まず必要なアカウントを二つ作った。簡単にいうと採掘したのを貯める側と、送金側らしい。

 > personal.newAccount("パスワード1")

 > personal.newAccount("パスワード2")

その後はアカウント二つが確認できるようになる。

 > eth.accounts

["0xde7eade5f34be865be95b4345f5e93640960a7ae", "0xc163e77399ddf3e8096d7bb0f78c73e25a8e375d"]

パスワードは再発行できないから絶対忘れちゃいけないけど、上記の長い英数字は忘れても大丈夫。というか覚えられん。

 

アカウントを作ったら、ここからいよいよ採掘の実行。

 > miner.start()
null

ん?null?と思ったけど、自分がインストールしたバージョンはこれが正解だった。

(バージョンによってはtrueになる)

最初は動いてるのかどうか不明。ハッシュレートが0のままだし。

 >  eth.hashrate
0

しばらく放置して、様子を見ることにする。

 

結局のところ、go言語とgethのインストールが終わってしまえばあとは意外と簡単だった。

あとは起動させっぱなしにして、待つしかないので面白くない。

でもこの後の様子をもうちょいメモしておくことにします。

Sponsered Link

PINE64(Ethereumのマイニング、geth導入成功)

PINE64にUbuntuを入れたことだし、Ethereumのマイニングが尻切れトンボだったのが気になってたのでもうちょいあがいてみた。暇人だから。
大元の問題がわかったおかげで、クライアントであるgethのインストールは成功。
go言語がバージョン1.7以上でなかったことと、ダウンロードしたものがARMv8に対応してなかったこと。
以下、goとgethインストールまでの道のりをメモしたもの。

 

改めてDebianのときのおさらい。
↓のリンク先にあるビルドしてインストールするほう(Building from source)。
 https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu

事前にgitでメインのリソースを持ってくる。

 $ git clone https://github.com/ethereum/go-ethereum
ここでgitが使えなかったんで、$ sudo apt-get install gitでインストール、再度実行。
その後、
 $ sudo apt-get install -y build-essential golang
 $ cd go-ethereum
 $ make geth
build/env.sh go run build/ci.go install ./cmd/geth
ci.go:180: You have Go version go1.6.2
ci.go:181: go-ethereum requires at least Go version 1.7 and cannot
ci.go:182: be compiled with an earlier version. Please upgrade your Go installation.
exit status 1
Makefile:15: recipe for target 'geth' failed
make: *** [geth] Error 1

ん?なんか前と違うエラー。goのバージョンが違うと言われてる。
バージョン1.6ではインストールできない。って、よく読んだら最初から書いてあったっけ。

 

ざっと調べてgo1.7.3 をインストールできるようなので、下記を参考にさせてもらいインストール。
 https://blog.tamrin.tech/2017/02/01/how-to-install-go/
 $ sudo add-apt-repository ppa:tsuru/golang17
 $ sudo apt-get install golang-1.7

しかし、
 $ go version
go version go1.6.2 linux/arm64

バージョンアップできてない…。

 

いったんgoを削除して再インストールすることにした。
関連するフォルダを削除。
 $ sudo rm -rf /usr/local/go
 $ rm -rf ~/go
 $ rm -rf ~/Work/go

上記だけじゃなんなんで、パッケージ削除。
 $ sudo apt-get --purge remove golang
さらにトドメで
 $ sudo apt autoremove
を実行して、これでgoがNot foundになった。実際にはここまでしなくても良かったかもだけど。
とにかくこれでgoを入れ直すことができる。

 

今度は別のところを参照。
 https://github.com/golang/go/wiki/Ubuntu
spt-getでgo言語のバージョンを指定してインストールしてみた。
 $ sudo apt-get install golang-1.7
Reading package lists... Done
Building dependency tree       
Reading state information... Done
golang-1.7 is already the newest version (1.7.3-0ubuntu1~ppa0~ubuntu16.04.1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

…できてないっぽいぞ。エラーでもないけど。

 

試しにもう一度go versionすると、なんか変なエラーになった。
-bash: /usr/local/go/bin/go: cannot execute binary file: Exec format error
調べたら、どうやらOSに合っていないバージョンだよとのこと。参考にしたページのと環境が違ったからだ。
linux/arm64対応で、バージョンが1.7以上のものをダウンロードして来る必要がある。

しかもDebian公式で対応しているものがまだ1.6のため、ppa等でお手軽にインストールすると古いgo言語になってしまう。
というわけで、これがPINE64にインストールできなかった元凶。
なので公式(https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu)に記載されている、
 $ sudo apt-get install -y build-essential golang
は現時点でPINE64上ではやってはいけない。
最新のものを自力で持ってきてください。

 

というわけで、go言語の公式(?)で探してみる。
 https://golang.org/doc/install
…ARMv8がない。v6使うか。(適当)

 $ curl -O https://storage.googleapis.com/golang/go1.7.3.linux-armv6l.tar.gz
 $sudo tar -C /usr/local -xzf go1.7.3.linux-armv6l.tar.gz

バージョン確認したけど、やっぱだめだった。

 

探し回ったけど、良さそうなのはこれ↓のGo 1.7.4 for ARM64かな。
 https://github.com/hypriot/golang-armbuilds/releases

前に入れたのはいったん全消しして、またまた再インストール。

 $ wget https://github.com/hypriot/golang-armbuilds/releases/download/v1.7.4/go1.7.4.linux-arm64.tar.gz
 $ sudo tar -C /usr/local -xzf go1.7.4.linux-arm64.tar.gz
 $ mkdir -p ~/go; echo "export GOPATH=$HOME/go" >> ~/.bashrc
 $ echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc
 $ source ~/.bashrc
 $ go version

go version go1.7.4 linux/arm64
お、バージョン上がった。
これならgethをインストールできるかな?
 $ git clone https://github.com/ethereum/go-ethereum
 $ cd go-ethereum
 $ make geth

で、しばらく待つと最後に
Done building.
Run "/home/ubuntu/go-ethereum/build/bin/geth" to launch geth.

と出てきて、ビルドできてしまった。いや、いいことなんだけど。

 

パスを通してないので、取り急ぎ
 $ /home/ubuntu/go-ethereum/build/bin/geth help
で、ヘルプが出ることを確認。お疲れ様でした。

ちなみにパスを通すのは、

 $ vi ~/.bashrc

としてエディット、export PATH=の最後に:/usr/local/go-ethereum/build/bin:/home/ubuntu/go-ethereum/build/binを追加しておきました。


でもこれで終わりではなく、むしろここからが本番。
ここまででEthereumクライアントの「Geth」をインストールできただけなので、採掘するための準備をする。
だけど疲れたんで、ここで一度区切る。

 

PINE64にクセがあって使いにくいなあと思ってたけど、そりゃそうだ。ARMv8だもん。
見落としてたのはここだったんだなと反省。
Raspberry Pi3もARMv8だったはずだけど、使ったことあるのは2までだったし、過去にアーキテクチャで引っかかったことってなかった気がする。
apt-getでインストールするときは多少気にしといたほうが良さそうだ。

Sponsered Link