Подробные инструкции по установке 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 Установить докер
-
Для начала необходимо установить версию 17.06.2-ce или выше, рекомендуется установить последнюю версию docker. Чтобы убедиться, что версия докера слишком низкая, перед установкой докера удалите предыдущий докер и переустановите докер.
sudo apt-get remove docker docker-engine docker.io
-
После удаления докера начните установку докера и выполните следующие команды соответственно
sudo apt install docker.io
-
Посмотреть версию
docker -v
-
(Необязательно) Если вы хотите, чтобы демон docker запускался автоматически при запуске системы, используйте следующую команду
sudo systemctl enable docker
-
Добавьте своего пользователя в группу докеров.
sudo usermod -a -G docker <username>
-
Наконец перезапустите службу
sudo systemctl daemon-reload sudo systemctl restart docker
-
Измените источник образа докера
# 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
- Выполните следующую команду для установки
sudo apt install docker-compose
- Убедитесь, что установка прошла успешно
docker-compose -v
- Разрешить другим пользователям выполнять связанные команды Compose
sudo chmod +x /usr/share/doc/docker-compose
1.6 Установить язык Go
- Сначала установите некоторые необходимые зависимости
sudo apt install libtool libltdl-dev
- Перейдите на веб-сайт 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
- После загрузки сжатого пакета Golang используйте команду tar, чтобы распаковать сжатый пакет по указанному пути / usr / local /, команда выглядит следующим образом
sudo tar -xzvf go1.15.5.linux-amd64.tar.gz -C /usr/local/
- Приступим к настройке переменных среды
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
- Используйте команду source, чтобы только что добавленная информация о конфигурации вступила в силу
source /etc/profile
- Используйте команду go version, чтобы убедиться, что установка прошла успешно.
Если отображается номер версии, установка прошла успешно.go version
2. Примеры установки, двоичные файлы и образы Docker.
2.1 Скачать исходный код фабрики
-
Сначала создайте папку (по умолчанию в ~ каталоге)
mkdir -p go/src/github.com/hyperledger/
-
Войдите в только что созданную папку
cd go/src/github.com/hyperledger/
-
Вытащить исходный код фабрики с 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
нота! ! ! !
- Непосредственное выполнение сценария bootstrap.sh будет очень медленным, и его легко отключить от сети из-за слишком длительного времени работы, что приведет к сбою загрузки. Поэтому не рекомендуется запускать сценарий bootstrap.sh напрямую , рекомендуется продолжить с версии 2.3.
- Если вы все еще чувствуете себя медленно при использовании следующих методов, вы можете попробовать другой метод установки образцов, двоичных файлов и образов 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, рекомендуется прочитать официальный документ