Может ли цепной код Java Hyperledger Fabric устанавливаться и запускаться без докера?

#hyperledger-fabric #hyperledger #hyperledger-chaincode

Вопрос:

Я пытаюсь настроить структуру Hyperledger без докера в Oracle Linux 8.4

Я использую fabric 2.2.3 из выпусков github.
https://github.com/hyperledger/fabric/releases/download/v2.2.3/hyperledger-fabric-linux-amd64-2.2.3.tar.gz

Я также пытаюсь понять, как это работает, НЕ используя fabric-ca.

До сих пор мне удавалось создавать свою собственную иерархию сертификатов и цепочки исключительно с использованием OpenSSL и этих каталогов MSP … С цепочками сертификатов мне также удалось

  • сгенерируйте блок генезиса с помощью cryptotxgen
  • запустил заказчика и он готов к обслуживанию
  • создайте новый канал с помощью cryptotxgen (я назвал его orderer-канал)
  • запустил пиринг и присоединился к новому каналу

Тем не менее, у меня постоянно возникают проблемы с цепным кодом.
Я пытаюсь установить цепной код Java, используя как
пакет цепного кода однорангового жизненного цикла, так и установку цепного кода однорангового жизненного цикла ПРОТИВ пакета однорангового цепного кода, установку однорангового цепного кода … без всякой удачи
он продолжает выдавать мне сообщение об ошибке docker (см. Журналы ниже).

Как я могу развернуть свой цепной код без докера ? Я попытался запустить одноранговый узел с помощью —peer-chaincodedev … но и без всякой удачи

Из приведенных ниже журналов видно, что при использовании chaincode install (без жизненного цикла) он сообщил об успешной установке, но не удался в docker.

Следовательно, как моя тема, возможно ли установить и запустить цепные коды без докера ?
Я зашел так далеко, чтобы настроить и настроить самостоятельно без докера, и теперь на самом последнем шаге, похоже, это заставляет меня использовать докер >__>

Журналы из установочного кода цепочки с использованием установки кода цепочки жизненного цикла:

 [user@hyperledgerfabric ~]# /appl/hyperledger-fabric/bin/peer lifecycle chaincode install /appl/chaincode/TestHLF-1.0.0.tar.gz --peerAddresses localhost:7051 -o localhost:7050
Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: docker build failed: docker image inspection failed: Get "http://unix.sock/images/testhlf-1.0.0-da9445c8699c299812759f4072a8069875a786f4382b00591b87c1feab4c9599-721fab386a2ac9009bd0e40582127b7895df36b6a1d74dfb108713d1b4751cd5/json": dial unix /var/run/docker.sock: connect: no such file or directory
 

Журналы из установочного кода цепочки с использованием установки кода цепочки (без жизненного цикла):

 [user@hyperledgerfabric ~]# /appl/hyperledger-fabric/bin/peer chaincode install -l java -p /appl/chaincode/TestHLF -n TestHLF -v 1.0.0 --peerAddresses localhost:7051 -o localhost:7050
