Подробные инструкции по установке Hyperledger Fabric 2.x и возможные решения проблем

Подробные инструкции по установке Hyperledger Fabric 2.x и возможные решения проблем

Используйте версию системы: Ubuntu 18.04.
Совет 1. При возникновении любой ошибки в команде вы можете попробовать добавить sudo, чтобы повысить привилегии! ! !
Совет 2: Если система Ubuntu не изменяет источник, вы можете обратиться к тому, как изменить источник программного обеспечения ubuntu на внутренний источник, чтобы изменить источник.
Справочная статья: Официальный документ
Сборник ошибок Hyperledger Fabric 2.0.0

1. Подготовительный этап

1.1 Установите pip и обновите

pip - это инструмент управления пакетами Python, который предоставляет функции для поиска, загрузки, установки и удаления пакетов Python.

	sudo apt install python-pip
	# 直接使用pip install --upgrade pip 命令会很慢,需要换源
	# 这里直接使用-i参数,指定pip源
	pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple

1.2 Установите curl

CURL - это инструмент для передачи файлов, который использует синтаксис URL для работы в командной строке.

sudo apt install curl

1.3 Установите git

Git - это распределенная система управления версиями с открытым исходным кодом, предназначенная для быстрой и эффективной работы с любым небольшим или большим проектом.

sudo apt install git

1.4 Установить докер

  1. Для начала необходимо установить версию 17.06.2-ce или выше, рекомендуется установить последнюю версию docker. Чтобы убедиться, что версия докера слишком низкая, перед установкой докера удалите предыдущий докер и переустановите докер.

    sudo apt-get remove docker docker-engine docker.io
    
  2. После удаления докера начните установку докера и выполните следующие команды соответственно

    sudo apt install docker.io
    
  3. Посмотреть версию

    docker -v
    
  4. (Необязательно) Если вы хотите, чтобы демон docker запускался автоматически при запуске системы, используйте следующую команду

    sudo systemctl enable docker
    
  5. Добавьте своего пользователя в группу докеров.

    sudo usermod -a -G docker <username>
    
  6. Наконец перезапустите службу

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  7. Измените источник образа докера

    # docker默认的源为国外官方源,下载速度较慢,可改为国内加速
    cd /etc/docker
    sudo vim daemon.json
    # 写入
    {
          
          
      "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
    }
    #保存退出
    #重启docker服务
    systemctl restart docker.service
    # 进入主目录
    cd ~
    

1.5 Установите docker-compose

  1. Выполните следующую команду для установки
    sudo apt install docker-compose
    
  2. Убедитесь, что установка прошла успешно
    docker-compose -v
    
  3. Разрешить другим пользователям выполнять связанные команды Compose
    sudo chmod +x /usr/share/doc/docker-compose
    

1.6 Установить язык Go

  1. Сначала установите некоторые необходимые зависимости
    sudo apt install libtool libltdl-dev
    
  2. Перейдите на веб-сайт studygolang, чтобы загрузить установочный пакет языка Go, последнюю версию на данный момент: go1.15.5.linux-amd64.tar.gz
    Скопируйте сжатый пакет в путь / usr / local, а затем разархивируйте
    sudo wget https://studygolang.com/dl/golang/go1.15.5.linux-amd64.tar.gz
    
  3. После загрузки сжатого пакета Golang используйте команду tar, чтобы распаковать сжатый пакет по указанному пути / usr / local /, команда выглядит следующим образом
    sudo tar -xzvf go1.15.5.linux-amd64.tar.gz -C /usr/local/
    
  4. Приступим к настройке переменных среды
    sudo vim /etc/profile
    #在文件末尾加入如下代码
    export PATH=$PATH:/usr/local/go/bin
    export GOROOT=/usr/local/go
    export GOPATH=$HOME/go
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    
  5. Используйте команду source, чтобы только что добавленная информация о конфигурации вступила в силу
     source /etc/profile
    
  6. Используйте команду go version, чтобы убедиться, что установка прошла успешно.
    go version
    
    Если отображается номер версии, установка прошла успешно.

2. Примеры установки, двоичные файлы и образы Docker.

