Windows下fabric sdk连接Linux上fabric网络的调试过程

上个月刚入职一家公司从事区块链研发工作,选型采用Hyperledger Fabric作为开发平台。团队的小组成员全部采用的是在VirtualBox上面安装桌面版的Ubuntu 16.04虚拟机,开发工具JetBrains GoLand也就直接在桌面版的虚拟机里面安装。而我因为之前比较习惯使用Vagrant + VirtualBox的方式快速加载我定制版的Ubuntu镜像从而创建Linux开发环境,这样一来的弊端就是我只能通过命令行来进行一切操作而没有桌面可操作,所以我的整个开发IDE就在本机的windows上进行。

我们的Fabric网络是采用的Docker方式启动,作为自己本地的测试环境自然就将网络搭建在Ubuntu虚拟机里面,前期由其它小组成员负责针对Go语言版本的SDK(Hyperledger子项目fabric-sdk-go)进行封装调用并利用Beego作为服务器将相应的API暴露出来,而我负责的便是将他们暴露出来的API进一步封装为标准Go版的SDK,所谓的标准就是对调用者而言无感是调用的区块链。这个时候问题就出现了,在我写SDK的过程中用单元测试对他们的API发起Http请求调用时一脸懵逼,观察Beego服务器打印的日志信息少的可怜几乎没有,以前从来不习惯用断点调试的我这个时候首先想到的便是希望能够在他们的API服务中加入适当的断点以便我这边的SDK发起请求时能够一步步跟踪到底,然而他们的API服务Beego也是部署在Ubuntu虚拟机中,对于他们自己开发来说反正开发工具IDE也在桌面版的Ubuntu中所以天然在IDE中启动断点调试没有丁点儿问题,那我的IDE在本地windows上,所以我需要在我的IDE中Debug运行他们的API服务,这个时候麻烦来了,API服务因为封装了对fabric-sdk-go的调用,也就意味着我需要做一些调整以便能够让他们的API服务能够从我的本地windows连接到虚拟机里面的Fabric网络,只有这样才可以完成从我的SDK发起Http请求到他们的API服务,再由API去通过fabric-sdk-go发起对Ubuntu虚拟机上Fabric网络的操作这样一个完整的流程。

说下我是如何让本地windows的API服务连接到Ubuntu虚拟机里面的Fabric网络的。其实连接Fabric网络是他们API所封装的fabric-sdk-go,那么最关键的配置无疑便是config_fabric.yaml配置文件。在那个配置文件中有一系列要访问Fabric网络所需的crypto,msp,tls等物理路径,所以自然需要将其中${GOPATH}全部替换为本地windows的GOPATH绝对路径。本以为这样就可以完事大吉,可没想到这个时候无论我怎样调用,他们的API始终在初始化fabric sdk的时候报错,无奈只好在初始化的时候打断点往进跟,跟的具体细节(坑也不少)就不展示了,关键部分如下图。

终于明白原来它从fabric_config.yaml中读取到systemCertPool属性的值应该为true,以致于调用了x509.SystemCertPool()方法,最终由于runtime.GOOS == "windows",自然就抛出"crypto/x509: system root pool is not available on Windows"这样的异常信息从而初始化SDK失败。

查看fabric_config.yaml配置文件,果然systemCertPool为true,如下图:

到这里本以为就算搞定了,便从我的SDK发起了一个创建Channel的单元测试,结果虽然没报错但是Ubuntu虚拟机上的Fabric网络后台一行日志都没打印,很显然Fabric网络的创建通道命令并没有被API端的fabric-sdk-go所触发,可是初始化已经成功了,只能再次在创建通道部分进行断点跟踪,发现在创建通道时候需要传递的通道配置文件txFile文件还是之前在Ubuntu虚拟机下的绝对路径,在SDK单元测试创建通道功能的时候将传递的txFile设为本地windows上的tx文件绝对路径,再次运行创建通道单元测试搞定!自此windows跟Ubuntu虚拟机的Fabric网络正式打通,以后便可以在windows上利用IDE以Debug模式启动他们的API服务,我的SDK发起调用时便可以轻松利用断点调试来跟踪底层执行逻辑。

作为一名纯软件工程专业毕业的程序猿,以前总觉得自己的逻辑思维能力够强,靠想象来感觉代码的执行流程,靠感觉来判断问题应该出在哪里,通过这次的经历深刻意识到断点调试的重要性,从今往后遇到bug一定第一时间用debug来执行调试,相信一定会节约不少宝贵的时间从而提高工作效率~

原文地址:https://www.cnblogs.com/qiangjiyi/p/9343661.html

时间: 2024-08-05 12:55:51

Windows下fabric sdk连接Linux上fabric网络的调试过程的相关文章

Windows 下远程桌面连接linux服务器(确保服务器为带桌面版)