2021-09-01 17:45:02.804  08 [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2021-09-01 17:45:02.804  08 [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
Error: install failed with status: 500 - chaincode installed to peer but could not build chaincode: docker build failed: docker image inspection failed: Get "http://unix.sock/images/testhlf-1.0.0-0e6bfac3b09ead9a0bd3e887e68ea728650f7c9e87b335ec6f539517b834ba08/json": dial unix /var/run/docker.sock: connect: no such file or directory

[user@hyperledgerfabric ~]# /appl/hyperledger-fabric/bin/peer chaincode list -C orderer-channel --peerAddresses localhost:7051 --installed
Get installed chaincodes on peer:
Name: TestHLF, Version: 1.0.0, Path: /appl/chaincode/TestHLF, Id: c57c51536a53f01ee95324a2de8a564d9485ecf86c313c7baa9348cd8ec70d96
 

Обновления внешнего конструктора и лаунчера:

пытался использовать внешний конструктор, но , похоже, он все еще ищет мой докер в моем узле.
В метаданных.json, переменная path , для чего она предназначена ?

 [user@hyperledgerfabric TestHLF]# /appl/hyperledger-fabric/bin/peer lifecycle chaincode install --peerAddresses localhost:7051 /appl/chaincode-builder/TestHLF/TestHLF.tar.gz
Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: docker build failed: docker image inspection failed: Get "http://unix.sock/images/testhlf-5cb99feb2a9be27749bfc0f05d93cddaf8b23a9023c3bbc217aebcb703082141-941a0fbcc36e8019c4cd118263ce7a6ba266432dc0a4d7e6b5a07554ba3d1923/json": dial unix /var/run/docker.sock: connect: no such file or directory
 

Я обновил свое ядро.yaml в моем сверстнике, чтобы указать на внешнего строителя.

 [user@hyperledgerfabric TestHLF]# grep externalBuilder -A3 /appl/blockchain/_config/core.yaml
#    externalBuilders: []
    externalBuilders:
        - path: /appl/chaincode-builder/TestHLF
          name: testhlf-builder

 

Here are the content of the tar, and the contents of important files.

 [user@hyperledgerfabric TestHLF]# tar -tvf /appl/chaincode-builder/TestHLF/TestHLF.tar.gz
-rw-r--r-- fabric/fabric    61 2021-09-02 10:29 metadata.json
-rw-r--r-- fabric/fabric   229 2021-09-02 10:29 code.tar.gz

[user@hyperledgerfabric TestHLF]# tar -tvf /appl/chaincode-builder/TestHLF/code.tar.gz
-rw-r--r-- fabric/fabric   150 2021-09-02 10:29 connection.json

[user@hyperledgerfabric TestHLF]# cat /appl/chaincode-builder/TestHLF/metadata.json
{
  "path": "",
  "type": "external",
  "label": "TestHLF"
}

[user@hyperledgerfabric TestHLF]# cat /appl/chaincode-builder/TestHLF/connection.json
{
  "address": "localhost:9999",
  "dial_timeout": "10s",
  "tls_required": "false",
  "client_auth_required": "false"
}

[user@hyperledgerfabric TestHLF]# ls -l bin
total 12
-rwxr-xr-x. 1 fabric fabric 307 Sep  2 10:42 build
-rwxr-xr-x. 1 fabric fabric 243 Sep  2 10:29 detect
-rwxr-xr-x. 1 fabric fabric 219 Sep  2 10:42 release
 

Updates (2) on External Builder amp; Launcher:

Here are more details on the detect, build, and release executable.
From previous update, the executable are with permission 755.
Also the executable to test whether it works or not, I didn’t do checking and just trying to output the value.
It seems to me it doesn’t even invoke the executable.

 [user@hyperledgerfabric bin]# cat build
#!/bin/bash

CHAINCODE_SOURCE_DIR=$1
CHAINCODE_METADATA_DIR=$2
BUILD_OUTPUT_DIR=$3

echo "CHAINCODE_SOURCE_DIR = $CHAINCODE_SOURCE_DIR"
echo "CHAINCODE_METADATA_DIR = $CHAINCODE_METADATA_DIR"
echo "BUILD_OUTPUT_DIR = $BUILD_OUTPUT_DIR"

touch /appl/chaincode-builder/TestHLF/touch02.txt

exit 0




[user@hyperledgerfabric bin]# cat detect
#!/bin/bash

CHAINCODE_SOURCE_DIR=$1
CHAINCODE_METADATA_DIR=$2

echo "CHAINCODE_SOURCE_DIR = $CHAINCODE_SOURCE_DIR"
echo "CHAINCODE_METADATA_DIR = $CHAINCODE_METADATA_DIR"

touch /appl/chaincode-builder/TestHLF/touch01.txt

exit 0




[user@hyperledgerfabric bin]# cat release
#!/bin/bash

BUILD_OUTPUT_DIR=$1
RELEASE_OUTPUT_DIR=$2

echo "BUILD_OUTPUT_DIR = $BUILD_OUTPUT_DIR"
echo "RELEASE_OUTPUT_DIR = $RELEASE_OUTPUT_DIR"

touch /appl/chaincode-builder/TestHLF/touch03.txt

exit 0
 

Обновления (3) для внешнего конструктора и запуска:

Я включаю режим отладки с помощью FABRIC_LOGGING_SPEC=debug
Вот журнал отладки, я ничего не вижу при вызове моих исполняемых файлов.

Отладочный вход в одноранговый узел:

 Sep 02 17:04:35 hyperledgerfabric peer[1588]: 2021-09-02 17:04:35.254  08 [lifecycle] InstallChaincode -> DEBU 49d received invocation of InstallChaincode for install package 1f8b08001c9130610003cb4d2d494c492c49d4cb2acecf63a00d300002331313106d68...
Sep 02 17:04:35 hyperledgerfabric peer[1588]: 2021-09-02 17:04:35.254  08 [ccprovider] MetadataAsTarEntries -> DEBU 49e Created metadata tar
Sep 02 17:04:35 hyperledgerfabric peer[1588]: 2021-09-02 17:04:35.255  08 [chaincode] handleMessage -> DEBU 49f [a0343dde] Fabric side handling ChaincodeMessage of type: COMPLETED in state ready
Sep 02 17:04:35 hyperledgerfabric peer[1588]: 2021-09-02 17:04:35.255  08 [chaincode] Notify -> DEBU 4a0 [a0343dde] notifying Txid:a0343ddee86f669b143923992bd36e6b735b39de681dfb8f230c10af3f469410, channelID:
Sep 02 17:04:35 hyperledgerfabric peer[1588]: 2021-09-02 17:04:35.255  08 [chaincode] Execute -> DEBU 4a1 Exit
Sep 02 17:04:35 hyperledgerfabric peer[1588]: 2021-09-02 17:04:35.255  08 [endorser] callChaincode -> INFO 4a2 finished chaincode: _lifecycle duration: 1ms channel= txID=a0343dde
Sep 02 17:04:35 hyperledgerfabric peer[1588]: 2021-09-02 17:04:35.255  08 [comm.grpc.server] 1 -> INFO 4a3 unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=[::1]:35628 grpc.code=OK grpc.call_duration=1.805332ms
Sep 02 17:04:35 hyperledgerfabric peer[1588]: 2021-09-02 17:04:35.257  08 [grpc] infof -> DEBU 4a4 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
Sep 02 17:04:35 hyperledgerfabric peer[1588]: 2021-09-02 17:04:35.257  08 [grpc] infof -> DEBU 4a5 transport: loopyWriter.run returning. connection error: desc = "transport is closing"
 

Журнал отладки при вызове установки кода цепочки жизненного цикла:

 2021-09-02 17:04:35.245  08 [msp] setupSigningIdentity -> DEBU 01a Signing identity expires at 2041-08-24 07:42:50  0000 UTC
2021-09-02 17:04:35.246  08 [msp] GetDefaultSigningIdentity -> DEBU 01b Obtaining default signing identity
2021-09-02 17:04:35.248  08 [grpc] Infof -> DEBU 01c parsed scheme: ""
2021-09-02 17:04:35.248  08 [grpc] Infof -> DEBU 01d scheme "" not registered, fallback to default scheme
2021-09-02 17:04:35.248  08 [grpc] Infof -> DEBU 01e ccResolverWrapper: sending update to cc: {[{localhost:7051  <nil> 0 <nil>}] <nil> <nil>}
2021-09-02 17:04:35.249  08 [grpc] Infof -> DEBU 01f ClientConn switching balancer to "pick_first"
2021-09-02 17:04:35.249  08 [grpc] Infof -> DEBU 020 Channel switches to new LB policy "pick_first"
2021-09-02 17:04:35.249  08 [grpc] Infof -> DEBU 021 Subchannel Connectivity change to CONNECTING
2021-09-02 17:04:35.249  08 [grpc] Infof -> DEBU 022 Subchannel picks a new address "localhost:7051" to connect
2021-09-02 17:04:35.249  08 [grpc] UpdateSubConnState -> DEBU 023 pickfirstBalancer: HandleSubConnStateChange: 0xc00040f7f0, {CONNECTING <nil>}
2021-09-02 17:04:35.249  08 [grpc] Infof -> DEBU 024 Channel Connectivity change to CONNECTING
2021-09-02 17:04:35.251  08 [grpc] Infof -> DEBU 025 Subchannel Connectivity change to READY
2021-09-02 17:04:35.251  08 [grpc] UpdateSubConnState -> DEBU 026 pickfirstBalancer: HandleSubConnStateChange: 0xc00040f7f0, {READY <nil>}
2021-09-02 17:04:35.251  08 [grpc] Infof -> DEBU 027 Channel Connectivity change to READY
2021-09-02 17:04:35.251  08 [grpc] Infof -> DEBU 028 parsed scheme: ""
2021-09-02 17:04:35.251  08 [grpc] Infof -> DEBU 029 scheme "" not registered, fallback to default scheme
2021-09-02 17:04:35.251  08 [grpc] Infof -> DEBU 02a ccResolverWrapper: sending update to cc: {[{localhost:7051  <nil> 0 <nil>}] <nil> <nil>}
2021-09-02 17:04:35.251  08 [grpc] Infof -> DEBU 02b ClientConn switching balancer to "pick_first"
2021-09-02 17:04:35.251  08 [grpc] Infof -> DEBU 02c Channel switches to new LB policy "pick_first"
2021-09-02 17:04:35.251  08 [grpc] Infof -> DEBU 02d Subchannel Connectivity change to CONNECTING
2021-09-02 17:04:35.251  08 [grpc] Infof -> DEBU 02e Subchannel picks a new address "localhost:7051" to connect
2021-09-02 17:04:35.251  08 [grpc] UpdateSubConnState -> DEBU 02f pickfirstBalancer: HandleSubConnStateChange: 0xc000283ec0, {CONNECTING <nil>}
2021-09-02 17:04:35.252  08 [grpc] Infof -> DEBU 030 Channel Connectivity change to CONNECTING
2021-09-02 17:04:35.252  08 [grpc] Infof -> DEBU 031 Subchannel Connectivity change to READY
2021-09-02 17:04:35.252  08 [grpc] UpdateSubConnState -> DEBU 032 pickfirstBalancer: HandleSubConnStateChange: 0xc000283ec0, {READY <nil>}
2021-09-02 17:04:35.252  08 [grpc] Infof -> DEBU 033 Channel Connectivity change to READY
2021-09-02 17:04:35.253  08 [msp.identity] Sign -> DEBU 034 Sign: plaintext: 0ACB080A6108031A0B08A3A7C2890610...05A36014D00F00005318644000280000
2021-09-02 17:04:35.253  08 [msp.identity] Sign -> DEBU 035 Sign: digest: 6C40B4067E4B357821801A1314B2D276BCD3E5B60AF86CDD11AC93776F0A0EBE
Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: docker build failed: docker image inspection failed: Get "http://unix.sock/images/testhlf-d092ae78b2f02de3ae597e09cfe84543dc97a65588b2f78e2dd0260811963252-84293d54f47de427b969eef63391a9deca67ecff063052fda66e267832490491/json": dial unix /var/run/docker.sock: connect: no such file or directory
 

Ответ №1:

Ваша проблема с docker, по-видимому, заключается в том, что одноранговый узел не находит сокет демона Docker, в котором он ожидает запустить контейнер цепного кода.

Расположение демона docker внутри однорангового узла настраивается с помощью переменной среды:

       - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
 

Обычно он отображается из файловой системы, в которой работает одноранговый контейнер, через том:

       - /var/run/:/host/var/run/
 

Итак, если ваш одноранговый узел работает на компьютере с запущенным сокетом docker daemon Unix, это должно быть легко исправить, найдя сокет (и проверив его разрешения) и настроив одноранговые узлы.

В качестве альтернативы вы также можете настроить конечную точку TCP Docker CORE_VM_ENDPOINT вместо сокета Unix.

Если все это невозможно в вашей среде (если вы работаете с какой-либо ограничительной средой), вы всегда можете включить внешние сборщики и пусковые установки на своих коллегах и соответствующим образом развернуть свой цепной код. Это был бы конкретный ответ на название вашего вопроса: ДА, с помощью внешних разработчиков и пусковых установок. Но это сложнее, чем соответствующим образом настроить доступ к вашему демону docker.

Все ваши соображения ЦС не влияют на ваш вопрос. Но в вашей производственной среде вы должны использовать какой-то центр сертификации…

Комментарии:

1. Я понимаю, что он не смог найти мой докер, потому что я не устанавливал никакого докера, так как я намерен запустить его без докера. Позвольте мне попробовать с внешними строителями и пусковыми установками. Будет обновлено снова с результатом.

2. Я обновил свой тест на внешнем конструкторе, но, похоже, все еще испытываю ту же проблему, он все еще ищет моего докера. Ценю ваше следующее руководство.

3.Ваш внешний конструктор не выполняется (потому что он неправильно настроен), поэтому ваш одноранговый узел пытается установить традиционным способом. Ваша core.yaml externalBuilders конфигурация должна указывать на папку , содержащую подходящие build detect и release исполняемые файлы (проверьте их разрешения). Вот хороший полный пример (для Go, а не для Java): github.com/hyperledger/fabric-samples/tree/master/.… А я уже говорил, что это не тривиальная конфигурация.

4. When an externalBuilder configuration is present, the peer will iterate over the list of builders in the order provided, invoking bin/detect until one completes successfully. If no builder completes detect successfully, the peer will fallback to using the legacy Docker build process implemented within the peer. This means that external builders are completely optional.

5. Я обновил содержимое исполняемых файлов: сборка, обнаружение и выпуск, как показано в моем посте, разрешение 755, следовательно, это не должно быть проблемой с разрешениями на файлы. Я также намеренно не проводил никакой проверки и просто печатал значение с всегда выходящим 0. Но мне кажется, что он даже не вызывает мои исполняемые файлы. Как я могу отлаживать в fabric, вызывая свой исполняемый файл ?