hyperledger/fabricの最新版でDockerバージョンがあわずChainCodeのデプロイに失敗する

Fabricの最新版で環境を作っていたらChainCodeがデプロイしても動かない。
エラーを見てみたら「 Launch -> ERRO bf9 launchAndWaitForRegister failed Error starting container: API error (400): {"message":"starting container with HostConfig was drecated since v1.10 and removed in v1.12"}」てな感じでChainCode用のDockerを起動できていない

07:40:27.360 [rest] ProcessChaincode -> INFO a9d REST successfully deploy chaincode: {"jsonrpc":"2.0","result":{"status":"OK","message":"c8a656473ab6e760a6f65c6811f3883f76a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a271c3d00070e11c856a20e"},"id":1}
07:40:28.062 [chaincode] getArgsAndEnv -> DEBU aee Executable is /opt/gopath/bin/c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff94eff501b7cb73a271c3d00070e11c856a20e
07:40:28.062 [chaincode] Deploy -> DEBU aef deploying chaincode c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a2c3d00070e11c856a20e(networkid:dev,peerid:vp0)
07:41:06.666 [chaincode] getArgsAndEnv -> DEBU beb Executable is /opt/gopath/bin/c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff94eff501b7cb73a271c3d00070e11c856a20e
07:41:06.666 [chaincode] launchAndWaitForRegister -> DEBU bec start container: c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9adff501b7cb73a271c3d00070e11c856a20e(networkid:dev,peerid:vp0)
07:41:06.764 [chaincode] Launch -> ERRO bf9 launchAndWaitForRegister failed Error starting container: API error (400): {"message":"starting container with HostConfig was drecated since v1.10 and removed in v1.12"}

みてみるとイメージは出来ているが起動できない

$ docker images
REPOSITORY                                                                                                                                 TAG                 IMAGE ID          CREATED             SIZE
dev-vp0-c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a271c3d00070e11c856a20e   latest              559dd9b2d826      42 seconds ago      1.726 GB
dev-vp2-c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a271c3d00070e11c856a20e   latest              64c3aff795ac      42 seconds ago      1.726 GB
dev-vp3-c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a271c3d00070e11c856a20e   latest              505226730e4e      42 seconds ago      1.726 GB
dev-vp1-c8a656473ab6e760a6f65c6811f3883f76e7a648adedd2c1c5e4be37210abe2c7b3a73ec15c0bd6196c3f85ff9ad4eff501b7cb73a271c3d00070e11c856a20e   latest              20c182276ea1      43 seconds ago      1.726 GB

Docker1.12の変更に対応できていないようですね。
HostConfig will be deprecated since Docker 1.12 · Issue #2044 · hyperledger/fabric · GitHub
一部対応されているようなのだけどMasterにまだはいっていないもよう

1.11.2にダウングレードを試みる。

$ sudo apt-cache showpkg docker-engine
$ sudo apt-get install docker-engine=1.11.2-0~trusty

$ docker -v
Docker version 1.11.2, build b9f10c9

ダウングレードできたので、最初から上げなおし。とおもったら
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
となったので起動しない。色々やっても起動しない。
すでに色々イメージがある状態でダウングレードするとだめみたいね。まあそりゃそうか。

なんでしょうがないので、Vagrantでイメージ作るところからやり直す。
まっさらなVMを用意して、
github.com\hyperledger\fabric\devenv\setup.sh
を書き換える。

L69 の
# Install docker
apt-get install -y linux-image-extra-$(uname -r) apparmor docker-engine
⇒
# Install docker
apt-get install -y linux-image-extra-$(uname -r) apparmor
apt-get install -y  docker-engine=1.11.2-0~trusty

と書き換えてdockerをバージョン指定でインストールさせる。

これでOK。VMから作り直しましょう。

VirtualBoxから「hyperledger」イメージを削除してきれいな体にしてから

vagrant up
vagrant up --provision

