7
votes

Échec de l'atteinte du seuil implicite de 1 sous-stratégies, 1 reste nécessaire: autorisation refusée

J'ai créé un petit réseau HyperLedger Fabric où j'ai un seul canal avec une seule organisation et quelques pairs avec un service de commande.

Après avoir suivi les étapes normales de création de mes matériaux cryptographiques, de mon bloc de genèse et de mon canal. tx J'ai essayé de créer ma chaîne dans un conteneur cli en utilisant la commande:

version: '2'

services:

  orderer.example.com:
    container_name: orderer.example.com
    image: hyperledger/fabric-orderer:$IMAGE_TAG
    environment:
      #- ORDERER_GENERAL_LOGLEVEL=INFO
      - ORDERER_GENERAL_LOGLEVEL=DEBUG 
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
      # enabled TLS
      - ORDERER_GENERAL_TLS_ENABLED=true
      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]

    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: orderer
    volumes:
    - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
    - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
    - orderer.example.com:/var/hyperledger/production/orderer
    ports:
      - 7050:7050

  peer0.dl.example.com:
    container_name: peer0.dl.example.com
    extends:
      file: peer-base.yaml
      service: peer-base
    environment:
      - CORE_PEER_ID=peer0.dl.example.com
      - CORE_PEER_ADDRESS=peer0.dl.example.com:7051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.dl.example.com:7051
      # - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.dl.example.com:7051
      - CORE_PEER_LOCALMSPID=dlMSP
    volumes:
        - /var/run/:/host/var/run/
        - ../crypto-config/peerOrganizations/dl.example.com/peers/peer0.dl.example.com/msp:/etc/hyperledger/fabric/msp
        - ../crypto-config/peerOrganizations/dl.example.com/peers/peer0.dl.example.com/tls:/etc/hyperledger/fabric/tls
        - peer0.dl.example.com:/var/hyperledger/production
    ports:
      - 7051:7051
      - 7053:7053

  peer1.dl.example.com:
    container_name: peer1.dl.example.com
    extends:
      file: peer-base.yaml
      service: peer-base
    environment:
      - CORE_PEER_ID=peer1.dl.example.com
      - CORE_PEER_ADDRESS=peer1.dl.example.com:7051
      # - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.dl.example.com:7051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.dl.example.com:7051
      - CORE_PEER_LOCALMSPID=dlMSP
    volumes:
        - /var/run/:/host/var/run/
        - ../crypto-config/peerOrganizations/dl.example.com/peers/peer1.dl.example.com/msp:/etc/hyperledger/fabric/msp
        - ../crypto-config/peerOrganizations/dl.example.com/peers/peer1.dl.example.com/tls:/etc/hyperledger/fabric/tls
        - peer1.dl.example.com:/var/hyperledger/production
    ports:
      - 8051:7051
      - 8053:7053

  peer2.dl.example.com:
    container_name: peer2.dl.example.com
    extends:
      file: peer-base.yaml
      service: peer-base
    environment:
      - CORE_PEER_ID=peer2.dl.example.com
      - CORE_PEER_ADDRESS=peer2.dl.example.com:7051
      # - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.dl.example.com:7051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.dl.example.com:7051
      - CORE_PEER_LOCALMSPID=dlMSP
    volumes:
        - /var/run/:/host/var/run/
        - ../crypto-config/peerOrganizations/dl.example.com/peers/peer2.dl.example.com/msp:/etc/hyperledger/fabric/msp
        - ../crypto-config/peerOrganizations/dl.example.com/peers/peer2.dl.example.com/tls:/etc/hyperledger/fabric/tls
        - peer2.dl.example.com:/var/hyperledger/production
    ports:
      - 9051:7051
      - 9053:7053

Après cela, j'ai reçu l'erreur suivante:

version: '2'

volumes:
  orderer.example.com:
  peer0.dl.example.com:
  peer1.dl.example.com:
  peer2.dl.example.com:

networks:
  v1:

services:

  orderer.example.com:
    extends:
      file:   base/docker-compose-base.yaml
      service: orderer.example.com
    container_name: orderer.example.com
    networks:
      - v1

  peer0.dl.example.com:
    container_name: peer0.dl.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer0.dl.example.com
    networks:
      - v1

  peer1.dl.example.com:
    container_name: peer1.dl.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer1.dl.example.com
    networks:
      - v1

  peer2.dl.example.com:
    container_name: peer2.dl.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer2.dl.example.com
    networks:
      - v1


  cli:
    container_name: cli
    image: hyperledger/fabric-tools:$IMAGE_TAG
    tty: true
    stdin_open: true
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      #- CORE_LOGGING_LEVEL=DEBUG
      - CORE_LOGGING_LEVEL=INFO
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.dl.example.com:7051
      - CORE_PEER_LOCALMSPID=dlMSP
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/dl.example.com/peers/peer0.dl.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/dl.example.com/peers/peer0.dl.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/dl.example.com/peers/peer0.dl.example.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/dl.example.com/users/Admin@dl.example.com/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
    volumes:
        - /var/run/:/host/var/run/
        - ./../chaincode/:/opt/gopath/src/github.com/chaincode
        - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
        - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
        - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
    depends_on:
      - orderer.example.com
      - peer0.dl.example.com
      - peer1.dl.example.com
      - peer2.dl.example.com
    networks:
      - v1


7 commentaires

Quelle est la valeur des variables d'environnement LOCALMSPID et MSPCONFIGPATH que vous utilisez pour la commande de création de canal homologue?