2.1 Скачать исходный код фабрики

  1. Сначала создайте папку (по умолчанию в ~ каталоге)

    mkdir -p go/src/github.com/hyperledger/
    
  2. Войдите в только что созданную папку

    cd go/src/github.com/hyperledger/
    
  3. Вытащить исходный код фабрики с github

    git clone https://github.com/hyperledger/fabric.git
    # 注意:这一步下载会很慢,可以使用科学上网方法
    # 也可以使用Chrome浏览器中GitHub加速插件,下面使用加速插件连接替换
    # 以下代码执行其中一行即可。
    git clone https://hub.fastgit.org/hyperledger/fabric.git
    # or
    git clone https://github.com.cnpmjs.org/hyperledger/fabric.git
    # or
    git clone https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric.git
    

2.2 Выполнить скрипт bootstrap.sh

Fabric официально предоставляет сценарий bootstrap.sh, который выполняет три функции: 1. Загрузка файлов образцов ткани, 2. Загрузка двоичных файлов, 3. Получение образов докеров. И этот скрипт поддерживает три параметра, которые могут гибко контролировать его выполнение. Это
-b: с этим параметром двоичный файл не будет загружен.

-d: добавить этот параметр, чтобы не тянуть образ докера

-s: Добавьте этот параметр, чтобы не загружать образцы тканей

После завершения операции в 2.1 войдите в каталог ~ / go / src / github.com / hyperledger / fabric / scripts, вы увидите файл сценария bootstrap.sh, просто выполните его.

cd ~/go/src/github.com/hyperledger/fabric/scripts
sudo ./bootstrap.sh

нота! ! ! !

  1. Непосредственное выполнение сценария bootstrap.sh будет очень медленным, и его легко отключить от сети из-за слишком длительного времени работы, что приведет к сбою загрузки. Поэтому не рекомендуется запускать сценарий bootstrap.sh напрямую , рекомендуется продолжить с версии 2.3.
  2. Если вы все еще чувствуете себя медленно при использовании следующих методов, вы можете попробовать другой метод установки образцов, двоичных файлов и образов Docker в Hyperledger Fabric . Но следующий способ проще в использовании и является более рекомендуемым.

2.3 Измените bootstrap.sh

  • Введите bootstrap.sh
vim ~/go/src/github.com/hyperledger/fabric/scripts/bootstrap.sh
  • Измените функцию cloneSamplesRepo ().
    В функции cloneSamplesRepo () вы обнаружите, что образцы ткани клонированы в GitHub. Прокомментируйте исходный код клона и измените его на любой из следующих кодов клонирования (вы можете попробовать, какой адрес доступа самый быстрый, выберите самый быстрый адрес)
# 源代码为
# git clone -b master https://github.com/hyperledger/fabric-samples.git && cd fabric-samples
# 修改为
git clone -b master https://hub.fastgit.org/hyperledger/fabric-samples.git && cd fabric-samples
# or
git clone -b master https://github.com.cnpmjs.org/hyperledger/fabric-samples.git && cd fabric-samples
# or
git clone -b master https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric-samples.git && cd fabric-samples

Модифицированная функция cloneSamplesRepo () выглядит следующим образом

cloneSamplesRepo() {
    
    
    # clone (if needed) hyperledger/fabric-samples and checkout corresponding
    # version to the binaries and docker images to be downloaded
    if [ -d first-network ]; then
        # if we are in the fabric-samples repo, checkout corresponding version
        echo "==> Already in fabric-samples repo"
    elif [ -d fabric-samples ]; then
        # if fabric-samples repo already cloned and in current directory,
        # cd fabric-samples
        echo "===> Changing directory to fabric-samples"
        cd fabric-samples
    else
        echo "===> Cloning hyperledger/fabric-samples repo"
        #git clone -b master https://github.com/hyperledger/fabric-samples.git && cd fabric-samples
        git clone -b master https://hub.fastgit.org/hyperledger/fabric-samples.git && cd fabric-samples
        fi

    if GIT_DIR=.git git rev-parse v${VERSION} >/dev/null 2>&1; then
        echo "===> Checking out v${VERSION} of hyperledger/fabric-samples"
        git checkout -q v${VERSION}
    else
        echo "fabric-samples v${VERSION} does not exist, defaulting master"
        git checkout -q master
    fi
}
  • Измените функцию pullBinaries ().
    В функции pullBinaries () вы обнаружите, что двоичные файлы fabric v * и fabric ca v * также загружаются с GitHub. Пометьте исходный код загрузки и измените его на один из следующих кодов загрузки (вы можете попробовать, какой адрес доступа Самый быстрый, выберите самый быстрый адрес доступа)