でOK.その他の手順は以下と同じ。これでDockerを1.11.2固定の環境が出来た。

garapon.hatenablog.com

やれやれ

Office2016のデフォルトフォントを変更する。

Office2016いれたらデフォルトが游ゴシックになってめっちゃみずらい。せめてMSゴシックにしてほしい。
WordとPowerPointはテンプレートを使うことが多いのであまり被害がありませんがExcelOutLookは被害甚大。そうそうに直しましょう。
はやいところMS様は修正パッチをだすといいよw

Excel

ファイルメニューから「オプション」を選び、基本設定の新しいブックの作成時のフォントを変更する。
Excelを再起動しろ言われるので、再起動しましょう。

OutLook

ファイルメニューから「オプション」を選び、、「メール」タブの「ひな形およびフォント」を選択。
「ひな形」のテキスト形式のメッセージのところの「書式設定」をえらんでフォントを変更しましょう。
ちなみにOutLookとかは2013までは「MS P ゴシック」がデフォだったので今までと同じ見た目がいい人はMSPゴシックを選びましょう。


やれやれ。

提案研修のメモ

営業提案の研修行ったら面白かった。

・提案で大事なのは解決策ではなく、クライアントが解決すべき課題をどう捕らえるか

・論点を捕らえることが大事
 論点とは「問い」
 答え(解決策)に目が行きがちだが、「答え」じゃなくて「問い」に目を向ける。

・論点とは問い、つまり、相手が何を気にしているか/何に困っているか
 報告と相談の違いはどちらが「問い」を持っているかの違い
・相手の課題に興味を持つことが大事。

・論点を明確にするというのは、「「何を考えればいいか」を考える」というメタ思考。
 ・「結論からさきにいうと?」という質問にぱっと答えられないのであれば、論点が明確になっていない。

・論点を明確にするには「問い」の形式で設定するのが良い
 ×:明日の朝食について
 ◎:明日の朝はパンを食べるべきか?

・表面的な論点の後ろに隠れた真の論点を見抜け

・論点の順番も重要
 What⇒Why⇒How
 とくに「Why」が重要で抜けやすい。すでにわかっている人にとっては当たり前だが、未知な人には一番の要!
 相手の問題関心を想定して論点をならべる。

・提案型営業の流れ
 1顧客の課題は何か
 2その課題はどう解決するべきか
 3解決策としてこれはどこがすぐれているのか
 4その証拠としての判断事例
 ・1,2がコンサル的な動き。
 ・1でその背景、目的、制約を把握できるか鍵

Windows上にhyperledger/fabricを環境構築する。

Blockchain実装の大本命?であるhyperledger/fabricをローカルで動かしてみます。
fabricはethereumとかより非常に構築がしやすくなっています。

事前準備

まずは以下のソフトを入れましょう。

Goをインストールしたら環境変数に2つ登録します。

名前:GOROOT
 値:C:\Go\

名前:GOPATH
 値:C:\gopath    //任意のフォルダを作成する。

fabricのソースのDL

Gopathのなかにフォルダを作ってからGitCloneする。
src以下のフォルダ名は一致していないと後で困るのでここからはつづりミスをしないようきをつけましょう。

cd %GOPATH%
mkdir src\github.com\hyperledger
cd src\github.com\hyperledger
git config --global core.autocrlf false
git clone https://github.com/hyperledger/fabric.git

VMの起動

cd %GOPATH%\src\github.com\hyperledger\fabric\devenv\
vagrant up

最初にイメージをDLしたりするので20分ぐらいかかる。のんびりまちましょう。
これが終わって起動してきたらprovisionします

vagrant up --provision

これまたまあまあ時間がかかるのでのんびり待ちます。
これで基礎のイメージが出来ました。

処理が終わったら接続します。接続するやり方は以下の記事参照
garapon.hatenablog.com

membersrvcとpeerのDockerfileを作成

DockerFileを作ります。

