2018年7月8日日曜日

Hyperledger Fabric 1.1以降で追加されたPEERコマンド

Hyperledger Fabric 1.1以降では、PEERコマンドの機能が大幅に強化された。
新規に追加されたPEERコマンドを使ってみる。

ピアにInstalledされたチェーンコード一覧の取得

# peer chaincode list --installed -C mychannel
Get installed chaincodes on peer:
Name: fabcar, Version: 1.0, Path: github.com/fabcar/go, Id: 4846dcee8e67da7d20eac366587b897cf3906c5fc90a2357f4849aec01fc5358

<解説>
対象のPEERに、以下のチェーンコード名、バージョン、パス、チェーンコードIDがインストールされている

チェーンコード名:fabcar
バージョン:1.0
パス:github.com/fabcar/go
チェーンコードID:4846dcee8e67da7d20eac366587b897cf3906c5fc90a2357f4849aec01fc5358

ピアにInstantiatedされたチェーンコード一覧の取得

# peer chaincode list --instantiated -C mychannel
Get instantiated chaincodes on channel mychannel:
Name: fabcar, Version: 1.0, Path: github.com/fabcar/go, Escc: escc, Vscc: vscc

<解説>
対象のPEERに、以下のチェーンコード名、バージョン、パス、ESCC名、VSCC名がinstantiateされている。

チェーンコード名:fabcar
バージョン:1.0
パス:github.com/fabcar/go
ESCC名:escc  (デフォルトのシステムチェーンコード)
VSCC名:vscc(デフォルトのシステムチェーンコード)

PEERが所属するチャネル名一覧の取得

# peer channel list
2018-07-08 05:59:01.746 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Channels peers has joined:
mychanne
#

ブロックチェーン情報の取得

# peer channel getinfo -c mychannel
2018-07-08 06:01:37.432 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Blockchain info: {"height":3,"currentBlockHash":"01gwIBF3LEjesqG/FPAx43jtFFLZv0isOXYXqvbZTPY=","previousBlockHash":"PpP80dqWT2gS8Cwalw8JtIkD0eP5YkxuEih9syr9fSE="}
#

PEERの起動状況の確認

#peer node status
status:STARTED

PEERの起動

# peer node start


そのほか


  • チェーンコードをアンインストールするコマンドは現時点では提供されていない。
  • PEERを停止するコマンドは現時点では提供されていない。
  • 2つ以上のEndorsing Peerの署名が必要なINVOKEは、PEERコマンドでは実行できない(1つのEndorsing Peerしかプロポーザルをなげることができないため)。





Node.jsとnpmを最新バージョンにアップグレード

現状のバージョン


# npm -v
3.5.2

# node --version
v4.2.6

nのインストール

#npm install -g n

nodeの安定版と最新版のバージョン確認

# n --stable
10.6.0

#n --latest
10.6.0

最新バージョンのnodeへアップグレード

# n latest

     install : node-v10.6.0
       mkdir : /usr/local/n/versions/node/10.6.0
       fetch : https://nodejs.org/dist/v10.6.0/node-v10.6.0-linux-x64.tar.gz
######################################################################## 100.0%
   installed : v10.6.0
#

最新バージョンのnpmへアップグレード

#npm update -g npm
# npm -v
3.5.6



2018年4月1日日曜日

Hyperledger Fabric 1.1.0 Relase版 インストール

2018/3/20に公開されたHyperledger Fabric 1.1.0 Release版を、ソースからビルドする。

<前提>
・DockerおよびGOがインストール済みであること。

①FabricとFabric-caのソース一式をクローンする。

# git clone -b v1.1.0 https://github.com/hyperledger/fabric.git
# git clone -b v1.1.0  https://github.com/hyperledger/fabric-ca.git
# mkdir -p /opt/fabric/src/github.com/hyperledger/
# cp -rf fabric /opt/fabric/src/github.com/hyperledger
# cp -rf fabric-ca /opt/fabric/src/github.com/hyperledger

②環境変数を設定する。

# export GOPATH=/opt/fabric
# export GOHOME=/opt/fabric

③Fabricのdockerイメージを作成する

# cd $GOHOME/src/github.com/hyperledger/fabric/
# make docker

以下のエラーが発生した場合は、
protoc-gen-goを手動でダウンロードする。