# 源代码为
download "${BINARY_FILE}" "https://github.com/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"
download "${CA_BINARY_FILE}" "https://github.com/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"
# 修改为
download "${BINARY_FILE}" "https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"
download "${CA_BINARY_FILE}" "https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"

Модифицированная функция pullBinaries () выглядит следующим образом

pullBinaries() {
    
    
    echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries"
    # download "${BINARY_FILE}" "https://github.com/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"
    download "${BINARY_FILE}" "https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"
    if [ $? -eq 22 ]; then
        echo
        echo "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"
        echo
        exit
    fi

    echo "===> Downloading version ${CA_TAG} platform specific fabric-ca-client binary"
    # download "${CA_BINARY_FILE}" "https://github.com/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"
    download "${CA_BINARY_FILE}" "https://github.91chifun.workers.dev//https://github.com/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"
    if [ $? -eq 22 ]; then
        echo
        echo "------> ${CA_TAG} fabric-ca-client binary is not available to download  (Available from 1.1.0-rc1) <----"
        echo
        exit
    fi
}

Сохраните скрипт bootstrap.sh.

2.4 Выполните измененный скрипт bootstrap.sh

Просто выполните измененный сценарий bootstrap.sh.

cd ~/go/src/github.com/hyperledger/fabric/scripts
sudo ./bootstrap.sh
# 下载速度可能还是很慢,可以等等再下载,因为可能源服务器下载量太大。
# 但是就算比较慢,还是比直接在GitHub上下载要快得多!!!

Среда конфигурации После
запуска каталоги bin и config будут сформированы в каталоге fabric-samples.

Добавьте его в переменную среды PATH, чтобы получить эти команды, не указывая абсолютный путь к каждому двоичному файлу.

sudo vim /etc/profile
export PATH=$GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/bin:$PATH
# 保存退出
# 执行
source /etc/profile

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

peer version

3. Используйте тестовую сеть Fabric.

3.1 Запуск тестовой сети

Найдите сценарий для запуска сети в каталоге test-network базы кода Fabric-samples. В этом каталоге находится аннотированный сценарий network.sh, который использует образ Docker для создания сети Fabric на локальном компьютере.
Выполните следующую команду, чтобы запустить сеть

cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network
sudo ./network.sh up
# 此命令创建一个由两个对等节点和一个排序节点组成的Fabric网络

3.2 Создание канала

Вы можете использовать сценарий network.sh, чтобы создать канал между Org1 и Org2 и присоединиться к их одноранговым узлам. Выполните следующую команду, чтобы создать канал с именем по умолчанию «mychannel»:

sudo ./network.sh createChannel

Если команда выполнена успешно, вы увидите в своем журнале следующее сообщение:

========= Channel successfully joined ===========

Вы также можете использовать флаг канала для создания канала с произвольным именем. Например, следующая команда создаст канал с именем channel1:

sudo ./network.sh createChannel -c channel1

Флаг канала также позволяет создавать несколько каналов с разными именами. После создания mychannel или channel1 вы можете использовать следующую команду для создания другого канала с именем channel2:

sudo ./network.sh createChannel -c channel2

Если вы хотите построить сеть и создать канал за один шаг, вы можете использовать режимы up и createChannel вместе:

# 先使用sudo ./network.sh down关闭上面开启的Fabric网络。否则会失败。
sudo ./network.sh up createChannel

3.3 Запуск цепного кода на канале

После создания канала с помощью network.sh вы можете запустить чейнкод на канале с помощью следующей команды:

sudo ./network.sh deployCC