方法一(通过xmanager中的Xbrowser工具远程桌面): 详细步骤 Cd  /etc/sysconfig/ Vi  displaymanager ,修改 DISPLAYMANAGER_REMOTE_ACCESS=“yes” DISPLAYMANAGER_ROOT_LOGIN_RENOTE=”yes” 执行命令:rcxdm restart 来 重启XDM服务, 在客户机上启动Xbrowser,刷新即可看到你想要连接的服务器,双击即可 或者输入suse linux机器IP地址来连接: 二.方

WINDOWS下用XWin32 连接Linux图形界面

如果有WINDOWS想用图形界面管理远程的LINUX服务器,或调试Linux图形软件.用Xwin32这个商业软件可能是一个选项,它很小,但是功能齐全. Windows下可以通过SSH客户端或Telnet程序远程登录到Linux/Unix 上进行管理,编程开发和调试字符界面程序.比如用Magic Unix C++这样的Windows 下的集成开发环境.界面完全模仿VC++ 6.0.可以象VC++单步调试Windows程序一样,去调试Linux或Unix远程主机应用程序.非常高效和方便. Linux

在 Windows 下远程桌面连接 Linux - VNC 篇

VNC是由AT&T试验室开发,是一款优秀的远程控制工具软件,后来以GPL授权的形式开源.经过几年的发展,现在的VNC已经不单指某个软件,而是一类软件的通称.下面介绍Linux下常用的两个VNC软件. VNC的原理就是不停的对窗口界面截屏,再将图像传输给客户端,同时VNC服务器端接管服务器端的键盘.鼠标控制权,客户端可以通过服务器端操纵键盘鼠标.比较类似Windows下的pcAnywhere. 一.Windows 端设置 先讲Windows端是因为,下述的两个VNC可以用同一个客户端连接. 在Wi

Windows下的Eclipse连接不上虚拟机上的hdfs,一直显示Listing folder content的解决方案

Eclipse连接不上虚拟机上的hdfs,一直显示Listing folder content,如下图所示: 要做到以下三点: 1. 本身就还没创建输入和输出目录,此时要在hdfs上建个文件夹 . #bin/hdfs dfs -mkdir –p /user/hadoop/input #bin/hdfs dfs -mkdir -p  /user/hadoop/output 2. core-site.xml这个配置文件中要写虚拟机的ip地址,不能写localhost 3. 一定要关闭防火墙 syst

在 Windows 下远程桌面连接 Linux - XManager 篇

XManager是一个简单易用的高性能的运行在Windows平台上的X-Server软件,而Gnome和KDE就是X-Client,Linux下的X-Server则为Xorg.它能把远端Unix/Linux的桌面无缝地带到你的Windows上,甚至当你的电脑是在内网或防火墙后,你也能通过SSH协议安全的运行远端的X应用程序.特点包括: -可通过Xcongfig工具设置多个Xmanager设置: -支持多用户的Windows终端环境: -支持多个IP地址: -支持本地资源数据库: -通过热键转换键

net 搭建分布式框架(二)Windows 下的.net 连接 Linux 下的 Redis

接着上节讲 一.修改reids配置文件 // 修改reids配置文件中的ip bind 127.0.0.1 改成 0.0.0.0 vi /etc/redis/6379.conf // 关闭redis 服务 service redisd stop //重启redis 服务 注意:如果用 service redisd start 启动可能会有问题,所以用如下命令启动 redis-server /etc/redis/6379.conf & 二.防火墙端口设置 //开放6379端口 firewall-c

局域网内任何一台pc上windows下eclipse远程连接hbase数据库

通过很长一段时间的反复失败,终于在windows下实现远程连接hbase数据库,在不断的尝试过程中深感一个详细的文档的重要性,于是就把我配置的详细过程记录下来.文中如果有些地方用词不当,或者理解错误,欢迎您们评论. 一.运行平台 hbase服务器端:Ubuntu 14.04 64位:HBASE1.1.3:JAVA 1.8: hbase客服端:windows32/64位:JAVA1.8:eclipse 4.5: 二.linux服务器端环境配置 1.  安装java 1.8软件 1)下载java软件

深入学习:Windows下Git入门教程(上)

一,安装Git: 1.1Linux上安装命令: sudo apt-get install git 1.2在Windows上安装Git: 使用Windows版的msysgit,官方下载地址:http://msysgit.github.io/,点击进入官网,如果官网无法正常下载我这里有当前的最新版,已经上传到CSDN上,下载地址为:http://download.csdn.net/detail/huangyabin001/7564005,点击进入下载 1.3安装完成进行配置: $ git confi

windows下QT前台和linux下后台程序通过socket通信

通常情况下,linux下的后台程序不需要GUI进行展示,而前台程序往往有个界面,方便和用户的交互.本文所演示的例 子,是QT 程序和后台linux进程(C语言)交互,通过socket传输的内容是结构体.因为QT本身是跨平台的框架,因此以后前端程序移植到其它平台依然能很好 的运行. 结构体的定义如下: struct Test              {                      int a;                      char b;              };