------
cp build/docker/gotools/bin/protoc-gen-go build/bin/chaintool build/goshim.tar.bz2 build/image/ccenv/payload
cp: cannot stat `build/docker/gotools/bin/protoc-gen-go': そのようなファイルやディレクトリはありません
make: *** [build/image/ccenv/payload] エラー 1
------

# go get -u github.com/golang/protobuf/protoc-gen-go
# cp $GOPATH/bin/protoc-gen-go build/docker/gotools/bin/

➃Fabric-caのdockerイメージを作成する

# cd $GOHOME/src/github.com/hyperledger/fabric-ca/
# make docker

⑤Dockerイメージが作成されていることを確認する。




2017年11月14日火曜日

最新のOpenSSL 1.1.0シリーズにアップデート

最新のOpenSSL 1.1.0シリーズにアップデートする手順を説明する。

# cd /usr/local/src/
#  wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
# tar xvzf openssl-1.1.0g.tar.gz
#  cd openssl-1.1.0g/
# ./config -fPIC shared --prefix=/usr
# make
# make install
# openssl version
OpenSSL 1.1.0g  2 Nov 2017

2017年11月12日日曜日

KeycloakをPostgreSQLに対応させる

KeycloakはデフォルトではH2が利用される。
今回は、PostgreSQLを利用するように環境設定を変更する。

前提
・「http://memoyasu.blogspot.jp/2017/11/ssoosskeycloak.html」の手順でKeycloakが動作していること。
・PostgreSQLが動作していること。
・PostgreSQLのログインユーザを作成済みであること。

postgres=# CREATE USER loginuser WITH PASSWORD 'password' CREATEDB;
CREATE ROLE

・「keycloak」というデータベースを作成済みであること。

postgres=# CREATE DATABASE keycloak OWNER loginuser;
CREATE DATABASE
postgres=#

手順
①PostgreSQL用のJDBCドライバをダウンロードする。
今回は「postgresql-9.4.1212.jar」を利用する。

https://jdbc.postgresql.org/download.html

②ドライバJARをモジュールにパッケージ化し、このモジュールをサーバーにインストールする。
「modules\system\layers\keycloak」ディレクトリ配下に「org\postgresql\main」ディレクトリを作成する。

> mkdir modules\system\layers\keycloak\org\postgresql\main
> copy postgresql-9.4.1212.jar modules\system\layers\keycloak\org\postgresql\main

③サーバの設定プロファイルでJDBCドライバを利用するようにする。
「modules\system\layers\keycloak\org\postgresql\main」ディレクトリ配下にmodule.xmlを作成する。

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.3" name="org.postgresql">

    <resources>
        <resource-root path="postgresql-9.4.1212.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>


➃PostgreSQLのJDBCドライバを使用するようにデータソース設定を変更する。
standaloneモードで動作している場合は「​standalone/configuration/standalone.xml」を修正する。

・・・
            <datasources>
                ・・・
                <drivers>
                    <driver name="postgresql" module="org.postgresql">                                 ★追加
                        <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>    ★追加
                    </driver>                                                                          ★追加
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
・・・

⑤PostgreSQLへの接続パラメータを定義するようにデータソース設定を変更する。

        <subsystem xmlns="urn:jboss:domain:datasources:5.0">
            <datasources>
・・・
                <!-- ★コメントアウト
                <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                -->
                <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
            <connection-url>jdbc:postgresql://localhost:5432/keycloak</connection-url>
            <driver>postgresql</driver>
            <pool>
                <max-pool-size>20</max-pool-size>
            </pool>
            <security>
                <user-name>loginuser</user-name>
                <password>XXX</password>
            </security>
        </datasource>
                <drivers>
                    <driver name="postgresql" module="org.postgresql">
                        <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
                    </driver>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>

⑥Keycloakを再起動する。

⑦以下のURLにアクセスし、ユーザを作成した後、ログインできることを確認する。


http://localhost:8080/auth/




<補足>
・PostgreSQLのテーブルを参照し、作成したユーザが表示されることを確認してみる。

keycloak=>
keycloak=> select * from user_entity;
                  id                  | email |           email_constraint           | email_verified | enabled | federation_link | first_name | last_name | realm_id | username | created_timestamp | service_account_client_link | not_before --------------------------------------+-------+--------------------------------------+----------------+---------+-----------------+------------+-----------+----------+----------+-------------------+-----------------------------+------------ 721569fb-860e-4343-98a6-7da4e1810c5e |       | 273582fe-df93-4c92-a80d-1dead0c0b192 | f              | t       |                 |            |           | master   | test     |     1510489536041 |                             |          0
(1 行)


SSOのOSSである「Keycloak」を動かしてみる 

要件
・Java 8 JDK
・RAM: 512MB以上
・ディスク容量: 1GB以上
・データベース:Postgres, MySql, Oracle, etc
★クラスターで運用したい場合はRDBの冗長化が必須。
・Linux OSでインストールする場合、十分なエントロピーを確保するため、/dev/urandomを利用すること。

・Keycloackでは、standaloneモードとクラスターモードをサポートしている。今回はstandaloneモードで起動する。
・standaloneモードで起動すると、バンドルしているWildFlyが起動する。
・デフォルトのDBは、バンドルしているH2が利用される。

インストール手順
①以下のサイトからKeyclockの資材をダウンロードする。
  (3.4.0が最新版)

https://downloads.jboss.org/keycloak/3.4.0.Final/keycloak-3.4.0.Final.zip

②「keycloak-3.4.0.Final.zip 」を解凍する。

③keycloakを起動する。

> cd C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\bin
> standalone.bat

上記のバッチを実行すると、デフォルトではポート9990で起動する。

➃管理ユーザを作成する。

C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\bin>add-user.bat

What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
(a): a

Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : keycloakadmin
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
 - The password should be different from the username
 - The password should not be one of the following restricted values {root, admin, administrator}
 - The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
Password :
Re-enter Password :
What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[  ]:
About to add user 'keycloakadmin' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'keycloakadmin' to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\standalone\configuration\mgmt-users.properties'
Added user 'keycloakadmin' to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\domain\configuration\mgmt-users.properties'
Added user 'keycloakadmin' with groups  to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\standalone\configuration\mgmt-groups.properties'
Added user 'keycloakadmin' with groups  to file 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\domain\configuration\mgmt-groups.properties'
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? yes
To represent the user add the following to the server-identities definition <secret value="XXX" />
続行するには何かキーを押してください . . .

⑤以下のURLにアクセスすると、BASIC認証が求められる。

http://localhost:9990/console/App.html

BASIC認証に成功すると、以下の管理画面が表示される。



⑥Keycloak用の管理ユーザを作成する。

>add-user-keycloak.bat -u test -p password
Added 'test' to 'C:\Users\bushidoyasu\Downloads\keycloak-3.4.0.Final\keycloak-3.4.0.Final\standalone\configuration\keycloak-add-user.json', restart server to load user

⑦Keycloakを再起動する。

⑧以下のURLにアクセスし、ログインできることを確認する。




<補足>
H2コンソールを起動し、データベースの中身をみてみる。

> java -cp ..\modules\system\layers\base\com\h2database\h2\main\h2-1.4.193.jar org.h2.tools.Server -webAllowOthers

keycloakというデータベースをのぞいてみても、何もテーブルが作られていない。。。




Hyperledger Fabric v1.1.0-preview ソースからdockerイメージをビルドする。

Fabric  v1.1.0-previewをソースからdockerイメージをビルドする手順。

①FabricとFabric-caのソース一式をクローンする。

# git clone -b v1.1.0-preview https://github.com/hyperledger/fabric.git
# git clone -b v1.1.0-preview https://github.com/hyperledger/fabric-ca.git
# mkdir -p /opt/fabric/src/github.com/hyperledger/
# cp -rf fabric /opt/fabric/src/github.com/hyperledger
# cp -rf fabric-ca /opt/fabric/src/github.com/hyperledger

②環境変数を設定する。

# export GOPATH=/opt/fabric
# export GOHONE=/opt/fabric

③Fabricのdockerイメージを作成する。

# cd $GOHOME/src/github.com/hyperledger/fabric/
# make docker

以下のエラーが発生した。。。
・・・
+ wget -q http://www.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
The command '/bin/sh -c set -x     && cd /     && wget -q "http://www.apache.org/dist/zookeeper/$DISTRO_NAME/$DISTRO_NAME.tar.gz"     && tar -xzf "$DISTRO_NAME.tar.gz"     && mv "$DISTRO_NAME/conf/"* "$ZOO_CONF_DIR"     && rm -r "$DISTRO_NAME.tar.gz"' returned a non-zero code: 8
Makefile:205: recipe for target 'build/image/zookeeper/.dummy-x86_64-0.7.0-snapshot-c7b3fe0' failed

http://www.apache.org/dist/zookeeper にアクセスしてみると
zookeeper-3.4.9.tar.gzがなく、バージョンが3.4.10以降しかなかった。。。

とりあえず、3.4.10でダウンロードするようにDockerfileを修正する。

# vi build/image/zookeeper/Dockerfile
★以下を変更。
ARG DISTRO_NAME=zookeeper-3.4.10

# make docker
# docker images
REPOSITORY                     TAG                    IMAGE ID            CREATED              SIZE
hyperledger/fabric-tools       latest                 fdd9c70d1af3        27 seconds ago       1.42GB
hyperledger/fabric-tools       x86_64-1.1.0-preview   fdd9c70d1af3        27 seconds ago       1.42GB
hyperledger/fabric-couchdb     latest                 866f7fc6e93e        35 seconds ago       1.58GB
hyperledger/fabric-couchdb     x86_64-1.1.0-preview   866f7fc6e93e        35 seconds ago       1.58GB
hyperledger/fabric-kafka       latest                 e9f5f8d5f1d4        About a minute ago   1.37GB
hyperledger/fabric-kafka       x86_64-1.1.0-preview   e9f5f8d5f1d4        About a minute ago   1.37GB
hyperledger/fabric-zookeeper   latest                 f9fe6dffc638        2 minutes ago        1.39GB
hyperledger/fabric-zookeeper   x86_64-1.1.0-preview   f9fe6dffc638        2 minutes ago        1.39GB
<none>                         <none>                 d72c30ec06cb        3 minutes ago        1.33GB
hyperledger/fabric-testenv     latest                 6bf3e40d7f08        3 minutes ago        1.52GB
hyperledger/fabric-testenv     x86_64-1.1.0-preview   6bf3e40d7f08        3 minutes ago        1.52GB
hyperledger/fabric-buildenv    latest                 0824a7249f44        3 minutes ago        1.41GB
hyperledger/fabric-buildenv    x86_64-1.1.0-preview   0824a7249f44        3 minutes ago        1.41GB
hyperledger/fabric-orderer     latest                 76603b1f0f3e        4 minutes ago        159MB
hyperledger/fabric-orderer     x86_64-1.1.0-preview   76603b1f0f3e        4 minutes ago        159MB
hyperledger/fabric-peer        latest                 fcc5a0e8ea59        4 minutes ago        165MB
hyperledger/fabric-peer        x86_64-1.1.0-preview   fcc5a0e8ea59        4 minutes ago        165MB
hyperledger/fabric-javaenv     latest                 fb70e2629d32        4 minutes ago        1.49GB
hyperledger/fabric-javaenv     x86_64-1.1.0-preview   fb70e2629d32        4 minutes ago        1.49GB
hyperledger/fabric-ccenv       latest                 9203193f9935        5 minutes ago        1.35GB
hyperledger/fabric-ccenv       x86_64-1.1.0-preview   9203193f9935        5 minutes ago        1.35GB
hyperledger/fabric-baseimage   x86_64-0.4.2           76daf60aeff4        6 weeks ago          1.33GB
hyperledger/fabric-baseos      x86_64-0.4.2           6be1916d236d        6 weeks ago          130MB

➃Fabric-caのdockerイメージを作成する。

# cd $GOHOME/src/github.com/hyperledger/fabric-ca/
# make docker
# docker images | grep fabric-ca
hyperledger/fabric-ca-tools     latest                 6164429ffed0        2 hours ago         1.5GB
hyperledger/fabric-ca-tools     x86_64-1.1.0-preview   6164429ffed0        2 hours ago         1.5GB
hyperledger/fabric-ca-peer      latest                 13e583a4648b        2 hours ago         206MB
hyperledger/fabric-ca-peer      x86_64-1.1.0-preview   13e583a4648b        2 hours ago         206MB
hyperledger/fabric-ca-orderer   latest                 a88ff1f89153        2 hours ago         200MB
hyperledger/fabric-ca-orderer   x86_64-1.1.0-preview   a88ff1f89153        2 hours ago         200MB
hyperledger/fabric-ca           latest                 0a056a6cbdc1        2 hours ago         218MB
hyperledger/fabric-ca           x86_64-1.1.0-preview   0a056a6cbdc1        2 hours ago         218MB

<補足>
チェーンコードのコンテナ作成時に利用されるfabric-ccenvにおいて、shimのソースが解凍されていない問題が発生した。
fabric-ccenvコンテナを作成してログインし、確認してみてみる。

root@7c26bd340479:/opt/gopath# ls -l $GOPATH/src/
total 0
-rw-r--r-- 1 root root 0 Nov 12 14:36 goshim.tar.bz2

解凍されないまま、tar.bz2ファイルがある。
しかも、0バイトになっている。。。。

上記の事象が発生した場合は、make peerでコンパイルしてgoshim.tar.bz2を作成した後、所定の位置にコピーする。
その後、make docker-clean&make dockerを実行する。

# apt-get install libltdl-dev
# make peer
# cp build/goshim.tar.bz2 build/image/ccenv/payload/
# make docker-clean
# make docker