@yacovm. Comme je l'ai mentionné dans mon docker-compose-cli, CORE_PEER_LOCALMSPID = dlMSP. -----. CORE_PEER_MSPCONFIGPATH = / opt / gopath / src / github.com / hyperledg‌er / fabric / peer / crypt‌ o / peerOrganizations / ‌ dl.example.com/users‌ /Admin@dl.example.co‌ m / msp


Peut-être que vos certificats ont expiré et que les politiques ne sont pas terminées. Pouvez-vous essayer de tailler une fois?


Pour faire fonctionner le réseau, j'ai créé un script shell dans lequel je supprime d'abord les artefacts de canal et les fichiers crypto-config précédents. Plus tard, je supprime le conteneur, les volumes et élague le réseau. La taille ne devrait donc pas être un problème.


Lien vers mon code: mega.nz/#F!vJIUWKgZ!hx1geJ916PH0LrKKe5Q0RA!


supprimer tous les conteneurs et exécuter - élaguer le volume docker avant de démarrer le réseau


@Harshit. Je l'ai déjà fait dans mon script shell. Veuillez le vérifier dans le lien fourni si la séquence semble incorrecte


6 Réponses :


1
votes

Il semble que la chaîne a déjà été créée et que vous essayez d'envoyer un fichier proto (channel.tx) avec la même identification de chaîne.

Si vous essayez simplement de créer une nouvelle chaîne, changez le nom de la chaîne et recréez channel.tx et envoyez la configuration mise à jour dans la commande cli.

Si vous essayez de mettre à jour la configuration de la chaîne, reportez-vous à ce document et suivez-le pour obtenir le dernier bloc de configuration et apporter les modifications nécessaires à l'ID MSP si nécessaire.

N'oubliez pas qu'une fois le canal créé, le client n'accepte que l'enveloppe de configuration de mise à jour du canal pour mettre à jour le canal et non le fichier Channel Config.


2 commentaires

Non, je n'ai pas encore créé la chaîne. C'est ce que je veux faire ici. J'ai généré le fichier crypto-config avec tous les certificats et clés pertinents. En outre, le fichier channel.tx et genesis.block. Je suis certain que je n'ai pas créé la chaîne.


pourriez-vous essayer de changer le nom du canal avec créer un nouveau fichier channel.tx après avoir édité le fichier configx.yaml et réessayer juste pour confirmer?



2
votes

Dans votre script ./byfn.sh lors de la création du bloc genesis, vous avez écrit cette commande

2019-02-24 23:34:25.334 IST [common/tools/configtxgen] main -> WARN 001 Omitting the channel ID for configtxgen for output operations is deprecated.  Explicitly passing the channel ID will be required in the future, defaulting to 'testchainid'

supprimez -channelID $ CHANNEL_NAME et ignorez cet avertissement

echo "##########################################################"
echo "#########  Generating Orderer Genesis block ##############"
echo "##########################################################"

configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block -channelID $CHANNEL_NAME

Cela devrait fonctionner maintenant. C'est le cas sur mon système.


2 commentaires

C'est une mauvaise pratique, le ChannelID pour le bloc genesis est celui qui fait référence au canal système. Les versions plus anciennes utilisent un canal par défaut testchainid comme canal système. Dans les versions futures, cela sera supprimé et la transmission du nom du canal système sera obligatoire.


Merci de 2020. Cependant, je trouve que c'est une mauvaise convention de dénomination d'avoir un seul et même nom d'argument de ligne de commande pour le canal système et pour tous les autres canaux. J'ai eu des problèmes, car je viens d'utiliser un seul et même nom pour tous les appels de configtxgen. Mais oui, si je lis lentement des documents, j'obtiens la différence.



8
votes

essayez d'utiliser des noms différents pour ChannelID dans la commande (ici, la valeur de ChannelID est byfn-sys-channel et c'est ce qu'on appelle "system channel"):

export CHANNEL_NAME=mychannel
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

et toutes les autres commandes avec ChannelID (voici DIFFERENT channel avec ChannelID mychannel):

export CHANNEL_NAME=mychannel  && ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

...

../bin/configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block


0 commentaires

1
votes
fabric-ca-client register --id.name admin2 --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,admin=true:ecert'

0 commentaires

3
votes

J'ai la même erreur.

docker stop $(docker ps -a -q)  ; docker rm -f $(docker ps -aq) ; docker system prune -a ; docker volume prune ; docker ps -a ; docker images -a ; docker volume ls

Après avoir tout supprimé du docker à l'aide de cette commande, l'erreur est résolue.

Error: got unexpected status: FORBIDDEN -- implicit policy evaluation failed - 0 sub-policies were satisfied, but this policy requires 1 of the 'Writers' sub-policies to be satisfied: permission denied

Surtout le ' docker volume prune 'est important.


1 commentaires

Juste un petit ajout, j'ai également dû supprimer les volumes de docker liés à l'installation précédente. Ensuite, cela a bien fonctionné.



0
votes

Soit la chaîne est déjà créée, soit vous n'êtes pas autorisé à y accéder, pour cela vous devez modifier les autorisations.

La solution la plus simple consiste à supprimer tous les conteneurs et images et à recommencer. La commande est la suivante:

docker stop $(docker ps -a -q)                    //stop all containers first

docker rm -f $(docker ps -aq)                     // remove all of them 

docker system prune -a                            // remove all stopcontainers

docker volume  prune                              //remove all volumes

Maintenant, redémarrez le réseau.


0 commentaires