cd $GOPATH/src/github.com/hyperledger/fabric
make peer-image
make membersrvc-image

出来たら確認する。

$ docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED              SIZE
hyperledger/fabric-peer        latest              f30c8c516186        6 seconds ago        1.748 GB
hyperledger/fabric-ccenv       latest              bd03a61e190b        About a minute ago   1.738 GB
hyperledger/fabric-src         latest              0b4d156de3a8        About a minute ago   1.721 GB
hyperledger/fabric-baseimage   latest              6abe2f90116a        About a minute ago   1.687 GB
<none>                         <none>              3c19ba8a6065        6 hours ago          1.385 GB
busybox                        latest              2b8fd9751c4c        4 weeks ago          1.093 MB
hyperledger/fabric-baseimage   x86_64-0.0.10       a2392cc113fd        8 weeks ago          1.076 GB

こんな感じで出来ました。

起動

docker-compose -f docker-compose-4-consensus-batch.yml up --force-recreate -d

すると、MemberserviceとPeer4つがあがってきます。

$ docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                    NAMES
c80799b160e2        hyperledger/fabric-peer         "sh -c 'sleep 5; peer"   5 minutes ago       Up 4 minutes                                 bddtests_vp2_1
46f1ac71efb7        hyperledger/fabric-peer         "sh -c 'sleep 5; peer"   5 minutes ago       Up 5 minutes                                 bddtests_vp1_1
91c702ef6377        hyperledger/fabric-peer         "sh -c 'sleep 5; peer"   5 minutes ago       Up 5 minutes                                 bddtests_vp3_1
94ad8ce46101        hyperledger/fabric-peer         "sh -c 'sleep 5; peer"   5 minutes ago       Up 5 minutes        0.0.0.0:5000->5000/tcp   bddtests_vp0_1
1d32f4eed13f        hyperledger/fabric-membersrvc   "membersrvc"             5 minutes ago       Up 5 minutes                                 bddtests_membersrvc0_1

こんなかんじで、あがってくるので以下のようなポートにJSON投げまくればOK。

http://127.0.0.1:5000/chaincode 

Logを見たいときは以下

docker logs -f bddtests_vp0_1

明日はチェインコードのはデプロイをしてみます。

Vagrantで起動したマシンにTeraTermマクロで自動接続する

Vagrantでマシンを起動するとログインが秘密鍵認証になります。
自動化しないとマクロでばーーんとかいうのが出来ないので自動化しましょう。

対象のVagrantの接続情報を確認する

Vagrant upをしたディレクトリでvagrant ssh-configコマンドをたたくと以下のような接続情報がわかります。

>vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/garapon/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

この中のHostName、Port、IdentityFileを使います。

マクロを作る

以下の内容をvagrantlogin.ttlとかそんな名前で保存してダブルクリック。
HostName、Port、IdentityFileはさっきのコマンドの内容で修正します。

; Vagrant 接続

;; 設定
hostname = '127.0.0.1'
port = '2222'
keyfile = 'C:/garapon/.vagrant/machines/default/virtualbox/private_key'
 
;; 接続
msg = hostname
strconcat msg ':'
strconcat msg port
strconcat msg ' /ssh /auth=publickey /user=vagrant /keyfile='
strconcat msg keyfile
 
connect msg

これで出来たー。

Vagrantで作成したVMに「Authentication failure. Retrying」でつながらない場合の対処

こーんな感じでつながらなくなった時の対処

    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...

原因は秘密鍵と公開鍵があわなくなっているから。
なので再生成すればよい。

vagrant ssh-config
...
  IdentityFile C:\Users\garapon\.vagrant.d\vagrant_private_key

秘密鍵の場所を調べて、それをもとに公開鍵を作成

ssh-keygen -yf C:\Users\garapon\.vagrant.d\vagrant_private_key > public_key

これで作った鍵をサーバー上の
/home/vagrant/.ssh/authorized_keys
に追記でOK.