нота! ! !
Возможные проблемы 1 После
выполнения указанной выше команды может возникнуть ошибка, заключающаяся в том, что команда go не может быть найдена.Это связано с тем, что команда sudo сбрасывает текущие переменные среды, в результате чего команда go не может быть найдена. Умные люди могут подумать о том, чтобы не добавлять команду sudo, и после запуска вы обнаружите, что разрешений недостаточно.

Error: failed to normalize chaincode path: failed to determine module root: exec: "go": executable file not found in $PATH

Решение такое:

vim ~/.bashrc
# 开头或末尾添加
alias sudo='sudo env PATH=$PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH'
# 保存退出
# 重置环境配置
source ~/.bashrc

Возможная проблема 2
После выполнения указанной выше команды может возникнуть следующая ошибка:

Error: failed to normalize chaincode path: 'go list' failed with: go: github.com/golang/[email protected]: Get "https://proxy.golang.org/github.com/golang/protobuf/@v/v1.3.2.mod": dial tcp 216.58.200.49:443: connect: connection refused: exit status 1

Посмотрев сообщение об ошибке, вы увидите, что оно посещает официальный сайт golang https://proxy.golang.org, который является внешней сетью, и, естественно, выдается сообщение об ошибке.
Решение такое:

# 在命令行直接运行
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

После решения двух вышеупомянутых проблем повторно запустите команду запуска кода цепочки.

3.4 Взаимодействие с сетью

После включения тестовой сети вы можете использовать одноранговый интерфейс командной строки для взаимодействия с вашей сетью. Одноранговый интерфейс командной строки позволяет вызывать развернутые смарт-контракты, обновлять каналы или устанавливать и развертывать новые смарт-контракты. Используйте следующую команду, чтобы добавить одноранговый двоичный файл в папке bin к пути вашего интерфейса командной строки:

export PATH=${PWD}/../bin:${PWD}:$PATH

Установите FABRIC_CFG_PATH в базе кода образцов структуры, чтобы указать на файл core.yaml:

export FABRIC_CFG_PATH=$PWD/../config/

Задайте переменные среды, чтобы вы могли управлять одноранговым интерфейсом командной строки как Org1:

# Environment variables for Org1
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051
# 最后更新环境配置
source /etc/profile

Переменные среды CORE_PEER_TLS_ROOTCERT_FILE и CORE_PEER_MSPCONFIGPATH указывают на зашифрованные материалы в папке организаций на Org1. Если вы используете ./network.sh deployCC для установки и запуска цепного кода fabcar, теперь вы можете запросить реестр из интерфейса командной строки. Выполните следующую команду, чтобы получить список автомобилей, добавленных в реестр каналов:

sudo peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

нота! ! ! При выполнении указанной выше команды запроса могут возникнуть следующие ошибки:

Fatal error when initializing core config : error when reading core config file: Config File "core" Not Found in "[/home/test/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network]"

Вышеупомянутая ошибка все еще связана с переменными окружения. Решение заключается в следующем: войдите в соответствующий каталог и выполните команду запуска:

sudo vim /etc/sudoers
# 将”Defaults env_reset”改成”Defaults !env_reset”,
# 使用sudo模式需要重置用户的所有环境变量,改变此选项后就不再重置了。
Defaults !env_reset

Выполните команду запроса еще раз, если снова возникнет следующая ошибка:

Error: endorsement failure during query. response: status:500 message:"make sure the chaincode fabcar has been successfully defined on channel mychannel and try again: chaincode fabcar not found"

Решение такое:

cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/fabcar
sudo ./startFabric.sh

Снова выполните команду запроса

cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network
sudo peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

Когда член сети хочет передать или изменить активы на счете, будет вызван цепной код. Используйте следующую команду, чтобы вызвать цепной код fabcar, чтобы изменить владельца автомобиля в бухгалтерской книге:

sudo peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"changeCarOwner","Args":["CAR9","Dave"]}'

Если команда выполнена успешно, вы должны увидеть следующий ответ:

Chaincode invoke successful. result: status:200

3.5 Выключите сеть

После использования тестовой сети вы можете использовать следующую команду для выключения сети:

sudo ./network.sh down

Напишите в конце

Если вы хотите изучить Hyperledger-Fabric, рекомендуется прочитать официальный документ

рекомендация

отblog.csdn.net/mutou___/article/details/109849720
рекомендация