diff --git a/distributed-deploy/.settings/org.eclipse.core.resources.prefs b/distributed-deploy/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..99f26c02 --- /dev/null +++ b/distributed-deploy/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/distributed-deploy/.settings/org.eclipse.m2e.core.prefs b/distributed-deploy/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/distributed-deploy/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/distributed-deploy/README.md b/distributed-deploy/README.md new file mode 100644 index 00000000..1b1b4c3b --- /dev/null +++ b/distributed-deploy/README.md @@ -0,0 +1,3 @@ +# 分布式部署 + +该项目主要实现fabric一键分布式部署。fabric官网的例子只能实现单节点部署链网络(包括orderer,peer和couchdb和chaincode节点),如果要实现在多个节点部署链网络,需要手动修改配置文件和执行相关命令,此过程比较麻烦且容易出错。本部署包主要是为解决此问题而创立,方便生产环境下运维人员快速实现分布式部署fabric链网络。 diff --git a/distributed-deploy/bcp-install-api/.classpath b/distributed-deploy/bcp-install-api/.classpath new file mode 100644 index 00000000..f0257c5a --- /dev/null +++ b/distributed-deploy/bcp-install-api/.classpath @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/distributed-deploy/bcp-install-api/.factorypath b/distributed-deploy/bcp-install-api/.factorypath new file mode 100644 index 00000000..eec5e5c8 --- /dev/null +++ b/distributed-deploy/bcp-install-api/.factorypath @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/distributed-deploy/bcp-install-api/.settings/org.eclipse.core.resources.prefs b/distributed-deploy/bcp-install-api/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..e9441bb1 --- /dev/null +++ b/distributed-deploy/bcp-install-api/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/distributed-deploy/bcp-install-api/.settings/org.eclipse.jdt.apt.core.prefs b/distributed-deploy/bcp-install-api/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/distributed-deploy/bcp-install-api/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/distributed-deploy/bcp-install-api/.settings/org.eclipse.jdt.core.prefs b/distributed-deploy/bcp-install-api/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..90b69d45 --- /dev/null +++ b/distributed-deploy/bcp-install-api/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,10 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.methodParameters=generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/distributed-deploy/bcp-install-api/.settings/org.eclipse.m2e.core.prefs b/distributed-deploy/bcp-install-api/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/distributed-deploy/bcp-install-api/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/distributed-deploy/bcp-install-api/pom.xml b/distributed-deploy/bcp-install-api/pom.xml new file mode 100644 index 00000000..662ef00b --- /dev/null +++ b/distributed-deploy/bcp-install-api/pom.xml @@ -0,0 +1,23 @@ + + + + bcp-install + com.cgb + 1.0.0-RELEASE + + 4.0.0 + + bcp-install-api + 1.0.0-RELEASE + + + + com.cgb + bcp-install-biz + 1.0.0-RELEASE + + + + \ No newline at end of file diff --git a/distributed-deploy/bcp-install-api/src/main/java/com/cgb/bcpinstall/api/controller/InstallController.java b/distributed-deploy/bcp-install-api/src/main/java/com/cgb/bcpinstall/api/controller/InstallController.java new file mode 100644 index 00000000..c0e37f17 --- /dev/null +++ b/distributed-deploy/bcp-install-api/src/main/java/com/cgb/bcpinstall/api/controller/InstallController.java @@ -0,0 +1,341 @@ +package com.cgb.bcpinstall.api.controller; + +import com.alibaba.fastjson.JSONObject; +import com.cgb.bcpinstall.biz.InstallBiz; +import com.cgb.bcpinstall.biz.RolesBiz; +import com.cgb.bcpinstall.common.annotation.InvokeLog; +import com.cgb.bcpinstall.common.entity.*; +import com.cgb.bcpinstall.common.response.BaseResponse; +import com.cgb.bcpinstall.common.response.HttpInstallResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.FileUtil; +import com.cgb.bcpinstall.service.FileService; +import com.cgb.bcpinstall.service.ModeService; +import com.cgb.bcpinstall.service.UpdateService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.Part; +import java.io.*; +import java.net.URLEncoder; +import java.util.List; + +@Slf4j +@RestController +@RequestMapping(value = "/v1/install", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) +@Api("安装管理") +public class InstallController { + @Autowired + private RolesBiz rolesBiz; + + @Autowired + private InstallBiz installBiz; + + @Autowired + private ModeService modeService; + + @Autowired + private FileService fileService; + + @Autowired + private UpdateService updateService; + + /** + * 从节点从主节点下载安装包 + *

+ * 压缩包内容格式(以下面格式进行组织目录,可以是其中一部分): + * | + * |____crypto-config + * | |_____ordererOrganizations + * | |_____peerOrganizations + * |____order + * | |_____docker-compose-orderer.yaml + * | |_____start-orderer.sh + * |____peer + * | |_____docker-compose-peer.yaml + * | |_____start-peer.sh + * |____backend + * | |____bcp-app-mgr + * | | |____resources + * | | | |____networkconfigs + * | | | |____users + * | | | |____initData.yaml + * | | |____start-backend.sh + * |____web + * | |____bcp-app-web + * | | |____vue.config.js + * | | |____start-web.sh + * + * @param request + * @param response + * @return + */ + @RequestMapping("/getPackage/{os}") + @ApiOperation(value = "下载安装文件") + @InvokeLog(name = "getInstallPackage", description = "下载安装文件") + public void getInstallData(@PathVariable("os") String osType, HttpServletRequest request, HttpServletResponse response) { + String remoteAddr = request.getRemoteAddr(); + + log.info(String.format("从节点 %s 开始下载安装包", remoteAddr)); + + BaseResponse downloadResponse = new BaseResponse(); + + OSEnum osEnum = null; + try { + osEnum = OSEnum.valueOf(osType); + } catch (Exception e) { + log.error("解析系统类型异常", e); + e.printStackTrace(); + } + if (osEnum == null) { + log.error(String.format("从节点系统类型错误: %s", osType)); + + downloadResponse.setCode(ResponseCode.Fail); + downloadResponse.setMsg("不支持指定的系统类型: " + osType); + setErrorResult(response, downloadResponse); + return; + } + + List roleList = rolesBiz.getRole(remoteAddr); + + // 根据角色准备不同的压缩包 + String filePath = fileService.packInstallFiles(remoteAddr, roleList, null); + if (StringUtils.isEmpty(filePath)) { + downloadResponse.setCode(ResponseCode.Fail); + downloadResponse.setMsg("打包安装文件失败"); + setErrorResult(response, downloadResponse); + return; + } + + File downloadFile = new File(filePath); + + FileInputStream is = null; + OutputStream os = null; + + try { + // 配置文件下载 + response.setHeader("content-type", "application/octet-stream"); + response.setContentType("application/octet-stream"); + // 下载文件能正常显示中文 + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("InstallPackage.tar.gz", "UTF-8")); + + is = new FileInputStream(downloadFile); + os = response.getOutputStream(); + + IOUtils.copy(is, os); + + // 修改服务器对应的状态 + log.info(String.format("设置从节点 %s 状态为下载完成", remoteAddr)); + this.rolesBiz.setServerStatus(remoteAddr, InstallStatusEnum.DOWNLOADED); + + } catch (FileNotFoundException e) { + log.error("下载文件不存在", e); + e.printStackTrace(); + + downloadResponse.setCode(ResponseCode.Fail); + downloadResponse.setMsg("下载文件不存在"); + + setErrorResult(response, downloadResponse); + } catch (IOException e) { + log.error("获取HttpServletResponse输出流发生异常", e); + e.printStackTrace(); + + downloadResponse.setCode(ResponseCode.Fail); + downloadResponse.setMsg("获取HttpServletResponse输出流发生异常"); + + setErrorResult(response, downloadResponse); + } finally { + IOUtils.closeQuietly(is); + IOUtils.closeQuietly(os); + } + } + + @PostMapping("/pushPackage") + @ApiOperation(value = "下载安装文件") + @InvokeLog(name = "pushInstallPackage", description = "推送安装文件") + public HttpInstallResponse pushInstallPackage(HttpServletRequest request) { + log.info("准备接收主节点推送的安装包"); + + this.installBiz.setMasterServer("http://" + request.getRemoteAddr() + ":8080"); + + HttpInstallResponse response = new HttpInstallResponse(); + try { + String filePath = this.installBiz.getInstallPackageFilePath(); + Part part = request.getPart("file"); + part.write(filePath); + + this.installBiz.installPackageReady(); + } catch (Exception e) { + log.error("接收安装包异常", e); + response.setCode(ResponseCode.Fail.getCode()); + e.printStackTrace(); + } + + return response; + } + + private void setErrorResult(HttpServletResponse httpServletResponse, BaseResponse res) { + httpServletResponse.setContentType("application/json; charset=utf-8"); + httpServletResponse.setStatus(HttpServletResponse.SC_OK); + try { + PrintWriter writer = httpServletResponse.getWriter(); + writer.print(JSONObject.toJSONString(res)); + writer.close(); + httpServletResponse.flushBuffer(); + } catch (IOException ie) { + ie.printStackTrace(); + } + } + + /** + * 主节点发送给从节点开始安装 + * + * @param request + * @return + */ + @PostMapping("/start") + @ApiOperation(value = "开始安装") + @InvokeLog(name = "doInstall", description = "开始安装") + public HttpInstallResponse doInstall(HttpServletRequest request) { + HttpInstallResponse response = new HttpInstallResponse(); + log.info("从节点收到安装指令"); + try { + //获取安装指令实例 + Part contentPart = request.getPart("content"); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + IOUtils.copy(contentPart == null ? request.getInputStream() : contentPart.getInputStream(), os); + String content = os.toString(); + InstallCmd installCmd = JSONObject.parseObject(content, InstallCmd.class); + this.installBiz.setMasterServer("http://" + request.getRemoteAddr() + ":8080"); + this.installBiz.slaveInstall(installCmd.getRole(), installCmd.getRolePorts(), installCmd.getHosts(), installCmd.getRoleFolderName()); + } catch (Exception e) { + e.printStackTrace(); + response.setCode(ResponseCode.Fail.getCode()); + } + return response; + } + + @PostMapping("/backendStatus") + @ApiOperation(value = "检查管理后台状态") + @InvokeLog(name = "doCheckBackendStatus", description = "检查管理后台状态") + public HttpInstallResponse checkBackendStatus(HttpServletRequest request) { + HttpInstallResponse response = new HttpInstallResponse(); + String filePath = modeService.getInstallPath() + "fetchBackendInit.sh"; + try { + Part part = request.getPart("file"); + part.write(filePath); + } catch (IOException | ServletException e) { + e.printStackTrace(); + response.setCode(ResponseCode.Fail.getCode()); + return response; + } + + if (modeService.checkBackendInitFinished(null, filePath)) { + response.setCode(ResponseCode.SUCCESS.getCode()); + } else { + response.setCode(ResponseCode.BOOTING.getCode()); + } + + return response; + } + + @PostMapping("/remove") + @ApiOperation(value = "移除节点") + @InvokeLog(name = "doRemove", description = "移除节点") + public HttpInstallResponse doRemove(HttpServletRequest request) { + HttpInstallResponse response = new HttpInstallResponse(); + try { + Part contentPart = request.getPart("content"); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + IOUtils.copy(contentPart == null ? request.getInputStream() : contentPart.getInputStream(), os); + String content = os.toString(); + RemoveCmd removeCmd = JSONObject.parseObject(content, RemoveCmd.class); + String filePath = modeService.getInstallPath(); + if (!filePath.endsWith(File.separator)) { + filePath = filePath + File.separator; + } + if (removeCmd.getRole() == RoleEnum.PEER || removeCmd.getRole() == RoleEnum.ORDER) { + filePath = filePath + "stopNode.sh"; + Part part = request.getPart("file"); + part.write(filePath); + } + log.info("从节点收到移除指令"); + String domain = removeCmd.getRole() == RoleEnum.ORDER ? removeCmd.getOrdererDomain() : removeCmd.getPeerDomain(); + updateService.removeNode(removeCmd.getRole(), domain, removeCmd.getHostNames(), removeCmd.getPorts()); + } catch (Exception e) { + e.printStackTrace(); + response.setCode(ResponseCode.Fail.getCode()); + } + return new HttpInstallResponse(); + } + + /** + * 主要用于节点更新 + * + * @param request + * @return + */ + @PostMapping("/update") + @ApiOperation(value = "更新节点") + @InvokeLog(name = "doUpdate", description = "更新节点") + public HttpInstallResponse doUpdate(HttpServletRequest request) { + HttpInstallResponse response = new HttpInstallResponse(); + try { + Part contentPart = request.getPart("content"); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + IOUtils.copy(contentPart == null ? request.getInputStream() : contentPart.getInputStream(), os); + String content = os.toString(); + UpdateCmd cmd = JSONObject.parseObject(content, UpdateCmd.class); + Part part = request.getPart("file"); + installBiz.handleUpdate(cmd, part); + } catch (Exception e) { + log.error("接收更新指令异常", e); + response.setCode(ResponseCode.Fail.getCode()); + e.printStackTrace(); + } + + return response; + } + + /** + * 主节点接收从节点发过来的调用 + * + * @param result + * @param request + * @return + */ + @PostMapping("/finished") + @ApiOperation(value = "完成安装") + @InvokeLog(name = "installFinished", description = "完成安装") + public HttpInstallResponse installFinished(@RequestBody InstallResult result, HttpServletRequest request) { + log.info(String.format("从节点 %s 完成安装", request.getRemoteAddr())); + + modeService.updateInstallResult(request.getRemoteAddr(), result, null); + return new HttpInstallResponse(); + } + + /** + * 主节点向从节点发起的调用,通知安装结束 + * + * @param result + * @return + */ + @PostMapping("/end") + @ApiOperation(value = "结束安装") + @InvokeLog(name = "endInstall", description = "结束安装") + public HttpInstallResponse endInstall(@RequestBody EndCmd result) { + log.info("从节点收到结束安装指令"); + + this.installBiz.doEnd(); + return new HttpInstallResponse(); + } +} diff --git a/distributed-deploy/bcp-install-api/src/main/java/com/cgb/bcpinstall/api/controller/RegisterController.java b/distributed-deploy/bcp-install-api/src/main/java/com/cgb/bcpinstall/api/controller/RegisterController.java new file mode 100644 index 00000000..44fe235d --- /dev/null +++ b/distributed-deploy/bcp-install-api/src/main/java/com/cgb/bcpinstall/api/controller/RegisterController.java @@ -0,0 +1,51 @@ +package com.cgb.bcpinstall.api.controller; + +import com.cgb.bcpinstall.biz.InstallBiz; +import com.cgb.bcpinstall.common.annotation.InvokeLog; +import com.cgb.bcpinstall.common.entity.RoleRegEntity; +import com.cgb.bcpinstall.common.response.BaseResponse; +import com.cgb.bcpinstall.common.response.HttpInstallResponse; +import com.cgb.bcpinstall.service.ModeService; +import com.cgb.bcpinstall.service.RoleService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Slf4j +@RestController +@RequestMapping(value = "/v1/reg", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) +@Api("注册管理") +public class RegisterController { + + @Autowired + private RoleService roleService; + + /** + * 从节点向主节点注册角色,主节点会根据其 ip 地址找出其所有角色,并进行缓存 + * + * @param roleRegEntity + * @param request + * @return + */ + @Deprecated + @PostMapping("/role") + @ApiOperation(value = "注册从服务器角色") + @InvokeLog(name = "registerServerRole", description = "注册从服务器角色") + public HttpInstallResponse regRole(@RequestBody RoleRegEntity roleRegEntity, HttpServletRequest request) { + String remoteAddr = request.getRemoteAddr(); + + log.info(String.format("从节点 %s 开始注册", remoteAddr)); + + roleService.addServerRole(remoteAddr, roleRegEntity.getServerPort(),null); + + return new HttpInstallResponse(); + } +} diff --git a/distributed-deploy/bcp-install-api/target/classes/com/cgb/bcpinstall/api/controller/InstallController.class b/distributed-deploy/bcp-install-api/target/classes/com/cgb/bcpinstall/api/controller/InstallController.class new file mode 100644 index 00000000..875029ac Binary files /dev/null and b/distributed-deploy/bcp-install-api/target/classes/com/cgb/bcpinstall/api/controller/InstallController.class differ diff --git a/distributed-deploy/bcp-install-api/target/classes/com/cgb/bcpinstall/api/controller/RegisterController.class b/distributed-deploy/bcp-install-api/target/classes/com/cgb/bcpinstall/api/controller/RegisterController.class new file mode 100644 index 00000000..cfa7a52f Binary files /dev/null and b/distributed-deploy/bcp-install-api/target/classes/com/cgb/bcpinstall/api/controller/RegisterController.class differ diff --git a/distributed-deploy/bcp-install-biz/.classpath b/distributed-deploy/bcp-install-biz/.classpath new file mode 100644 index 00000000..f0257c5a --- /dev/null +++ b/distributed-deploy/bcp-install-biz/.classpath @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/distributed-deploy/bcp-install-biz/.factorypath b/distributed-deploy/bcp-install-biz/.factorypath new file mode 100644 index 00000000..a4aeae81 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/.factorypath @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/distributed-deploy/bcp-install-biz/.settings/org.eclipse.core.resources.prefs b/distributed-deploy/bcp-install-biz/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..e9441bb1 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/distributed-deploy/bcp-install-biz/.settings/org.eclipse.jdt.apt.core.prefs b/distributed-deploy/bcp-install-biz/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/distributed-deploy/bcp-install-biz/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/distributed-deploy/bcp-install-biz/.settings/org.eclipse.jdt.core.prefs b/distributed-deploy/bcp-install-biz/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..90b69d45 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,10 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.methodParameters=generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/distributed-deploy/bcp-install-biz/.settings/org.eclipse.m2e.core.prefs b/distributed-deploy/bcp-install-biz/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/distributed-deploy/bcp-install-biz/pom.xml b/distributed-deploy/bcp-install-biz/pom.xml new file mode 100644 index 00000000..76811ae5 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/pom.xml @@ -0,0 +1,26 @@ + + + + bcp-install + com.cgb + 1.0.0-RELEASE + + 4.0.0 + + bcp-install-biz + 1.0.0-RELEASE + + + + com.cgb + bcp-install-common + 1.0.0-RELEASE + + + org.apache.httpcomponents + httpmime + + + \ No newline at end of file diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/InitializeBiz.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/InitializeBiz.java new file mode 100644 index 00000000..da857f84 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/InitializeBiz.java @@ -0,0 +1,76 @@ +package com.cgb.bcpinstall.biz; + +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.response.BaseResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.FileUtil; +import com.cgb.bcpinstall.config.ConfigFileGen; +import com.cgb.bcpinstall.service.InitConfigService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.io.FileNotFoundException; + +@Slf4j +@Component +public class InitializeBiz { + + @Autowired + private InitConfigService initConfigService; + + @Autowired + private ConfigFileGen configFileGen; + + @Value("${init.config}") + private String initConfigFile; + + @Value("${init.dir}") + private String initDir; + + @Value("${init.yes}") + private int doInit; + + public boolean needInit() { + return this.doInit == 1; + } + + public BaseResponse initialize() { + BaseResponse response = new BaseResponse(); + if (!needInit()) { + response.setCode(ResponseCode.Fail); + return response; + } + + this.initDir = FileUtil.reviseDir(this.initDir); + this.initConfigFile = FileUtil.reviseDir(this.initConfigFile); + + try { + InitConfigEntity configEntity = initConfigService.parseConfigFile(this.initConfigFile); + if (configEntity == null) { + response.setCode(ResponseCode.Fail); + response.setMsg("解析初始化配置文件失败"); + return response; + } + + if (!initConfigService.isCorrectConfig(configEntity)) { + log.error("配置文件中相关配置项出错或为空"); + response.setCode(ResponseCode.Fail); + response.setMsg("配置文件中相关配置项出错或为空"); + return response; + } + configFileGen.createConfigFile(configEntity); + } catch (FileNotFoundException fe) { + log.error("文件不存在异常", fe); + response.setCode(ResponseCode.Fail); + fe.printStackTrace(); + } catch (Exception e) { + log.error("初始化发生异常", e); + response.setCode(ResponseCode.Fail); + e.printStackTrace(); + } + + return response; + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/InstallBiz.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/InstallBiz.java new file mode 100644 index 00000000..6bea3c3a --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/InstallBiz.java @@ -0,0 +1,266 @@ +package com.cgb.bcpinstall.biz; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cgb.bcpinstall.common.entity.*; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.response.HttpInstallResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.*; +import com.cgb.bcpinstall.config.GlobalConfig; +import com.cgb.bcpinstall.db.CheckPointDb; +import com.cgb.bcpinstall.service.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.yaml.snakeyaml.Yaml; + +import javax.servlet.http.Part; +import java.io.*; +import java.sql.SQLException; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; + +@Slf4j +@Service +public class InstallBiz { + + private static final String INSTALL_PACKAGE_FILE_NAME = "InstallPackage.tar.gz"; + + @Autowired + private EnvironmentService environmentService; + + @Autowired + private InstallService installService; + + @Autowired + private InitConfigService initConfigService; + + @Autowired + private GlobalConfig globalConfig; + + @Autowired + private HttpClientUtil httpClient; + + @Autowired + private CheckPointDb checkPointDb; + + @Autowired + private ModeService modeService; + + @Value("${init.config}") + private String initConfigFile; + + @Value("${install.mode}") + private String installMode; + + @Value("${server.port}") + private String httpServerPort; + + private String masterServer; + + private InitConfigEntity configEntity; + + private AtomicBoolean finished = new AtomicBoolean(false); + + private Thread task; + + public void start() { + this.task = new Thread(this::doInstallThread); + this.task.start(); + } + + public String getInstallPackageFilePath() { + FileUtil.makeFilePath(modeService.getInstallPath(), false); + return modeService.getInstallPath() + INSTALL_PACKAGE_FILE_NAME; + } + + public void setMasterServer(String server) { + this.masterServer = server; + } + + /** + * 安装线程的主函数 + */ + private void doInstallThread() { + this.initConfigFile = FileUtil.reviseDir(this.initConfigFile); + // http 服务端口添加防火墙 + environmentService.addPortIntoFirewall(this.httpServerPort); + // 主节点 + if (this.globalConfig.getMaster() == 1) { + File configFile = new File(this.initConfigFile); + if (!configFile.exists() || !configFile.isFile()) { + log.error(String.format("initconfig.propertise(传入的路径:%s)文件不存在, 请按任意键结束,重新运行", this.initConfigFile)); + this.finished.set(true); + return; + } + + try { + this.configEntity = initConfigService.parseConfigFile(this.initConfigFile); + if (configEntity == null) { + log.error("解析初始化配置文件失败"); + this.doEnd(); + return; + } + //校验配置信息格式 + if (!initConfigService.isCorrectConfig(configEntity)) { + this.doEnd(); + return; + } + if (this.configEntity.getOrdererHostConfig().size() < 3) { + log.error("orderer 节点不能少于3个,请重新编辑配置文件,结束安装"); + this.doEnd(); + return; + } + if (this.configEntity.getPeerHostConfig().size() < 2) { + log.error("peer 节点不能少于2个,请重新编辑配置文件,结束安装"); + this.doEnd(); + return; + } + InstallMode installModeAction = null; + if ("newInstall".equalsIgnoreCase(this.installMode)) { + installModeAction = (InstallMode) SpringUtil.getBean("newInstallBiz"); + } else { + if (checkModifyInstall()) { + installModeAction = (InstallMode) SpringUtil.getBean("updateNetworkBiz"); + } else { + System.out.println("在配置文件中没有找到需要更新的信息"); + } + } + if (installModeAction != null) { + installModeAction.run(configEntity); + this.doEnd(); + } + + } catch (Exception e) { + log.error("安装过程发生异常", e); + e.printStackTrace(); + } + } + } + + /** + * 根据现有安装的记录计算增量内容 + * + * @return true 为增量/减量安装,false 为全新安装 + */ + private boolean checkModifyInstall() { + try { + return !this.checkPointDb.nodesTableEmpty(); + } catch (SQLException e) { + log.error("查询本地数据库失败", e); + e.printStackTrace(); + } + + return false; + } + + /** + * 启动从节点安装线程 + * + * @param role + */ + public void slaveInstall(RoleEnum role, List ports, Map hosts, String roleFolderName) { + new Thread(() -> { + log.info(String.format("从节点开始进行角色 %s 的安装", role.name())); + if (this.startInstall(role, ports, hosts, roleFolderName)) { + InstallResult result = new InstallResult(); + result.setRole(role); + result.setSuccess(true); + try { + do { + String res = httpClient.postJson(this.masterServer + "/v1/install/finished", JSONObject.toJSONString(result), false); + if (!StringUtils.isEmpty(res)) { + HttpInstallResponse response = JSONObject.parseObject(res, HttpInstallResponse.class); + if (ResponseCode.SUCCESS.getCode().equals(response.getCode())) { + log.info(String.format("向主节点报告安装 %s 状态成功", role.name())); + break; + } + } + log.info(String.format("向主节点报告安装 %s 状态失败,稍后重试...", role.name())); + try { + Thread.sleep(5000); + } catch (Exception e) { + e.printStackTrace(); + } + + } while (true); + } catch (Exception e) { + log.error("向主服务器发送安装完成状态异常", e); + e.printStackTrace(); + } + } + }).start(); + } + + private boolean startInstall(RoleEnum role, List rolePorts, Map hosts, String roleFolderName) { + return installService.startRole(role, rolePorts, hosts, roleFolderName); + } + + public boolean isFinished() { + return this.finished.get(); + } + + public void installPackageReady() { + String packageFilePath = modeService.getInstallPath() + INSTALL_PACKAGE_FILE_NAME; + FileUtil.tarGzDecompress(packageFilePath, modeService.getInstallPath(), false); + } + + /** + * 修改 orderer 容器配置后重启 docker,由 InstallController 调用 + * + * @param updateCmd + */ + public void updateOrderers(UpdateCmd updateCmd) { + for (String orderName : updateCmd.getPeerHostConfig().keySet()) { + String ipPort = updateCmd.getPeerHostConfig().get(orderName); + String ip = ipPort.substring(0, ipPort.lastIndexOf(":")); + if ("127.0.0.1".equals(ip)) { + ip = NetUtil.getMyNormalIP(); + } + updateOrderConfig(orderName, ip, updateCmd.getCurrentHost()); + } + } + + private void updateOrderConfig(String newOrderName, String ip, String currentOrdererName) { + + try { + ProcessUtil.Result result = ProcessUtil.execCmd("docker exec " + currentOrdererName + " bash updateOrdererHost.sh " + newOrderName + " " + ip, null, modeService.getInstallPath()); + if (result.getCode() == 0) { + log.info(String.format("更新 docker 容器 %s 的 Hosts 成功: ", currentOrdererName)); + } else { + log.error(String.format("更新 docker 容器 %s 的 Hosts 失败: " + result.getData(), currentOrdererName)); + } + } catch (Exception e) { + log.error(String.format("更新 docker 容器 %s 的 HostsPath 异常", currentOrdererName), e); + e.printStackTrace(); + } + } + + + public void handleUpdate(UpdateCmd cmd, Part part) { + try { + if (cmd.getRole() == RoleEnum.ORDER) { + String filePath = "/var/run/updateOrdererHost.sh"; + File updateHostFile = new File(filePath); + if (updateHostFile.exists()) { + updateHostFile.delete(); + } + part.write(filePath); + this.updateOrderers(cmd); + } + this.doEnd(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void doEnd() { + this.finished.set(true); + System.out.println("*****安装服务已完成*****"); + } + +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/InstallMode.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/InstallMode.java new file mode 100644 index 00000000..bad086a8 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/InstallMode.java @@ -0,0 +1,15 @@ +package com.cgb.bcpinstall.biz; + +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; + +/** + * @author zheng.li + * @date 2020/2/3 11:35 + */ +public interface InstallMode { + /** + * 执行mode + * @param configEntity + */ + void run(InitConfigEntity configEntity); +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/NewInstallBiz.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/NewInstallBiz.java new file mode 100644 index 00000000..1ef2204d --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/NewInstallBiz.java @@ -0,0 +1,244 @@ +package com.cgb.bcpinstall.biz; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cgb.bcpinstall.common.entity.*; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.response.HttpInstallResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.*; +import com.cgb.bcpinstall.config.GlobalConfig; +import com.cgb.bcpinstall.db.CheckPointDb; +import com.cgb.bcpinstall.db.table.NodeDO; +import com.cgb.bcpinstall.service.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import org.yaml.snakeyaml.Yaml; + +import java.io.*; +import java.sql.SQLException; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; + +/** + * @author zheng.li + * @date 2020/2/2 13:30 + */ +@Service +@Slf4j +public class NewInstallBiz implements InstallMode { + + @Autowired + private RolesBiz rolesBiz; + + @Autowired + private GlobalConfig globalConfig; + + @Autowired + private ModeService modeService; + + @Autowired + private RoleService roleService; + + @Autowired + private RemoteService remoteService; + + @Autowired + private InstallService installService; + + @Autowired + private FileService fileService; + + @Value("${server.port}") + private String httpServerPort; + + + @Override + public void run(InitConfigEntity configEntity) { + log.info("主节点开始安装流程..."); + + // 将所有的从节点注册到角色列表 + registerSlaveServers(configEntity); + + log.info("主节点添加到角色列表"); + + // 也把自己添加到角色列表里 + List allMyIps = NetUtil.getLocalIPList(); + for (String ip : allMyIps) { + roleService.addServerRole(ip, this.httpServerPort, configEntity); + } + + List allMyRoles = this.getAllMyRoles(); + + log.info("主节点复制安装文件"); + // 为自己复制安装文件 + fileService.copyInstallFiles(allMyIps, allMyRoles, configEntity); + + // 修改自己的状态 + log.info("主节点修改安装状态"); + for (String ip : allMyIps) { + this.rolesBiz.setServerStatus(ip, InstallStatusEnum.DOWNLOADED); + } + + // 主节点需要所有的证书文件 + fileService.masterCopyCryptoConfig(); + + // 启动 fabric 网络 + if (this.globalConfig.getMaster() == 1) { + fileService.masterCopyConfigtxFile(); + // 启动fabric网络 + if (!createFabricGenesis(configEntity)) { + return; + } + } + + log.info("将安装包推给每个从节点"); + pushInstallPackages(configEntity); + + log.info("安装 orderer"); + // 首先安装 Orderer + installService.install(RoleEnum.ORDER, configEntity); + + log.info("安装 peer"); + // 安装 Peer + installService.install(RoleEnum.PEER, configEntity); + + log.info("等待所有节点完成安装..."); + int retryCount = 1; + int retryTotal = 7; + while (true) { + if (checkAllServersSuccess()) { + break; + } + if (retryCount == retryTotal) { + log.info("安装状态查询超时,部署可能出现异常,请排查!"); + break; + } + try { + Thread.sleep(10000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + retryCount++; + } + + log.info("通知所有服务器安装结束"); + // 通知所有服务器结束 + Set serverUrl = getServersUrl(); + remoteService.notifyNodesToEnd(serverUrl); + } + + private void registerSlaveServers(InitConfigEntity configEntity) { + List slaveServers = parseAllSlaveIps(configEntity); + for (String ip : slaveServers) { + roleService.addServerRole(ip, "8080", configEntity); + } + } + + + private List getAllMyRoles() { + List roleList = new ArrayList<>(); + + Map> allServers = this.rolesBiz.getRolesMap(); + List ipList = NetUtil.getLocalIPList(); + for (String ip : ipList) { + for (RoleEnum role : allServers.keySet()) { + List serverList = allServers.get(role); + if (serverList.stream().anyMatch(s -> s.getHost().equals(ip))) { + roleList.add(role); + } + } + } + + return roleList; + } + + private boolean createFabricGenesis(InitConfigEntity configEntity) { + log.info("开始 fabric 创世"); + + String fabricDir = modeService.getInstallPath() + "channel-artifacts" + File.separator; + FileUtil.makeFilePath(fabricDir, true); + + String sysChannelName = configEntity.getNetwork() + "-sys-channel"; + + String cmd = CacheUtil.getConfigtxgenFilePath() + " -profile SampleMultiNodeEtcdRaft -channelID " + sysChannelName + " -outputBlock " + fabricDir + "genesis.block"; + log.info("生成创世块-执行命令:" + cmd); + try { + ProcessUtil.Result res = ProcessUtil.execCmd(cmd, null, modeService.getInstallPath()); + if (res.getCode() == 0) { + log.info("创世成功"); + return true; + } else { + log.warn("创世失败"); + } + } catch (Exception e) { + log.error("生成创世块异常", e); + e.printStackTrace(); + } + + return false; + } + + private void pushInstallPackages(InitConfigEntity configEntity) { + //获取所有的从节点ip + List allSlaveIps = parseAllSlaveIps(configEntity); + //推送安装包 + for (String slaveIp : allSlaveIps) { + log.info(String.format("向从节点 %s 推送安装包", slaveIp)); + remoteService.pushSlaveInstallPackage(slaveIp, configEntity); + } + } + + private boolean checkAllServersSuccess() { + // 检查是否所有服务器完成安装 + Map> rolesMap = this.rolesBiz.getRolesMap(); + for (RoleEnum role : rolesMap.keySet()) { + List serverList = rolesMap.get(role); + for (ServerEntity s : serverList) { + if (s.getStatus() != InstallStatusEnum.SUCCESS) { + return false; + } + } + } + return true; + } + + private Set getServersUrl() { + Set serverUrls = new HashSet<>(); + Map> rolesMap = this.rolesBiz.getRolesMap(); + for (RoleEnum role : rolesMap.keySet()) { + List serverList = rolesMap.get(role); + for (ServerEntity s : serverList) { + if (!NetUtil.ipIsMine(s.getHost())) { + serverUrls.add(s.getHttpUrl()); + } + } + } + return serverUrls; + } + + private List parseAllSlaveIps(InitConfigEntity configEntity) { + List allSlaveIps = new ArrayList<>(); + parseSlaveIps(allSlaveIps, configEntity.getOrdererHostConfig()); + parseSlaveIps(allSlaveIps, configEntity.getPeerHostConfig()); + return allSlaveIps; + } + + private void parseSlaveIps(List allSlaveIps, Map hostConfig) { + for (String host : hostConfig.keySet()) { + String origIp = hostConfig.get(host); + int index = origIp.lastIndexOf(":"); + String ip = origIp.substring(0, index); + if (!NetUtil.ipIsMine(ip)) { + allSlaveIps.add(ip); + } + } + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/OrdererExtendBiz.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/OrdererExtendBiz.java new file mode 100644 index 00000000..83c3e30e --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/OrdererExtendBiz.java @@ -0,0 +1,350 @@ +package com.cgb.bcpinstall.biz; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cgb.bcpinstall.common.entity.*; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.response.HttpInstallResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.*; +import com.cgb.bcpinstall.config.ConfigFileGen; +import com.cgb.bcpinstall.config.FabricConfigGen; +import com.cgb.bcpinstall.config.configGenImpl.DockerConfigGenImpl; +import com.cgb.bcpinstall.db.CheckPointDb; +import com.cgb.bcpinstall.db.table.NodeDO; +import com.cgb.bcpinstall.service.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.io.File; +import java.io.IOException; +import java.sql.SQLException; +import java.util.*; + +/** + * @author zheng.li + * @date 2020/2/3 10:54 + */ +@Service +@Slf4j +public class OrdererExtendBiz { + + @Autowired + private RolesBiz rolesBiz; + + @Autowired + private HttpClientUtil httpClient; + + @Autowired + private CheckPointDb checkPointDb; + + @Autowired + private ModeService modeService; + + @Autowired + private FileService fileService; + + @Autowired + private UpdateService updateService; + + @Autowired + private EnvironmentService environmentService; + + @Autowired + private RemoteService remoteService; + + @Autowired + private FabricCliService fabricCliService; + + @Autowired + private InstallService installService; + + @Autowired + private InstallBiz installBiz; + + @Autowired + private FabricConfigGen fabricConfigGen; + + @Autowired + private ConfigFileGen configFileGen; + + @Autowired + private DockerConfigGenImpl dockerConfigGen; + + public void ordererExtend(Map newOrdererHostConfig, InitConfigEntity configEntity) { + log.info("为新增 orderer 生成证书"); + // 生成证书 + try { + fabricConfigGen.configTxGen(configEntity); + fabricConfigGen.cryptoGen(configEntity); + configFileGen.createExtendCerts(); + } catch (Exception e) { + log.error("为新增的 orderer 节点生成证书异常", e); + e.printStackTrace(); + return; + } + + log.info("为新增 orderer 生成 docker 相关文件"); + // 生成 docker-compose-order-xxxx.yaml 和 start-order.sh 文件 + + Map filePathMap = new HashMap<>(16); + // 按机器IP分组 + Map> orderGroups = dockerConfigGen.groupHostByIp(newOrdererHostConfig); + for (String orderServerIp : orderGroups.keySet()) { + // 每个 IP 一个 docker-compose 文件 + + try { + String folderName = UUID.randomUUID().toString(); + folderName = StringUtils.deleteAny(folderName, "-"); + folderName = orderServerIp + "-new-" + folderName; + String filePath = dockerConfigGen.createOrdererYamlFile(configEntity, orderServerIp, orderGroups.get(orderServerIp), "order-" + folderName); + String parentPath = new File(filePath).getParent(); + filePathMap.put(orderServerIp, parentPath); + } catch (IOException e) { + e.printStackTrace(); + } + } + + log.info("将新生成的证书拷贝到主节点安装目录"); + fileService.masterCopyCryptoConfig(); + fileService.masterCopyConfigtxFile(); + + // 启动一个 cli 容器 + log.info("主节点创建cli容器"); + if (!fabricCliService.createCliContainer(modeService.getInstallPath() + "cli", configEntity)) { + log.error("创建cli容器失败"); + return; + } + + log.info("修改所有其他 orderer 节点配置"); + // 修改所有其他 orderer 节点配置,并重启 + updateOldOrdererContainers(newOrdererHostConfig, configEntity); + + // 收集所有节点加入的通道 + log.info("获取所有节点加入的通道列表"); + Set channelList = new HashSet<>(); + try { + channelList.addAll(fabricCliService.getAllChannels(configEntity)); + } catch (IOException e) { + log.error("获取节点加入的所有通道异常", e); + e.printStackTrace(); + } + + + log.info("修改网络配置"); + // 修改网络配置 + log.info("将新加入的 orderer(s) 加入系统通道"); + + Map oldOrdererConfig = updateService.getOldNodeConfigMap(configEntity.getOrdererHostConfig(), newOrdererHostConfig); + + for (String newOrdererHost : newOrdererHostConfig.keySet()) { + log.info("扩容orderer-oldOrdererConfig=" + JSON.toJSONString(oldOrdererConfig)); + oldOrdererConfig.put(newOrdererHost, newOrdererHostConfig.get(newOrdererHost)); + // 先修改系统通道 + if (!updateService.updateNetworkConfig(configEntity.getNetwork() + "-sys-channel", configEntity, oldOrdererConfig)) { + log.error(String.format("为系统通道 %s 更新网络配置失败", configEntity.getNetwork() + "-sys-channel")); + return; + } + + // 更新业务通道 + if (!CollectionUtils.isEmpty(channelList)) { + for (String channelName : channelList) { + log.info(String.format("将新加入的 orderer(s) 加入 %s 通道", channelName)); + if (!updateService.updateNetworkConfig(channelName, configEntity, oldOrdererConfig)) { + log.error(String.format("为通道 %s 更新网络配置失败", channelName)); + } + } + } + } + + + log.info("获取最新创世块"); + if (!fabricCliService.fetchGenesisBlock(configEntity)) { + log.error("获取创世块发生错误"); + } + + log.info("注册 orderer 节点角色"); + List ports = new ArrayList<>(); + for (String ip : orderGroups.keySet()) { + List hostList = orderGroups.get(ip); + for (String host : hostList) { + int index = host.lastIndexOf(":"); + ports.add(host.substring(index + 1)); + } + + this.rolesBiz.addRole(RoleEnum.ORDER, "http://" + ip + ":8080", ip, ports); + } + + for (String ip : filePathMap.keySet()) { + String path = filePathMap.get(ip); + + String folderName = new File(path).getName(); + if (NetUtil.ipIsMine(ip)) { + fileService.copyFiles(RoleEnum.ORDER, ip, folderName, modeService.getInstallPath(), folderName, configEntity, null); + this.rolesBiz.setServerStatus(ip, InstallStatusEnum.DOWNLOADED); + } else { + log.info("为新增 orderer 打包安装包"); + + String packFilePath = fileService.packExtendNodeFiles(ip, folderName, RoleEnum.ORDER, configEntity); + // 发送到节点启动 + log.info("将生成的文件包发送到新增 orderer 节点"); + remoteService.pushSlaveInstallPackage(ip, packFilePath, configEntity); + } + } + + log.info("启动 orderer 节点"); + // 等待节点启动成功 + List serverList = this.rolesBiz.getRolesMap().get(RoleEnum.ORDER); + for (String ip : filePathMap.keySet()) { + log.info(String.format("发送安装命令到新增 orderer 节点 %s", ip)); + + String path = filePathMap.get(ip); + + String folderName = new File(path).getName(); + + // 如果主节点也是此角色,则先安装 + if (NetUtil.ipIsMine(ip)) { + Map hosts = environmentService.getRoleNeedSetHost(RoleEnum.ORDER, configEntity); + if (installService.startRole(RoleEnum.ORDER, ports, hosts, folderName)) { + this.rolesBiz.setServerStatus(ip, InstallStatusEnum.SUCCESS); + } + } else { + for (ServerEntity server : serverList) { + if (server.getHost().equalsIgnoreCase(ip)) { + // 发送安装指令给从节点 + do { + HttpInstallResponse response = remoteService.sendInstallCommand(server, RoleEnum.ORDER, folderName, configEntity); + if (ResponseCode.SUCCESS.getCode().equals(response.getCode())) { + log.warn(String.format("发送安装指令给 %s 节点安装 orderer 成功", ip)); + this.rolesBiz.setServerStatus(ip, InstallStatusEnum.INSTALLING); + break; + } + + log.warn(String.format("发送安装指令给 %s 节点安装 orderer 失败,稍后重试...", ip)); + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } while (true); + break; + } + } + } + } + + log.info("等待所有 orderer 启动成功"); + while (serverList.stream().anyMatch(s -> s.getStatus() != InstallStatusEnum.SUCCESS)) { + try { + Thread.sleep(5000); + } catch (Exception e) { + e.printStackTrace(); + } + } + + log.info("将新 orderer(s) 信息加入本地数据库"); + // 更新数据库 + for (String host : newOrdererHostConfig.keySet()) { + String ip = newOrdererHostConfig.get(host); + int index = ip.lastIndexOf(":"); + String port = ip.substring(index + 1); + ip = ip.substring(0, index); + + NodeDO nodeDO = new NodeDO(); + nodeDO.setOrgMspId(configEntity.getOrgMSPID()); + nodeDO.setRole(RoleEnum.ORDER); + nodeDO.setHostName(host); + nodeDO.setIp(ip); + nodeDO.setPort(Integer.parseInt(port)); + nodeDO.setStatus(InstallStatusEnum.SUCCESS); + + try { + this.checkPointDb.addNodeRecord(nodeDO); + } catch (SQLException e) { + log.error(String.format("添加新 orderer 节点 %s 记录到数据库异常", host), e); + e.printStackTrace(); + } + } + + } + + + /** + * 更新原 orderer 节点 + * + * @param newOrdererHostConfig + * @param configEntity + */ + private void updateOldOrdererContainers(Map newOrdererHostConfig, InitConfigEntity configEntity) { + Map newHosts = new HashMap<>(16); + for (String host : newOrdererHostConfig.keySet()) { + String ipPort = newOrdererHostConfig.get(host); + String ip = ipPort.substring(0, ipPort.lastIndexOf(":")); + newHosts.put(host, ip); + } + + Map needSendIps = new HashMap<>(16); + for (String newHost : newOrdererHostConfig.keySet()) { + + for (String curHost : configEntity.getOrdererHostConfig().keySet()) { + String curIp = configEntity.getOrdererHostConfig().get(curHost); + curIp = curIp.substring(0, curIp.lastIndexOf(":")); + if (!curHost.equalsIgnoreCase(newHost)) { + needSendIps.put(curHost, curIp); + } + } + } + + // 即使本机也可以发送此命令更新 + for (String oldHost : needSendIps.keySet()) { + String ip = needSendIps.get(oldHost); + // 发送更新 orderer 的命令 + UpdateCmd cmd = new UpdateCmd(); + cmd.setRole(RoleEnum.ORDER); + cmd.setHosts(newHosts); + cmd.setPeerHostConfig(newOrdererHostConfig); + cmd.setCurrentHost(oldHost); + //发送更新host脚本 + String updateOrdererHostPath = modeService.getInitDir() + "template" + File.separator + "updateOrdererHost.sh"; + if (NetUtil.ipIsMine(ip)) { + String shDesPath = "/var/run/updateOrdererHost.sh"; + try { + FileUtils.copyFile(new File(updateOrdererHostPath), new File(shDesPath)); + installBiz.updateOrderers(cmd); + } catch (IOException e) { + log.error("复制updateOrdererHost.sh文件发生异常"); + e.printStackTrace(); + } + } else { + int retryInit = 0; + int retryTotal = 10; + do { + if (retryTotal == retryInit) { + log.error("重试超过次数"); + break; + } + String result = this.httpClient.sendFileAndJson("http://" + ip + ":8080/v1/install/update", updateOrdererHostPath, JSONObject.toJSONString(cmd)); + if (!StringUtils.isEmpty(result)) { + HttpInstallResponse response = JSONObject.parseObject(result, HttpInstallResponse.class); + if (ResponseCode.SUCCESS.getCode().equalsIgnoreCase(response.getCode())) { + break; + } + } + log.error(String.format("发送更新 orderer 指令到节点 %s 返回错误, 稍后重试", ip)); + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + retryInit++; + } while (true); + } + } + } + + +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/OrdererRemoveBiz.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/OrdererRemoveBiz.java new file mode 100644 index 00000000..1ea4a73e --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/OrdererRemoveBiz.java @@ -0,0 +1,186 @@ +package com.cgb.bcpinstall.biz; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cgb.bcpinstall.common.entity.RemoveCmd; +import com.cgb.bcpinstall.common.entity.RoleEnum; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.response.HttpInstallResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.HttpClientUtil; +import com.cgb.bcpinstall.common.util.NetUtil; +import com.cgb.bcpinstall.db.CheckPointDb; +import com.cgb.bcpinstall.db.table.NodeDO; +import com.cgb.bcpinstall.service.FabricCliService; +import com.cgb.bcpinstall.service.FileService; +import com.cgb.bcpinstall.service.ModeService; +import com.cgb.bcpinstall.service.UpdateService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.io.File; +import java.io.IOException; +import java.sql.SQLException; +import java.util.*; + +/** + * @author zheng.li + * @date 2020/2/3 11:04 + */ +@Service +@Slf4j +public class OrdererRemoveBiz { + + @Autowired + private HttpClientUtil httpClient; + + @Autowired + private CheckPointDb checkPointDb; + + @Autowired + private ModeService modeService; + + @Autowired + private FabricCliService fabricCliService; + + @Autowired + private UpdateService updateService; + + @Autowired + private FileService fileService; + + public void ordererRemove(Map removedOrdererHostConfig, InitConfigEntity configEntity) { + log.info("主节点启动 cli 容器"); + // 启动一个 cli 容器 + if (!fabricCliService.createCliContainer(modeService.getInstallPath() + "cli", configEntity)) { + log.error("创建cli容器失败"); + return; + } + + // 收集所有节点加入的通道 + log.info("获取所有节点加入的通道列表"); + Set channelList = new HashSet<>(); + try { + channelList.addAll(fabricCliService.getAllChannels(configEntity)); + } catch (IOException e) { + log.error("获取节点加入的所有通道异常", e); + e.printStackTrace(); + } + log.info("缩容orderer-获取的通道列表:" + JSON.toJSONString(channelList)); + log.info("修改网络配置"); + + Map oldOrdererConfig = configEntity.getOrdererHostConfig(); + oldOrdererConfig.putAll(removedOrdererHostConfig); + + for (String host : removedOrdererHostConfig.keySet()) { + log.info("缩容orderer-oldOrdererConfig=" + JSON.toJSONString(oldOrdererConfig)); + oldOrdererConfig.remove(host); + // 修改网络配置 + log.info("将移除的 orderer(s) 从系统通道中移除"); + // 先修改系统通道 + if (!updateService.updateNetworkConfig(configEntity.getNetwork() + "-sys-channel", configEntity, oldOrdererConfig)) { + log.error(String.format("为系统通道 %s 更新网络配置失败", configEntity.getNetwork() + "-sys-channel")); + return; + } + channelList.remove(configEntity.getNetwork() + "-sys-channel"); + for (String channelName : channelList) { + log.info(String.format("将移除的 orderer(s) 从通道 %s 中移除", channelName)); + if (!updateService.updateNetworkConfig(channelName, configEntity, oldOrdererConfig)) { + log.error(String.format("为通道 %s 更新网络配置失败", channelName)); + } + } + } + + + log.info("移除主节点目录下的证书"); + fileService.removeCertFile(RoleEnum.ORDER, configEntity, removedOrdererHostConfig, true); + log.info("移除 orderer(s) 节点"); + removeOrdererContainer(removedOrdererHostConfig, configEntity); + log.info("将已移除的 orderer(s) 节点从数据库中删除"); + // 从数据库中删除 + for (String host : removedOrdererHostConfig.keySet()) { + String ip = removedOrdererHostConfig.get(host); + int index = ip.lastIndexOf(":"); + String port = ip.substring(index + 1); + ip = ip.substring(0, index); + + NodeDO nodeDO = new NodeDO(); + nodeDO.setRole(RoleEnum.ORDER); + nodeDO.setOrgMspId(configEntity.getOrgMSPID()); + nodeDO.setHostName(host); + nodeDO.setIp(ip); + nodeDO.setPort(Integer.parseInt(port)); + try { + this.checkPointDb.deleteNodeRecord(nodeDO); + } catch (SQLException e) { + log.error(String.format("将节点 %s 从数据库中删除异常", host), e); + e.printStackTrace(); + } + } + } + + private void removeOrdererContainer(Map removedOrdererHostConfig, InitConfigEntity configEntity) { + // 通知节点移除 + // 根据IP分组 + Map> groups = new HashMap<>(16); + for (String host : removedOrdererHostConfig.keySet()) { + String ip = removedOrdererHostConfig.get(host); + int index = ip.lastIndexOf(":"); + String port = ip.substring(index + 1); + ip = ip.substring(0, index); + + List hostList; + if (groups.containsKey(ip)) { + hostList = groups.get(ip); + } else { + hostList = new ArrayList<>(); + groups.put(ip, hostList); + } + hostList.add(host + ":" + port); + } + String stopNodeFilePath = modeService.getInitDir() + "template/stopNode.sh"; + for (String ip : groups.keySet()) { + RemoveCmd peerRemoveCmd = updateService.createRemoveCmd(ip, groups.get(ip), RoleEnum.ORDER); + peerRemoveCmd.setOrdererDomain(configEntity.getOrdererDomain()); + if (NetUtil.ipIsMine(ip)) { + try { + FileUtils.copyFile(new File(stopNodeFilePath), new File(modeService.getInstallPath() + "stopNode.sh")); + } catch (Exception e) { + log.info("复制stopNode.sh发生异常"); + return; + } + updateService.removeNode(RoleEnum.ORDER, peerRemoveCmd.getOrdererDomain(), peerRemoveCmd.getHostNames(), peerRemoveCmd.getPorts()); + } else { + + String stopFilePath = modeService.getInitDir() + "template/stopNode.sh"; + String url = "http://" + ip + ":8080/v1/install/remove"; + do { + try { + String result = this.httpClient.sendFileAndJson(url, stopFilePath, JSONObject.toJSONString(peerRemoveCmd)); + if (!StringUtils.isEmpty(result)) { + HttpInstallResponse response = JSONObject.parseObject(result, HttpInstallResponse.class); + if (ResponseCode.SUCCESS.getCode().equalsIgnoreCase(response.getCode())) { + break; + } + } + + log.warn(String.format("给节点 %s 发送移除命令返回失败,稍后重试", ip)); + } catch (Exception e) { + log.warn(String.format("给节点 %s 发送移除命令异常,稍后重试", ip), e); + e.printStackTrace(); + } + + try { + Thread.sleep(5000); + } catch (Exception e) { + e.printStackTrace(); + } + } while (true); + } + } + } + +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/PeerExtendBiz.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/PeerExtendBiz.java new file mode 100644 index 00000000..4a1c0f40 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/PeerExtendBiz.java @@ -0,0 +1,336 @@ +package com.cgb.bcpinstall.biz; + +import com.alibaba.fastjson.JSON; +import com.cgb.bcpinstall.common.entity.*; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.response.HttpInstallResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.*; +import com.cgb.bcpinstall.config.ConfigFileGen; +import com.cgb.bcpinstall.config.FabricConfigGen; +import com.cgb.bcpinstall.config.configGenImpl.DockerConfigGenImpl; +import com.cgb.bcpinstall.db.CheckPointDb; +import com.cgb.bcpinstall.db.table.NodeDO; +import com.cgb.bcpinstall.service.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.io.File; +import java.io.IOException; +import java.sql.SQLException; +import java.util.*; + +/** + * @author zheng.li + * @date 2020/2/3 10:03 + */ +@Service +@Slf4j +public class PeerExtendBiz { + + @Autowired + private RolesBiz rolesBiz; + + @Autowired + private CheckPointDb checkPointDb; + + @Autowired + private ModeService modeService; + + @Autowired + private FileService fileService; + + @Autowired + private EnvironmentService environmentService; + + @Autowired + private FabricCliService fabricCliService; + + @Autowired + private RemoteService remoteService; + + @Autowired + private InstallService installService; + + @Autowired + private FabricConfigGen fabricConfigGen; + + @Autowired + private ConfigFileGen configFileGen; + + @Autowired + private DockerConfigGenImpl dockerConfigGen; + + public void peerExtend(Map diffPeerHostConfig, InitConfigEntity configEntity) { + //在主节点修改crypto-config.yaml文件,添加新节点hostname,编写生成证书命令行,参数extend,执行命令生成新节点证书,生成新增节点的compose文件 + //在crypto-config配置文件添加新节点hostName,调用generate.sh生成新节点证书 + log.info("在crypto-config配置文件添加新节点hostName,调用generate.sh生成新节点证书"); + /*initializer.reCreateNewPeerConfigFile(configEntity);*/ + fabricConfigGen.cryptoGen(configEntity); + configFileGen.createExtendCerts(); + //生成新节点的docker-compose文件 + log.info("生成新节点的docker-compose文件"); + + Map> peerHostGroup = dockerConfigGen.groupHostByIp(diffPeerHostConfig); + Map ipPathMap = this.createNewPeerDockerFile(configEntity, peerHostGroup); + //将新生成的证书拷贝到主节点安装目录 + log.info("将新生成的证书拷贝到主节点安装目录"); + fileService.masterCopyCryptoConfig(); + log.info("注册新Peer节点角色"); + List ports = this.registerNewPeerRole(peerHostGroup); + log.info("推送新peer的安装文件"); + this.sendNewPeerFile(ipPathMap, configEntity); + //启动新节点 + log.info("启动新新增peer"); + List serverList = this.startNewPeer(ipPathMap, ports, configEntity); + log.info("等待所有 peer 启动成功"); + while (serverList.stream().anyMatch(s -> s.getStatus() != InstallStatusEnum.SUCCESS)) { + try { + Thread.sleep(5000); + } catch (Exception e) { + e.printStackTrace(); + } + } + // 将新节点的域名更新到cli所在宿主机的host + // 在宿主机防火墙中打开新节点的端口 + log.info("将新节点的域名写入到hosts,在防火墙中开启新节点端口"); + environmentService.updateNewPeerHostPort(diffPeerHostConfig); + + // 启动一个 cli 容器 + log.info("主节点创建cli容器"); + if (!fabricCliService.createCliContainer(modeService.getInstallPath() + "cli", configEntity)) { + log.error("创建cli容器失败"); + return; + } + + //获取扩容peer可以加入的业务链列表 + Set channelList = new HashSet<>(); + try { + channelList.addAll(fabricCliService.getAllChannels(configEntity)); + } catch (IOException e) { + e.printStackTrace(); + } + + //新节点加入链 + if (!CollectionUtils.isEmpty(channelList)) { + log.info("新增节点加入链"); + Set joinChannels = newPeerJoinChannel(configEntity, diffPeerHostConfig, channelList); + log.info("新增节点加入链-joinChannels=" + JSON.toJSONString(joinChannels)); + } + + log.info("将新 peer(s) 信息加入本地数据库"); + // 更新数据库 + for (String host : diffPeerHostConfig.keySet()) { + String ip = diffPeerHostConfig.get(host); + int index = ip.lastIndexOf(":"); + String port = ip.substring(index + 1); + ip = ip.substring(0, index); + NodeDO nodeDO = new NodeDO(); + nodeDO.setOrgMspId(configEntity.getOrgMSPID()); + nodeDO.setRole(RoleEnum.PEER); + nodeDO.setHostName(host); + nodeDO.setIp(ip); + nodeDO.setPort(Integer.parseInt(port)); + nodeDO.setStatus(InstallStatusEnum.SUCCESS); + + try { + this.checkPointDb.addNodeRecord(nodeDO); + } catch (SQLException e) { + log.error(String.format("添加新 peer 节点 %s 记录到数据库异常", host), e); + e.printStackTrace(); + } + } + + } + + private List registerNewPeerRole(Map> peerHostGroup) { + List ports = new ArrayList<>(); + for (String ip : peerHostGroup.keySet()) { + List hostList = peerHostGroup.get(ip); + for (String host : hostList) { + int index = host.lastIndexOf(":"); + ports.add(host.substring(index + 1)); + } + this.rolesBiz.addRole(RoleEnum.PEER, "http://" + ip + ":8080", ip, ports); + } + return ports; + } + + private void sendNewPeerFile(Map ipPathMap, InitConfigEntity configEntity) { + for (String ip : ipPathMap.keySet()) { + String path = ipPathMap.get(ip); + + String folderName = new File(path).getName(); + if (NetUtil.ipIsMine(ip)) { + fileService.copyFiles(RoleEnum.PEER, ip, folderName, modeService.getInstallPath(), folderName, configEntity, null); + this.rolesBiz.setServerStatus(ip, InstallStatusEnum.DOWNLOADED); + } else { + log.info("为新增 peer 打包安装包"); + + String packFilePath = fileService.packExtendNodeFiles(ip, folderName, RoleEnum.PEER, configEntity); + + // 发送到节点启动 + log.info("将生成的文件包发送到新增 peer 节点"); + remoteService.pushSlaveInstallPackage(ip, packFilePath, configEntity); + } + } + } + + private List startNewPeer(Map ipPathMap, List ports, InitConfigEntity configEntity) { + List serverList = this.rolesBiz.getRolesMap().get(RoleEnum.PEER); + for (String ip : ipPathMap.keySet()) { + log.info(String.format("发送安装命令到新增 peer 节点 %s", ip)); + + String path = ipPathMap.get(ip); + + String folderName = new File(path).getName(); + + // 如果主节点也是此角色,则先安装 + if (NetUtil.ipIsMine(ip)) { + Map hosts = environmentService.getRoleNeedSetHost(RoleEnum.PEER, configEntity); + if (installService.startRole(RoleEnum.PEER, ports, hosts, folderName)) { + this.rolesBiz.setServerStatus(ip, InstallStatusEnum.SUCCESS); + } + } else { + for (ServerEntity server : serverList) { + if (server.getHost().equalsIgnoreCase(ip)) { + // 发送安装指令给从节点 + do { + HttpInstallResponse response = remoteService.sendInstallCommand(server, RoleEnum.PEER, folderName, configEntity); + if (ResponseCode.SUCCESS.getCode().equals(response.getCode())) { + log.warn(String.format("发送安装指令给 %s 节点安装 peer 成功", ip)); + this.rolesBiz.setServerStatus(ip, InstallStatusEnum.INSTALLING); + break; + } + + log.warn(String.format("发送安装指令给 %s 节点安装 peer 失败,稍后重试...", ip)); + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } while (true); + break; + } + } + } + } + return serverList; + } + + private Set newPeerJoinChannel(InitConfigEntity configEntity, Map diffPeerHostConifg, Set channelList) { + //获取运行脚本所需参数,peerAddress、peerTlsRoot、peerTlsCert,peerTlsKey、orderer的域名:端口、对应orderer的ca证书、加入链的名称、 + String privateChannel = "privatechannel" + configEntity.getOrgMSPID().toLowerCase(); + String ordererHost = configEntity.getOrdererHostConfig().keySet().iterator().next(); + String ordererPort = configEntity.getOrdererHostConfig().get(ordererHost).split(":")[1]; + String orderer = ordererHost + ":" + ordererPort; + String ordererCaPath = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/%s/orderers/%s/msp/tlscacerts/tlsca.%s-cert.pem", configEntity.getOrdererDomain(), ordererHost, configEntity.getOrdererDomain()); + Set joinChannels = null; + for (String peerHost : diffPeerHostConifg.keySet()) { + //扩容节点选择加入链 + joinChannels = this.selectJoinChannel(channelList, privateChannel); + //初始化环境参数 + String peerPort = diffPeerHostConifg.get(peerHost).split(":")[1]; + String peerAddress = peerHost + ":" + peerPort; + String peerTlsCaPath = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/%s/peers/%s/tls/ca.crt", configEntity.getPeerDomain(), peerHost); + String peerTlsCertPath = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/%s/peers/%s/tls/server.crt", configEntity.getPeerDomain(), peerHost); + String peerTlsKeyPath = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/%s/peers/%s/tls/server.key", configEntity.getPeerDomain(), peerHost); + //初始化执行命令 + for (String joinChannel : joinChannels) { + String cmd = String.format("docker exec cli bash ./scripts/newPeerJoinChannel.sh -c %s -o %s -O %s -p %s -r %s -e %s -k %s", joinChannel, orderer, ordererCaPath, peerAddress, peerTlsCaPath, peerTlsCertPath, peerTlsKeyPath); + //执行peer加入链的命令 + try { + FileUtils.copyFile(new File(modeService.getInitDir() + "template/newPeerJoinChannel.sh"), new File(modeService.getInstallPath() + "cli/scripts/newPeerJoinChannel.sh")); + ProcessUtil.Result result = ProcessUtil.execCmd(cmd, null, modeService.getInstallPath() + "cli"); + } catch (Exception e) { + log.error("执行 docker 脚本异常", e); + e.printStackTrace(); + } + } + } + return joinChannels; + } + + /** + * 新节点加入所选链 + * + * @param queryChannelList + * @param privateChannel + * @return + */ + private Set selectJoinChannel(Set queryChannelList, String privateChannel) { + Set selectChannels = new HashSet<>(); + Map selectChannelIndexMap = new HashMap<>(16); + //选择需要加入的业务链 + System.out.println("请根据以下列表,选择扩容peer需要加入的业务链。"); + StringBuilder builder = new StringBuilder(); + int nextLine = 1; + for (String channel : queryChannelList) { + if (channel.equals(privateChannel) || StringUtils.isEmpty(channel)) { + continue; + } + + builder.append(nextLine).append(")").append(channel).append("\t"); + selectChannelIndexMap.put(Integer.toString(nextLine), channel); + if (nextLine % 5 == 0) { + builder.append("\n"); + } + nextLine += 1; + } + System.out.println(builder.toString()); + Scanner sc = new Scanner(System.in); + System.out.print("请输入需要加入的链名编号(多于一个编号时以“,”分割,请回车后输入):"); + + String inputIndexList = ""; + if (sc.hasNextLine()) { + inputIndexList = sc.nextLine(); + System.out.println("用户输入" + inputIndexList); + } + sc.close(); + + if (StringUtils.isEmpty(inputIndexList)) { + log.info("扩容节点——用户输入为空,默认加入本机构的所有业务链"); + selectChannels.addAll(queryChannelList); + selectChannels.remove(""); + } else { + String[] channelIndexArray = inputIndexList.split(","); + Arrays.stream(channelIndexArray).forEach(i -> { + String channelName = selectChannelIndexMap.get(i); + if (!StringUtils.isEmpty(channelName)) { + selectChannels.add(channelName); + } + }); + selectChannels.add(privateChannel); + } + + return selectChannels; + } + + /** + * 生成新节点的docker文件 + * + * @param configEntity + * @param peerHostGroup + * @throws IOException + */ + private Map createNewPeerDockerFile(InitConfigEntity configEntity, Map> peerHostGroup) { + Map ipPathMap = new HashMap<>(16); + for (String peerServerIp : peerHostGroup.keySet()) { + try { + String folderName = UUID.randomUUID().toString(); + folderName = StringUtils.deleteAny(folderName, "-"); + folderName = "new-" + folderName; + String filePath = dockerConfigGen.createPeerYamlFile(configEntity, peerServerIp, peerHostGroup.get(peerServerIp), "fabric-net/dockerFile" + File.separator + "peer-" + folderName + File.separator); + String parentPath = new File(filePath).getParent(); + ipPathMap.put(peerServerIp, parentPath); + } catch (IOException e) { + e.printStackTrace(); + } + } + return ipPathMap; + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/PeerRemoveBiz.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/PeerRemoveBiz.java new file mode 100644 index 00000000..87639cc3 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/PeerRemoveBiz.java @@ -0,0 +1,132 @@ +package com.cgb.bcpinstall.biz; + +import com.alibaba.fastjson.JSONObject; +import com.cgb.bcpinstall.common.entity.RemoveCmd; +import com.cgb.bcpinstall.common.entity.RoleEnum; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.response.HttpInstallResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.HttpClientUtil; +import com.cgb.bcpinstall.common.util.NetUtil; +import com.cgb.bcpinstall.config.ConfigFileGen; +import com.cgb.bcpinstall.config.GlobalConfig; +import com.cgb.bcpinstall.config.configGenImpl.DockerConfigGenImpl; +import com.cgb.bcpinstall.db.CheckPointDb; +import com.cgb.bcpinstall.db.table.NodeDO; +import com.cgb.bcpinstall.service.FileService; +import com.cgb.bcpinstall.service.ModeService; +import com.cgb.bcpinstall.service.UpdateService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.io.File; +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +/** + * @author zheng.li + * @date 2020/2/3 10:03 + */ +@Service +@Slf4j +public class PeerRemoveBiz { + + @Autowired + private HttpClientUtil httpClient; + + @Autowired + private CheckPointDb checkPointDb; + + @Autowired + private ModeService modeService; + + @Autowired + private UpdateService updateService; + + @Autowired + private FileService fileService; + + @Autowired + private DockerConfigGenImpl dockerConfigGen; + + @Value("${init.dir}") + private String initDir; + + public void peerRemove(Map removedPeerHostConfig, InitConfigEntity configEntity) { + // 通知移除的 peer 节点停止并删除相关文件 + log.info("移除节点停止peer容器"); + Map> removeGroup = dockerConfigGen.groupHostByIp(removedPeerHostConfig); + String stopNodeFilePath = (this.initDir.endsWith(File.separator) ? this.initDir : this.initDir + File.separator) + "template/stopNode.sh"; + for (String ip : removeGroup.keySet()) { + RemoveCmd peerRemoveCmd = updateService.createRemoveCmd(ip, removeGroup.get(ip), RoleEnum.PEER); + peerRemoveCmd.setPeerDomain(configEntity.getPeerDomain()); + if (NetUtil.ipIsMine(ip)) { + try { + FileUtils.copyFile(new File(stopNodeFilePath), new File(modeService.getInstallPath() + "stopNode.sh")); + } catch (Exception e) { + log.info("复制stopNode.sh发生异常"); + return; + } + updateService.removeNode(RoleEnum.PEER, peerRemoveCmd.getPeerDomain(), peerRemoveCmd.getHostNames(), peerRemoveCmd.getPorts()); + } else { + + String url = "http://" + ip + ":8080/v1/install/remove"; + do { + try { + String result = this.httpClient.sendFileAndJson(url, stopNodeFilePath, JSONObject.toJSONString(peerRemoveCmd)); + + if (!StringUtils.isEmpty(result)) { + HttpInstallResponse response = JSONObject.parseObject(result, HttpInstallResponse.class); + if (ResponseCode.SUCCESS.getCode().equalsIgnoreCase(response.getCode())) { + break; + } + } + + log.warn(String.format("给节点 %s 发送移除命令返回失败,稍后重试", ip)); + } catch (Exception e) { + log.warn(String.format("给节点 %s 发送移除命令异常,稍后重试", ip), e); + e.printStackTrace(); + } + + try { + Thread.sleep(5000); + } catch (Exception e) { + e.printStackTrace(); + } + } while (true); + } + } + //将主节点相关证书删除 + log.info("将主节点相关证书删除"); + fileService.removeCertFile(RoleEnum.PEER, configEntity, removedPeerHostConfig, true); + // 更新本地数据库 + log.info("将已移除的 peer(s) 节点从数据库中删除"); + // 从数据库中删除 + for (String host : removedPeerHostConfig.keySet()) { + String ip = removedPeerHostConfig.get(host); + int index = ip.lastIndexOf(":"); + String port = ip.substring(index + 1); + ip = ip.substring(0, index); + + NodeDO nodeDO = new NodeDO(); + nodeDO.setRole(RoleEnum.PEER); + nodeDO.setOrgMspId(configEntity.getOrgMSPID()); + nodeDO.setHostName(host); + nodeDO.setIp(ip); + nodeDO.setPort(Integer.parseInt(port)); + try { + this.checkPointDb.deleteNodeRecord(nodeDO); + } catch (SQLException e) { + log.error(String.format("将节点 %s 从数据库中删除异常", host), e); + e.printStackTrace(); + } + } + } + + +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/RolesBiz.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/RolesBiz.java new file mode 100644 index 00000000..63c2a126 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/RolesBiz.java @@ -0,0 +1,81 @@ +package com.cgb.bcpinstall.biz; + +import com.cgb.bcpinstall.common.entity.InstallResult; +import com.cgb.bcpinstall.common.entity.InstallStatusEnum; +import com.cgb.bcpinstall.common.entity.RoleEnum; +import com.cgb.bcpinstall.common.entity.ServerEntity; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class RolesBiz { + // 角色对机器URL的map + private Map> rolesMap = new HashMap<>(); + + synchronized public void addRole(RoleEnum role, String httpUrl, String roleIp, List rolePorts) { + List servers; + + if (this.rolesMap.containsKey(role)) { + servers = this.rolesMap.get(role); + } else { + servers = new ArrayList<>(); + this.rolesMap.put(role, servers); + } + + if (servers.stream().noneMatch(s -> s.getHost().equalsIgnoreCase(roleIp))) { + ServerEntity serverEntity = new ServerEntity(); + + serverEntity.setRole(role); + serverEntity.setHttpUrl(httpUrl); + serverEntity.setHost(roleIp); + serverEntity.setRolePorts(rolePorts); + serverEntity.setStatus(InstallStatusEnum.REGISTERED); + servers.add(serverEntity); + } + } + + public List getRole(String roleIp) { + List roleList = new ArrayList<>(); + + for (RoleEnum roleEnum: this.rolesMap.keySet()) { + if (this.rolesMap.get(roleEnum).stream().anyMatch(s -> s.getHost().equals(roleIp))) { + roleList.add(roleEnum); + } + } + + return roleList; + } + + synchronized public void setServerStatus(String remoteAddress, InstallStatusEnum status) { + this.rolesMap.values().forEach(c -> c.forEach(s -> { + if (s.getHost().equals(remoteAddress)) { + s.setStatus(status); + } + })); + } + + public Map> getRolesMap() { + return this.rolesMap; + } + + synchronized public void updateInstallResult(String remoteAddress, InstallResult result) { + for (RoleEnum role: this.rolesMap.keySet()) { + if (role == result.getRole()) { + List serverEntities = this.rolesMap.get(role); + for (ServerEntity server: serverEntities) { + if (server.getHost().endsWith(remoteAddress)) { + server.setStatus(result.isSuccess() ? InstallStatusEnum.SUCCESS : InstallStatusEnum.FAILED); + } + } + + break; + } + } + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/UpdateNetworkBiz.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/UpdateNetworkBiz.java new file mode 100644 index 00000000..28c35750 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/UpdateNetworkBiz.java @@ -0,0 +1,172 @@ +package com.cgb.bcpinstall.biz; + +import com.cgb.bcpinstall.common.entity.*; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.db.CheckPointDb; +import com.cgb.bcpinstall.db.table.NodeDO; +import com.cgb.bcpinstall.service.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.sql.SQLException; +import java.util.*; + +/** + * @author zheng.li + * @date 2020/2/2 14:01 + */ +@Service +@Slf4j +public class UpdateNetworkBiz implements InstallMode { + + @Autowired + private CheckPointDb checkPointDb; + + @Autowired + private OrdererExtendBiz ordererExtendBiz; + + @Autowired + private OrdererRemoveBiz ordererRemoveBiz; + + @Autowired + private PeerRemoveBiz peerRemoveBiz; + + @Autowired + private PeerExtendBiz peerExtendBiz; + + @Autowired + private RemoteService remoteService; + + @Override + public void run(InitConfigEntity configEntity) { + DiffHostConfigs removedNodeConfigs = getRemovedNodes(configEntity); + DiffHostConfigs addedNodeConfigs = getAddedNodes(configEntity); + + if (removedNodeConfigs == null && addedNodeConfigs == null + || (CollectionUtils.isEmpty(removedNodeConfigs.getOrdererHostConfig()) + && CollectionUtils.isEmpty(removedNodeConfigs.getPeerHostConfig()) + && CollectionUtils.isEmpty(addedNodeConfigs.getOrdererHostConfig()) + && CollectionUtils.isEmpty(addedNodeConfigs.getPeerHostConfig()))) { + log.info("未发现与上次安装的差异,无需安装任何节点"); + return; + } + doRemoveNodes(removedNodeConfigs, configEntity); + doNewNodesInstall(addedNodeConfigs, configEntity); + // 通知结束 + Set serverUrls = new HashSet<>(); + parseServerUrl(serverUrls, removedNodeConfigs.getOrdererHostConfig()); + parseServerUrl(serverUrls, removedNodeConfigs.getPeerHostConfig()); + parseServerUrl(serverUrls, addedNodeConfigs.getOrdererHostConfig()); + parseServerUrl(serverUrls, addedNodeConfigs.getPeerHostConfig()); + remoteService.notifyNodesToEnd(serverUrls); + } + + /** + * 根据配置文件与数据库数据对比,获取移除节点信息 + * + * @param configEntity + * @return + */ + private DiffHostConfigs getRemovedNodes(InitConfigEntity configEntity) { + DiffHostConfigs removedNodes = new DiffHostConfigs(); + + // 数据库中搜索所有 orderer 节点 + List nodes = queryNodes(configEntity.getOrgMSPID(), RoleEnum.ORDER); + removedNodes.setOrdererHostConfig(checkRemovedNodes(nodes, configEntity.getOrdererHostConfig())); + nodes = queryNodes(configEntity.getOrgMSPID(), RoleEnum.PEER); + removedNodes.setPeerHostConfig(checkRemovedNodes(nodes, configEntity.getPeerHostConfig())); + + return removedNodes; + } + + private Map checkRemovedNodes(List prevNodes, Map newHostConfig) { + Map removedHostConfig = new HashMap<>(); + + for (NodeDO node : prevNodes) { + if (!newHostConfig.containsKey(node.getHostName())) { + removedHostConfig.put(node.getHostName(), node.getIp() + ":" + node.getPort()); + } + } + + return removedHostConfig; + } + + /** + * 根据配置文件与数据库数据对比,获取添加节点信息 + * + * @param configEntity + * @return + */ + private DiffHostConfigs getAddedNodes(InitConfigEntity configEntity) { + DiffHostConfigs addedNodes = new DiffHostConfigs(); + + List nodes = queryNodes(configEntity.getOrgMSPID(), RoleEnum.ORDER); + addedNodes.setOrdererHostConfig(checkAddedNodes(nodes, configEntity.getOrdererHostConfig())); + + nodes = queryNodes(configEntity.getOrgMSPID(), RoleEnum.PEER); + addedNodes.setPeerHostConfig(checkAddedNodes(nodes, configEntity.getPeerHostConfig())); + return addedNodes; + } + + private Map checkAddedNodes(List prevNodes, Map newHostConfig) { + Map addedHostConfig = new HashMap<>(); + + for (String hostName : newHostConfig.keySet()) { + if (prevNodes.stream().noneMatch(n -> n.getHostName().equalsIgnoreCase(hostName))) { + addedHostConfig.put(hostName, newHostConfig.get(hostName)); + } + } + + return addedHostConfig; + } + + private void doRemoveNodes(DiffHostConfigs removedNodeConfigs, InitConfigEntity configEntity) { + // Orderer + if (!CollectionUtils.isEmpty(removedNodeConfigs.getOrdererHostConfig())) { + ordererRemoveBiz.ordererRemove(removedNodeConfigs.getOrdererHostConfig(), configEntity); + } + // peer + if (!CollectionUtils.isEmpty(removedNodeConfigs.getPeerHostConfig())) { + peerRemoveBiz.peerRemove(removedNodeConfigs.getPeerHostConfig(), configEntity); + } + } + + private void doNewNodesInstall(DiffHostConfigs addedNodeConfigs, InitConfigEntity configEntity) { + if (!CollectionUtils.isEmpty(addedNodeConfigs.getOrdererHostConfig())) { + ordererExtendBiz.ordererExtend(addedNodeConfigs.getOrdererHostConfig(), configEntity); + } + + if (!CollectionUtils.isEmpty(addedNodeConfigs.getPeerHostConfig())) { + peerExtendBiz.peerExtend(addedNodeConfigs.getPeerHostConfig(), configEntity); + } + } + + private void parseServerUrl(Set serverUrls, Map hostConfig) { + if (CollectionUtils.isEmpty(hostConfig)) { + return; + } + + for (String host : hostConfig.keySet()) { + String ip = hostConfig.get(host); + ip = ip.substring(0, ip.lastIndexOf(":")); + + serverUrls.add("http://" + ip + ":8080/"); + } + } + + private List queryNodes(String orgMspID, RoleEnum role) { + NodeDO nodeDO = new NodeDO(); + nodeDO.setOrgMspId(orgMspID); + nodeDO.setRole(role); + try { + return this.checkPointDb.find(nodeDO); + } catch (SQLException e) { + log.error("查询数据库异常", e); + e.printStackTrace(); + } + + return null; + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/helper/YamlRepresenter.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/helper/YamlRepresenter.java new file mode 100644 index 00000000..8e07ba8d --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/biz/helper/YamlRepresenter.java @@ -0,0 +1,14 @@ +package com.cgb.bcpinstall.biz.helper; + +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.nodes.Tag; +import org.yaml.snakeyaml.representer.Representer; + +public class YamlRepresenter extends Representer { + + public YamlRepresenter(DumperOptions options) { + super(options); + + this.nullRepresenter = data -> representScalar(Tag.NULL, ""); + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/ConfigFileGen.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/ConfigFileGen.java new file mode 100644 index 00000000..25db6b51 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/ConfigFileGen.java @@ -0,0 +1,104 @@ +package com.cgb.bcpinstall.config; + +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.util.CacheUtil; +import com.cgb.bcpinstall.common.util.ProcessUtil; +import com.cgb.bcpinstall.service.ModeService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author zheng.li + * @date 2020/3/12 15:04 + */ +@Component +@Slf4j +public class ConfigFileGen { + + @Autowired + private ModeService modeService; + + @Autowired + private DockerConfigGen dockerConfigGen; + + @Autowired + private FabricConfigGen fabricConfigGen; + + + public void createConfigFile(InitConfigEntity config) { + + // 生成 configtx.yaml 文件,其它机构在profile中只有PrivateChannel配置,需在子类具体实现 + if (fabricConfigGen.configTxGen(config)) { + log.info("生成 configtx.yaml 文件成功"); + } else { + log.error("生成 configtx.yaml 文件失败"); + } + + // 生成 crypto-config.yaml 文件 + if (fabricConfigGen.cryptoGen(config)) { + log.info("生成 crypto-config.yaml 文件成功"); + } else { + log.error("生成 crypto-config.yaml 文件失败"); + } + + // 创建 crypto-config 目录和证书 + if (createNewCerts()) { + log.info("创建证书成功"); + } else { + log.error("创建证书失败"); + } + + // 生成 orderer docker compose yaml 文件 + if (dockerConfigGen.ordererComposeFileGen(config)) { + log.info("生成 docker-compose-orderer.yaml 文件成功"); + } else { + log.error("生成 docker-compose-orderer.yaml 文件失败"); + } + + // 生成 peer docker compose yaml 文件,本配置文件不区分发起机构与其他机构,可具体实现 + if (dockerConfigGen.peerComposeFileGen(config)) { + log.info("生成 docker-compose-peer.yaml 文件成功"); + } else { + log.error("生成 docker-compose-peer.yaml 文件失败"); + } + } + + /** + * 根据crypto-config生成新证书文件 + * + * @return + */ + public boolean createNewCerts() { + return createCerts("up"); + } + + /** + * 根据crypto-config在已存在证书基础下生成新节点证书文件 + * + * @return + */ + public boolean createExtendCerts() { + return createCerts("extend"); + } + + /** + * 根据mode生成证书 + * + * @param mode + * @return + */ + private boolean createCerts(String mode) { + String workingDir = modeService.getInitDir() + "fabric-net/cryptoAndConfig"; + String shellFilePath = modeService.getInitDir() + "generate.sh"; + try { + ProcessUtil.Result result = ProcessUtil.execCmd("bash " + shellFilePath + " " + mode, new String[]{"CRYPTTOGEN_FILE_PATH" + "=" + CacheUtil.getCryptogenFilePath()}, workingDir); + if (result.getCode() == 0) { + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/DockerConfigGen.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/DockerConfigGen.java new file mode 100644 index 00000000..3884bcde --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/DockerConfigGen.java @@ -0,0 +1,25 @@ +package com.cgb.bcpinstall.config; + +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; + +/** + * @author zheng.li + * @date 2020/3/12 15:07 + */ +public interface DockerConfigGen { + /** + * 生成peer的docker-compose文件 + * + * @param initConfig 配置信息 + * @return true--生成成功 false--生成失败 + */ + boolean peerComposeFileGen(InitConfigEntity initConfig); + + /** + * 生成orderer的docker-compose文件 + * + * @param initConfig 配置信息 + * @return true--生成成功 false--生成失败 + */ + boolean ordererComposeFileGen(InitConfigEntity initConfig); +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/FabricConfigGen.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/FabricConfigGen.java new file mode 100644 index 00000000..14b9c61c --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/FabricConfigGen.java @@ -0,0 +1,25 @@ +package com.cgb.bcpinstall.config; + +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; + +/** + * @author zheng.li + * @date 2020/3/12 15:07 + */ +public interface FabricConfigGen { + /** + * 生成configtx.yaml文件 + * + * @param initConfig 配置信息 + * @return true--生成成功 false--生成失败 + */ + boolean configTxGen(InitConfigEntity initConfig); + + /** + * 生成crypto-config.yaml文件 + * + * @param initConfig 配置信息 + * @return true--生成成功 false--生成失败 + */ + boolean cryptoGen(InitConfigEntity initConfig); +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/GlobalConfig.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/GlobalConfig.java new file mode 100644 index 00000000..46530149 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/GlobalConfig.java @@ -0,0 +1,17 @@ +package com.cgb.bcpinstall.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "global") +public class GlobalConfig { + /** + * 是否主节点 + */ + private int master; +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/configGenImpl/DockerConfigGenImpl.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/configGenImpl/DockerConfigGenImpl.java new file mode 100644 index 00000000..fc66d933 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/configGenImpl/DockerConfigGenImpl.java @@ -0,0 +1,473 @@ +package com.cgb.bcpinstall.config.configGenImpl; + +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.util.FileUtil; +import com.cgb.bcpinstall.common.util.NetUtil; +import com.cgb.bcpinstall.config.DockerConfigGen; +import com.cgb.bcpinstall.service.ModeService; +import com.cgb.bcpinstall.service.YamlFileService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.io.File; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author zheng.li + * @date 2020/3/12 15:47 + */ +@Service +@Slf4j +public class DockerConfigGenImpl implements DockerConfigGen { + + @Autowired + private ModeService modeService; + + @Autowired + private YamlFileService yamlFileService; + + @Override + public boolean peerComposeFileGen(InitConfigEntity initConfig) { + // 根据 IP 地址分组 + Map> peerGroups = this.groupHostByIp(initConfig.getPeerHostConfig()); + + // 每个 IP 一个 docker-compose 文件 + for (String serverIp : peerGroups.keySet()) { + String path = String.format("fabric-net/dockerFile/peer-%s/", serverIp); + String filePath = null; + try { + filePath = createPeerYamlFile(initConfig, serverIp, peerGroups.get(serverIp), path); + } catch (IOException e) { + e.printStackTrace(); + } + if (StringUtils.isEmpty(filePath)) { + return false; + } + } + + return true; + } + + @Override + public boolean ordererComposeFileGen(InitConfigEntity initConfig) { + // 根据 IP 地址分组 + Map> orderGroups = this.groupHostByIp(initConfig.getOrdererHostConfig()); + // 每个 IP 一个 docker-compose 文件 + for (String orderServerIp : orderGroups.keySet()) { + String filePath = null; + try { + filePath = createOrdererYamlFile(initConfig, orderServerIp, orderGroups.get(orderServerIp), null); + } catch (IOException e) { + e.printStackTrace(); + } + if (StringUtils.isEmpty(filePath)) { + return false; + } + } + return true; + } + + /** + * 根据ip进行host分组,相同ip的host属于同一集合 + * + * @param nodeHostConfig + * @return + */ + public Map> groupHostByIp(Map nodeHostConfig) { + Map> groups = new HashMap<>(16); + + for (String url : nodeHostConfig.keySet()) { + String ip = nodeHostConfig.get(url); + int index = ip.lastIndexOf(":"); + String port = ip.substring(index + 1); + ip = ip.substring(0, index); + + List nodes; + if (groups.containsKey(ip)) { + nodes = groups.get(ip); + } else { + nodes = new ArrayList<>(); + groups.put(ip, nodes); + } + nodes.add(url + ":" + port); + } + return groups; + } + + /** + * 根据模板生成orderer的docker-compose文件 + * + * @param initConfig 配置信息 + * @param hostIp orderer所在主节的ip + * @param orderHosts orderer的host集合 + * @param folderName 配置文件生成路径 + * @return + * @throws IOException + */ + public String createOrdererYamlFile(InitConfigEntity initConfig, String hostIp, List orderHosts, String folderName) throws IOException { + String workingDir = modeService.getInitDir(); + Map ordererComposeConfig = yamlFileService.loadYamlFile(workingDir + "/template/docker-compose-orderer.yaml"); + + Map networks = (Map) ordererComposeConfig.get("networks"); + networks.clear(); + for (int i = 0; i < orderHosts.size(); ++i) { + networks.put(initConfig.getNetwork() + i, null); + } + + Map valumes = (Map) ordererComposeConfig.get("volumes"); + valumes.clear(); + for (String orderHost : orderHosts) { + valumes.put(orderHost.substring(0, orderHost.lastIndexOf(":")), null); + } + + Map services = (Map) ordererComposeConfig.get("services"); + services.clear(); + + for (int hostIndex = 0; hostIndex < orderHosts.size(); ++hostIndex) { + String orderHost = orderHosts.get(hostIndex); + + int index = orderHost.lastIndexOf(":"); + String port = orderHost.substring(index + 1); + orderHost = orderHost.substring(0, index); + + Map orderConfig = yamlFileService.loadYamlFile(workingDir + "template/orderer.yaml"); + Map config = (Map) orderConfig.get("orderer.example.com"); + config.put("container_name", orderHost); + int finalHostIndex = hostIndex; + config.put("networks", new ArrayList() {{ + add(initConfig.getNetwork() + finalHostIndex); + }}); + + List newVols = new ArrayList<>(); + List vols = (List) config.get("volumes"); + for (String item : vols) { + String newItem; + if (item.contains("orderer.example.com")) { + newItem = item.replace("orderer.example.com", orderHost); + } else { + newItem = item; + } + if (newItem.contains("example.com")) { + int i = orderHost.indexOf("."); + newItem = newItem.replace("example.com", orderHost.substring(i + 1)); + } + + newVols.add(newItem); + } + newVols.add("/var/run/:/opt/gopath/src/github.com/hyperledger/fabric"); + config.put("volumes", newVols); + + // extra_hosts + List extraHosts = new ArrayList<>(); + for (String eHost : initConfig.getOrdererHostConfig().keySet()) { + if (eHost.equalsIgnoreCase(orderHost)) { + continue; + } + + String eIp = initConfig.getOrdererHostConfig().get(eHost); + eIp = eIp.substring(0, eIp.lastIndexOf(":")); + if (eIp.equalsIgnoreCase("127.0.0.1")) { + eIp = NetUtil.getMyNormalIP(); + } + extraHosts.add(eHost + ":" + eIp); + } + if (!CollectionUtils.isEmpty(extraHosts)) { + config.put("extra_hosts", extraHosts); + } + + List ports = (List) config.get("ports"); + ports.clear(); + ports.add(port + ":7050"); + + services.put(orderHost, config); + } + + String filePath = workingDir + String.format("fabric-net/dockerFile/%s/", StringUtils.isEmpty(folderName) ? "order-" + hostIp : folderName); + FileUtil.makeFilePath(filePath, false); + String yamlFilePath = filePath + "docker-compose-orderer.yaml"; + if (!yamlFileService.writeObjectToYamlFile(ordererComposeConfig, yamlFilePath)) { + return null; + } + + // 复制 start-orderer.sh + /*String content = getFileContent(workingDir + "template/start-peer.sh"); + String newFilePath = filePath + "start-orderer.sh"; + + if (!writeFileContent(newFilePath, content)) { + return null; + }*/ + String srcShFilePath = workingDir + "template/start-peer.sh"; + String newShFilePath = filePath + "start-orderer.sh"; + FileUtils.copyFile(new File(srcShFilePath), new File(newShFilePath)); + return yamlFilePath; + } + + /** + * 根据模板生成peer的docker-compose文件 + * + * @param initConfig 配置信息 + * @param hostIp orderer所在主节的ip + * @param peerHosts orderer的host集合 + * @param folderName 配置文件生成路径 + * @return + * @throws IOException + */ + public String createPeerYamlFile(InitConfigEntity initConfig, String hostIp, List peerHosts, String folderName) throws IOException { + + Map peerComposeConfig = yamlFileService.loadYamlFile(modeService.getInitDir() + "template/docker-compose-peer.yaml"); + + Map networks = (Map) peerComposeConfig.get("networks"); + networks.clear(); + networks.put(initConfig.getNetwork(), null); + + Map valumes = (Map) peerComposeConfig.get("volumes"); + valumes.clear(); + for (String host : peerHosts) { + valumes.put(host.substring(0, host.lastIndexOf(":")), null); + } + + Map services = (Map) peerComposeConfig.get("services"); + Map cliConfig = (Map) services.get("cli"); + services.clear(); + + List dependsOn = (List) cliConfig.get("depends_on"); + dependsOn.clear(); + + // 获取其他 peer 配置 + Map othPeerHostConfig = new HashMap<>(); + Set peerHostSet = new HashSet<>(peerHosts); + for (String host : initConfig.getPeerHostConfig().keySet()) { + String origIp = initConfig.getPeerHostConfig().get(host); + String ip = origIp.split(":")[0]; + String port = origIp.split(":")[1]; + if (!ip.equalsIgnoreCase(hostIp)) { + othPeerHostConfig.put(host, origIp); + } else { + host = host + ":" + port; + peerHostSet.add(host); + } + } + + // peer + /*int couchDbPort = 7984;*/ + /*int ssPort = 9443;*/ + String firstHost = null; + for (String peerHost : peerHosts) { + if (StringUtils.isEmpty(firstHost)) { + firstHost = peerHost; + } + + String finalPeerHost = peerHost; + List otherPeerHosts = peerHostSet.stream().filter(i -> !i.equals(finalPeerHost)).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(otherPeerHosts)) { + for (String otherHost : otherPeerHosts) { + String host = otherHost.split(":")[0]; + log.info("扩容节点其他节点的host:" + host); + String origIp = initConfig.getPeerHostConfig().get(host); + if (origIp.contains("127.0.0.1")) { + origIp = NetUtil.getMyNormalIP() + ":" + origIp.split(":")[1]; + } + othPeerHostConfig.put(host, origIp); + } + } + + String peerHostPreFix = peerHost.split(initConfig.getPeerDomain())[0]; + // couchdb + Map couchDbConfig = new HashMap<>(); + couchDbConfig.put("container_name", peerHostPreFix + initConfig.getOrgMSPID() + "." + "couchdb"); + couchDbConfig.put("image", "hyperledger/fabric-couchdb"); + couchDbConfig.put("environment", new ArrayList() {{ + add("COUCHDB_USER="); + add("COUCHDB_PASSWORD="); + }}); + + String origHost = peerHost; + int index = peerHost.lastIndexOf(":"); + int port = Integer.parseInt(peerHost.substring(index + 1)); + peerHost = peerHost.substring(0, index); + + String finalCouchdbPeerHost = peerHost; + couchDbConfig.put("ports", new ArrayList() {{ + add(initConfig.getCouchdbPortConfig().get(finalCouchdbPeerHost) + ":5984"); + }}); + couchDbConfig.put("networks", new ArrayList() {{ + add(initConfig.getNetwork()); + }}); + services.put(peerHostPreFix + initConfig.getOrgMSPID() + "." + "couchdb", couchDbConfig); + + // + Map peerConfig = yamlFileService.loadYamlFile(modeService.getInitDir() + "template/peer.yaml"); + Map config = (Map) peerConfig.get("peer0.org1.example.com"); + config.put("container_name", peerHost); + config.put("networks", new ArrayList() {{ + add(initConfig.getNetwork()); + }}); + + List newVols = new ArrayList<>(); + List vols = (List) config.get("volumes"); + for (String item : vols) { + String newItem; + if (item.contains("peer0.org1.example.com")) { + newItem = item.replace("peer0.org1.example.com", peerHost); + } else { + newItem = item; + } + if (newItem.contains("org1.example.com")) { + int i = peerHost.indexOf("."); + newItem = newItem.replace("org1.example.com", peerHost.substring(i + 1)); + } + + newVols.add(newItem); + } + config.put("volumes", newVols); + + // environment + List environment = new ArrayList<>(); + environment.add("CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock"); + + String netWorkConfig; + if (folderName.contains("new")) { + String peerPathSplit = folderName.split("peer-")[1]; + String peerNetSplit = peerPathSplit.split(File.separator)[0]; + netWorkConfig = "peer-" + peerNetSplit + "_" + initConfig.getNetwork(); + } else { + netWorkConfig = "peer_" + initConfig.getNetwork(); + } + + environment.add("CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=" + netWorkConfig); + environment.add("FABRIC_LOGGING_SPEC=INFO"); + environment.add("CORE_PEER_TLS_ENABLED=true"); + environment.add("CORE_PEER_GOSSIP_USELEADERELECTION=true"); + environment.add("CORE_PEER_GOSSIP_ORGLEADER=false"); + environment.add("CORE_PEER_PROFILE_ENABLED=true"); + environment.add("CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt"); + environment.add("CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key"); + environment.add("CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt"); + environment.add("CORE_PEER_ID=" + peerHost); + environment.add("CORE_PEER_ADDRESS=" + peerHost + ":" + port); + environment.add("CORE_PEER_LISTENADDRESS=0.0.0.0:" + port); + environment.add("CORE_PEER_CHAINCODEADDRESS=" + peerHost + ":" + (port + 1)); + environment.add("CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:" + (port + 1)); + + if (CollectionUtils.isEmpty(othPeerHostConfig)) { + environment.add("CORE_PEER_GOSSIP_BOOTSTRAP=" + origHost); + } else { + String firstKey = othPeerHostConfig.keySet().iterator().next(); + String othIp = othPeerHostConfig.get(firstKey); + environment.add("CORE_PEER_GOSSIP_BOOTSTRAP=" + firstKey + ":" + othIp.substring(othIp.lastIndexOf(":") + 1)); + } + + environment.add("CORE_PEER_GOSSIP_EXTERNALENDPOINT=" + origHost); + environment.add("CORE_PEER_LOCALMSPID=" + initConfig.getOrgMSPID()); + environment.add("CORE_OPERATIONS_LISTENADDRESS=0.0.0.0" + ":9443"); + environment.add("CORE_METRICS_PROVIDER=prometheus"); + environment.add("CORE_LEDGER_STATE_STATEDATABASE=CouchDB"); + environment.add("CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=" + peerHostPreFix + initConfig.getOrgMSPID() + "." + "couchdb" + ":5984"); + /*environment.add("CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb" + hIndex + ":" + finalCouchDbPort);*/ + environment.add("CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME="); + environment.add("CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD="); + + config.put("environment", environment); + + // depends_on + config.put("depends_on", new ArrayList() {{ + add(peerHostPreFix + initConfig.getOrgMSPID() + "." + "couchdb"); + }}); + + List extraHosts = new ArrayList<>(); + for (String host : initConfig.getOrdererHostConfig().keySet()) { + String ip = initConfig.getOrdererHostConfig().get(host); + int i = ip.lastIndexOf(":"); + ip = ip.substring(0, i); + + if ("127.0.0.1".equalsIgnoreCase(ip)) { + ip = NetUtil.getMyNormalIP(); + } + extraHosts.add(host + ":" + ip); + } + + if (!CollectionUtils.isEmpty(othPeerHostConfig)) { + for (String othHost : othPeerHostConfig.keySet()) { + String othIp = othPeerHostConfig.get(othHost); + int i = othIp.lastIndexOf(":"); + othIp = othIp.substring(0, i); + if ("127.0.0.1".equals(othIp)) { + othIp = NetUtil.getMyNormalIP(); + } + if (!peerHost.contains(othHost)) { + extraHosts.add(othHost + ":" + othIp); + } + } + } +// extraHosts.add("couchdb" + hIndex + ":" + hostIp); + if (!CollectionUtils.isEmpty(extraHosts)) { + config.put("extra_hosts", extraHosts); + } + + List ports = (List) config.get("ports"); + ports.clear(); + ports.add(port + ":" + port); + String metricsPort = initConfig.getMetricPortConfig().get(peerHost); + ports.add(metricsPort + ":" + "9443"); + services.put(peerHost, config); + dependsOn.add(peerHost); + } + + int index = firstHost.lastIndexOf(":"); + String onlyHost = firstHost.substring(0, index); + String orgUrl = initConfig.getPeerDomain(); + List newEnvironment = new ArrayList<>(); + List environment = (List) cliConfig.get("environment"); + for (String oldEnv : environment) { + String newEnv; + if (oldEnv.contains("CORE_PEER_ADDRESS")) { + newEnv = "CORE_PEER_ADDRESS=" + firstHost; + } else if (oldEnv.contains("CORE_PEER_LOCALMSPID")) { + newEnv = "CORE_PEER_LOCALMSPID=" + initConfig.getOrgMSPID(); + } else if (oldEnv.contains("CORE_PEER_TLS_CERT_FILE")) { + newEnv = String.format(oldEnv, orgUrl, onlyHost); + } else if (oldEnv.contains("CORE_PEER_TLS_KEY_FILE")) { + newEnv = String.format(oldEnv, orgUrl, onlyHost); + } else if (oldEnv.contains("CORE_PEER_TLS_ROOTCERT_FILE")) { + newEnv = String.format(oldEnv, orgUrl, onlyHost); + } else if (oldEnv.contains("CORE_PEER_MSPCONFIGPATH")) { + newEnv = String.format(oldEnv, orgUrl, orgUrl); + } else { + newEnv = oldEnv; + } + newEnvironment.add(newEnv); + } + cliConfig.put("environment", newEnvironment); + + cliConfig.put("networks", new ArrayList() {{ + add(initConfig.getNetwork()); + }}); + + cliConfig.remove("extra_hosts"); + services.put("cli", cliConfig); + + /*String filePath = workingDir + String.format("fabric-net/dockerFile/peer-%s/", hostIp);*/ + String filePath = modeService.getInitDir() + folderName; + FileUtil.makeFilePath(filePath, false); + String yamlFilePath = filePath + "docker-compose-peer.yaml"; + + log.info("新节点生成docker-compose文件路径:" + yamlFilePath); + + if (!yamlFileService.writeObjectToYamlFile(peerComposeConfig, yamlFilePath)) { + return null; + } + + // 生成 start-peer.sh + String newShFilePath = filePath + "start-peer.sh"; + String srcShFilePath = modeService.getInitDir() + "template/start-peer.sh"; + FileUtils.copyFile(new File(srcShFilePath), new File(newShFilePath)); + + return yamlFilePath; + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/configGenImpl/FabricConfigGenImpl.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/configGenImpl/FabricConfigGenImpl.java new file mode 100644 index 00000000..375df234 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/config/configGenImpl/FabricConfigGenImpl.java @@ -0,0 +1,238 @@ +package com.cgb.bcpinstall.config.configGenImpl; + +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.util.FileUtil; +import com.cgb.bcpinstall.config.FabricConfigGen; +import com.cgb.bcpinstall.service.ModeService; +import com.cgb.bcpinstall.service.YamlFileService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author zheng.li + * @date 2020/3/12 15:48 + */ +@Service +@Slf4j +public class FabricConfigGenImpl implements FabricConfigGen { + + private static final String CONFIGTX = "configtx"; + private static final String CRYPTO = "crypto"; + + @Autowired + private ModeService modeService; + + @Autowired + private YamlFileService yamlFileService; + + @Override + public boolean configTxGen(InitConfigEntity initConfig) { + Map configTxEntity = this.loadTemplate(CONFIGTX); + if (CollectionUtils.isEmpty(configTxEntity)) { + return false; + } + Map ordererOrg = null; + Map org1 = null; + List> organizations = (List>) configTxEntity.get("Organizations"); + for (Map item : organizations) { + if ("OrdererOrg".equals(item.get("Name"))) { + item.put("MSPDir", String.format("crypto-config/ordererOrganizations/%s/msp", initConfig.getOrdererDomain())); + ordererOrg = item; + } else { + org1 = item; + item.put("Name", initConfig.getOrgMSPID()); + item.put("ID", initConfig.getOrgMSPID()); + item.put("MSPDir", String.format("crypto-config/peerOrganizations/%s/msp", initConfig.getPeerDomain())); + + Map policies = (Map) item.get("Policies"); + Map config = (Map) policies.get("Readers"); + config.put("Rule", String.format("OR('%s.admin','%s.peer','%s.client')", initConfig.getOrgMSPID(), initConfig.getOrgMSPID(), initConfig.getOrgMSPID())); + + config = (Map) policies.get("Writers"); + config.put("Rule", String.format("OR('%s.admin','%s.client')", initConfig.getOrgMSPID(), initConfig.getOrgMSPID())); + + config = (Map) policies.get("Admins"); + config.put("Rule", String.format("OR('%s.admin')", initConfig.getOrgMSPID())); + + String peerHost = initConfig.getPeerHostConfig().keySet().iterator().next(); + String peerIp = initConfig.getPeerHostConfig().get(peerHost); + int index = peerIp.lastIndexOf(":"); + + List> anchorPeers = (List>) item.get("AnchorPeers"); + anchorPeers.get(0).put("Host", peerHost); + anchorPeers.get(0).put("Port", Integer.parseInt(peerIp.substring(index + 1))); + } + } + + String firstOrdererHost = initConfig.getOrdererHostConfig().keySet().iterator().next(); + String firstOrdererIp = initConfig.getOrdererHostConfig().get(firstOrdererHost); + int index = firstOrdererIp.lastIndexOf(":"); + + // Orderer + Map orderer = (Map) configTxEntity.get("Orderer"); + List orderAddresses = (List) orderer.get("Addresses"); + orderAddresses.clear(); + orderAddresses.add(String.format(firstOrdererHost + firstOrdererIp.substring(index))); + + // SampleMultiNodeEtcdRaft + Map profile = (Map) ((Map) configTxEntity.get("Profiles")).get("SampleMultiNodeEtcdRaft"); + Map orderConfig = (Map) profile.get("Orderer"); + + Map etcdRaftConfig = (Map) orderConfig.get("EtcdRaft"); + + List> consenters = (List>) (etcdRaftConfig).get("Consenters"); + consenters.clear(); + consenters.addAll(this.generateOrdersConfig(initConfig)); + + organizations = (List>) orderConfig.get("Organizations"); + organizations.clear(); + organizations.add(ordererOrg); + + Map capabilities = (Map) orderConfig.get("Capabilities"); + + orderAddresses = (List) orderConfig.get("Addresses"); + orderAddresses.clear(); + for (String host : initConfig.getOrdererHostConfig().keySet()) { + String ip = initConfig.getOrdererHostConfig().get(host); + orderAddresses.add(host + ip.substring(ip.lastIndexOf(":"))); + } + orderConfig.clear(); + orderConfig.putAll(orderer); + orderConfig.put("OrdererType", "etcdraft"); + orderConfig.put("EtcdRaft", etcdRaftConfig); + orderConfig.put("Addresses", orderAddresses); + orderConfig.put("Organizations", organizations); + orderConfig.put("Capabilities", capabilities); + + Map application = (Map) profile.get("Application"); + organizations = (List>) application.get("Organizations"); + organizations.clear(); + organizations.add(ordererOrg); + + Map sampleConsortium = (Map) ((Map) profile.get("Consortiums")).get("SampleConsortium"); + organizations = (List>) sampleConsortium.get("Organizations"); + organizations.clear(); + organizations.add(org1); + + // PrivateChannel + profile = (Map) ((Map) configTxEntity.get("Profiles")).get("PrivateChannel"); + application = (Map) profile.get("Application"); + organizations = (List>) application.get("Organizations"); + organizations.clear(); + organizations.add(org1); + + // OneOrgChannel + profile = (Map) ((Map) configTxEntity.get("Profiles")).get("OneOrgChannel"); + application = (Map) profile.get("Application"); + organizations = (List>) application.get("Organizations"); + organizations.clear(); + organizations.add(org1); + + return writeYamlFile(configTxEntity, CONFIGTX); + } + + /** + * 将配置信息写入configtx.yaml文件 + * + * @param configTxEntity + * @return + */ + private boolean writeYamlFile(Map configTxEntity, String fileName) { + String yamlFile = null; + if (fileName.equals(CONFIGTX)) { + yamlFile = modeService.getInitDir() + "fabric-net/cryptoAndConfig/configtx.yaml"; + } + if (fileName.equals(CRYPTO)) { + yamlFile = modeService.getInitDir() + "fabric-net/cryptoAndConfig/crypto-config.yaml"; + } + if (StringUtils.isEmpty(yamlFile)) { + return false; + } + + return yamlFileService.writeObjectToYamlFile(configTxEntity, yamlFile); + } + + /** + * 加载指定文件名称的文件模板 + * + * @param fileName + * @return + */ + private Map loadTemplate(String fileName) { + String txTempFile = null; + if (fileName.equals(CONFIGTX)) { + txTempFile = modeService.getInitDir() + "template/configtx.yaml"; + } + if (fileName.equals(CRYPTO)) { + txTempFile = modeService.getInitDir() + "template/crypto-config.yaml"; + } + if (StringUtils.isEmpty(txTempFile) || StringUtils.isEmpty(fileName)) { + return null; + } + Map result = null; + try { + result = yamlFileService.loadYamlFile(txTempFile); + } catch (FileNotFoundException e) { + log.error("找不到指定文件,文件路径:" + txTempFile); + e.printStackTrace(); + } + return result; + } + + private List> generateOrdersConfig(InitConfigEntity configEntity) { + String tlsFormat = "crypto-config/ordererOrganizations/%s/orderers/%s/tls/server.crt"; + List> config = new ArrayList<>(); + for (String host : configEntity.getOrdererHostConfig().keySet()) { + String ip = configEntity.getOrdererHostConfig().get(host); + int index = ip.lastIndexOf(":"); + + Map orderConfig = new HashMap<>(); + orderConfig.put("Host", host); + orderConfig.put("Port", Integer.parseInt(ip.substring(index + 1))); + String tls = String.format(tlsFormat, configEntity.getOrdererDomain(), host); + orderConfig.put("ClientTLSCert", tls); + orderConfig.put("ServerTLSCert", tls); + config.add(orderConfig); + } + return config; + } + + @Override + public boolean cryptoGen(InitConfigEntity initConfig) { + Map cryptoConfig = this.loadTemplate(CRYPTO); + List> ordererOrgs = (List>) cryptoConfig.get("OrdererOrgs"); + ordererOrgs.get(0).put("Domain", initConfig.getOrdererDomain()); + List> specs = (List>) ordererOrgs.get(0).get("Specs"); + specs.clear(); + for (String orderHost : initConfig.getOrdererHostConfig().keySet()) { + int index = orderHost.indexOf("."); + specs.add(new HashMap() {{ + put("Hostname", orderHost.substring(0, index)); + }}); + } + + List> peerOrgs = (List>) cryptoConfig.get("PeerOrgs"); + peerOrgs.get(0).put("Name", initConfig.getOrgMSPID().replace("MSP", "")); + peerOrgs.get(0).put("Domain", initConfig.getPeerDomain()); + + List> peerSpecs = (List>) peerOrgs.get(0).get("Specs"); + peerSpecs.clear(); + for (String peerHost : initConfig.getPeerHostConfig().keySet()) { + String peerHostName = peerHost.split("." + initConfig.getPeerDomain())[0]; + peerSpecs.add(new HashMap() {{ + put("Hostname", peerHostName); + }}); + } + return writeYamlFile(cryptoConfig, CRYPTO); + } + +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/CheckPointDb.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/CheckPointDb.java new file mode 100644 index 00000000..d8c4d017 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/CheckPointDb.java @@ -0,0 +1,428 @@ +package com.cgb.bcpinstall.db; + +import com.cgb.bcpinstall.db.table.NodeDO; +import com.cgb.bcpinstall.db.util.MapperUtil; +import com.cgb.bcpinstall.db.util.object.BaseDO; +import com.cgb.bcpinstall.db.util.object.Column; +import com.cgb.bcpinstall.db.util.object.Table; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.apache.commons.io.output.ByteArrayOutputStream; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.sql.Date; +import java.sql.*; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@Component +public class CheckPointDb { + public boolean nodesTableEmpty() throws SQLException { + return this.findDO(new NodeDO()).isEmpty(); + } + + public Long addNodeRecord(NodeDO obj) throws SQLException { + synchronized (this) { + return executeInsert(MapperUtil.createMapper(obj.getClass()), MapperUtil.createInsertSql(obj)); + } + } + + public void deleteNodeRecord(NodeDO obj) throws SQLException { + synchronized (this) { + execute(MapperUtil.createMapper(obj.getClass()), MapperUtil.createDeleteByParamSql(obj)); + } + } + + public List find(NodeDO nodeDO) throws SQLException { + synchronized (this) { + return this.findDO(nodeDO); + } + } + + public boolean updateNode(NodeDO obj) throws SQLException { + synchronized (this) { + Table table = MapperUtil.createMapper(obj.getClass()); + + NodeDO param = new NodeDO(); + param.setOrgMspId(obj.getOrgMspId()); + param.setHostName(obj.getHostName()); + param.setIp(obj.getIp()); + param.setPort(obj.getPort()); + List found = findDO(param); + if (found.isEmpty()) { + return executeInsert(table, MapperUtil.createInsertSql(obj)) != null; + } else { + if (found.size() > 1) { + execute(table, MapperUtil.createDeleteByParamSql(param)); + return executeInsert(table, MapperUtil.createInsertSql(obj)) != null; + } else { + NodeDO item = found.get(0); + if (item.getStatus() == obj.getStatus()) { + return false; + } + + obj.setId(found.get(0).getId()); + return executeUpdate(table, MapperUtil.createUpdateByIdSql(obj)) == 1; + } + } + } + } + + private List findDO(T obj) throws SQLException { + return find(obj, null, 0, 0); + } + + /** + * + * @param obj + * @param orderBy + * @param pageIndex 从1开始 + * @param pageSize + * @param + * @return + * @throws SQLException + */ + private List find(T obj, Map orderBy, int pageIndex, int pageSize) throws SQLException { + List result = new ArrayList<>(); + + Class clazz = obj.getClass(); + Table table = MapperUtil.createMapper(clazz); + checkAndCreateTable(table); + + String sql = MapperUtil.generalFindSql(obj); + + if (!CollectionUtils.isEmpty(orderBy)) { + StringBuilder orderByStr = new StringBuilder(); + Set orderFields = orderBy.keySet(); + for (String f: orderFields) { + List cols = table.getFields().stream() + .filter(c -> c.getFieldName().equalsIgnoreCase(f) || c.getColumnName().equalsIgnoreCase(f)) + .collect(Collectors.toList()); + if (!cols.isEmpty()) { + if (orderByStr.length() == 0) { + orderByStr.append(" order by "); + } + orderByStr.append(cols.get(0).getColumnName()).append(orderBy.get(f) ? " asc," : " desc,"); + } + } + String subSql = orderByStr.toString(); + if (subSql.endsWith(",")) { + subSql = subSql.substring(0, subSql.length() - 1); + } + if (!subSql.isEmpty()) { + sql = sql + subSql; + } + } + + if (pageIndex > 0 && pageSize > 0) { + sql = sql + " limit " + (pageIndex - 1) * pageSize + ", " + pageSize; + } + + Connection conn = null; + Statement stmt = null; + ResultSet rs = null; + try { + conn = ConnectionPool.getInstance().getConnection(); + stmt = conn.createStatement(); + rs = stmt.executeQuery(sql); + + List columns = table.getFields(); + while (rs.next()) { + T rtObj = (T)clazz.newInstance(); + for (Column col: columns) { + Object v = rs.getObject(col.getColumnName()); + setFieldValue(rtObj, col, rs); + } + result.add(rtObj); + } + } catch (IllegalAccessException | InstantiationException e) { + e.printStackTrace(); + } finally { + ConnectionPool.releaseConnection(conn, stmt, rs); + } + + return result; + } + + private int countOf(T obj) throws SQLException { + Class clazz = obj.getClass(); + Table table = MapperUtil.createMapper(clazz); + checkAndCreateTable(table); + + String sql = MapperUtil.generalCountSql(obj); + + Connection conn = null; + Statement stmt = null; + ResultSet rs = null; + try { + conn = ConnectionPool.getInstance().getConnection(); + stmt = conn.createStatement(); + rs = stmt.executeQuery(sql); + if (rs.next()) { + return rs.getInt("total"); + } + } finally { + ConnectionPool.releaseConnection(conn, stmt, rs); + } + + return 0; + } + + private static > T getEnumObject(String value, Class clazz) { + if (!clazz.isEnum()) { + return null; + } + try { + T[] enumConstants = clazz.getEnumConstants(); + for (T ec : enumConstants) { + if (((Enum) ec).name().equals(value)) { + return ec; + } + } + return null; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + private void setFieldValue(T rtObj, Column col, ResultSet rs) { + Field[] fields = rtObj.getClass().getDeclaredFields(); + + boolean found = false; + for (Field field: fields) { + field.setAccessible(true); + + if (field.getName().equals(col.getFieldName())) { + found = true; + try { + Class type = field.getType(); + if (type.isEnum()) { + field.set(rtObj, getEnumObject(col.getColumnName(), type)); + } else if (type.equals(Long.class)) { + field.set(rtObj, rs.getLong(col.getColumnName())); + } else if (type.equals(String.class)) { + field.set(rtObj, rs.getString(col.getColumnName())); + } else if (type.equals(Date.class)) { + field.set(rtObj, rs.getDate(col.getColumnName())); + } else if (type.equals(Integer.class)) { + field.set(rtObj, rs.getInt(col.getColumnName())); + } else { + field.set(rtObj, rs.getObject(col.getColumnName())); + } + } catch (IllegalAccessException | SQLException e) { + e.printStackTrace(); + } + } + } + + if (!found) { + Class parent = rtObj.getClass().getSuperclass(); + Field[] fieldsParent = parent.getDeclaredFields(); + for (Field field: fieldsParent) { + field.setAccessible(true); + + if (field.getName().equals(col.getFieldName())) { + try { + Class type = field.getType(); + if (type.equals(Long.class)) { + field.set(rtObj, rs.getLong(col.getColumnName())); + } else if (type.equals(String.class)) { + field.set(rtObj, rs.getString(col.getColumnName())); + } else if (type.equals(java.util.Date.class)) { + field.set(rtObj, rs.getTimestamp(col.getColumnName())); + } else if (type.equals(Integer.class)) { + field.set(rtObj, rs.getInt(col.getColumnName())); + } else { + field.set(rtObj, rs.getObject(col.getColumnName())); + } + } catch (IllegalAccessException | SQLException e) { + e.printStackTrace(); + } + } + } + } + } + + private boolean execute(Table table, String sql) throws SQLException { + checkAndCreateTable(table); + + Connection conn = null; + Statement stmt = null; + try { + conn = ConnectionPool.getInstance().getConnection(); + stmt = conn.createStatement(); + return stmt.execute(sql); + } finally { + ConnectionPool.releaseConnection(conn, stmt, null); + } + } + + private Long executeInsert(Table table, String sql) throws SQLException { + checkAndCreateTable(table); + + Connection conn = null; + Statement stmt = null; + ResultSet rs = null; + try { + conn = ConnectionPool.getInstance().getConnection(); + stmt = conn.createStatement(); + stmt.execute(sql, Statement.RETURN_GENERATED_KEYS); + rs = stmt.getGeneratedKeys(); + if (rs.next()) { + return rs.getLong("id"); + } + return 0L; + } finally { + ConnectionPool.releaseConnection(conn, stmt, rs); + } + } + + private int executeUpdate(Table table, String sql) throws SQLException { + checkAndCreateTable(table); + + Connection conn = null; + Statement stmt = null; + try { + conn = ConnectionPool.getInstance().getConnection(); + stmt = conn.createStatement(); + return stmt.executeUpdate(sql); + } finally { + ConnectionPool.releaseConnection(conn, stmt, null); + } + } + + private void checkAndCreateTable(Table table) throws SQLException { + Connection conn = ConnectionPool.getInstance().getConnection(); + DatabaseMetaData meta = conn.getMetaData(); + ResultSet rsTables = meta.getTables(null, null, table.getTableName(), new String[] { "TABLE" }); + Statement stmt = null; + if (!rsTables.next()) { + stmt = conn.createStatement(); + stmt.execute(MapperUtil.createTableSql(table)); + } + ConnectionPool.releaseConnection(conn, stmt, rsTables); + } + + public Long executeInsertWithParametered(T obj, String sql) throws SQLException { + Table table = MapperUtil.createMapper(obj.getClass()); + checkAndCreateTable(table); + + Connection conn = null; + PreparedStatement stmt = null; + ResultSet rs = null; + try { + conn = ConnectionPool.getInstance().getConnection(); + stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); + + for (int i = 0; i < table.getFields().size(); ++i) { + Column c = table.getFields().get(i); + + if (c.getColumnName().equals("id")) { + continue; + } + + if (c.getColumnName().equals("revision")) { + stmt.setLong(i, 0); + } else if (c.getColumnName().equals("create_time")) { + stmt.setTimestamp(i, new Timestamp(System.currentTimeMillis())); + } else if (c.getColumnName().equals("modify_time")) { + stmt.setTimestamp(i, new Timestamp(System.currentTimeMillis())); + } else { + try { + Object val = MapperUtil.getFieldValue(obj, c.getFieldName()); + if ("CLOB".equalsIgnoreCase(c.getDbType())) { + ByteArrayInputStream byteInputStream = new ByteArrayInputStream(val == null ? "".getBytes() : val.toString().getBytes()); + stmt.setAsciiStream(i, byteInputStream); + } + else { + if (String.class.getName().equals(c.getType())) { + stmt.setString(i, val.toString()); + } else if (java.util.Date.class.getName().equals(c.getType())) { + if (val == null) { + stmt.setTimestamp(i, new Timestamp(System.currentTimeMillis())); + } else { + stmt.setTimestamp(i, new Timestamp(((java.util.Date)val).getTime())); + } + } else { + stmt.setString(i, val == null ? "" : val.toString()); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + stmt.executeUpdate(); + rs = stmt.getGeneratedKeys(); + if (rs.next()) { + return rs.getLong("id"); + } + return 0L; + } finally { + ConnectionPool.releaseConnection(conn, stmt, rs); + } + } + + public List findOnlyIds(T obj, Map orderBy, int pageIndex, int pageSize) throws SQLException { + List result = new ArrayList<>(); + + Class clazz = obj.getClass(); + Table table = MapperUtil.createMapper(clazz); + checkAndCreateTable(table); + + String sql = MapperUtil.generalFindIdSql(obj); + + if (!CollectionUtils.isEmpty(orderBy)) { + StringBuilder orderByStr = new StringBuilder(); + Set orderFields = orderBy.keySet(); + for (String f: orderFields) { + List cols = table.getFields().stream() + .filter(c -> c.getFieldName().equalsIgnoreCase(f) || c.getColumnName().equalsIgnoreCase(f)) + .collect(Collectors.toList()); + if (!cols.isEmpty()) { + if (orderByStr.length() == 0) { + orderByStr.append(" order by "); + } + orderByStr.append(cols.get(0).getColumnName()).append(orderBy.get(f) ? " asc," : " desc,"); + } + } + String subSql = orderByStr.toString(); + if (subSql.endsWith(",")) { + subSql = subSql.substring(0, subSql.length() - 1); + } + if (!subSql.isEmpty()) { + sql = sql + subSql; + } + } + + if (pageIndex > 0 && pageSize > 0) { + sql = sql + " limit " + (pageIndex - 1) * pageSize + ", " + pageSize; + } + + Connection conn = null; + Statement stmt = null; + ResultSet rs = null; + try { + conn = ConnectionPool.getInstance().getConnection(); + stmt = conn.createStatement(); + rs = stmt.executeQuery(sql); + + List columns = table.getFields(); + while (rs.next()) { + Long id = rs.getLong("id"); + result.add(id); + } + } finally { + ConnectionPool.releaseConnection(conn, stmt, rs); + } + + return result; + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/ConnectionPool.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/ConnectionPool.java new file mode 100644 index 00000000..b92493c4 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/ConnectionPool.java @@ -0,0 +1,78 @@ +package com.cgb.bcpinstall.db; + +import com.cgb.bcpinstall.common.util.FileUtil; +import com.cgb.bcpinstall.db.table.NodeDO; +import com.cgb.bcpinstall.db.util.MapperUtil; +import com.cgb.bcpinstall.db.util.object.Table; +import org.h2.jdbcx.JdbcConnectionPool; + +import java.io.File; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +public class ConnectionPool { + private static ConnectionPool instance = null; + private JdbcConnectionPool jdbcConnectionPool = null; + + private ConnectionPool() { + boolean needInit = false; + String dbFilePath = FileUtil.getUserDir() + "bcp-install"; + if (!new File(dbFilePath + ".mv.db").exists()) { + needInit = true; + } + jdbcConnectionPool = JdbcConnectionPool.create("jdbc:h2:file:" + dbFilePath + ";database_to_upper=false;DB_CLOSE_ON_EXIT=FALSE", "sa", ""); + jdbcConnectionPool.setMaxConnections(50); + + if (needInit) { + try { + initDb(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + private void initDb() throws SQLException { + Connection conn = null; + Statement stmt = null; + try { + conn = getConnection(); + stmt = conn.createStatement(); + + Table table = MapperUtil.createMapper(NodeDO.class); + String sql = MapperUtil.createTableSql(table); + stmt.execute(sql); + + } catch (Exception e) { + e.printStackTrace(); + } finally { + releaseConnection(conn, stmt, null); + } + } + + public static void releaseConnection(Connection conn, Statement stmt, + ResultSet rs) throws SQLException { + if (rs != null) { + rs.close(); + } + if (stmt != null) { + stmt.close(); + } + if (conn != null) { + conn.close(); + } + } + + public static ConnectionPool getInstance() { + if (instance == null) { + instance = new ConnectionPool(); + } + return instance; + } + + public Connection getConnection() throws SQLException { + return jdbcConnectionPool.getConnection(); + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/table/NodeDO.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/table/NodeDO.java new file mode 100644 index 00000000..ed23f67d --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/table/NodeDO.java @@ -0,0 +1,34 @@ +package com.cgb.bcpinstall.db.table; + +import com.cgb.bcpinstall.common.entity.InstallStatusEnum; +import com.cgb.bcpinstall.common.entity.RoleEnum; +import com.cgb.bcpinstall.db.util.annotation.ColumnAnnotation; +import com.cgb.bcpinstall.db.util.annotation.TableAnnotation; +import com.cgb.bcpinstall.db.util.object.BaseDO; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@TableAnnotation("tb_nodes") +public class NodeDO extends BaseDO { + private static final long serialVersionUID = 6148451850282590664L; + + @ColumnAnnotation(columnName = "org_msp_id", isMaster = true, dbType = "VARCHAR", length = 128) + private String orgMspId; + + @ColumnAnnotation(columnName = "role", isMaster = true, dbType = "VARCHAR", length = 64) + private RoleEnum role; + + @ColumnAnnotation(columnName = "host_name", isMaster = true, dbType = "VARCHAR", length = 128) + private String hostName; + + @ColumnAnnotation(columnName = "ip_address", isMaster = true, dbType = "VARCHAR", length = 64) + private String ip; + + @ColumnAnnotation(columnName = "port", dbType = "INTEGER") + private Integer port; + + @ColumnAnnotation(columnName = "status", dbType = "VARCHAR", length = 64) + private InstallStatusEnum status; +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/MapperUtil.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/MapperUtil.java new file mode 100644 index 00000000..6d471392 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/MapperUtil.java @@ -0,0 +1,660 @@ +package com.cgb.bcpinstall.db.util; + +import com.cgb.bcpinstall.db.util.annotation.ColumnAnnotation; +import com.cgb.bcpinstall.db.util.annotation.TableAnnotation; +import com.cgb.bcpinstall.db.util.object.BaseDO; +import com.cgb.bcpinstall.db.util.object.Column; +import com.cgb.bcpinstall.db.util.object.Table; +import org.apache.commons.lang3.StringUtils; + +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class MapperUtil { + + public static final char UNDERLINE = '_'; + + public static String camelToUnderline(String param) { + if (param == null || "".equals(param.trim())) { + return ""; + } + int len = param.length(); + StringBuilder sb = new StringBuilder(len); + for (int i = 0; i < len; i++) { + char c = param.charAt(i); + if (Character.isUpperCase(c)) { + sb.append(UNDERLINE); + sb.append(Character.toLowerCase(c)); + } else { + sb.append(c); + } + } + return sb.toString(); + } + + public static String underlineToCamel(String param) { + if (param == null || "".equals(param.trim())) { + return ""; + } + int len = param.length(); + StringBuilder sb = new StringBuilder(len); + for (int i = 0; i < len; i++) { + char c = param.charAt(i); + if (c == UNDERLINE) { + if (++i < len) { + sb.append(Character.toUpperCase(param.charAt(i))); + } + } else { + sb.append(c); + } + } + return sb.toString(); + } + + public static String underlineToCamel2(String param) { + if (param == null || "".equals(param.trim())) { + return ""; + } + StringBuilder sb = new StringBuilder(param); + Matcher mc = Pattern.compile("_").matcher(param); + int i = 0; + while (mc.find()) { + int position = mc.end() - (i++); + // String.valueOf(Character.toUpperCase(sb.charAt(position))); + sb.replace(position - 1, position + 1, sb.substring(position, position + 1).toUpperCase()); + } + return sb.toString(); + } + + /** + * 生成sql + * + * @param table + */ + public static String createTableSql(Table table) { + StringBuilder sb = new StringBuilder("CREATE TABLE "); + sb.append(table.getTableName()).append("(\n"); + for (Column c : table.getFields()) { + if (c.getColumnName().equals("id")) { + sb.append("\t" + c.getColumnName()).append(" ").append(c.getDbType()).append(" NOT NULL AUTO_INCREMENT,\n"); + continue; + } + sb.append("\t" + c.getColumnName()).append(" ").append(c.getDbType()); + if (c.getDbType().equals("VARCHAR") || c.getDbType().equals("BIGINT")) { + sb.append("(").append(c.getLength()).append(") "); + } else if (c.getDbType().equals("DECIMAL")) { + sb.append("(15,4) "); + } else if (c.getDbType().equals("INT")) { + sb.append("(").append(c.getLength()).append(") "); + } else if (c.getDbType().equals("TIMESTAMP")) { + sb.append(" NULL "); + } else { + sb.append(" "); + } + sb.append(c.isNull() ? " " : "NOT NULL "); + sb.append(c.isUnique() ? " UNIQUE,\n" : ",\n"); + } + // 添加默认字段 + String s = sb.toString(); + s = s + "\tPRIMARY KEY(id)\n)AUTO_INCREMENT=1;\n"; + System.out.println(s); + return s; + } + + /** + * 生成table + * + * @param clazz + * @return + */ + @SuppressWarnings({"unchecked", "rawtypes"}) + public static Table createMapper(Class clazz) { + Table table = new Table(); + TableAnnotation tableAnno = (TableAnnotation) clazz.getAnnotation(TableAnnotation.class); + table.setClassName(clazz.getName()); + table.setTableName(tableAnno.value()); + Field[] fields = clazz.getDeclaredFields(); + ColumnAnnotation column = null; + String fieldName = null; + Class type = null; + Class parent = clazz.getSuperclass(); + Field[] fieldsParent = parent.getDeclaredFields(); + List fieldList = new LinkedList(); + Column c = null; + for (Field field : fieldsParent) { + if (field.getName().equals("serialVersionUID")) { + continue; + } + column = field.getAnnotation(ColumnAnnotation.class); + fieldName = field.getName(); + type = field.getType(); + c = new Column(); + c.setColumnName(camelToUnderline(fieldName)); + c.setType(type.getName()); + c.setFieldName(fieldName); + if (column == null) { + c.setNull(true); + c.setLength(32); + if (Long.class.equals(field.getType())) { + c.setDbType("BIGINT"); + c.setLength(18); + } else if (String.class.equals(field.getType())) { + c.setDbType("VARCHAR"); + } else if (Integer.class.equals(field.getType())) { + c.setDbType("INTEGER"); + } else if (Date.class.equals(field.getType())) { + c.setDbType("TIMESTAMP"); + } else if (boolean.class.equals(field.getType())) { + c.setDbType("SMALLINT"); + c.setLength(1); + } else if (Boolean.class.equals(field.getType())) { + c.setDbType("SMALLINT"); + c.setLength(1); + } else { + c.setDbType("VARCHAR"); + c.setLength(30); + } + } else { + if (StringUtils.isNotBlank(column.columnName())) { + c.setColumnName(column.columnName()); + } + if (StringUtils.isBlank(column.dbType())) { + if (Long.class.equals(field.getType())) { + c.setDbType("BIGINT"); + } else if (String.class.equals(field.getType())) { + c.setDbType("VARCHAR"); + } else if (Integer.class.equals(field.getType())) { + c.setDbType("INTEGER"); + } else if (Date.class.equals(field.getType())) { + c.setDbType("TIMESTAMP"); + } else if (boolean.class.equals(field.getType())) { + c.setDbType("SMALLINT"); + } else if (Boolean.class.equals(field.getType())) { + c.setDbType("SMALLINT"); + } else { + c.setDbType("VARCHAR"); + } + } else { + c.setDbType(column.dbType()); + } + c.setLength(column.length()); + c.setNull(column.isNull()); + c.setUnique(column.isUnique()); + c.setMaster(column.isMaster()); + c.setLike(column.isLike()); + } + fieldList.add(c); + } + + List fieldListSub = new LinkedList<>(); + for (Field field : fields) { + if (field.getName().equals("serialVersionUID")) { + continue; + } + column = field.getAnnotation(ColumnAnnotation.class); + fieldName = field.getName(); + type = field.getType(); + c = new Column(); + c.setColumnName(camelToUnderline(fieldName)); + c.setType(type.getName()); + c.setFieldName(fieldName); + if (column == null) { + c.setNull(true); + c.setLength(32); + if (Long.class.equals(field.getType())) { + c.setDbType("BIGINT"); + c.setLength(18); + } else if (String.class.equals(field.getType())) { + c.setDbType("VARCHAR"); + c.setLength(32); + } else if (Integer.class.equals(field.getType())) { + c.setDbType("INTEGER"); + c.setLength(11); + } else if (Date.class.equals(field.getType())) { + c.setDbType("TIMESTAMP"); + } else if (boolean.class.equals(field.getType())) { + c.setDbType("SMALLINT"); + c.setLength(1); + } else if (Boolean.class.equals(field.getType())) { + c.setDbType("SMALLINT"); + c.setLength(1); + } else { + c.setDbType("VARCHAR"); + c.setLength(32); + } + } else { + if (StringUtils.isNotBlank(column.columnName())) { + c.setColumnName(column.columnName()); + } + if (StringUtils.isBlank(column.dbType())) { + if (Long.class.equals(field.getType())) { + c.setDbType("BIGINT"); + } else if (String.class.equals(field.getType())) { + c.setDbType("VARCHAR"); + } else if (Integer.class.equals(field.getType())) { + c.setDbType("INTEGER"); + } else if (Date.class.equals(field.getType())) { + c.setDbType("TIMESTAMP"); + } else if (boolean.class.equals(field.getType())) { + c.setDbType("SMALLINT"); + } else if (Boolean.class.equals(field.getType())) { + c.setDbType("SMALLINT"); + } else { + c.setDbType("VARCHAR"); + } + } else { + c.setDbType(column.dbType()); + } + + c.setLength(column.length()); + c.setNull(column.isNull()); + c.setUnique(column.isUnique()); + c.setMaster(column.isMaster()); + c.setLike(column.isLike()); + } + fieldListSub.add(c); + } + fieldList.addAll(1, fieldListSub); + table.setFields(fieldList); + return table; + } + + @SuppressWarnings({"unchecked", "rawtypes"}) + public static Object getFieldValue(T obj, String fieldName) throws IllegalAccessException, NoSuchFieldException { + Class clazz = obj.getClass(); + Class parent = clazz.getSuperclass(); + Field[] fieldsParent = parent.getDeclaredFields(); + for (Field field : fieldsParent) { + if (field.getName().equalsIgnoreCase(fieldName)) { + field.setAccessible(true); + return field.get(obj); + } + } + Field[] fields = clazz.getDeclaredFields(); + for (Field field : fields) { + if (field.getName().equalsIgnoreCase(fieldName)) { + field.setAccessible(true); + return field.get(obj); + } + } + return null; + } + + public static String createDeleteByIdSql(T obj) { + Table table = createMapper(obj.getClass()); + return "delete from " + table.getTableName() + " where id=" + obj.getId(); + } + + public static String createDeleteByParamSql(T obj) { + Table table = createMapper(obj.getClass()); + StringBuilder builder = new StringBuilder(); + + boolean first = true; + for (Column c : table.getFields()) { + Object val = null; + try { + val = getFieldValue(obj, c.getFieldName()); + } catch (Exception e) { + e.printStackTrace(); + continue; + } + if (val == null) { + continue; + } + + if (first) { + first = false; + builder.append(" "); + } else { + builder.append(" and "); + } + + builder.append(" ").append(c.getColumnName()).append("="); + + if (val.getClass().isEnum()) { + builder.append("'").append(val == null ? "" : val.toString()).append("'"); + } else if (String.class.getName().equals(c.getType())) { + builder.append("'").append(val.toString()).append("'"); + } else if (Date.class.getName().equals(c.getType())) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + builder.append("'").append(dateFormat.format((Date) val)).append("'"); + } else { + builder.append(val.toString()); + } + } + + String sql = "delete from " + table.getTableName(); + if (!builder.toString().isEmpty()) { + sql = sql + " where " + builder.toString(); + } + + return sql; + } + + public static String createInsertSql(T obj) { + Table table = createMapper(obj.getClass()); + + StringBuilder sql = new StringBuilder(); + sql.append("insert into ").append(table.getTableName()).append("\n \t").append("("); + StringBuilder insertColumn = new StringBuilder(); + StringBuilder insertValues = new StringBuilder(); + for (Column c : table.getFields()) { + if (c.getColumnName().equals("id")) { + continue; + } + + insertColumn.append(c.getColumnName()).append(","); + if (c.getColumnName().equals("revision")) { + insertValues.append("\t 0, "); + continue; + } else if (c.getColumnName().equals("create_time")) { + insertValues.append("\t current_timestamp,"); + } else if (c.getColumnName().equals("modify_time")) { + insertValues.append("\t current_timestamp,"); + } else { + try { + Object val = getFieldValue(obj, c.getFieldName()); + + if (val.getClass().isEnum()) { + insertValues.append("\t '").append(val == null ? "" : val.toString()).append("',"); + } else if (String.class.getName().equals(c.getType())) { + insertValues.append("\t '").append(val == null ? "" : val.toString()).append("',"); + } else if (Date.class.getName().equals(c.getType())) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + insertValues.append("\t '").append(val == null ? "current_timestamp" : dateFormat.format((Date) val)).append("',"); + } else { + insertValues.append("\t ").append(val == null ? "0" : val.toString()).append(","); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + String columns = insertColumn.toString(); + String values = insertValues.toString(); + sql.append(columns, 0, columns.length() - 1).append(") \n \t values \n \t (").append(values, 0, values.length() - 1).append(") "); + return sql.toString(); + } + + public static String createUpdateByIdSql(T obj) { + Table table = createMapper(obj.getClass()); + + StringBuilder stringBuilder = new StringBuilder("update " + table.getTableName() + " set "); + for (Column c : table.getFields()) { + if (c.getColumnName().equals("id") || c.getColumnName().equals("revision") + || c.getColumnName().equals("create_time") || c.getColumnName().equals("modify_time")) { + continue; + } + + try { + Object val = getFieldValue(obj, c.getFieldName()); + if (val == null) { + continue; + } + + stringBuilder.append(c.getColumnName()).append("="); + + if (String.class.getName().equals(c.getType())) { + stringBuilder.append("'").append(val.toString()).append("',\t"); + } else if (Date.class.getName().equals(c.getType())) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + stringBuilder.append("'").append(dateFormat.format((Date) val)).append("',\t"); + } else { + stringBuilder.append(val.toString()).append(",\t"); + } + + } catch (Exception e) { + e.printStackTrace(); + ; + } + } + try { + stringBuilder.append("revision=revision+1, modify_time=current_timestamp where id = ").append(Objects.requireNonNull(getFieldValue(obj, "id")).toString()); + } catch (Exception e) { + e.printStackTrace(); + } + + return stringBuilder.toString(); + } + + /** + * 生成可根据主查询字段查询语句 + */ + public static String generalFindByMasterSql(T obj) { + Table table = createMapper(obj.getClass()); + + //获取可通过其查询的字段 + List masters = new ArrayList<>(); + for (Column col : table.getFields()) { + if (col.isMaster()) { + masters.add(col); + } + } + if (masters.isEmpty()) { + return null; + } + + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("select * from ").append(table.getTableName()).append(" where "); + // 针对每个master生成对应的语句element + boolean first = true; + for (Column master : masters) { + if (first) { + first = false; + } else { + stringBuilder.append(" and "); + } + + try { + Object val = getFieldValue(obj, master.getFieldName()); + if (val == null) { + continue; + } + stringBuilder.append(" ").append(master.getColumnName()).append("="); + if (String.class.getName().equals(master.getType())) { + stringBuilder.append(" '").append(val.toString()).append("',"); + } else if (Date.class.getName().equals(master.getType())) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + stringBuilder.append(" '").append(dateFormat.format((Date) val)).append("',"); + } else { + stringBuilder.append(" ").append(val.toString()).append(","); + } + + } catch (Exception e) { + e.printStackTrace(); + ; + } + } + + String sql = stringBuilder.toString(); + return sql.substring(0, sql.length() - 1); + } + + /** + * 生成所有字段的查询sql + * + * @param obj + * @param + * @return + */ + public static String generalCountSql(T obj) { + Table table = createMapper(obj.getClass()); + + List columns = table.getFields(); + + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("select count(*) as total from ").append(table.getTableName()).append(" where "); + // 针对每个master生成对应的语句element + boolean first = true; + for (Column master : columns) { + try { + Object val = getFieldValue(obj, master.getFieldName()); + if (val == null) { + continue; + } + if (first) { + first = false; + } else { + stringBuilder.append(" and "); + } + + stringBuilder.append(" ").append(master.getColumnName()).append("="); + if (String.class.getName().equals(master.getType())) { + stringBuilder.append(" '").append(val.toString()).append("'"); + } else if (Date.class.getName().equals(master.getType())) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + stringBuilder.append(" '").append(dateFormat.format((Date) val)).append("'"); + } else { + stringBuilder.append(" ").append(val.toString()); + } + } catch (Exception e) { + e.printStackTrace(); + ; + } + } + + return stringBuilder.toString(); + } + + /** + * 生成所有字段的查询sql + * + * @param obj + * @param + * @return + */ + public static String generalFindSql(T obj) { + Table table = createMapper(obj.getClass()); + + List columns = table.getFields(); + + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("select * from ").append(table.getTableName()); + // 针对每个master生成对应的语句element + StringBuilder whereBuilder = new StringBuilder(); + boolean first = true; + for (Column master : columns) { + try { + Object val = getFieldValue(obj, master.getFieldName()); + if (val == null) { + continue; + } + if (first) { + first = false; + } else { + whereBuilder.append(" and "); + } + + whereBuilder.append(" ").append(master.getColumnName()).append("="); + if (val.getClass().isEnum()) { + whereBuilder.append(" '").append(val.toString()).append("'"); + } else if (String.class.getName().equals(master.getType())) { + whereBuilder.append(" '").append(val.toString()).append("'"); + } else if (Date.class.getName().equals(master.getType())) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + whereBuilder.append(" '").append(dateFormat.format((Date) val)).append("'"); + } else { + whereBuilder.append(" ").append(val.toString()); + } + } catch (Exception e) { + e.printStackTrace(); + ; + } + } + + if (!whereBuilder.toString().isEmpty()) { + stringBuilder.append(" where ").append(whereBuilder.toString()); + } + + return stringBuilder.toString(); + } + + public static String createBatchInsertSql(Table table) { + StringBuilder sql = new StringBuilder(); + sql.append("insert into ").append(table.getTableName()).append("\n \t").append("("); + StringBuilder insertColumn = new StringBuilder(); + StringBuilder values = new StringBuilder(); + for (Column c : table.getFields()) { + if (c.getColumnName().equals("id")) { + continue; + } + insertColumn.append(c.getColumnName()).append(","); + if (c.getColumnName().equals("revision")) { + values.append("0,\n \t"); + continue; + } else if (c.getColumnName().equals("create_time")) { + values.append("\t current_timestamp,\n"); + } else if (c.getColumnName().equals("modify_time")) { + values.append("\t currsssent_timestamp, \n"); + } else { + values.append("\t \t #{").append("item." + c.getFieldName()).append(", ").append("jdbcType=").append(c.getDbType()).append(", javaType=").append(c.getType()).append("},\n"); + } + } + + sql.append(insertColumn.toString().substring(0, insertColumn.toString().length() - 1)).append(") \n \t values \n \t"); + return sql.toString(); + } + + public static String generalFindIdSql(T obj) { + Table table = createMapper(obj.getClass()); + + List columns = table.getFields(); + + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("select id from ").append(table.getTableName()).append(" where "); + // 针对每个master生成对应的语句element + boolean first = true; + for (Column master : columns) { + try { + Object val = getFieldValue(obj, master.getFieldName()); + if (val == null) { + continue; + } + if (first) { + first = false; + } else { + stringBuilder.append(" and "); + } + + stringBuilder.append(" ").append(master.getColumnName()).append("="); + if (String.class.getName().equals(master.getType())) { + stringBuilder.append(" '").append(val.toString()).append("'"); + } else if (Date.class.getName().equals(master.getType())) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + stringBuilder.append(" '").append(dateFormat.format((Date) val)).append("'"); + } else { + stringBuilder.append(" ").append(val.toString()); + } + } catch (Exception e) { + e.printStackTrace(); + ; + } + } + + return stringBuilder.toString(); + } + + public static String createParameteredInsertSql(T obj) { + Table table = createMapper(obj.getClass()); + + StringBuilder sql = new StringBuilder(); + sql.append("insert into ").append(table.getTableName()).append("\n \t").append("("); + StringBuilder insertColumn = new StringBuilder(); + StringBuilder insertValues = new StringBuilder(); + for (Column c : table.getFields()) { + if (c.getColumnName().equals("id")) { + continue; + } + + insertColumn.append(c.getColumnName()).append(","); + insertValues.append(" ?,"); + } + String columns = insertColumn.toString(); + String values = insertValues.toString(); + sql.append(columns, 0, columns.length() - 1).append(") \n \t values \n \t (").append(values, 0, values.length() - 1).append(") "); + return sql.toString(); + } +} \ No newline at end of file diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/annotation/ColumnAnnotation.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/annotation/ColumnAnnotation.java new file mode 100644 index 00000000..d73f7f95 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/annotation/ColumnAnnotation.java @@ -0,0 +1,55 @@ +package com.cgb.bcpinstall.db.util.annotation; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.FIELD }) +@Inherited +public @interface ColumnAnnotation { + + /** + * 列名 + * + * @return + */ + String columnName(); + + /** + * 数据库类型 + * + * @return + */ + String dbType(); + + /** + * 显示长度 + * + * @return + */ + int length() default 32; + + /** + * 是否为空 + * + * @return + */ + boolean isNull() default true; + + /** + * 是否唯一 + * + * @return + */ + boolean isUnique() default false; + + /** + * 是否可通过字段查询 + */ + boolean isMaster() default false; + + /** + * 是否模糊查询 + * @return + */ + boolean isLike() default false; +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/annotation/TableAnnotation.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/annotation/TableAnnotation.java new file mode 100644 index 00000000..1d2b13ec --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/annotation/TableAnnotation.java @@ -0,0 +1,16 @@ +package com.cgb.bcpinstall.db.util.annotation; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.TYPE }) +@Inherited +public @interface TableAnnotation { + + /** + * 表名 + * + * @return + */ + String value(); +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/object/BaseDO.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/object/BaseDO.java new file mode 100644 index 00000000..c2e7e261 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/object/BaseDO.java @@ -0,0 +1,38 @@ +package com.cgb.bcpinstall.db.util.object; + +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.io.Serializable; +import java.util.Date; + +@Getter +@Setter +public class BaseDO implements Serializable { + + /** + * 自增主键 + */ + private Long id; + + /** + * 数据版本 + */ + private Long revision; + + /** + * 数据创建时间 + */ + private Date createTime; + + /** + * 数据修改时间 + */ + private Date modifyTime; + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/object/Column.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/object/Column.java new file mode 100644 index 00000000..af85eb37 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/object/Column.java @@ -0,0 +1,62 @@ +package com.cgb.bcpinstall.db.util.object; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class Column implements Serializable { + + private static final long serialVersionUID = 4765664012786336010L; + private String columnName; + private String type; + private String fieldName; + private String dbType; + private int length; + private boolean isNull; + private boolean isUnique; + private boolean isMaster; + private boolean isLike; + + public Column(String columnName, String type, String fieldName, String dbType){ + super(); + this.columnName = columnName; + this.type = type; + this.fieldName = fieldName; + this.dbType = dbType; + } + public Column(String columnName, String type, String fieldName, String dbType,boolean isLike){ + super(); + this.columnName = columnName; + this.type = type; + this.fieldName = fieldName; + this.dbType = dbType; + this.isLike = isLike; + } + + public Column(String columnName, String type, String fieldName, String dbType, int length, boolean isNull, + boolean isUnique,boolean isMaster){ + super(); + this.columnName = columnName; + this.type = type; + this.fieldName = fieldName; + this.dbType = dbType; + this.length = length; + this.isNull = isNull; + this.isUnique = isUnique; + this.isMaster = isMaster; + } + + public Column(){ + super(); + } + + @Override + public String toString() { + return "Column [columnName=" + columnName + ", type=" + type + ", fieldName=" + fieldName + ", dbType=" + + dbType + ", length=" + length + ", isNull=" + isNull + "]"; + } + +} \ No newline at end of file diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/object/Table.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/object/Table.java new file mode 100644 index 00000000..bed3f79d --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/db/util/object/Table.java @@ -0,0 +1,34 @@ +package com.cgb.bcpinstall.db.util.object; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +@Getter +@Setter +public class Table implements Serializable { + + private static final long serialVersionUID = 1093724215557902949L; + private String tableName; + private String className; + private List fields; + + public Table(String tableName, String className, List fields){ + super(); + this.tableName = tableName; + this.className = className; + this.fields = fields; + } + + public Table(){ + super(); + } + + @Override + public String toString() { + return "Table [tableName=" + tableName + ", className=" + className + ", fields=" + fields + "]"; + } + +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/EnvironmentService.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/EnvironmentService.java new file mode 100644 index 00000000..1249cf19 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/EnvironmentService.java @@ -0,0 +1,195 @@ +package com.cgb.bcpinstall.service; + +import com.alibaba.fastjson.JSONObject; +import com.cgb.bcpinstall.common.entity.RoleEnum; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.util.FileUtil; +import com.cgb.bcpinstall.common.util.ProcessUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 环境设置服务类 + * + * @author zheng.li + * @date 2020/3/2 14:56 + */ +@Service +@Slf4j +public class EnvironmentService { + + public void parseHostConfig(Map hostConfig, Map initFileConfig) { + for (String host : initFileConfig.keySet()) { + String ip = initFileConfig.get(host); + int index = ip.lastIndexOf(":"); + ip = ip.substring(0, index); + + hostConfig.put(host, ip); + } + } + + /** + * 获取角色需要设置 hosts 文件的内容 + * + * @param role + * @return + */ + public Map getRoleNeedSetHost(RoleEnum role, InitConfigEntity configEntity) { + Map hosts = new HashMap<>(); + + switch (role) { + case PEER: + parseHostConfig(hosts, configEntity.getPeerHostConfig()); + break; + + case ORDER: + parseHostConfig(hosts, configEntity.getOrdererHostConfig()); + break; + + default: + break; + } + return hosts; + } + + /** + * 1. host文件修改 + * 2. 端口加入防火墙 + * + * @param ports + * @param hosts + */ + public void envSet(List ports, Map hosts) { + boolean append = true; + + if (CollectionUtils.isEmpty(hosts)) { + return; + } + + log.info(String.format("写入 hosts 文件: %s", JSONObject.toJSONString(hosts))); + + try { + String hostContent = FileUtil.getFileContent("/etc/hosts"); + log.info("写入 hosts 文件,hostContent=" + hostContent); + + String[] hostConfigArray = hostContent.split("\n"); + + StringBuilder oldHostBuilder = new StringBuilder(); + StringBuilder newHostBuilder = new StringBuilder(); + for (String host : hosts.keySet()) { + String ip = hosts.get(host); + if (!hostContent.contains(host)) { + newHostBuilder.append("\n").append(ip).append(" ").append(host); + } else { + for (int i = 0; i < hostConfigArray.length; i++) { + String ipHost = ip + " " + host; + if (hostConfigArray[i].contains(host) && !hostConfigArray[i].equals(ipHost)) { + hostConfigArray[i] = ipHost; + append = false; + } + } + } + } + + if (!append) { + oldHostBuilder.append(String.join("\n", hostConfigArray)); + log.info("写入 hosts 文件,hostConfigArray.build=" + oldHostBuilder.toString()); + } + oldHostBuilder.append(newHostBuilder); + FileOutputStream fos = new FileOutputStream(new File("/etc/hosts"), append); + fos.write(oldHostBuilder.toString().getBytes()); + fos.close(); + } catch (IOException e) { + log.error("写入/etc/hosts文件异常", e); + e.printStackTrace(); + } + + // 防火墙 + if (ports.stream().noneMatch("2375"::equals)) { + ports.add("2375"); + } + log.info(String.format("端口加入防火墙: %s", ports.stream().collect(Collectors.joining(",")))); + for (String port : ports) { + addPortIntoFirewall(port); + } + } + + public void addPortIntoFirewall(String port) { + boolean succ = false; + try { + String cmd = String.format("firewall-cmd --permanent --zone=public --add-port=%s/tcp", port); + ProcessUtil.Result res = ProcessUtil.execCmd(cmd, null, "./"); + if (res.getCode() == 0) { + ProcessUtil.execCmd("firewall-cmd --reload", null, "./"); + succ = true; + } + } catch (Exception e) { + log.error("调用 firewall-cmd 添加端口异常", e); + e.printStackTrace(); + } + + if (!succ) { + try { + String cmd = String.format("iptables -I INPUT -p tcp --dport %s -j ACCEPT", port); + ProcessUtil.Result res = ProcessUtil.execCmd(cmd, null, "./"); + if (res.getCode() == 0) { + ProcessUtil.execCmd("service iptables save", null, "./"); + } + } catch (Exception e) { + log.error("调用 iptables 添加端口异常", e); + e.printStackTrace(); + } + } + } + + public void updateNewPeerHostPort(Map diffPeerHostConfig) { + Map hosts = new HashMap<>(16); + List ports = new ArrayList<>(); + for (String host : diffPeerHostConfig.keySet()) { + String ipPort = diffPeerHostConfig.get(host); + String ip = ipPort.split(":")[0]; + String port = ipPort.split(":")[1]; + ports.add(port); + hosts.put(host, ip); + } + this.envSet(ports, hosts); + } + + public void removePortFromFirewall(String port) { + boolean succ = false; + try { + String cmd = String.format("firewall-cmd --permanent --zone=public --remove-port=%s/tcp", port); + ProcessUtil.Result res = ProcessUtil.execCmd(cmd, null, "./"); + if (res.getCode() == 0) { + ProcessUtil.execCmd("firewall-cmd --reload", null, "./"); + succ = true; + } + } catch (Exception e) { + log.error("调用 firewall-cmd 添加端口异常", e); + e.printStackTrace(); + } + + if (!succ) { + try { + String cmd = String.format("iptables -D INPUT -p tcp --dport %s -j ACCEPT", port); + ProcessUtil.Result res = ProcessUtil.execCmd(cmd, null, "./"); + if (res.getCode() == 0) { + ProcessUtil.execCmd("service iptables save", null, "./"); + } + } catch (Exception e) { + log.error("调用 iptables 添加端口异常", e); + e.printStackTrace(); + } + } + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/FabricCliService.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/FabricCliService.java new file mode 100644 index 00000000..ef35f941 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/FabricCliService.java @@ -0,0 +1,267 @@ +package com.cgb.bcpinstall.service; + +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.util.FileUtil; +import com.cgb.bcpinstall.common.util.NetUtil; +import com.cgb.bcpinstall.common.util.ProcessUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * fabric-cLi的服务类 + * + * @author zheng.li + * @date 2020/3/2 15:22 + */ +@Service +@Slf4j +public class FabricCliService { + + @Autowired + private ModeService modeService; + + @Autowired + private YamlFileService yamlFileService; + + /** + * 获取创世区块 + * + * @param configEntity + * @return + */ + public boolean fetchGenesisBlock(InitConfigEntity configEntity) { + try { + FileUtils.copyFile(new File(modeService.getInitDir() + "template/fetchGenesisBlock.sh"), new File(modeService.getInstallPath() + "cli/scripts/fetchGenesisBlock.sh")); + } catch (IOException e) { + log.error("复制脚本文件异常", e); + e.printStackTrace(); + return false; + } + String firstOrdererHost = configEntity.getOrdererHostConfig().keySet().iterator().next(); + String ip = configEntity.getOrdererHostConfig().get(firstOrdererHost); + String firstOrdererHostAddress = firstOrdererHost + ip.substring(ip.lastIndexOf(":")); + String CHANNEL_NAME = configEntity.getNetwork() + "-sys-channel"; + String ORDERER_CA = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/%s/orderers/%s/msp/tlscacerts/tlsca.%s-cert.pem", configEntity.getOrdererDomain(), firstOrdererHost, configEntity.getOrdererDomain()); + String CORE_PEER_LOCALMSPID = "OrdererMSP"; + String CORE_PEER_ADDRESS = firstOrdererHostAddress; + String CORE_PEER_TLS_ROOTCERT_FILE = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/%s/orderers/%s/tls/ca.crt", configEntity.getOrdererDomain(), firstOrdererHost); + String CORE_PEER_MSPCONFIGPATH = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/%s/users/Admin@%s/msp", configEntity.getOrdererDomain(), configEntity.getOrdererDomain()); + + String cmd = "docker exec cli bash scripts/fetchGenesisBlock.sh " + CHANNEL_NAME + " " + ORDERER_CA + " " + CORE_PEER_LOCALMSPID + " " + CORE_PEER_ADDRESS + " " + CORE_PEER_TLS_ROOTCERT_FILE + " " + CORE_PEER_MSPCONFIGPATH; + try { + ProcessUtil.execCmd(cmd, null, modeService.getInstallPath() + "cli"); + File installGenesisFile = new File(modeService.getInstallPath() + "channel-artifacts" + File.separator + "genesis.block"); + if (installGenesisFile.exists()) { + installGenesisFile.delete(); + } + File initPathGenesisFile = new File(modeService.getInitDir() + "fabric-net/cryptoAndConfig/channel-artifacts" + File.separator + "genesis.block"); + if (initPathGenesisFile.exists()) { + initPathGenesisFile.delete(); + } + FileUtils.copyFile(new File("/var/run/genesis.block"), new File(modeService.getInstallPath() + "channel-artifacts" + File.separator + "genesis.block")); + FileUtils.copyFile(new File("/var/run/genesis.block"), initPathGenesisFile); + } catch (Exception e) { + log.error(String.format("执行脚本获取通道 %s 配置异常", CHANNEL_NAME), e); + e.printStackTrace(); + return false; + } + return true; + } + + /** + * 通过cli容器获取本机构所以节点加入的通道集合 + * + * @param initConfigEntity + * @return + * @throws IOException + */ + public List getAllChannels(InitConfigEntity initConfigEntity) throws IOException { + List channelList = new ArrayList<>(); + FileUtils.copyFile(new File(modeService.getInitDir() + "template/list-channels.sh"), new File(modeService.getInstallPath() + "cli/scripts/list-channels.sh")); + + for (String host : initConfigEntity.getPeerHostConfig().keySet()) { + + String ip = initConfigEntity.getPeerHostConfig().get(host); + int index = ip.lastIndexOf(":"); + String port = ip.substring(index + 1); + + String CORE_PEER_ADDRESS = host + ":" + port; + String CORE_PEER_TLS_ROOTCERT_FILE = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/%s/peers/%s/tls/ca.crt", initConfigEntity.getPeerDomain(), host); + String CORE_PEER_TLS_CERT_FILE = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/%s/peers/%s/tls/server.crt", initConfigEntity.getPeerDomain(), host); + String CORE_PEER_TLS_KEY_FILE = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/%s/peers/%s/tls/server.key", initConfigEntity.getPeerDomain(), host); + + try { + ProcessUtil.Result result = ProcessUtil.execCmd("docker exec cli bash scripts/list-channels.sh " + CORE_PEER_ADDRESS + " " + CORE_PEER_TLS_ROOTCERT_FILE + " " + CORE_PEER_TLS_CERT_FILE + " " + CORE_PEER_TLS_KEY_FILE, null, modeService.getInstallPath() + "cli"); + + if (result.getCode() == 0) { + String output = result.getData(); + int i = output.indexOf("joined:"); + output = output.substring(i + "joined:".length()); + if (!StringUtils.isEmpty(output)) { + output = output.trim(); + String[] channels = output.split("[\n]"); + if (channels != null && channels.length > 0) { + for (String c : channels) { + c = c.trim(); + if (StringUtils.isEmpty(c)) { + continue; + } + channelList.add(c); + } + } + } + } + } catch (Exception e) { + log.error("执行 docker 脚步获取通道异常", e); + e.printStackTrace(); + } + } + + return channelList; + } + + /** + * 启动一个cli容器 + * + * @param destFilePath + * @param initConfigEntity + * @return + */ + public boolean createCliContainer(String destFilePath, InitConfigEntity initConfigEntity) { + if (!destFilePath.endsWith(File.separator)) { + destFilePath = destFilePath + File.separator; + } + + FileUtil.makeFilePath(destFilePath + "scripts", true); + + try { + if (!this.createCliYamlFile(destFilePath, initConfigEntity)) { + log.error("创建cli容器相关文件失败"); + return false; + } + } catch (IOException e) { + log.error("创建cli容器相关文件异常", e); + e.printStackTrace(); + + return false; + } + + try { + ProcessUtil.Result result = ProcessUtil.execCmd("bash " + destFilePath + "start-peer.sh startCli", null, destFilePath); + if (result.getCode() == 0) { + log.info("启动 cli 容器成功"); + return true; + } + } catch (Exception e) { + log.error("执行启动 cli 容器的脚步异常", e); + e.printStackTrace(); + } + + return false; + } + + public boolean createCliYamlFile(String destFilePath, InitConfigEntity initConfig) throws IOException { + + Map peerComposeConfig = yamlFileService.loadYamlFile(modeService.getInitDir() + "template/docker-compose-peer.yaml"); + + Map networks = (Map) peerComposeConfig.get("networks"); + networks.clear(); + + String network = initConfig.getNetwork() + "-cli"; + networks.put(network, null); + + peerComposeConfig.remove("volumes"); + + Map services = (Map) peerComposeConfig.get("services"); + Map cliConfig = (Map) services.get("cli"); + services.clear(); + + cliConfig.remove("depends_on"); + + String orgUrl = initConfig.getPeerDomain(); + + String peerHost = initConfig.getPeerHostConfig().keySet().iterator().next(); + String peerIp = initConfig.getPeerHostConfig().get(peerHost); + String onlyHost = peerHost.substring(0, peerHost.indexOf(".")); + + List newEnvironment = new ArrayList<>(); + List environment = (List) cliConfig.get("environment"); + for (String oldEnv : environment) { + String newEnv; + if (oldEnv.contains("CORE_PEER_ADDRESS")) { + newEnv = "CORE_PEER_ADDRESS=" + peerHost + peerIp.substring(peerIp.lastIndexOf(":")); + } else if (oldEnv.contains("CORE_PEER_LOCALMSPID")) { + newEnv = "CORE_PEER_LOCALMSPID=" + initConfig.getOrgMSPID(); + } else if (oldEnv.contains("CORE_PEER_TLS_CERT_FILE")) { + newEnv = String.format(oldEnv, orgUrl, onlyHost); + } else if (oldEnv.contains("CORE_PEER_TLS_KEY_FILE")) { + newEnv = String.format(oldEnv, orgUrl, onlyHost); + } else if (oldEnv.contains("CORE_PEER_TLS_ROOTCERT_FILE")) { + newEnv = String.format(oldEnv, orgUrl, onlyHost); + } else if (oldEnv.contains("CORE_PEER_MSPCONFIGPATH")) { + newEnv = String.format(oldEnv, orgUrl, orgUrl); + } else { + newEnv = oldEnv; + } + newEnvironment.add(newEnv); + } + cliConfig.put("environment", newEnvironment); + + cliConfig.put("networks", new ArrayList() {{ + add(network); + }}); + + List extraHosts = new ArrayList<>(); + for (String eHost : initConfig.getOrdererHostConfig().keySet()) { + String eIp = initConfig.getOrdererHostConfig().get(eHost); + eIp = eIp.substring(0, eIp.lastIndexOf(":")); + if (eIp.equalsIgnoreCase("127.0.0.1")) { + eIp = NetUtil.getMyNormalIP(); + } + extraHosts.add(eHost + ":" + eIp); + } + for (String eHost : initConfig.getPeerHostConfig().keySet()) { + String eIp = initConfig.getPeerHostConfig().get(eHost); + eIp = eIp.substring(0, eIp.lastIndexOf(":")); + if (eIp.equalsIgnoreCase("127.0.0.1")) { + eIp = NetUtil.getMyNormalIP(); + } + extraHosts.add(eHost + ":" + eIp); + } + cliConfig.put("extra_hosts", extraHosts); + + services.put("cli", cliConfig); + + if (!destFilePath.endsWith(File.separator)) { + destFilePath = destFilePath + File.separator; + } + + FileUtil.makeFilePath(destFilePath, false); + String yamlFilePath = destFilePath + "docker-compose-peer.yaml"; + if (!yamlFileService.writeObjectToYamlFile(peerComposeConfig, yamlFilePath)) { + return false; + } + + // 生成 start-peer.sh + /*String content = getFileContent(workingDir + "template/start-peer.sh"); + String newFilePath = destFilePath + "start-peer.sh"; + + if (!writeFileContent(newFilePath, content)) { + return false; + }*/ + String newShFilePath = destFilePath + "start-peer.sh"; + String srcShFilePat = modeService.getInitDir() + "template/start-peer.sh"; + FileUtils.copyFile(new File(srcShFilePat), new File(newShFilePath)); + + return true; + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/FileService.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/FileService.java new file mode 100644 index 00000000..484eb1c0 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/FileService.java @@ -0,0 +1,340 @@ +package com.cgb.bcpinstall.service; + +import com.alibaba.fastjson.JSON; +import com.cgb.bcpinstall.common.entity.OSEnum; +import com.cgb.bcpinstall.common.entity.RoleEnum; +import com.cgb.bcpinstall.common.entity.UpdateReasonEnum; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.util.FileUtil; +import com.cgb.bcpinstall.common.util.NetUtil; +import com.cgb.bcpinstall.common.util.Utils; +import com.cgb.bcpinstall.config.GlobalConfig; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import org.yaml.snakeyaml.Yaml; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +/** + * 文件服务类 + * + * @author zheng.li + * @date 2020/3/2 14:54 + */ +@Service +@Slf4j +public class FileService { + private static final String CERTS_FOLDER_NAME = "crypto-config"; + + @Autowired + private ModeService modeService; + + @Autowired + protected GlobalConfig globalConfig; + + @Value("${init.config}") + protected String initConfigFile; + + /** + * 将需要的文件复制到安装目录 + * + * @param ipList + * @param roleList + * @return + */ + public void copyInstallFiles(List ipList, List roleList, InitConfigEntity configEntity) { + // 如果master节点不担任任何角色,则返回空 + if (roleList.isEmpty()) { + return; + } + for (RoleEnum role : roleList) { + for (String ip : ipList) { + copyFiles(role, ip, modeService.getInstallPath(), configEntity); + } + } + } + + public void copyFiles(RoleEnum role, String ip, String destPath, InitConfigEntity configEntity) { + copyFiles(role, ip, null, destPath, null, configEntity, null); + } + + /** + * 将相应角色的文件复制到指定路径 + * + * @param role + * @param ip + * @param srcFolderName + * @param destPath + */ + public void copyFiles(RoleEnum role, String ip, String srcFolderName, String destPath, String destFolderName, InitConfigEntity configEntity, List hostArray) { + FileUtil.makeFilePath(destPath, false); + String srcRootPath = FileUtil.reviseDir(modeService.getInitDir()); + + try { + String dockerSrcFile = srcRootPath + "fabric-net" + File.separator + "dockerFile" + File.separator; + if (!destPath.endsWith(File.separator)) { + destPath = destPath + File.separator; + } + copyCertFiles(role, ip, destPath, configEntity); + switch (role) { + case ORDER: + String orderDir = dockerSrcFile + (StringUtils.isEmpty(srcFolderName) ? "order-" + ip : srcFolderName); + if (!new File(orderDir).exists()) { + log.info(String.format("目录 %s 不存在", orderDir)); + break; + } + FileUtils.copyDirectory(new File(orderDir), new File(destPath + (StringUtils.isEmpty(destFolderName) ? "order" : destFolderName))); + + // 需要复制创世块 + if (NetUtil.getLocalIPList().stream().noneMatch(i -> i.equalsIgnoreCase(ip))) { + FileUtils.copyDirectory(new File(modeService.getInstallPath() + "channel-artifacts"), new File(destPath + "channel-artifacts")); + } + break; + case PEER: + String peerDir = dockerSrcFile + (StringUtils.isEmpty(srcFolderName) ? "peer-" + ip : srcFolderName); + if (!new File(peerDir).exists()) { + log.info(String.format("目录 %s 不存在", peerDir)); + break; + } + FileUtils.copyDirectory(new File(peerDir), new File(destPath + (StringUtils.isEmpty(destFolderName) ? "peer" : destFolderName))); + break; + } + } catch (Exception e) { + log.error(String.format("为 %s 复制 %s 角色文件失败", ip, role.name()), e); + e.printStackTrace(); + } + } + + /** + * 复制相应的证书文件 + * + * @param role + * @param ip + * @param destPath + */ + public void copyCertFiles(RoleEnum role, String ip, String destPath, InitConfigEntity configEntity) { + log.info(String.format("为服务器 %s 角色 %s 复制证书文件, 目标目录: %s", ip, role.name(), destPath)); + + if (!destPath.endsWith(File.separator)) { + destPath = destPath + File.separator; + } + + String certRootPath = destPath + CERTS_FOLDER_NAME + File.separator; + FileUtil.makeFilePath(certRootPath, false); + + String midDirName01; + String midDirName02; + Map hostConfig; + if (role == RoleEnum.ORDER) { + hostConfig = configEntity.getOrdererHostConfig(); + midDirName01 = "ordererOrganizations"; + midDirName02 = "orderers"; + } else { + hostConfig = configEntity.getPeerHostConfig(); + midDirName01 = "peerOrganizations"; + midDirName02 = "peers"; + } + + for (String domain : hostConfig.keySet()) { + String val = hostConfig.get(domain); + int index = val.lastIndexOf(":"); + if (val.substring(0, index).endsWith(ip)) { + int i = domain.indexOf("."); + String relativePath = midDirName01 + File.separator + domain.substring(i + 1) + + File.separator + midDirName02 + File.separator + domain; + + String srcDir = modeService.getInitDir() + "fabric-net" + File.separator + "cryptoAndConfig" + File.separator + "crypto-config" + + File.separator + relativePath; + try { + FileUtils.copyDirectory(new File(srcDir), new File(certRootPath + relativePath)); + } catch (IOException e) { + log.error(String.format("复制%s证书文件异常", role.name()), e); + e.printStackTrace(); + } + } + } + } + + /** + * 将证书文件复制到主节点 + */ + public void masterCopyCryptoConfig() { + String srcDir = modeService.getInitDir() + "fabric-net" + File.separator + "cryptoAndConfig" + File.separator + "crypto-config" + + File.separator; + try { + FileUtils.copyDirectory(new File(srcDir), new File(modeService.getInstallPath() + "crypto-config")); + } catch (IOException e) { + log.error("主节点复制证书文件异常", e); + e.printStackTrace(); + } + } + + /** + * 将configtx.yaml文件复制到主节点 + */ + public void masterCopyConfigtxFile() { + log.info("复制 configtx.yaml 文件到安装目录"); + FileUtil.makeFilePath(modeService.getInstallPath(), false); + + String srcRootPath = FileUtil.reviseDir(modeService.getInitDir()); + String srcFile = srcRootPath + "fabric-net" + File.separator + "cryptoAndConfig" + File.separator + "configtx.yaml"; + try { + log.info("生成创世快-从" + srcFile + "复制到" + modeService.getInstallPath() + "configtx.yaml"); + FileUtils.copyFile(new File(srcFile), new File(modeService.getInstallPath() + "configtx.yaml")); + } catch (IOException e) { + log.error("复制 configtx.yaml 文件到安装目录异常", e); + e.printStackTrace(); + } + } + + /** + * 为机器打包智能安装包 + * + * @param serverAddress 机器IP地址 + * @param roleList 所充当的角色 + * @return + */ + public String packInstallFiles(String serverAddress, List roleList, InitConfigEntity configEntity) { + log.info(String.format("为服务器 %s 准备智能安装包, 该服务器承担的角色:%s", serverAddress, roleList.stream().map(Enum::name).collect(Collectors.joining(",")))); + + if (configEntity == null) { + try { + Yaml yaml = new Yaml(); + configEntity = yaml.loadAs(new FileInputStream(new File(this.initConfigFile)), InitConfigEntity.class); + } catch (Exception e) { + log.error("安装过程发生异常", e); + e.printStackTrace(); + } + } + + // 建一个临时目录 + String tmpPath = System.getProperty("java.io.tmpdir"); + if (!tmpPath.endsWith(File.separator)) { + tmpPath = tmpPath + File.separator; + } + String rootPath = tmpPath + UUID.randomUUID().toString().replaceAll("-", "") + File.separator; + String packSrcPath = rootPath + "installFiles" + File.separator; + FileUtil.makeFilePath(packSrcPath, true); + + for (RoleEnum role : roleList) { + this.copyFiles(role, serverAddress, packSrcPath, configEntity); + } + + // 打包 + try { + String packFilePath = rootPath + "InstallPackage.tar.gz"; + + byte[] data = Utils.generateTarGz(new File(packSrcPath), "", null); + FileOutputStream os = new FileOutputStream(packFilePath, false); + os.write(data); + os.close(); + + FileUtil.rmFile(new File(packSrcPath)); + + return packFilePath; + } catch (IOException e) { + log.error("生成智能安装包时异常", e); + e.printStackTrace(); + } + + return ""; + } + + /** + * 为扩容节点打包所需安装文件 + * + * @param serverAddress + * @param folderName + * @param roleEnum + * @param configEntity + * @return + */ + public String packExtendNodeFiles(String serverAddress, String folderName, RoleEnum roleEnum, InitConfigEntity configEntity) { + String role = ""; + switch (roleEnum) { + case PEER: + role = "peer"; + break; + case ORDER: + role = "orderer"; + break; + } + log.info(String.format("为新 %s 节点 %s 准备智能安装包", role, serverAddress)); + + // 建一个临时目录 + String tmpPath = System.getProperty("java.io.tmpdir"); + if (!tmpPath.endsWith(File.separator)) { + tmpPath = tmpPath + File.separator; + } + + String rootPath = tmpPath + UUID.randomUUID().toString().replaceAll("-", "") + File.separator; + String packSrcPath = rootPath + "installFiles" + File.separator; + FileUtil.makeFilePath(packSrcPath, true); + + this.copyFiles(roleEnum, serverAddress, folderName, packSrcPath, folderName, configEntity, null); + + // 打包 + try { + String packFilePath = rootPath + "InstallPackage.tar.gz"; + + byte[] data = Utils.generateTarGz(new File(packSrcPath), "", null); + FileOutputStream os = new FileOutputStream(packFilePath, false); + os.write(data); + os.close(); + + FileUtil.rmFile(new File(packSrcPath)); + + return packFilePath; + } catch (IOException e) { + log.error("生成智能安装包时异常", e); + e.printStackTrace(); + } + + return ""; + } + + /** + * 移除证书 + * + * @param role + * @param configEntity + * @param nodeHostMap + * @param isInitDir + */ + public void removeCertFile(RoleEnum role, InitConfigEntity configEntity, Map nodeHostMap, boolean isInitDir) { + for (String nodeHost : nodeHostMap.keySet()) { + String cryptoFilePath = "crypto-config" + File.separator + "%s" + File.separator + "%s" + File.separator + "%s" + File.separator + "%s"; + String peerCertPath = String.format(cryptoFilePath, "peerOrganizations", configEntity.getPeerDomain(), "peers", nodeHost); + String ordererCertPath = String.format(cryptoFilePath, "ordererOrganizations", configEntity.getOrdererDomain(), "orderers", nodeHost); + String rmPath; + + if (role == RoleEnum.PEER) { + if (isInitDir) { + rmPath = modeService.getInitDir() + "fabric-net" + File.separator + "cryptoAndConfig" + File.separator + peerCertPath; + } else { + rmPath = modeService.getInstallPath() + peerCertPath; + } + } else { + if (isInitDir) { + rmPath = modeService.getInitDir() + "fabric-net" + File.separator + "cryptoAndConfig" + File.separator + ordererCertPath; + } else { + rmPath = modeService.getInstallPath() + ordererCertPath; + } + } + log.info("缩容节点,移除证书路径:" + rmPath); + FileUtil.rmFile(new File(rmPath)); + } + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/InitConfigService.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/InitConfigService.java new file mode 100644 index 00000000..30e43204 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/InitConfigService.java @@ -0,0 +1,146 @@ +package com.cgb.bcpinstall.service; + +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import org.yaml.snakeyaml.Yaml; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.util.Collection; +import java.util.Map; + +/** + * 配置信息服务类 + * + * @author zheng.li + * @date 2020/3/9 10:26 + */ +@Slf4j +@Service +public class InitConfigService { + + /** + * 根据配置文件路径获取配置信息 + * + * @param filePath + * @return + * @throws FileNotFoundException + */ + public InitConfigEntity parseConfigFile(String filePath) throws FileNotFoundException { + File file = new File(filePath); + if (!file.exists() && !file.isFile()) { + throw new FileNotFoundException(filePath); + } + InitConfigEntity initConfigEntity = null; + Yaml yaml = new Yaml(); + try { + initConfigEntity = yaml.loadAs(new FileInputStream(file), InitConfigEntity.class); + } catch (Exception e) { + log.error("配置文件读取异常,请检查各配置项是否符合格式要求"); + } + return initConfigEntity; + } + + public boolean isCorrectConfig(InitConfigEntity initConfigEntity) { + boolean isCorrect = true; + + if (!isNotEmptyConfig(initConfigEntity)) { + log.error("配置文件中相关配置项为空"); + isCorrect = false; + } + + if (!isCorrectFormat(initConfigEntity)) { + log.error("配置文件中相关域名的ip和端口格式不正确"); + isCorrect = false; + } + if (!isCorrectDomain(initConfigEntity)) { + log.error("配置文件中orderer或peer的域名不匹配"); + isCorrect = false; + } + if (!checkPeerConfig(initConfigEntity)) { + log.error("配置文件中peer没有配置相应的交易查询端口"); + isCorrect = false; + } + + return isCorrect; + } + + /** + * 检查orderer与peer域名是否匹配 + * + * @param initConfigEntity + * @return + */ + private boolean isCorrectDomain(InitConfigEntity initConfigEntity) { + String ordererDomain = initConfigEntity.getOrdererDomain(); + String peerDomain = initConfigEntity.getPeerDomain(); + boolean peerMatch = initConfigEntity.getPeerHostConfig().keySet().stream().allMatch(i -> i.endsWith(peerDomain)); + boolean ordererMatch = initConfigEntity.getOrdererHostConfig().keySet().stream().allMatch(i -> i.endsWith(ordererDomain)); + return peerMatch && ordererMatch; + } + + private boolean checkPeerConfig(InitConfigEntity configEntity) { + boolean isCorrect = true; + Map peerConfigMap = configEntity.getPeerHostConfig(); + Map peerMetricConfigMap = configEntity.getMetricPortConfig(); + for (String host : peerConfigMap.keySet()) { + if (peerMetricConfigMap.keySet().stream().noneMatch(i -> i.equals(host))) { + isCorrect = false; + } + } + return isCorrect; + } + + private boolean isNotEmptyConfig(InitConfigEntity configEntity) { + boolean isCorrect = true; + if (StringUtils.isEmpty(configEntity.getNetwork()) + || StringUtils.isEmpty(configEntity.getChannelName()) + || StringUtils.isEmpty(configEntity.getOrgMSPID()) + || StringUtils.isEmpty(configEntity.getOrgName()) + || StringUtils.isEmpty(configEntity.getOrdererDomain()) + || StringUtils.isEmpty(configEntity.getPeerDomain())) { + isCorrect = false; + } + if (CollectionUtils.isEmpty(configEntity.getOrdererHostConfig()) + || CollectionUtils.isEmpty(configEntity.getPeerHostConfig()) + || CollectionUtils.isEmpty(configEntity.getMetricPortConfig())) { + isCorrect = false; + } + + if (configEntity.getOrdererHostConfig().entrySet().stream().anyMatch(i -> StringUtils.isEmpty(i.getValue()))) { + isCorrect = false; + } + + if (configEntity.getPeerHostConfig().entrySet().stream().anyMatch(i -> StringUtils.isEmpty(i.getValue()))) { + isCorrect = false; + } + + if (configEntity.getMetricPortConfig().entrySet().stream().anyMatch(i -> StringUtils.isEmpty(i.getValue()))) { + isCorrect = false; + } + + return isCorrect; + } + + private boolean isCorrectFormat(InitConfigEntity configEntity) { + Collection peerIpPorts = configEntity.getPeerHostConfig().values(); + if (!isCorrectFormat(peerIpPorts)) { + return false; + } + Collection ordererIpPorts = configEntity.getOrdererHostConfig().values(); + return isCorrectFormat(ordererIpPorts); + } + + private boolean isCorrectFormat(Collection ipPorts) { + for (String ipPort : ipPorts) { + if (ipPort.split(":").length != 2) { + return false; + } + } + return true; + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/InstallService.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/InstallService.java new file mode 100644 index 00000000..6293dd85 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/InstallService.java @@ -0,0 +1,198 @@ +package com.cgb.bcpinstall.service; + +import com.cgb.bcpinstall.biz.RolesBiz; +import com.cgb.bcpinstall.common.entity.InstallResult; +import com.cgb.bcpinstall.common.entity.InstallStatusEnum; +import com.cgb.bcpinstall.common.entity.RoleEnum; +import com.cgb.bcpinstall.common.entity.ServerEntity; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.response.HttpInstallResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.FileUtil; +import com.cgb.bcpinstall.common.util.NetUtil; +import com.cgb.bcpinstall.common.util.ProcessUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.yaml.snakeyaml.Yaml; + +import java.io.File; +import java.io.FileInputStream; +import java.util.List; +import java.util.Map; + +/** + * 安装服务类 + * + * @author zheng.li + * @date 2020/3/2 14:55 + */ +@Service +@Slf4j +public class InstallService { + + @Autowired + private ModeService modeService; + + @Autowired + private EnvironmentService environmentService; + + @Autowired + private RemoteService remoteService; + + @Autowired + protected RolesBiz rolesBiz; + + @Value("${init.config}") + protected String initConfigFile; + + /** + * 主节点调用,用来进行相应角色的安装,如果主节点担任相应角色,则启动本地安装,否则发送安装指令给从节点 + * + * @param role + */ + public void install(RoleEnum role, InitConfigEntity configEntity) { + List allMyIps = NetUtil.getLocalIPList(); + + Map> rolesMap = this.rolesBiz.getRolesMap(); + List serverList = rolesMap.get(role); + + boolean first = true; + for (ServerEntity server : serverList) { + if (server.getStatus() != InstallStatusEnum.SUCCESS) { + // 如果主节点也是此角色,则先安装 + int initCount = 1; + if (allMyIps.stream().anyMatch(ip -> ip.equals(server.getHost()))) { + Map hosts = environmentService.getRoleNeedSetHost(role, configEntity); + + if (startRole(role, server.getRolePorts(), hosts, null)) { + server.setStatus(InstallStatusEnum.SUCCESS); + } + InstallResult result = new InstallResult(); + result.setRole(server.getRole()); + result.setSuccess(true); + updateInstallResult(server.getHost(), result, configEntity); + } else { + //设置重试次数初始化值 + int retryCount = 1; + //设置重试次数 + int retryTotal = 10; + // 发送安装指令给从节点 + do { + HttpInstallResponse response = remoteService.sendInstallCommand(server, role, null, configEntity); + if (ResponseCode.SUCCESS.getCode().equals(response.getCode())) { + log.warn(String.format("发送安装指令给 %s 节点安装 %s 成功", server.getHost(), role.name().toLowerCase())); + server.setStatus(InstallStatusEnum.INSTALLING); + break; + } + if (retryCount == retryTotal) { + break; + } + log.warn(String.format("发送安装指令给 %s 节点安装 %s 失败,稍后重试...", server.getHost(), role.name().toLowerCase())); + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + retryCount++; + } while (true); + } + } + } + + // 等待完成安装 + int checkCount = 1; + int checkTotal = 10; + while (serverList.stream().anyMatch(s -> s.getStatus() != InstallStatusEnum.SUCCESS)) { + if (checkCount == checkTotal) { + break; + } + log.info(String.format("等待所有 %s 节点完成安装...", role.name().toLowerCase())); + try { + Thread.sleep(10000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + checkCount++; + } + } + + public boolean startRole(RoleEnum role, List rolePorts, Map hosts, String roleFolderName) { + return startRole(role, rolePorts, hosts, roleFolderName, null); + } + + /** + * 执行角色相应的脚本 + * + * @param role + */ + public boolean startRole(RoleEnum role, List rolePorts, Map hosts, String roleFolderName, String host) { + log.info(String.format("开始执行角色 %s 的脚本", role.name())); + if (!new File(modeService.getInstallPath()).exists()) { + FileUtil.makeFilePath(modeService.getInstallPath(), false); + } + + String[] env = null; + String shellFilePath = null; + String workingDir = null; + switch (role) { + case ORDER: + workingDir = modeService.getInstallPath() + (StringUtils.isEmpty(roleFolderName) ? "order" : roleFolderName); + shellFilePath = modeService.getInstallPath() + (StringUtils.isEmpty(roleFolderName) ? "order" : roleFolderName) + "/start-orderer.sh up"; + break; + + case PEER: + workingDir = modeService.getInstallPath() + (StringUtils.isEmpty(roleFolderName) ? "peer" : roleFolderName); + shellFilePath = modeService.getInstallPath() + (StringUtils.isEmpty(roleFolderName) ? "peer" : roleFolderName) + "/start-peer.sh up"; + break; + } + if (!StringUtils.isEmpty(shellFilePath)) { + environmentService.envSet(rolePorts, hosts); + + try { + ProcessUtil.Result res = ProcessUtil.execCmd("bash " + shellFilePath, env, workingDir); + return res.getCode() == 0; + } catch (Exception e) { + log.error(String.format("启动角色%s脚本异常", role.name()), e); + e.printStackTrace(); + } + } + + return false; + } + + /** + * 更新从节点安装结果 + * + * @param remoteAddress + * @param result + */ + public void updateInstallResult(String remoteAddress, InstallResult result, InitConfigEntity configEntity) { + if (configEntity == null) { + File configFile = new File(this.initConfigFile); + Yaml yaml = new Yaml(); + try { + configEntity = yaml.loadAs(new FileInputStream(configFile), InitConfigEntity.class); + } catch (Exception e) { + e.printStackTrace(); + return; + } + } + if (result.isSuccess()) { + log.info(String.format("节点 %s 已完成 %s 角色的安装", remoteAddress, result.getRole().name())); + + // 加入数据库 + switch (result.getRole()) { + case ORDER: + modeService.checkAndInsertDb(configEntity.getOrdererHostConfig(), remoteAddress, RoleEnum.ORDER, configEntity.getOrgMSPID()); + break; + case PEER: + modeService.checkAndInsertDb(configEntity.getPeerHostConfig(), remoteAddress, RoleEnum.PEER, configEntity.getOrgMSPID()); + break; + } + } + this.rolesBiz.updateInstallResult(remoteAddress, result); + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/ModeService.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/ModeService.java new file mode 100644 index 00000000..9cdfcd60 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/ModeService.java @@ -0,0 +1,136 @@ +package com.cgb.bcpinstall.service; + +import com.cgb.bcpinstall.biz.RolesBiz; +import com.cgb.bcpinstall.common.entity.*; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.response.HttpInstallResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.*; +import com.cgb.bcpinstall.db.CheckPointDb; +import com.cgb.bcpinstall.db.table.NodeDO; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.yaml.snakeyaml.Yaml; + +import java.io.*; +import java.sql.SQLException; +import java.util.*; + +/** + * @author zheng.li + * @date 2020/2/3 14:26 + */ +@Service +@Slf4j +public class ModeService { + + @Autowired + protected RolesBiz rolesBiz; + + @Autowired + protected CheckPointDb checkPointDb; + + @Value("${init.config}") + protected String initConfigFile; + + @Value("${init.dir}") + protected String initDir; + + @Value("${install.path}") + protected String installPath; + + public HttpInstallResponse createFailedHttpResponse() { + HttpInstallResponse response = new HttpInstallResponse(); + response.setCode(ResponseCode.Fail.getCode()); + return response; + } + + + /** + * @return true -- 初始化完成 + */ + public boolean checkBackendInitFinished(String host, String shPath) { + String logFilePath = this.getInstallPath() + "bcp-app-mgr-" + host + File.separator + "log.out"; + try { + ProcessUtil.Result result = ProcessUtil.execCmd("sh ./fetchBackendInit.sh " + logFilePath, null, shPath); + log.info(StringUtils.isEmpty(result.getData()) ? "后台初始化中,请耐心等待............" : "后台初始化成功"); + return !StringUtils.isEmpty(result.getData()); + } catch (Exception e) { + log.error("查询管理后台日志异常", e); + e.printStackTrace(); + } + + return false; + } + + /** + * 更新从节点安装结果 + * + * @param remoteAddress + * @param result + */ + public void updateInstallResult(String remoteAddress, InstallResult result, InitConfigEntity configEntity) { + if (configEntity == null) { + File configFile = new File(this.initConfigFile); + Yaml yaml = new Yaml(); + try { + configEntity = yaml.loadAs(new FileInputStream(configFile), InitConfigEntity.class); + } catch (Exception e) { + e.printStackTrace(); + return; + } + } + if (result.isSuccess()) { + log.info(String.format("节点 %s 已完成 %s 角色的安装", remoteAddress, result.getRole().name())); + + // 加入数据库 + switch (result.getRole()) { + case ORDER: + checkAndInsertDb(configEntity.getOrdererHostConfig(), remoteAddress, RoleEnum.ORDER, configEntity.getOrgMSPID()); + break; + case PEER: + checkAndInsertDb(configEntity.getPeerHostConfig(), remoteAddress, RoleEnum.PEER, configEntity.getOrgMSPID()); + break; + } + } + this.rolesBiz.updateInstallResult(remoteAddress, result); + } + + public void checkAndInsertDb(Map hostConfig, String ip, RoleEnum role, String orgMspId) { + for (String host : hostConfig.keySet()) { + String hIp = hostConfig.get(host); + int index = hIp.lastIndexOf(":"); + String port = hIp.substring(index + 1); + hIp = hIp.substring(0, index); + + if (hIp.equalsIgnoreCase(ip)) { + NodeDO nodeDO = new NodeDO(); + nodeDO.setOrgMspId(orgMspId); + nodeDO.setRole(role); + nodeDO.setHostName(host); + nodeDO.setIp(ip); + nodeDO.setPort(Integer.parseInt(port)); + nodeDO.setStatus(InstallStatusEnum.SUCCESS); + try { + this.checkPointDb.addNodeRecord(nodeDO); + } catch (SQLException e) { + log.error(String.format("添加节点 %s 角色 %s 到数据库失败", ip, role.name().toLowerCase()), e); + e.printStackTrace(); + } + } + } + } + + public String getInitDir() { + return this.initDir.endsWith(File.separator) ? this.initDir : this.initDir + File.separator; + } + + public String getInstallPath() { + String installPath = this.installPath.endsWith(File.separator) ? this.installPath : this.installPath + File.separator; + return installPath; + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/RemoteService.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/RemoteService.java new file mode 100644 index 00000000..d2a83c35 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/RemoteService.java @@ -0,0 +1,171 @@ +package com.cgb.bcpinstall.service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cgb.bcpinstall.biz.RolesBiz; +import com.cgb.bcpinstall.common.entity.*; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.response.HttpInstallResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.HttpClientUtil; +import com.cgb.bcpinstall.common.util.NetUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.io.IOException; +import java.util.*; + +/** + * 远程调用服务类 + * + * @author zheng.li + * @date 2020/3/2 14:58 + */ +@Service +@Slf4j +public class RemoteService { + @Autowired + private ModeService modeService; + + @Autowired + private EnvironmentService environmentService; + + @Autowired + private FileService fileService; + + @Autowired + protected HttpClientUtil httpClient; + + @Autowired + protected RolesBiz rolesBiz; + + + /** + * 主节点给从节点发送安装指令 + * + * @param server + * @param role + * @return + */ + public HttpInstallResponse sendInstallCommand(ServerEntity server, RoleEnum role, String folderName, InitConfigEntity configEntity) { + log.info(String.format("主节点给从节点 %s 发送安装角色:%s", server.getHost(), role.name())); + try { + Map revisedHosts = new HashMap<>(); + Map hosts = environmentService.getRoleNeedSetHost(role, configEntity); + for (String h : hosts.keySet()) { + String ip = hosts.get(h); + if ("127.0.0.1".equalsIgnoreCase(ip)) { + revisedHosts.put(h, NetUtil.getMyNormalIP()); + } else { + revisedHosts.put(h, ip); + } + } + //设置从节点安装信息实例 + InstallCmd entity = new InstallCmd(); + entity.setHosts(revisedHosts); + entity.setIpAddress(server.getHost()); + entity.setRole(role); + entity.setRolePorts(server.getRolePorts()); + entity.setRoleFolderName(folderName); + //发生安装指令 + String result = this.httpClient.sendFileAndJson(server.getHttpUrl() + "/v1/install/start", "", JSONObject.toJSONString(entity)); + if (result.isEmpty()) { + log.error("注册角色返回结果为空"); + } else { + log.info("注册角色返回结果: " + result); + return JSON.parseObject(result, HttpInstallResponse.class); + } + } catch (Exception e) { + log.error("发送安装指令异常", e); + e.printStackTrace(); + } + + return modeService.createFailedHttpResponse(); + } + + /** + * 向从节点推送安装包 + * + * @param remoteAddr + * @param configEntity + */ + public void pushSlaveInstallPackage(String remoteAddr, InitConfigEntity configEntity) { + pushSlaveInstallPackage(remoteAddr, null, configEntity); + } + + public void pushSlaveInstallPackage(String remoteAddr, String packFilePath, InitConfigEntity configEntity) { + List roleList = this.rolesBiz.getRole(remoteAddr); + String filePath = StringUtils.isEmpty(packFilePath) ? fileService.packInstallFiles(remoteAddr, roleList, configEntity) : packFilePath; + //重试次数初始化为1 + int retryCount = 1; + //设置重试次数 + int retryTotal = 8; + do { + String result = httpClient.uploadFile("http://" + remoteAddr + ":8080/v1/install/pushPackage", filePath); + if (!StringUtils.isEmpty(result)) { + HttpInstallResponse response = JSONObject.parseObject(result, HttpInstallResponse.class); + if (ResponseCode.SUCCESS.getCode().equals(response.getCode())) { + log.info(String.format("向从节点 %s 推送安装包成功", remoteAddr)); + this.rolesBiz.setServerStatus(remoteAddr, InstallStatusEnum.DOWNLOADED); + break; + } + } + if (retryCount == retryTotal) { + break; + } + log.info(String.format("向从节点 %s 推送安装包失败,稍后重试...", remoteAddr)); + try { + Thread.sleep(8000); + } catch (Exception e) { + e.printStackTrace(); + } + retryCount++; + } while (true); + + } + + /** + * 通知节点安装完成结束 + * + * @param serverUrl + */ + public void notifyNodesToEnd(Set serverUrl) { + for (String url : serverUrl) { + if (!url.endsWith("/")) { + url = url + "/"; + } + EndCmd cmd = new EndCmd(); + cmd.setSuccess(true); + try { + int retryCount = 1; + int retryTotal = 7; + do { + String result = this.httpClient.postJson(url + "v1/install/end", JSONObject.toJSONString(cmd), false); + if (!StringUtils.isEmpty(result)) { + HttpInstallResponse response = JSONObject.parseObject(result, HttpInstallResponse.class); + if (ResponseCode.SUCCESS.getCode().equals(response.getCode())) { + log.info(String.format("发送结束指令给 %s 成功", url)); + break; + } + } + if (retryCount == retryTotal) { + log.info("发送结束指令超时"); + break; + } + log.info(String.format("发送结束指令给 %s 失败,稍后重试...", url)); + try { + Thread.sleep(5000); + } catch (Exception e) { + e.printStackTrace(); + } + retryCount++; + } while (true); + } catch (IOException e) { + log.error(String.format("发送结束指令给 %s 异常", url)); + e.printStackTrace(); + } + } + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/RoleService.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/RoleService.java new file mode 100644 index 00000000..e01862a0 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/RoleService.java @@ -0,0 +1,90 @@ +package com.cgb.bcpinstall.service; + +import com.cgb.bcpinstall.biz.RolesBiz; +import com.cgb.bcpinstall.common.entity.RoleEnum; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.util.HttpClientUtil; +import com.cgb.bcpinstall.config.GlobalConfig; +import com.cgb.bcpinstall.db.CheckPointDb; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 角色服务类 + * + * @author zheng.li + * @date 2020/3/2 15:20 + */ +@Service +@Slf4j +public class RoleService { + + @Autowired + protected RolesBiz rolesBiz; + + @Autowired + protected GlobalConfig globalConfig; + + + /** + * 根据服务器IP地址解析其所担任的角色,并添加到RoleBiz中 + * + * @param remoteAddr 服务器IP地址 + * @param serverHttpPort 服务器HTTP服务的端口 + */ + public void addServerRole(String remoteAddr, String serverHttpPort, InitConfigEntity configEntity) { + Map> roles = parseAllRoles(remoteAddr, configEntity); + for (RoleEnum role : roles.keySet()) { + List ports = roles.get(role); + + this.rolesBiz.addRole(role, "http://" + remoteAddr + ":" + serverHttpPort, remoteAddr, ports); + } + } + + /** + * 根据配置文件和远程从节点的IP地址获取其角色 + * 注意:一台服务器可以有多个角色 + * + * @param slaveAddress + * @return 返回 RoleEnum->端口列表 + */ + public Map> parseAllRoles(String slaveAddress, InitConfigEntity configEntity) { + log.info(String.format("为服务器 %s 解析角色", slaveAddress)); + Map> roles = new HashMap<>(16); + this.parseRole(roles, slaveAddress, configEntity.getOrdererHostConfig(), RoleEnum.ORDER, configEntity); + this.parseRole(roles, slaveAddress, configEntity.getPeerHostConfig(), RoleEnum.PEER, configEntity); + log.info(String.format("服务器 %s 解析后,所承担的角色有: ", slaveAddress, roles.keySet().stream().map(Enum::name).collect(Collectors.joining(",")))); + return roles; + } + + private void parseRole(Map> roles, String slaveAddress, Map hostConfig, RoleEnum role, InitConfigEntity configEntity) { + for (String host : hostConfig.keySet()) { + String ip = hostConfig.get(host); + int index = ip.lastIndexOf(":"); + String port = ip.substring(index + 1); + ip = ip.substring(0, index); + + if (slaveAddress.equals(ip)) { + List ports; + if (roles.containsKey(role)) { + ports = roles.get(role); + } else { + ports = new ArrayList<>(); + roles.put(role, ports); + } + + if (ports.stream().noneMatch(p -> p.equalsIgnoreCase(port))) { + ports.add(port); + } + } + } + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/UpdateService.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/UpdateService.java new file mode 100644 index 00000000..34698910 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/UpdateService.java @@ -0,0 +1,199 @@ +package com.cgb.bcpinstall.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.cgb.bcpinstall.common.entity.RemoveCmd; +import com.cgb.bcpinstall.common.entity.RoleEnum; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.util.*; +import com.cgb.bcpinstall.config.GlobalConfig; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.io.File; +import java.io.IOException; +import java.util.*; + +/** + * 扩缩容节点的服务类 + * + * @author zheng.li + * @date 2020/3/2 15:36 + */ +@Service +@Slf4j +public class UpdateService { + + @Autowired + private ModeService modeService; + + @Autowired + private EnvironmentService environmentService; + + @Autowired + protected HttpClientUtil httpClient; + + @Autowired + protected GlobalConfig globalConfig; + + /** + * 根据添加的新节点与最新的节点配置返回更新前的原节点配置 + * + * @param currentConfig + * @param newConfig + * @return + */ + public Map getOldNodeConfigMap(Map currentConfig, Map newConfig) { + if (CollectionUtils.isEmpty(currentConfig) && CollectionUtils.isEmpty(newConfig)) { + return new HashMap<>(16); + } + newConfig.keySet().forEach(currentConfig::remove); + return currentConfig; + } + + public RemoveCmd createRemoveCmd(String ip, List ipPorts, RoleEnum role) { + RemoveCmd removeCmd = new RemoveCmd(); + List hosts = new ArrayList<>(); + List ports = new ArrayList<>(); + removeCmd.setIp(ip); + removeCmd.setRole(role); + for (String ipPort : ipPorts) { + String[] ipPortSplit = ipPort.split(":"); + if (ipPortSplit.length != 2) { + return null; + } + hosts.add(ipPortSplit[0]); + ports.add(ipPortSplit[1]); + } + removeCmd.setHostNames(hosts); + removeCmd.setPorts(ports); + return removeCmd; + } + + /** + * 更新 fabric 网络配置 + * + * @param channelName + * @param configEntity + * @return + */ + public boolean updateNetworkConfig(String channelName, InitConfigEntity configEntity, Map ordererConfigMap) { + FileUtil.makeFilePath(modeService.getInstallPath() + "cli/scripts", false); + + try { + FileUtils.copyFile(new File(modeService.getInitDir() + "template/fetch-config.sh"), new File(modeService.getInstallPath() + "cli/scripts/fetch-config.sh")); + FileUtils.copyFile(new File(modeService.getInitDir() + "template/create-update-pb.sh"), new File(modeService.getInstallPath() + "cli/scripts/create-update-pb.sh")); + FileUtils.copyFile(new File(modeService.getInitDir() + "template/update-channel-config.sh"), new File(modeService.getInstallPath() + "cli/scripts/update-channel-config.sh")); + } catch (IOException e) { + log.error("复制脚本文件异常", e); + e.printStackTrace(); + return false; + } + + // 获取通道配置信息 + String firstOrdererHost = configEntity.getOrdererHostConfig().keySet().iterator().next(); + String ip = configEntity.getOrdererHostConfig().get(firstOrdererHost); + String firstOrdererHostAddress = firstOrdererHost + ip.substring(ip.lastIndexOf(":")); + String CHANNEL_NAME = channelName; + String ORDERER_CA = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/%s/orderers/%s/msp/tlscacerts/tlsca.%s-cert.pem", configEntity.getOrdererDomain(), firstOrdererHost, configEntity.getOrdererDomain()); + String CORE_PEER_LOCALMSPID = "OrdererMSP"; + String CORE_PEER_ADDRESS = firstOrdererHostAddress; + String CORE_PEER_TLS_ROOTCERT_FILE = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/%s/orderers/%s/tls/ca.crt", configEntity.getOrdererDomain(), firstOrdererHost); + String CORE_PEER_MSPCONFIGPATH = String.format("/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/%s/users/Admin@%s/msp", configEntity.getOrdererDomain(), configEntity.getOrdererDomain()); + + String cmd = "docker exec cli bash scripts/fetch-config.sh " + CHANNEL_NAME + " " + ORDERER_CA + " " + CORE_PEER_LOCALMSPID + " " + CORE_PEER_ADDRESS + " " + CORE_PEER_TLS_ROOTCERT_FILE + " " + CORE_PEER_MSPCONFIGPATH; + try { + ProcessUtil.execCmd(cmd, null, modeService.getInstallPath() + "cli"); + } catch (Exception e) { + log.error(String.format("执行脚本获取通道 %s 配置异常", channelName), e); + e.printStackTrace(); + return false; + } + + // 修改通道配置: 增加 orderer 相关配置 + String filePath = String.format("/var/run/config_%s.json", channelName); + if (!new File(filePath).exists()) { + log.error(String.format("通道 %s 配置文件 %s 不存在", channelName, filePath)); + return false; + } + JSONObject jsonObject = JSONObject.parseObject(FileUtil.getFileContent(filePath)); + JSONArray array = jsonObject.getJSONObject("channel_group").getJSONObject("groups").getJSONObject("Orderer").getJSONObject("values").getJSONObject("ConsensusType").getJSONObject("value").getJSONObject("metadata").getJSONArray("consenters"); + JSONArray ordererAddresses = jsonObject.getJSONObject("channel_group").getJSONObject("values").getJSONObject("OrdererAddresses").getJSONObject("value").getJSONArray("addresses"); + array.clear(); + ordererAddresses.clear(); + + for (String oHost : ordererConfigMap.keySet()) { + String oIp = ordererConfigMap.get(oHost); + + String certFilePath = modeService.getInstallPath() + "crypto-config/ordererOrganizations/" + configEntity.getOrdererDomain() + "/orderers/" + oHost + "/tls/server.crt"; + if (!new File(certFilePath).exists()) { + log.error(String.format("orderer %s 的证书文件 %s 不存在", oHost, certFilePath)); + return false; + } + + String content = FileUtil.getFileContent(certFilePath); + String certStr = new String(Base64.getEncoder().encode(content.getBytes())); + + JSONObject newOrdererObject = new JSONObject(); + newOrdererObject.put("client_tls_cert", certStr); + newOrdererObject.put("host", oHost); + newOrdererObject.put("port", oIp.substring(oIp.lastIndexOf(":") + 1)); + newOrdererObject.put("server_tls_cert", certStr); + + String ordererAddr = oHost + ":" + oIp.substring(oIp.lastIndexOf(":") + 1); + array.add(newOrdererObject); + ordererAddresses.add(ordererAddr); + } + + File modifiedFile = new File(String.format("/var/run/config_%s_modified.json", channelName)); + FileUtil.writeTxtFile(jsonObject.toJSONString(), modifiedFile, "UTF-8"); + if (!modifiedFile.exists()) { + log.error(String.format("创建通道 %s 配置编辑文件 %s 失败", channelName, modifiedFile.getAbsolutePath())); + return false; + } + + // 创建 pb 文件 + cmd = "docker exec cli bash scripts/create-update-pb.sh " + CHANNEL_NAME; + try { + ProcessUtil.execCmd(cmd, null, "/var/run"); + } catch (Exception e) { + log.error(String.format("为通道 %s 执行脚本生成pb文件异常", channelName), e); + e.printStackTrace(); + return false; + } + // 更新通道 + cmd = "docker exec cli bash scripts/update-channel-config.sh " + CHANNEL_NAME + " " + ORDERER_CA + " " + CORE_PEER_LOCALMSPID + " " + CORE_PEER_ADDRESS + " " + CORE_PEER_TLS_ROOTCERT_FILE + " " + CORE_PEER_MSPCONFIGPATH; + try { + ProcessUtil.execCmd(cmd, null, modeService.getInstallPath() + "cli"); + } catch (Exception e) { + log.error(String.format("为通道 %s 执行脚本更新网络配置异常", channelName), e); + e.printStackTrace(); + } + + return true; + } + + public boolean removeNode(RoleEnum role, String domain, List hostNames, List ports) { + if (!CollectionUtils.isEmpty(ports)) { + ports.forEach(environmentService::removePortFromFirewall); + } + for (String host : hostNames) { + try { + log.info("移除节点容器:sh stopNode.sh " + host.split(domain)[0]); + ProcessUtil.execCmd("sh stopNode.sh " + host.split(domain)[0], null, modeService.getInstallPath()); + String roleFileName = role == RoleEnum.ORDER ? "ordererOrganizations" : "peerOrganizations"; + String nodeFileName = role == RoleEnum.ORDER ? "orderers" : "peers"; + String rmCertFile = String.format("crypto-config" + File.separator + "%s" + File.separator + "%s" + File.separator + "%s" + File.separator + "%s", roleFileName, domain, nodeFileName, host); + log.info("移除节点容器证书,路径:" + modeService.getInstallPath() + rmCertFile); + FileUtil.rmFile(new File(modeService.getInstallPath() + rmCertFile)); + } catch (Exception e) { + log.error(String.format("移除节点 %s 异常", host), e); + e.printStackTrace(); + } + } + return true; + } +} diff --git a/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/YamlFileService.java b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/YamlFileService.java new file mode 100644 index 00000000..feaf9b52 --- /dev/null +++ b/distributed-deploy/bcp-install-biz/src/main/java/com/cgb/bcpinstall/service/YamlFileService.java @@ -0,0 +1,63 @@ +package com.cgb.bcpinstall.service; + +import com.cgb.bcpinstall.biz.helper.YamlRepresenter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.util.Map; + +/** + * @author zheng.li + * @date 2020/3/12 15:54 + */ +@Service +@Slf4j +public class YamlFileService { + + DumperOptions createOption() { + DumperOptions dumperOptions = new DumperOptions(); + dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + dumperOptions.setDefaultScalarStyle(DumperOptions.ScalarStyle.PLAIN); + dumperOptions.setPrettyFlow(false); + return dumperOptions; + } + + /** + * 将配置信息写入到yaml文件中 + * + * @param entity + * @param yamlFile + * @return + */ + public boolean writeObjectToYamlFile(Map entity, String yamlFile) { + DumperOptions options = this.createOption(); + String yaml = new Yaml(new YamlRepresenter(options)).dumpAs(entity, null, DumperOptions.FlowStyle.BLOCK); + try { + File file = new File(yamlFile); + if (!file.getParentFile().exists()) { + boolean isMk = file.getParentFile().mkdirs(); + if (!isMk) { + return false; + } + } + FileOutputStream outputStream = new FileOutputStream(file, false); + outputStream.write(yaml.getBytes()); + outputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + public Map loadYamlFile(String filePath) throws FileNotFoundException { + return new Yaml().loadAs(new FileInputStream(new File(filePath)), Map.class); + } + +} diff --git a/distributed-deploy/bcp-install-biz/target/classes/META-INF/spring-configuration-metadata.json b/distributed-deploy/bcp-install-biz/target/classes/META-INF/spring-configuration-metadata.json new file mode 100644 index 00000000..3c14717c --- /dev/null +++ b/distributed-deploy/bcp-install-biz/target/classes/META-INF/spring-configuration-metadata.json @@ -0,0 +1,18 @@ +{ + "hints": [], + "groups": [ + { + "sourceType": "com.cgb.bcpinstall.config.GlobalConfig", + "name": "global", + "type": "com.cgb.bcpinstall.config.GlobalConfig" + } + ], + "properties": [ + { + "sourceType": "com.cgb.bcpinstall.config.GlobalConfig", + "name": "global.master", + "description": "是否主节点", + "type": "java.lang.Integer" + } + ] +} \ No newline at end of file diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/InitializeBiz.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/InitializeBiz.class new file mode 100644 index 00000000..3fb9b2e3 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/InitializeBiz.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/InstallBiz.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/InstallBiz.class new file mode 100644 index 00000000..b86c677c Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/InstallBiz.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/InstallMode.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/InstallMode.class new file mode 100644 index 00000000..63a1e0a8 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/InstallMode.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/NewInstallBiz.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/NewInstallBiz.class new file mode 100644 index 00000000..5451e334 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/NewInstallBiz.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/OrdererExtendBiz.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/OrdererExtendBiz.class new file mode 100644 index 00000000..8d24e39c Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/OrdererExtendBiz.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/OrdererRemoveBiz.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/OrdererRemoveBiz.class new file mode 100644 index 00000000..8a8aacd1 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/OrdererRemoveBiz.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/PeerExtendBiz.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/PeerExtendBiz.class new file mode 100644 index 00000000..b56ee08c Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/PeerExtendBiz.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/PeerRemoveBiz.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/PeerRemoveBiz.class new file mode 100644 index 00000000..a57cb793 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/PeerRemoveBiz.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/RolesBiz.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/RolesBiz.class new file mode 100644 index 00000000..08fef8fb Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/RolesBiz.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/UpdateNetworkBiz.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/UpdateNetworkBiz.class new file mode 100644 index 00000000..ba559e4a Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/UpdateNetworkBiz.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/helper/YamlRepresenter.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/helper/YamlRepresenter.class new file mode 100644 index 00000000..93f24b79 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/biz/helper/YamlRepresenter.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/ConfigFileGen.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/ConfigFileGen.class new file mode 100644 index 00000000..43d7d682 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/ConfigFileGen.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/DockerConfigGen.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/DockerConfigGen.class new file mode 100644 index 00000000..26fcce56 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/DockerConfigGen.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/FabricConfigGen.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/FabricConfigGen.class new file mode 100644 index 00000000..9c0d85f6 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/FabricConfigGen.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/GlobalConfig.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/GlobalConfig.class new file mode 100644 index 00000000..37cf8b03 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/GlobalConfig.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/configGenImpl/DockerConfigGenImpl.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/configGenImpl/DockerConfigGenImpl.class new file mode 100644 index 00000000..7e708402 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/configGenImpl/DockerConfigGenImpl.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/configGenImpl/FabricConfigGenImpl.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/configGenImpl/FabricConfigGenImpl.class new file mode 100644 index 00000000..00a9ba8d Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/config/configGenImpl/FabricConfigGenImpl.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/CheckPointDb.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/CheckPointDb.class new file mode 100644 index 00000000..4af3135c Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/CheckPointDb.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/ConnectionPool.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/ConnectionPool.class new file mode 100644 index 00000000..f80c3392 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/ConnectionPool.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/table/NodeDO.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/table/NodeDO.class new file mode 100644 index 00000000..a33dfc47 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/table/NodeDO.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/MapperUtil.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/MapperUtil.class new file mode 100644 index 00000000..f11bc785 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/MapperUtil.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/annotation/ColumnAnnotation.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/annotation/ColumnAnnotation.class new file mode 100644 index 00000000..28129f1e Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/annotation/ColumnAnnotation.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/annotation/TableAnnotation.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/annotation/TableAnnotation.class new file mode 100644 index 00000000..1a6097a9 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/annotation/TableAnnotation.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/object/BaseDO.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/object/BaseDO.class new file mode 100644 index 00000000..3c42f028 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/object/BaseDO.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/object/Column.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/object/Column.class new file mode 100644 index 00000000..5dfa6dcd Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/object/Column.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/object/Table.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/object/Table.class new file mode 100644 index 00000000..7a0ff751 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/db/util/object/Table.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/EnvironmentService.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/EnvironmentService.class new file mode 100644 index 00000000..b4192fe2 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/EnvironmentService.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/FabricCliService.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/FabricCliService.class new file mode 100644 index 00000000..d2e53a67 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/FabricCliService.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/FileService.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/FileService.class new file mode 100644 index 00000000..e38d7ddf Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/FileService.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/InitConfigService.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/InitConfigService.class new file mode 100644 index 00000000..c1620c7c Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/InitConfigService.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/InstallService.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/InstallService.class new file mode 100644 index 00000000..06f42d20 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/InstallService.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/ModeService.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/ModeService.class new file mode 100644 index 00000000..92aee857 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/ModeService.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/RemoteService.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/RemoteService.class new file mode 100644 index 00000000..2fec89c3 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/RemoteService.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/RoleService.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/RoleService.class new file mode 100644 index 00000000..a0a18f22 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/RoleService.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/UpdateService.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/UpdateService.class new file mode 100644 index 00000000..bb840826 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/UpdateService.class differ diff --git a/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/YamlFileService.class b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/YamlFileService.class new file mode 100644 index 00000000..b67e59d5 Binary files /dev/null and b/distributed-deploy/bcp-install-biz/target/classes/com/cgb/bcpinstall/service/YamlFileService.class differ diff --git a/distributed-deploy/bcp-install-common/.classpath b/distributed-deploy/bcp-install-common/.classpath new file mode 100644 index 00000000..f0257c5a --- /dev/null +++ b/distributed-deploy/bcp-install-common/.classpath @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/distributed-deploy/bcp-install-common/.factorypath b/distributed-deploy/bcp-install-common/.factorypath new file mode 100644 index 00000000..eec5e5c8 --- /dev/null +++ b/distributed-deploy/bcp-install-common/.factorypath @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/distributed-deploy/bcp-install-common/.settings/org.eclipse.core.resources.prefs b/distributed-deploy/bcp-install-common/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..e9441bb1 --- /dev/null +++ b/distributed-deploy/bcp-install-common/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/distributed-deploy/bcp-install-common/.settings/org.eclipse.jdt.apt.core.prefs b/distributed-deploy/bcp-install-common/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/distributed-deploy/bcp-install-common/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/distributed-deploy/bcp-install-common/.settings/org.eclipse.jdt.core.prefs b/distributed-deploy/bcp-install-common/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..90b69d45 --- /dev/null +++ b/distributed-deploy/bcp-install-common/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,10 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.methodParameters=generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/distributed-deploy/bcp-install-common/.settings/org.eclipse.m2e.core.prefs b/distributed-deploy/bcp-install-common/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/distributed-deploy/bcp-install-common/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/distributed-deploy/bcp-install-common/pom.xml b/distributed-deploy/bcp-install-common/pom.xml new file mode 100644 index 00000000..6469cad2 --- /dev/null +++ b/distributed-deploy/bcp-install-common/pom.xml @@ -0,0 +1,28 @@ + + + + bcp-install + com.cgb + 1.0.0-RELEASE + + 4.0.0 + + bcp-install-common + 1.0.0-RELEASE + + + + commons-io + commons-io + 1.3.2 + + + org.apache.commons + commons-compress + 1.18 + + + + \ No newline at end of file diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/annotation/InvokeLog.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/annotation/InvokeLog.java new file mode 100644 index 00000000..17308850 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/annotation/InvokeLog.java @@ -0,0 +1,39 @@ +package com.cgb.bcpinstall.common.annotation; + + +import java.lang.annotation.*; + +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface InvokeLog { + + /** + * 是否写入日志 默认不写入 + * + * @return + */ + boolean persistence() default false; + + /** + * 调用方法名称 + * + * @return + */ + String name() default ""; + + /** + * 描述 + * + * @return + */ + String description() default ""; + + /** + * 是否打印返回值 + * + * @return + */ + boolean printReturn() default true; + +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/constant/DateConstant.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/constant/DateConstant.java new file mode 100644 index 00000000..931ca944 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/constant/DateConstant.java @@ -0,0 +1,19 @@ +package com.cgb.bcpinstall.common.constant; + +public abstract class DateConstant { + + /** + * 时间格式:年月日时分秒 + */ + public static final String DATE_TIME_FORMATTER = "yyyy-MM-dd HH:mm:ss"; + + /** + * 时间格式:年月日 + */ + public static final String DATE_FORMATTER = "yyyy-MM-dd"; + + /** + * 时间格式:时分秒 + */ + public static final String TIME_FORMATTER = "HH:mm:ss"; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/constant/LoginConstant.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/constant/LoginConstant.java new file mode 100644 index 00000000..70b6efe1 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/constant/LoginConstant.java @@ -0,0 +1,36 @@ +package com.cgb.bcpinstall.common.constant; + + +/** + * 登陆相关 + */ +public abstract class LoginConstant { + /** + * 未知ip unknow + */ + public static final String UNKNOWN = "unknown"; + /** + * 请求头中 X-Real-IP + */ + public static final String X_REAL_IP = "X-Real-IP"; + /** + * 请求头中 X-Forwarded-For + */ + public static final String X_FORWARDED_FOR = "X-Forwarded-For"; + /** + * 请求头中 Proxy-Client-IP + */ + public static final String PROXY_CLIENT_IP = "Proxy-Client-IP"; + /** + * 请求头中 WL-Proxy-Client-IP + */ + public static final String WL_PROXY_CLIENT_IP = "WL-Proxy-Client-IP"; + + + public static final String CURRENT_USER_NAME = "current_user_name"; + public static final String CURRENT_USER_ID = "current_user_id"; + public static final String CURRENT_USER_TOKEN = "current_user_token"; + public static final String CURRENT_MSP = "current_msp"; + + +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/constant/ToolsConstant.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/constant/ToolsConstant.java new file mode 100644 index 00000000..7e681eff --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/constant/ToolsConstant.java @@ -0,0 +1,13 @@ +package com.cgb.bcpinstall.common.constant; + +/** + * @program: UserConstant + * @description: + * @author: Liang minhong + * @create: 2019-11-13 15:06 + **/ +public abstract class ToolsConstant { + public static final String CRYPTOGEN = "cryptogen"; + public static final String CONFIGTXGEN = "configtxgen"; + public static final String CONFIGTXLATOR = "configtxlator"; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/context/RequestContextHandler.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/context/RequestContextHandler.java new file mode 100644 index 00000000..5aeb7182 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/context/RequestContextHandler.java @@ -0,0 +1,122 @@ +package com.cgb.bcpinstall.common.context; + +import com.cgb.bcpinstall.common.constant.LoginConstant; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertEquals; + + +/** + * @program: RequestContextHandler + * @description: 每个请求对应的线程内存数据管理 + * @author: Zhun.Xiao + * @create: 2018-11-22 16:44 + **/ +@Slf4j +public class RequestContextHandler { + + public static ThreadLocal> threadLocal = new ThreadLocal<>(); + + public static void set(String key, Object value) { + Map map = threadLocal.get(); + if (null == map) { + map = new HashMap(); + threadLocal.set(map); + } + map.put(key, value); + + } + + + public static Object get(String key) { + Map map = threadLocal.get(); + if (null == map) { + map = new HashMap(); + threadLocal.set(map); + } + return map.get(key); + + } + + public static void setCurrentUserName(String userName) { + set(LoginConstant.CURRENT_USER_NAME, userName); + } + + + + public static void setCurrentUserId(String id) { + set(LoginConstant.CURRENT_USER_ID, id); + + } + + + public static void setCurrentUserToken(String token) { + set(LoginConstant.CURRENT_USER_TOKEN, token); + + } + + public static String object2String(Object value) { + return value == null ? null : value.toString(); + } + + + public static void remove() { + threadLocal.remove(); + } + + + @RunWith(MockitoJUnitRunner.class) + public static class UnitTest { + private final Logger logger = LoggerFactory.getLogger(UnitTest.class); + + @Test + public void testRequestHandler() throws InterruptedException { + RequestContextHandler.set("name", "xiaozhun"); + new Thread(() -> { + RequestContextHandler.set("name", "tyrant"); + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + log.error(e.toString()); + } + assertEquals(RequestContextHandler.get("name"), "tyrant"); + logger.info("thread one done"); + + }).start(); + + new Thread(() -> { + RequestContextHandler.set("name", "batman"); + assertEquals(RequestContextHandler.get("name"), "batman"); + logger.info("thread two done"); + + }).start(); + + Thread.sleep(5000); + assertEquals(RequestContextHandler.get("name"), "xiaozhun"); + logger.info("main thread done"); + } + + + @Test + public void TestUser() { + RequestContextHandler.setCurrentUserId(111 + ""); + assertEquals(RequestContextHandler.get(LoginConstant.CURRENT_USER_ID), "xiao-id"); + RequestContextHandler.setCurrentUserName("xiao-name"); + assertEquals(RequestContextHandler.get(LoginConstant.CURRENT_USER_NAME), "xiao-name"); + RequestContextHandler.setCurrentUserToken("xiao-token"); + assertEquals(RequestContextHandler.get(LoginConstant.CURRENT_USER_TOKEN), "xiao-token"); + + } + } + + +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/BaseEntity.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/BaseEntity.java new file mode 100644 index 00000000..f1e4a262 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/BaseEntity.java @@ -0,0 +1,23 @@ +package com.cgb.bcpinstall.common.entity; + +import com.alibaba.fastjson.JSON; +import lombok.Data; +import org.springframework.data.annotation.Transient; + +import java.io.Serializable; + +/** + * @program: BaseEntity + * @description: DO抽象父类 + * @author: Zhun.Xiao + * @create: 2018-10-29 15:20 + **/ + +@Data +public abstract class BaseEntity implements Serializable { + private static final long serialVersionUID = 8240263207556866796L; + + public String toJson() { + return JSON.toJSONString(this); + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/DiffHostConfigs.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/DiffHostConfigs.java new file mode 100644 index 00000000..a3a088b4 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/DiffHostConfigs.java @@ -0,0 +1,15 @@ +package com.cgb.bcpinstall.common.entity; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Map; + +@Getter +@Setter +public class DiffHostConfigs implements Serializable { + private static final long serialVersionUID = 7652411049227664431L; + private Map ordererHostConfig; + private Map peerHostConfig; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/EndCmd.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/EndCmd.java new file mode 100644 index 00000000..95925aa7 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/EndCmd.java @@ -0,0 +1,14 @@ +package com.cgb.bcpinstall.common.entity; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class EndCmd implements Serializable { + private static final long serialVersionUID = -2812305986585325397L; + + private boolean success; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/InstallCmd.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/InstallCmd.java new file mode 100644 index 00000000..7aae907a --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/InstallCmd.java @@ -0,0 +1,21 @@ +package com.cgb.bcpinstall.common.entity; + +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +@Getter +@Setter +public class InstallCmd implements Serializable { + private static final long serialVersionUID = -5985735701441710827L; + + private String ipAddress; + private List rolePorts; + private RoleEnum role; + private Map hosts; + private String roleFolderName; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/InstallResult.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/InstallResult.java new file mode 100644 index 00000000..f34d7216 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/InstallResult.java @@ -0,0 +1,15 @@ +package com.cgb.bcpinstall.common.entity; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class InstallResult implements Serializable { + private static final long serialVersionUID = 1649219876175042832L; + + private RoleEnum role; + private boolean success; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/InstallStatusEnum.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/InstallStatusEnum.java new file mode 100644 index 00000000..e1663ef7 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/InstallStatusEnum.java @@ -0,0 +1,9 @@ +package com.cgb.bcpinstall.common.entity; + +public enum InstallStatusEnum { + REGISTERED, + DOWNLOADED, + INSTALLING, + FAILED, + SUCCESS +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/OSEnum.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/OSEnum.java new file mode 100644 index 00000000..a7187d10 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/OSEnum.java @@ -0,0 +1,7 @@ +package com.cgb.bcpinstall.common.entity; + +public enum OSEnum { + LINUX, + MAC, + WINDOWS +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/RemoveCmd.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/RemoveCmd.java new file mode 100644 index 00000000..a974fdb1 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/RemoveCmd.java @@ -0,0 +1,21 @@ +package com.cgb.bcpinstall.common.entity; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +@Getter +@Setter +public class RemoveCmd implements Serializable { + private static final long serialVersionUID = -950140223007704381L; + + private RoleEnum role; + private List hostNames; + private String ip; + private List ports; + private String peerDomain; + private String ordererDomain; + +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/RoleEnum.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/RoleEnum.java new file mode 100644 index 00000000..d6d44c13 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/RoleEnum.java @@ -0,0 +1,15 @@ +package com.cgb.bcpinstall.common.entity; + +public enum RoleEnum { + ORDER(1), + PEER(2); + + private int val; + private RoleEnum(int val) { + this.val = val; + } + + public int getVal() { + return this.val; + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/RoleRegEntity.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/RoleRegEntity.java new file mode 100644 index 00000000..79b500a9 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/RoleRegEntity.java @@ -0,0 +1,17 @@ +package com.cgb.bcpinstall.common.entity; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class RoleRegEntity implements Serializable { + private static final long serialVersionUID = 6214474905502751178L; + + /** + * http 服务的 port + */ + private String serverPort; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/ServerEntity.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/ServerEntity.java new file mode 100644 index 00000000..ad47ee07 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/ServerEntity.java @@ -0,0 +1,32 @@ +package com.cgb.bcpinstall.common.entity; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +@Getter +@Setter +public class ServerEntity implements Serializable { + private static final long serialVersionUID = 320994761941192716L; + + /** + * 所担任的角色 + */ + private RoleEnum role; + /** + * 从节点安装服务的url,格式: http://ip:port + */ + private String httpUrl; + /** + * 从节点的IP地址 + */ + private String host; + /** + * 这个port指的是机器锁充当角色的对应端口 + */ + private List rolePorts; + + private InstallStatusEnum status; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/UpdateCmd.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/UpdateCmd.java new file mode 100644 index 00000000..bf78ce4d --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/UpdateCmd.java @@ -0,0 +1,45 @@ +package com.cgb.bcpinstall.common.entity; + +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Getter +@Setter +public class UpdateCmd implements Serializable { + private static final long serialVersionUID = -5201447567245919240L; + + private RoleEnum role; + + /** + * + */ + private Map hosts; + /** + * initconfig.properties 文件中的 host->ip:port 配置(可以是orderer或peer),在扩缩容order、peer时需要用到 + * 可以根据功能写入 + */ + private Map peerHostConfig; + + /** + * 更新原因 + */ + private UpdateReasonEnum reason; + + private InitConfigEntity configEntity; + + /** + * 新增节点需要加入的业务链 + */ + private Set peerJoinChannelList; + + /** + * 当前ip对应角色的host + */ + private String currentHost; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/UpdateReasonEnum.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/UpdateReasonEnum.java new file mode 100644 index 00000000..1319e93e --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/UpdateReasonEnum.java @@ -0,0 +1,5 @@ +package com.cgb.bcpinstall.common.entity; + +public enum UpdateReasonEnum { + ORDER_ADDED, ORDER_REMOVED, PEER_ADDED, PEER_REMOVED +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/init/InitConfigEntity.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/init/InitConfigEntity.java new file mode 100644 index 00000000..028739a4 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/entity/init/InitConfigEntity.java @@ -0,0 +1,26 @@ +package com.cgb.bcpinstall.common.entity.init; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.io.Serializable; +import java.util.Map; + +@Getter +@Setter +public class InitConfigEntity implements Serializable { + private static final long serialVersionUID = -7686888493480177456L; + + private String network; + private String channelName; + private String orgMSPID; + private String orgName; + private String ordererDomain; + private String peerDomain; + private Map ordererHostConfig; + private Map peerHostConfig; + private Map metricPortConfig; + private Map couchdbPortConfig; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/exception/DownloadFileException.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/exception/DownloadFileException.java new file mode 100644 index 00000000..ad99cf7c --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/exception/DownloadFileException.java @@ -0,0 +1,16 @@ +package com.cgb.bcpinstall.common.exception; + +import lombok.Getter; + +@Getter +public class DownloadFileException extends Exception { + private static final long serialVersionUID = 7913122512705959462L; + + private String httpResponseContent; + + public DownloadFileException(String responseContent, String message) { + super(message); + + this.httpResponseContent = responseContent; + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/BaseFastJsonConfig.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/BaseFastJsonConfig.java new file mode 100644 index 00000000..3d5f986c --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/BaseFastJsonConfig.java @@ -0,0 +1,88 @@ +package com.cgb.bcpinstall.common.fastJson; + +import com.alibaba.fastjson.parser.ParserConfig; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.alibaba.fastjson.support.config.FastJsonConfig; +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; +import com.cgb.bcpinstall.common.response.StatusCode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.MediaType; + +import java.util.ArrayList; +import java.util.List; + + +/** + * class_name: BaseFastJsonConfig + * package: com.midea.mobile.question.main.fastjson + * describe: BaseFastJsonConfig + * + * @author: zhun.xiao + * @date: 2018/1/15 + * @time: 16:16 + **/ +public class BaseFastJsonConfig { + private final static Logger logger = LoggerFactory.getLogger(BaseFastJsonConfig.class); + + /** + * fastJson相关设置 + */ + public static FastJsonHttpMessageConverter fastJsonHttpMessageConverter() { + logger.info("fastJsonHttpMessageConverter........"); + + FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); + + List supportedMediaTypes = new ArrayList(); + supportedMediaTypes.add(MediaType.parseMediaType("text/plain;charset=utf-8")); + supportedMediaTypes.add(MediaType.parseMediaType("text/html;charset=utf-8")); + supportedMediaTypes.add(MediaType.parseMediaType("text/json;charset=utf-8")); + supportedMediaTypes.add(MediaType.parseMediaType("application/json;charset=utf-8")); + supportedMediaTypes.add(MediaType.parseMediaType("text/html;charset=utf-8")); + supportedMediaTypes.add(MediaType.parseMediaType("*")); + + fastJsonHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes); + fastJsonHttpMessageConverter.setFastJsonConfig(getFastJsonConfig()); + + return fastJsonHttpMessageConverter; + } + + /** + * fastjson相关配置 + * + * @return + */ + private static FastJsonConfig getFastJsonConfig() { + logger.info("getFastJsonConfig....."); + FastJsonConfig fastJsonConfig = new FastJsonConfig(); + //serializerFeatureList中添加转换规则 + List serializerFeatureList = new ArrayList(); + //输出key时是否使用双引号 + serializerFeatureList.add(SerializerFeature.QuoteFieldNames); + //是否输出值为null的字段 + serializerFeatureList.add(SerializerFeature.WriteMapNullValue); + //数值字段如果为null,输出为0,而非null + serializerFeatureList.add(SerializerFeature.WriteNullNumberAsZero); + //List字段如果为null,输出为[],而非null + serializerFeatureList.add(SerializerFeature.WriteNullListAsEmpty); + //字符类型字段如果为null,输出为"",而非null + serializerFeatureList.add(SerializerFeature.WriteNullStringAsEmpty); + //Boolean字段如果为null,输出为false,而非null + serializerFeatureList.add(SerializerFeature.WriteNullBooleanAsFalse); + //null String不输出 + serializerFeatureList.add(SerializerFeature.WriteNullStringAsEmpty); + //Date的日期转换器 + serializerFeatureList.add(SerializerFeature.WriteDateUseDateFormat); + + SerializerFeature[] serializerFeatures = + serializerFeatureList.toArray(new SerializerFeature[serializerFeatureList.size()]); + + fastJsonConfig.setSerializerFeatures(serializerFeatures); + fastJsonConfig.setSerializeConfig(new CustomSerializeConfig()); + ParserConfig.getGlobalInstance().putDeserializer(StatusCode.class, new StatusCodeDeserializer()); + ParserConfig.getGlobalInstance().addAccept("com.cgb.dp.common.entity"); + fastJsonConfig.getParserConfig().setAutoTypeSupport(true); + return fastJsonConfig; + + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/CustomSerializeConfig.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/CustomSerializeConfig.java new file mode 100644 index 00000000..3710e14d --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/CustomSerializeConfig.java @@ -0,0 +1,45 @@ +package com.cgb.bcpinstall.common.fastJson; + +import com.alibaba.fastjson.serializer.ObjectSerializer; +import com.alibaba.fastjson.serializer.SerializeConfig; +import com.cgb.bcpinstall.common.response.StatusCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + + +/** + * class_name: CustomSerializeConfig + * package: com.midea.mobile.uom.main.fastjson + * describe: Json序列化配置 + * + * @author: zhun.xiao + * @date: 2017/11/25 + * @time: 20:15 + **/ +public class CustomSerializeConfig extends SerializeConfig { + public CustomSerializeConfig() { + } + + @Override + public ObjectSerializer getObjectWriter(Class clazz) { + ObjectSerializer writer = this.get(clazz); + if (writer == null) { + if (StatusCode.class.isAssignableFrom(clazz)) { + this.put(clazz, StatusCodeSerializer.INSTANCE); + } + if (LocalDateTime.class.isAssignableFrom(clazz)) { + this.put(clazz, JodaTimeDeserializer.instance); + } + if (LocalDate.class.isAssignableFrom(clazz)) { + this.put(clazz, JodaTimeDeserializer.instance); + } + if (LocalTime.class.isAssignableFrom(clazz)) { + this.put(clazz, JodaTimeDeserializer.instance); + } + } + + return super.getObjectWriter(clazz); + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/JodaTimeDeserializer.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/JodaTimeDeserializer.java new file mode 100644 index 00000000..56e3aa7c --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/JodaTimeDeserializer.java @@ -0,0 +1,49 @@ +package com.cgb.bcpinstall.common.fastJson; + +import com.alibaba.fastjson.serializer.JSONSerializer; +import com.alibaba.fastjson.serializer.ObjectSerializer; +import com.alibaba.fastjson.serializer.SerializeWriter; +import com.cgb.bcpinstall.common.constant.DateConstant; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; + +/** + * class_name: JodaTimeDeserializer + * package: com.midea.mobile.talkbar.common.utils + * describe: fastjson 对 localdatetime格式化支持 + * + * @author: zhun.xiao + * @date: 2017/12/1 + * @time: 18:01 + **/ +public class JodaTimeDeserializer implements ObjectSerializer { + + public static final JodaTimeDeserializer instance = new JodaTimeDeserializer(); + + + @Override + public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { + SerializeWriter out = serializer.getWriter(); + String resultStr = object.toString(); + if (object == null) { + out.writeNull(); + return; + } + if (fieldType == LocalDateTime.class) { + LocalDateTime localDateTime = (LocalDateTime) object; + resultStr = localDateTime.format(DateTimeFormatter.ofPattern(DateConstant.DATE_TIME_FORMATTER)); + } else if (fieldType == LocalDate.class) { + LocalDate localDate = (LocalDate) object; + resultStr = localDate.format(DateTimeFormatter.ofPattern(DateConstant.DATE_FORMATTER)); + } else if (fieldType == LocalTime.class) { + LocalTime localTime = (LocalTime) object; + resultStr = localTime.format(DateTimeFormatter.ofPattern(DateConstant.TIME_FORMATTER)); + } + out.writeString(resultStr); + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/StatusCodeDeserializer.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/StatusCodeDeserializer.java new file mode 100644 index 00000000..ce0fd285 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/StatusCodeDeserializer.java @@ -0,0 +1,27 @@ +package com.cgb.bcpinstall.common.fastJson; + +import com.alibaba.fastjson.parser.DefaultJSONParser; +import com.alibaba.fastjson.parser.JSONLexer; +import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; +import com.cgb.bcpinstall.common.response.ResponseCode; + +import java.lang.reflect.Type; + +public class StatusCodeDeserializer implements ObjectDeserializer { + @Override + public T deserialze(DefaultJSONParser defaultJSONParser, Type type, Object o) { + JSONLexer lexer = defaultJSONParser.getLexer(); + String value = lexer.stringVal(); + for (ResponseCode responseCode : ResponseCode.values()) { + if (value.equals(responseCode.code())) { + return (T) responseCode; + } + } + throw new RuntimeException("no status code: " + value); + } + + @Override + public int getFastMatchToken() { + return 0; + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/StatusCodeSerializer.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/StatusCodeSerializer.java new file mode 100644 index 00000000..0351cbef --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/fastJson/StatusCodeSerializer.java @@ -0,0 +1,37 @@ +package com.cgb.bcpinstall.common.fastJson; + +import com.alibaba.fastjson.serializer.JSONSerializer; +import com.alibaba.fastjson.serializer.ObjectSerializer; +import com.alibaba.fastjson.serializer.SerializeWriter; +import com.cgb.bcpinstall.common.response.StatusCode; + +import java.io.IOException; +import java.lang.reflect.Type; + +/** + * class_name: StatusCodeSerializer + * package: com.midea.mobile.uom.main.fastjson + * describe: StatusCode fastjson序列化code值 + * + * @author: zhun.xiao + * @date: 2017/11/24 + * @time: 23:21 + **/ + +public class StatusCodeSerializer implements ObjectSerializer { + public static final StatusCodeSerializer INSTANCE = new StatusCodeSerializer(); + + StatusCodeSerializer() { + } + + @Override + public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { + SerializeWriter out = serializer.out; + StatusCode value = (StatusCode) object; + if (value == null) { + out.writeNull(); + } else { + out.writeString((String) value.code()); + } + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/log/AbstractPrintLog.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/log/AbstractPrintLog.java new file mode 100644 index 00000000..f390b302 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/log/AbstractPrintLog.java @@ -0,0 +1,147 @@ +package com.cgb.bcpinstall.common.log; + +import com.alibaba.fastjson.JSONObject; +import com.cgb.bcpinstall.common.entity.BaseEntity; +import com.cgb.bcpinstall.common.response.BaseResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.InputStreamSource; +import org.springframework.stereotype.Component; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.util.StopWatch; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import java.io.File; + +/** + * @program: AbstractPrintLog + * @description: 日志打印抽象类 + * @author: Zhun.Xiao + * @create: 2018-10-29 17:01 + **/ +@Component +public abstract class AbstractPrintLog { + + + public static final Logger logger = LoggerFactory.getLogger(AbstractPrintLog.class); + private static final String MSG = "\n --请求--\n --方法:{}\n --描述:{}\n --位置:{}\n --参数:{}\n --返回:{}\n --耗时:{} ms"; + /** + * 服务响应超过2秒打印警告日志 + */ + private static final int DEFAULT_TIME_LIMIT = 2000; + + public Object execute(ProceedingJoinPoint joinPoint) throws Throwable { + Object[] args = joinPoint.getArgs(); + + if (logger.isDebugEnabled() || logger.isWarnEnabled()) { + StopWatch clock = new StopWatch(); + clock.start(); + Object returnObj = null; + try { + return returnObj = joinPoint.proceed(args); + } catch (Exception e) { + throw e; + } finally { + clock.stop(); + long totalTimeMillis = clock.getTotalTimeMillis(); + handleLog(joinPoint, args, returnObj, totalTimeMillis); + } + } else { + return joinPoint.proceed(args); + } + } + + /** + * 日志处理 + * + * @param joinPoint 位置 + * @param args 参数 + * @param returnObj 响应 + * @param costTime 耗时ms + */ + protected abstract void handleLog(ProceedingJoinPoint joinPoint, Object[] args, Object returnObj, long costTime); + + /** + * @param name 操作名称 + * @param description 描述 + * @param printReturn 是否打印响应 + * @param joinPoint 位置 + * @param args 参数 + * @param returnObj 响应 + * @param totalTimeMillis 耗时ms + */ + protected void printLogMsg(String name, String description, boolean printReturn, JoinPoint joinPoint, Object[] args, Object returnObj, long totalTimeMillis) { + // Object[] params = argsDemote(args); + String params = getParam(args); + + /** + * 返回码不是成功,或者执行超过1秒才记录日志 + */ +// if ( isSave(baseResponse,totalTimeMillis) ) { +// sendLogToMongoDB(name, description, printReturn, joinPoint, args, returnObj, totalTimeMillis); +// } + + if (totalTimeMillis < getTimeLimit()) { + logger.info(MSG, new Object[]{name, description, joinPoint.getStaticPart(), params, getPrintMsg(printReturn, returnObj), totalTimeMillis}); + } else { + logger.warn(MSG, new Object[]{name, description, joinPoint.getStaticPart(), params, getPrintMsg(printReturn, returnObj), totalTimeMillis}); + } + } + + protected int getTimeLimit() { + return DEFAULT_TIME_LIMIT; + } + + protected String getPrintMsg(boolean printReturn, Object returnObj) { + return printReturn ? ((returnObj != null) ? JSONObject.toJSONString(returnObj) : "null") : "[printReturn = false]"; + } + + protected Object[] argsDemote(Object[] args) { + if (args == null || args.length == 0) { + return new Object[]{}; + } + Object[] params = new Object[args.length]; + for (int i = 0; i < args.length; i++) { + Object arg = args[i]; + if (arg instanceof ServletRequest || arg instanceof ServletResponse + || arg instanceof ModelMap || arg instanceof Model + || arg instanceof InputStreamSource || arg instanceof File || arg instanceof BaseEntity) { + params[i] = args[i]; + } else { + params[i] = args.toString(); + } + } + return params; + } + + protected String getParam(Object[] args) { + StringBuilder params = new StringBuilder(); + if (args != null && args.length > 0) { + for (int i = 0; i < args.length; i++) { + if (null == args[i]) { + params.append("null").append(";"); + } else { + params.append(args[i].toString()).append(";"); + } + } + } + return params.toString(); + } + + protected HttpServletRequest getHttpServletRequest() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + } + + private boolean isSave(BaseResponse baseResponse, long totalTimeMillis) { + return baseResponse != null && !baseResponse.getCode().equals(ResponseCode.SUCCESS) || totalTimeMillis >= getTimeLimit(); + } + +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/log/InvokeLogAspect.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/log/InvokeLogAspect.java new file mode 100644 index 00000000..a688ae43 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/log/InvokeLogAspect.java @@ -0,0 +1,66 @@ +package com.cgb.bcpinstall.common.log; + + +import com.cgb.bcpinstall.common.annotation.InvokeLog; +import com.cgb.bcpinstall.common.util.RequestIpUtil; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; + +/** + * @program: InvokeLogAspect + * @description: 日志切面处理类 + * @author: Zhun.Xiao + * @create: 2018-10-29 17:01 + **/ + + +@Aspect +@Component +public class InvokeLogAspect extends AbstractPrintLog { + + /* TODO 日志处理 + @Autowired + private LogService logService;*/ + + + @Override + protected void handleLog(ProceedingJoinPoint joinPoint, Object[] args, Object returnObj, long costTime) { + Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); + InvokeLog invokeLog = method.getAnnotation(InvokeLog.class); + + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String ip = RequestIpUtil.getIpAddr(request); + + String params = getParam(args); + + if (invokeLog.persistence()) { + + //TODO 日志持久化方案 + // logService.saveLog(ip, request.getRequestURI(), params, getPrintMsg(true, returnObj)); + } + printLogMsg(invokeLog.name(), invokeLog.description(), invokeLog.printReturn(), joinPoint, args, returnObj, costTime); + } + + // 定义切点Pointcut + @Pointcut("@annotation(com.cgb.bcpinstall.common.annotation.InvokeLog)") + public void excudePointcut() { + } + + + @Around("excudePointcut()") + @Override + public Object execute(ProceedingJoinPoint joinPoint) throws Throwable { + return super.execute(joinPoint); + } + + +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/BaseResponse.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/BaseResponse.java new file mode 100644 index 00000000..c6b9e2c1 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/BaseResponse.java @@ -0,0 +1,87 @@ +package com.cgb.bcpinstall.common.response; + +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.io.Serializable; + +/** + * @program: BaseResponse + * @description: BaseResponse + * @author: Zhun.Xiao + * @create: 2018-10-29 14:20 + **/ +public class BaseResponse implements Serializable { + private static final ResponseCode SUCCESS; + + static { + SUCCESS = ResponseCode.SUCCESS; + } + + @ApiModelProperty(value = "返回码") + private StatusCode code; + @ApiModelProperty(value = "返回消息") + private String msg; + @ApiModelProperty(value = "返回对象") + private T data; + + public BaseResponse() { + this.setCode(SUCCESS); + this.msg = SUCCESS.msg(); + } + + public BaseResponse(T data) { + this(); + this.data = data; + } + + public BaseResponse(T data, String callback) { + this(data); + } + + + public StatusCode getCode() { + return code; + } + + public void setCode(ResponseCode code) { + this.code = code; + this.msg = code.getMsg(); + } + + public String getMsg() { + return this.msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getData() { + return this.data; + } + + public void setData(T data) { + this.data = data; + } + + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("code", code.code()) + .append("msg", msg) + .append("data", data) + .toString(); + } + + + public String toJsonString() { + return "{" + + "\"msg\":\"" + msg + "\"," + + "\"code\":\"" + code.code() + "\"," + + "\"data\":\"" + data + "\"" + + '}'; + } + +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/HttpInstallResponse.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/HttpInstallResponse.java new file mode 100644 index 00000000..6dd8ad81 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/HttpInstallResponse.java @@ -0,0 +1,19 @@ +package com.cgb.bcpinstall.common.response; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class HttpInstallResponse implements Serializable { + private static final long serialVersionUID = -1685537598043940452L; + + public HttpInstallResponse() { + this.code = ResponseCode.SUCCESS.getCode(); + } + + private String code; + private String msg; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/ResponseCode.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/ResponseCode.java new file mode 100644 index 00000000..202fd929 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/ResponseCode.java @@ -0,0 +1,181 @@ +package com.cgb.bcpinstall.common.response; + + +import java.util.HashMap; + +public enum ResponseCode implements StatusCode { + + API_SUCCESS("10000", "接口调用成功"), + API_ERROR_1("10001", "设备IMEI码不存在"), + API_ERROR_2("10002", ""), + API_ERROR_3("10003", ""), + API_ERROR_4("10004", ""), + API_ERROR_5("10005", ""), + API_ERROR_6("10006", ""), + API_ERROR_7("10007", ""), + API_ERROR_8("10008", ""), + + /** + * 系统错误 + */ + SYSTEM_ERROR("20000", "系统开了点小差,请稍后再试"), + + /** + * 参数错误 + */ + PARAM_FAIL("30000", "参数错误"), + + + /** + * 不符合业务处理,抛出的异常代码 + * 所有业务错误码,以4开头添加 + */ + BIZ_FAIL("40000", "业务异常"), + + /** + * 用户不存在 + */ + USER_NOT_EXIST("40001", "用户不存在"), + + NO_STREAM("40002", "无流量记录"), + + REPLICATED("40003", "重复数据"), + + /** + * 登陆成功 + */ + LOGIN_SUCCESS("50000", "登陆成功"), + + /** + * 登陆失败 + */ + LOGIN_FAIL("50001", "登陆失败,用户名或者密码错误"), + + + NO_PERMISSION("50002", "用户无权限"), + + /** + * 退出成功 + */ + LOGOUT_SUCCESS("50003", "退出成功"), + + /** + * 没有Token + */ + NO_TOKEN("50004", "没有Token"), + + /** + * 没有Token + */ + TOKEN_ERROR("50005", "token验证失败"), + + /** + * 密码过期 + */ + LOGIN_OVER_DUE("50006", "密码过期,请修改密码"), + LOGIN_ABOUT_OVER_DUE("50007", "密码即将过期"), + + SSO_LOGIN_FAIL("50008", "单点登录失败"), + + + NO_KEY("50009", "无法获取登录秘钥"), + + /** + * referer风险提示 + */ + REFERER_ERROR("50010", "疑似referer风险,禁止访问"), + + /** + * 执行成功 + */ + SUCCESS("0", "操作成功"), + + /** + * 执行失败 + */ + Fail("1", "操作失败"), + + BOOTING("2", "启动中"), + + /** + * umaa + */ + + UMAA_SUCCESS("0000", "成功"), + UMAA_SYSTEM_ERROR("0001", "系统出现错误请联系管理员"), + UMAA_PARAMS_ERROR("0002", "输入参数有错误"), + UMAA_XML_ERROR("0003", "输入数据有误,不能解析的xml"), + UMAA_EVENTID_ERROR("0004", "输入的EventId有误"), + UMAA_INFO_LACK_ERROR("0005", "必填字段缺失"), + UMAA_NO_DATA_PORCESS_ERROR("0006", "没有需要处理的数据"), + UMAA_NO_TARTET_ERROR("0007", "找不到目标系统"), + UMAA_REPEAT_ERROR("0008", "状态已回写,无需再次处理"), + UMAA_NO_IMP_ERROR("0009", "该交易码对应的逻辑未实现"), + UMAA_TRADE_CODE_ERROR("0010", "请确认交易码是否正确,该交易请求不需要报文体"), + UMAA_UNKOWN_ERROR("0011", "远程校验tokenId失败"); + + + public static HashMap codeMap; + + static { + codeMap = new HashMap() {{ + put(UMAA_SUCCESS.getCode(), UMAA_SUCCESS); + put(UMAA_SYSTEM_ERROR.getCode(), UMAA_SYSTEM_ERROR); + put(UMAA_PARAMS_ERROR.getCode(), UMAA_PARAMS_ERROR); + put(UMAA_XML_ERROR.getCode(), UMAA_XML_ERROR); + put(UMAA_EVENTID_ERROR.getCode(), UMAA_EVENTID_ERROR); + put(UMAA_INFO_LACK_ERROR.getCode(), UMAA_INFO_LACK_ERROR); + put(UMAA_NO_DATA_PORCESS_ERROR.getCode(), UMAA_NO_DATA_PORCESS_ERROR); + put(UMAA_NO_TARTET_ERROR.getCode(), UMAA_NO_TARTET_ERROR); + put(UMAA_REPEAT_ERROR.getCode(), UMAA_REPEAT_ERROR); + put(UMAA_NO_IMP_ERROR.getCode(), UMAA_NO_IMP_ERROR); + put(UMAA_TRADE_CODE_ERROR.getCode(), UMAA_TRADE_CODE_ERROR); + put(UMAA_UNKOWN_ERROR.getCode(), UMAA_UNKOWN_ERROR); + + }}; + } + + private String code; + private String msg; + + ResponseCode(String code, String msg) { + this.code = code; + this.msg = msg; + } + + public static ResponseCode getByCode(String code) { + return ResponseCode.SUCCESS; + } + + public String code() { + return this.code; + } + + public String getCode() { + return this.code; + } + + public String getMsg() { + return this.msg; + } + + public String msg() { + return this.msg; + } + + @Override + public String toString() { + return String.valueOf(this.code); + } + + /** + * 判断是否相等 + * + * @param targetResponseCode + * @return + */ + public Boolean equals(ResponseCode targetResponseCode) { + return (this.code().equals(targetResponseCode.code())); + } + +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/StatusCode.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/StatusCode.java new file mode 100644 index 00000000..342a2c63 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/response/StatusCode.java @@ -0,0 +1,28 @@ +package com.cgb.bcpinstall.common.response; + +import java.io.Serializable; + +/** + * @program: StatusCode + * @description: + * @author: Zhun.Xiao + * @create: 2019-03-19 09:04 + **/ +public interface StatusCode extends Serializable { + + /** + * 状态码 + * + * @return + */ + public T code(); + + /** + * 状态码描述 + * + * @return + */ + public String msg(); + + +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/CacheUtil.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/CacheUtil.java new file mode 100644 index 00000000..56180755 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/CacheUtil.java @@ -0,0 +1,61 @@ +package com.cgb.bcpinstall.common.util; + +import com.cgb.bcpinstall.common.constant.ToolsConstant; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; + +import java.util.concurrent.TimeUnit; + +/** + * @program: CacheUtil + * @description: 服务器本地缓存工具 + * @author: Zhun.Xiao + * @create: 2019-09-08 18:50 + **/ +public class CacheUtil { + + /**############### 登录用户信息维护 #######################**/ + + /** + * cryptogen,configtxgen,configtxlator工具的二进制文件卢金 + */ + private static Cache cacheToolsFilePath = CacheBuilder.newBuilder().build(); + + public static void putCryptogenFilePath(String filepath) { + cacheToolsFilePath.put(ToolsConstant.CRYPTOGEN, filepath); + } + + public static String getCryptogenFilePath() { + try { + return cacheToolsFilePath.getIfPresent(ToolsConstant.CRYPTOGEN); + } catch (Exception e) { + return null; + } + } + + public static void putConfigtxgenFilePath(String filepath) { + cacheToolsFilePath.put(ToolsConstant.CONFIGTXGEN, filepath); + } + + public static String getConfigtxgenFilePath() { + try { + return cacheToolsFilePath.getIfPresent(ToolsConstant.CONFIGTXGEN); + } catch (Exception e) { + return null; + } + } + + public static void putConfigtxlatorFilePath(String filepath) { + cacheToolsFilePath.put(ToolsConstant.CONFIGTXLATOR, filepath); + } + + public static String getConfigtxlatorFilePath() { + try { + return cacheToolsFilePath.getIfPresent(ToolsConstant.CONFIGTXLATOR); + } catch (Exception e) { + return null; + } + } + + +} \ No newline at end of file diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/EPlatform.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/EPlatform.java new file mode 100644 index 00000000..3d432f72 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/EPlatform.java @@ -0,0 +1,37 @@ +package com.cgb.bcpinstall.common.util; + +/** + * 平台 + * @author isea533 + */ +public enum EPlatform { + Any("any"), + Linux("Linux"), + Mac_OS("Mac OS"), + Mac_OS_X("Mac OS X"), + Windows("Windows"), + OS2("OS/2"), + Solaris("Solaris"), + SunOS("SunOS"), + MPEiX("MPE/iX"), + HP_UX("HP-UX"), + AIX("AIX"), + OS390("OS/390"), + FreeBSD("FreeBSD"), + Irix("Irix"), + Digital_Unix("Digital Unix"), + NetWare_411("NetWare"), + OSF1("OSF1"), + OpenVMS("OpenVMS"), + Others("Others"); + + private EPlatform(String desc){ + this.description = desc; + } + + public String toString(){ + return description; + } + + private String description; +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/FileDataChangeUtil.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/FileDataChangeUtil.java new file mode 100644 index 00000000..9a39772d --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/FileDataChangeUtil.java @@ -0,0 +1,64 @@ +package com.cgb.bcpinstall.common.util; + +import org.apache.commons.io.IOUtils; + +import java.io.*; + +public class FileDataChangeUtil { + //从文件中读取文本内容 + public static String getContentFromFile(File file){ + + try{ + return getContentFromInputStream(new FileInputStream(file)); + }catch (Exception e){ + e.printStackTrace(); + } + return "解析文件失败!!!"; + } + + //从数据流中读取文本内容 + public static String getContentFromInputStream(InputStream inputStream){ + try{ + InputStreamReader reader=new InputStreamReader(inputStream,"UTF-8"); + BufferedReader bfreader=new BufferedReader(reader); + String line; + StringBuffer stringBuffer = new StringBuffer(); + while((line=bfreader.readLine())!=null) {//包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null + stringBuffer.append(line+System.getProperty("line.separator")); + } + return stringBuffer.toString(); + }catch (Exception e){ + e.printStackTrace(); + } + return "解析文件失败!!!"; + } + + + //将文件转换成Byte数组 + public static byte[] getBytesFromFile(File file) { + try { + FileInputStream fis = new FileInputStream(file); + ByteArrayOutputStream bos = new ByteArrayOutputStream(100000); + IOUtils.copy(fis, bos); + byte[] data = bos.toByteArray(); + bos.close(); + return data; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static byte[] getBytesFromInputStream(InputStream inputStream){ + try { + ByteArrayOutputStream bos = new ByteArrayOutputStream(100000); + IOUtils.copy(inputStream, bos); + byte[] data = bos.toByteArray(); + bos.close(); + return data; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/FileUtil.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/FileUtil.java new file mode 100644 index 00000000..cacd0bb5 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/FileUtil.java @@ -0,0 +1,620 @@ +package com.cgb.bcpinstall.common.util; + +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; +import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; +import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; +import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Collection; +import java.util.HashMap; +import java.util.UUID; +import java.util.zip.GZIPInputStream; + +public class FileUtil { + public static String createTempPath() { + String tmpPath = System.getProperty("java.io.tmpdir"); + if (!tmpPath.endsWith(File.separator)) { + tmpPath = tmpPath + File.separator; + } + + String rootPath = tmpPath + UUID.randomUUID().toString().replaceAll("-", "") + File.separator; + FileUtil.makeFilePath(rootPath, true); + + return rootPath; + } + + public static boolean writeTxtFile(String content, File fileName, String encoding) { + FileOutputStream o = null; + boolean result = false; + try { + o = new FileOutputStream(fileName, false); + o.write(content.getBytes(encoding)); + result = true; + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (o != null) { + try { + o.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + return result; + } + + public static String getFileContent(String filePath) { + try { + FileInputStream fis = new FileInputStream(filePath); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + + IOUtils.copy(fis, os); + fis.close(); + String content = os.toString(); + os.close(); + + return content; + } catch (Exception e) { + e.printStackTrace(); + } + + return ""; + } + + public static String reviseDir(String dir) { + if (dir.startsWith("../")) { + dir = getUserDir() + dir; + } else if (dir.startsWith("..")) { + dir = getUserDir() + dir + File.separator; + } else if (dir.startsWith("./")) { + dir = dir.replace("./", getUserDir()); + } else if (dir.startsWith(".")) { + dir = dir.replace(".", getUserDir()) + File.separator; + } + + return dir; + } + + public static String getUserDir() { + String dirPath = System.getProperty("user.dir"); + dirPath = pathManipulation(dirPath); + if (!dirPath.endsWith(File.separator)) { + dirPath = dirPath + File.separator; + } + return dirPath; + } + + public static void tarDecompression(String decompressFilePath, String resultDirPath) throws Exception { + TarArchiveInputStream tais = null; + FileInputStream fis = null; + try { + File file = new File(decompressFilePath); + fis = new FileInputStream(file); + tais = new TarArchiveInputStream(fis); + + TarArchiveEntry tae = null; + while ((tae = tais.getNextTarEntry()) != null) { + BufferedOutputStream bos = null; + FileOutputStream fos = null; + try { + String dir = resultDirPath + File.separator + tae.getName();// tar档中文件 + File dirFile = new File(dir); + fos = new FileOutputStream(dirFile); + bos = new BufferedOutputStream(fos); + int count; + byte[] data = new byte[1024]; + while ((count = tais.read(data, 0, 1024)) != -1) { + bos.write(data, 0, count); + } + } finally { + if (bos != null) + bos.close(); + if (fos != null) + fos.close(); + } + } + } finally { + if (tais != null) + tais.close(); + if (fis != null) + fis.close(); + } + } + + public static void tarDecompression(InputStream inputStream, String resultDirPath) throws Exception { + TarArchiveInputStream tais = null; + try { + tais = new TarArchiveInputStream(inputStream); + + TarArchiveEntry tae = null; + while ((tae = tais.getNextTarEntry()) != null) { + BufferedOutputStream bos = null; + FileOutputStream fos = null; + try { + String dir = resultDirPath + File.separator + tae.getName();// tar档中文件 + File dirFile = new File(dir); + fos = new FileOutputStream(dirFile); + bos = new BufferedOutputStream(fos); + int count; + byte[] data = new byte[1024]; + while ((count = tais.read(data, 0, 1024)) != -1) { + bos.write(data, 0, count); + } + } finally { + if (bos != null) + bos.close(); + if (fos != null) + fos.close(); + } + } + } finally { + if (tais != null) + tais.close(); + } + } + + public static boolean tarCompression(String[] filesPathArray, String resultFilePath) throws Exception { + FileOutputStream fos = null; + TarArchiveOutputStream taos = null; + try { + fos = new FileOutputStream(new File(resultFilePath)); + taos = new TarArchiveOutputStream(fos); + for (String filePath : filesPathArray) { + BufferedInputStream bis = null; + FileInputStream fis = null; + try { + File file = new File(filePath); + TarArchiveEntry tae = new TarArchiveEntry(file); + tae.setName(new String(file.getName().getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8)); + taos.putArchiveEntry(tae); + fis = new FileInputStream(file); + bis = new BufferedInputStream(fis); + int count; + byte data[] = new byte[1024]; + while ((count = bis.read(data, 0, 1024)) != -1) { + taos.write(data, 0, count); + } + } finally { + taos.closeArchiveEntry(); + if (bis != null) + bis.close(); + if (fis != null) + fis.close(); + } + } + } finally { + if (taos != null) + taos.close(); + if (fos != null) + fos.close(); + + } + + return true; + } + + public static void gzipCompression(String filePath, String resultFilePath) throws IOException { + InputStream fin = null; + BufferedInputStream bis = null; + FileOutputStream fos = null; + BufferedOutputStream bos = null; + GzipCompressorOutputStream gcos = null; + try { + fin = Files.newInputStream(Paths.get(filePath)); + bis = new BufferedInputStream(fin); + fos = new FileOutputStream(resultFilePath); + bos = new BufferedOutputStream(fos); + gcos = new GzipCompressorOutputStream(bos); + byte[] buffer = new byte[1024]; + int read = -1; + while ((read = bis.read(buffer)) != -1) { + gcos.write(buffer, 0, read); + } + } finally { + if (gcos != null) + gcos.close(); + if (bos != null) + bos.close(); + if (fos != null) + fos.close(); + if (bis != null) + bis.close(); + if (fin != null) + fin.close(); + } + } + + public static void tarGzCompression(String sourcePath, String resultFilePath) throws IOException { + File sourceDirectory = new File(sourcePath); + + FileOutputStream fos = new FileOutputStream(resultFilePath, false); + + TarArchiveOutputStream archiveOutputStream = new TarArchiveOutputStream(new GzipCompressorOutputStream(fos)); + archiveOutputStream.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU); + + try { + Collection childrenFiles = org.apache.commons.io.FileUtils.listFiles(sourceDirectory, null, true); + + ArchiveEntry archiveEntry; + FileInputStream fileInputStream; + for (File childFile : childrenFiles) { + String childPath = childFile.getAbsolutePath(); + String relativePath = FilenameUtils.separatorsToUnix(childPath.substring((sourcePath.length() + 1))); + + relativePath = Utils.combinePaths(sourceDirectory.getName(), relativePath); + + archiveEntry = new TarArchiveEntry(childFile, relativePath); + fileInputStream = new FileInputStream(childFile); + archiveOutputStream.putArchiveEntry(archiveEntry); + + try { + IOUtils.copy(fileInputStream, archiveOutputStream); + } finally { + IOUtils.closeQuietly(fileInputStream); + archiveOutputStream.closeArchiveEntry(); + } + } + } finally { + IOUtils.closeQuietly(archiveOutputStream); + IOUtils.closeQuietly(fos); + } + } + + public static void gzipDecompression(String compressedFilePath, String resultDirPath) throws IOException { + InputStream fin = null; + BufferedInputStream in = null; + OutputStream out = null; + GzipCompressorInputStream gcis = null; + try { + out = Files.newOutputStream(Paths.get(resultDirPath)); + fin = Files.newInputStream(Paths.get(compressedFilePath)); + in = new BufferedInputStream(fin); + gcis = new GzipCompressorInputStream(in); + + IOUtils.copy(gcis, out); + } finally { + if (gcis != null) + gcis.close(); + if (in != null) + in.close(); + if (fin != null) + fin.close(); + if (out != null) + out.close(); + } + } + + public static void gzipDecompression(InputStream inputStream, String resultDirPath) throws IOException { + BufferedInputStream in = null; + OutputStream out = null; + GzipCompressorInputStream gcis = null; + try { + out = Files.newOutputStream(Paths.get(resultDirPath)); + in = new BufferedInputStream(inputStream); + gcis = new GzipCompressorInputStream(in); + final byte[] buffer = new byte[1024]; + int n = 0; + while (-1 != (n = gcis.read(buffer))) { + out.write(buffer, 0, n); + } + } finally { + if (gcis != null) + gcis.close(); + if (in != null) + in.close(); + if (out != null) + out.close(); + } + } + + public static boolean tarGzDecompress(String srcFilePath, String targetPath, boolean renewDestPath) { + FileInputStream is = null; + try { + is = new FileInputStream(srcFilePath); + return tarGzDecompress(is, targetPath, renewDestPath); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } finally { + IOUtils.closeQuietly(is); + } + return false; + } + + public static boolean tarGzDecompress(InputStream inputStream, String targetPath, boolean renewDestPath) { + TarArchiveInputStream tarIn = null; + OutputStream out = null; + GZIPInputStream gzipIn = null; + + String outPath = targetPath; + if (!outPath.endsWith(File.separator)) { + outPath = outPath + File.separator; + } + try { + gzipIn = new GZIPInputStream(inputStream); + tarIn = new TarArchiveInputStream(gzipIn, 1024 * 2); + + // 创建输出目录 + makeFilePath(targetPath, renewDestPath); + + ArchiveEntry entry = null; + while ((entry = tarIn.getNextEntry()) != null) { + if (entry.isDirectory()) { // 是目录 + makeFilePath(outPath + entry.getName(), false); + } else { // 是文件 + File tempFile = new File(outPath + entry.getName()); + makeFilePath(tempFile.getParent() + File.separator, false); + + out = new FileOutputStream(tempFile); + + IOUtils.copy(tarIn, out); + + out.flush(); + } + } + + return true; + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (out != null) { + out.close(); + } + if (tarIn != null) { + tarIn.close(); + } + if (gzipIn != null) { + gzipIn.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + return false; + } + + public static boolean tarGzDecompress(InputStream inputStream, String targetPath, String removePathPrefix) { + TarArchiveInputStream tarIn = null; + OutputStream out = null; + GZIPInputStream gzipIn = null; + + String outPath = targetPath; + if (!outPath.endsWith(File.separator)) { + outPath = outPath + File.separator; + } + try { + gzipIn = new GZIPInputStream(inputStream); + tarIn = new TarArchiveInputStream(gzipIn, 1024 * 2); + + // 创建输出目录 + makeFilePath(targetPath, true); + + ArchiveEntry entry = null; + while ((entry = tarIn.getNextEntry()) != null) { + if (entry.isDirectory()) { // 是目录 + makeFilePath(outPath + entry.getName(), false); + } else { // 是文件 + String entryName = entry.getName(); + if (removePathPrefix != null && removePathPrefix.length() > 0) { + if (entryName.startsWith(removePathPrefix)) { + entryName = entryName.substring(removePathPrefix.length()); + if (entryName.startsWith(File.separator)) { + entryName = entryName.substring(1); + } + } + } + File tempFile = new File(outPath + entryName); + makeFilePath(tempFile.getParent() + File.separator, false); + out = new FileOutputStream(tempFile); + int len = 0; + byte[] b = new byte[2048]; + + while ((len = tarIn.read(b)) != -1) { + out.write(b, 0, len); + } + out.flush(); + } + } + + return true; + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (out != null) { + out.close(); + } + if (tarIn != null) { + tarIn.close(); + } + if (gzipIn != null) { + gzipIn.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + return false; + } + + public static String tarGzGetPathPrefix(InputStream inputStream) { + GZIPInputStream gzipIn = null; + TarArchiveInputStream tarIn = null; + + try { + gzipIn = new GZIPInputStream(inputStream); + tarIn = new TarArchiveInputStream(gzipIn, 1024 * 2); + + ArchiveEntry entry = null; + String relativePath = null; + while ((entry = tarIn.getNextEntry()) != null) { + if (!entry.isDirectory()) { // 是目录 + String entryName = entry.getName(); + String path = entryName.substring(0, entryName.lastIndexOf(File.separator) + 1); + if (relativePath == null) { + relativePath = path; + } else { + int i = 0; + while (i < relativePath.length() && i < path.length()) { + if (relativePath.charAt(i) != path.charAt(i)) { + break; + } + i++; + } + relativePath = relativePath.substring(0, i); + if (!relativePath.endsWith(File.separator)) { + relativePath = relativePath.substring(relativePath.lastIndexOf(File.separator) + 1); + } + } + } + } + + return relativePath; + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (tarIn != null) { + tarIn.close(); + } + if (gzipIn != null) { + gzipIn.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return null; + } + + public static boolean makeFilePath(String filePath, boolean renew) { + File f = new File(filePath); + + if (renew) { + rmFile(f); + } + + if (f.exists()) { + return true; + } + + return f.mkdirs(); + } + + public static boolean rmFile(File file) { + if (!file.exists()) { + return false; + } + + if (file.isDirectory()) { + File[] files = file.listFiles(); + for (File f : files) { + rmFile(f); + } + } + + return file.delete(); + } + + public static String pathManipulation(String path) { + HashMap map = new HashMap(16); + map.put("a", "a"); + map.put("b", "b"); + map.put("c", "c"); + map.put("d", "d"); + map.put("e", "e"); + map.put("f", "f"); + map.put("g", "g"); + map.put("h", "h"); + map.put("i", "i"); + map.put("j", "j"); + map.put("k", "k"); + map.put("l", "l"); + map.put("m", "m"); + map.put("n", "n"); + map.put("o", "o"); + map.put("p", "p"); + map.put("q", "q"); + map.put("r", "r"); + map.put("s", "s"); + map.put("t", "t"); + map.put("u", "u"); + map.put("v", "v"); + map.put("w", "w"); + map.put("x", "x"); + map.put("y", "y"); + map.put("z", "z"); + + map.put("A", "A"); + map.put("B", "B"); + map.put("C", "C"); + map.put("D", "D"); + map.put("E", "E"); + map.put("F", "F"); + map.put("G", "G"); + map.put("H", "H"); + map.put("I", "I"); + map.put("J", "J"); + map.put("K", "K"); + map.put("L", "L"); + map.put("M", "M"); + map.put("N", "N"); + map.put("O", "O"); + map.put("P", "P"); + map.put("Q", "Q"); + map.put("R", "R"); + map.put("S", "S"); + map.put("T", "T"); + map.put("U", "U"); + map.put("V", "V"); + map.put("W", "W"); + map.put("X", "X"); + map.put("Y", "Y"); + map.put("Z", "Z"); + + map.put(":", ":"); + map.put("/", "/"); + map.put("\\", "\\"); + map.put(".", "."); + map.put("-", "-"); + map.put("_", "_"); + map.put("~", "~"); + + map.put("0", "0"); + map.put("1", "1"); + map.put("2", "2"); + map.put("3", "3"); + map.put("4", "4"); + map.put("5", "5"); + map.put("6", "6"); + map.put("7", "7"); + map.put("8", "8"); + map.put("9", "9"); + + StringBuilder temp = new StringBuilder(); + for (int i = 0; i < path.length(); i++) { + if (map.get(path.charAt(i) + "") != null) { + temp.append(map.get(path.charAt(i) + "")); + } + } + return temp.toString(); + + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/HttpClientUtil.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/HttpClientUtil.java new file mode 100644 index 00000000..ab7bfa88 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/HttpClientUtil.java @@ -0,0 +1,481 @@ +package com.cgb.bcpinstall.common.util; + +import com.cgb.bcpinstall.common.exception.DownloadFileException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.apache.http.*; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.HttpRequestRetryHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.config.Registry; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.ConnectTimeoutException; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.entity.mime.content.StringBody; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.protocol.HTTP; +import org.apache.http.protocol.HttpContext; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +import javax.annotation.PostConstruct; +import java.io.*; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * class_name: HttpClientUtil + * package: com.cgb.dp.common.util + * describe: Http工具类 + * + * @author: zhun.xiao + * @date: 2017/11/25 + * @time: 13:23 + **/ +@Slf4j +@Component("httpClient") +public class HttpClientUtil { + public static final String CONFIG_KEY_HTTP = "httpClient"; + public static final int HTTP_SUCCESS = 200; + private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientUtil.class); + private static final int RETRY_TIME = 3; + + // private static HttpClient client = null; + private static CloseableHttpClient client = null; + private RequestConfig config; + + @Autowired + private Environment env; + + @Value("${httpClient.poolSize}") + private String poolSize; + + @Value("${httpClient.socketTimeout}") + private String socketTimeout; + + @Value("${httpClient.connectTimeout}") + private String connectTimeout; + + @Value("${httpClient.connectionRequestTimeout}") + private String connectionRequestTimeout; + + @Value("${httpClient.defaultMaxPerRoute}") + private String defaultMaxPerRoute; + + /*static class MyTM implements TrustManager, X509TrustManager { + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + + public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) { + return true; + } + + public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) { + return true; + } + + public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { + } + + public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { + } + }*/ + + @PostConstruct + private void init() { + try { + int poolsize = Integer.parseInt(this.poolSize); + int socketTimeout = Integer.parseInt(this.socketTimeout); + int connectTimeout = Integer.parseInt(this.connectTimeout); + int connectionRequestTimeout = Integer.parseInt(this.connectionRequestTimeout); + int defaultMaxPerRoute = Integer.parseInt(this.defaultMaxPerRoute); + + LOGGER.info("HttpClientUtil init. poolsize:{}, socketTimeout:{}, connectTimeout:{}, connectionRequestTimeout:{}, defaultMaxPerRoute:{}", + poolsize, socketTimeout, connectTimeout, + connectionRequestTimeout, defaultMaxPerRoute); + + //TrustManager[] trustAllCerts = { new MyTM() }; + + //SSLContext sc = SSLContext.getInstance("SSL"); + // sc.init(null, trustAllCerts, null); + + Registry socketFactoryRegistry = RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.INSTANCE) + //.register("https", new SSLConnectionSocketFactory(sc)) + .build(); + + /* HostnameVerifier hv = (urlHostName, session) -> { + LOGGER.info("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost()); + return true; + };*/ + + config = RequestConfig.custom() + .setSocketTimeout(socketTimeout) + .setConnectTimeout(connectTimeout) + .setConnectionRequestTimeout(connectionRequestTimeout) + .build(); + + PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry); + cm.setMaxTotal(poolsize); + cm.setDefaultMaxPerRoute(defaultMaxPerRoute); + + client = HttpClients.custom() + .setConnectionManager(cm) + .setDefaultRequestConfig(config) + //.setSSLHostnameVerifier(hv) + .build(); + } catch (Exception e) { + log.error("初始化http client异常", e); + e.printStackTrace(); + } + } + + /** + * GET提交方式 + * + * @param url + * @param params + * @return + */ + public String doGet(String url, Map params) { + String apiUrl = url; + StringBuffer param = new StringBuffer(); + CloseableHttpResponse response = null; + int i = 0; + for (String key : params.keySet()) { + if (i == 0) { + param.append("?"); + } else { + param.append("&"); + } + + param.append(key).append("=").append(params.get(key)); + i++; + } + apiUrl += param; + String result = ""; + HttpGet httpPost = new HttpGet(apiUrl); + try { + response = client.execute(httpPost); + int statusCode = response.getStatusLine().getStatusCode(); + if (HTTP_SUCCESS != statusCode) { + return result; + } + HttpEntity entity = response.getEntity(); + if (entity != null) { + result = EntityUtils.toString(entity); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + httpPost.abort(); + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + log.error(e.toString()); + } + } + return result; + } + + /** + * post提交表单,http参数是表单Form参数 + * + * @param url + * @param map + * @param retry 是否重试,true时候,发送失败后重试, + * @return + * @throws ClientProtocolException + * @throws IOException + */ + public String postForm(String url, Map map, boolean retry) + throws ClientProtocolException, IOException { + Assert.notNull(url, "Error posting data, url is null."); + return postInner(retry, parseHttpPost(url, getPostParams(map))); + } + + /** + * post提交表单,http参数是 Json参数 + * + * @param url + * @param json + * @param retry + * @return + * @throws ClientProtocolException + * @throws IOException + */ + public String postJson(String url, String json, boolean retry) + throws ClientProtocolException, IOException { + Assert.notNull(url, "Error posting data, url is null."); + HttpPost parsedHttpPost = parseHttpPost(url, getPostParams(json)); + parsedHttpPost.addHeader("Content-Type", "application/json"); + return postInner(retry, parsedHttpPost); + } + + /** + * 直接返回CloseableHttpResponse + * + * @param url + * @param json + * @return + * @throws IOException + */ + public CloseableHttpResponse post(String url, String json) throws IOException { + HttpPost httpPost = new HttpPost(url); + if (json != null) { + httpPost.setEntity(getPostParams(json)); + } + + return client.execute(httpPost); + } + + /** + * 直接返回CloseableHttpResponse + * + * @param url + * @param params + * @return + * @throws IOException + */ + public CloseableHttpResponse get(String url, Map params) throws IOException { + String apiUrl = url; + StringBuffer param = new StringBuffer(); + CloseableHttpResponse response = null; + int i = 0; + for (String key : params.keySet()) { + if (i == 0) { + param.append("?"); + } else { + param.append("&"); + } + + param.append(key).append("=").append(params.get(key)); + i++; + } + apiUrl += param; + + HttpGet httpPost = new HttpGet(apiUrl); + return client.execute(httpPost); + } + + private String postInner(boolean retry, HttpPost httpPost) throws IOException { + // HttpResponse response = null; + CloseableHttpResponse response = null; + try { + // CloseableHttpClient httpClient = getHttpClient(retry); + response = client.execute(httpPost); + if (response.getStatusLine().getStatusCode() != HTTP_SUCCESS) { +// httpPost.abort(); + return null; + } + HttpEntity entity = response.getEntity(); + String result = EntityUtils.toString(entity, Consts.UTF_8); + EntityUtils.consume(entity); + return result; + } finally { + httpPost.abort(); + // httpPost.releaseConnection(); + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + log.error(e.toString()); + } + } + } + + private HttpPost parseHttpPost(String url, HttpEntity postParams) { + HttpPost httpPost = new HttpPost(url); + // httpPost.setConfig(getConfig()); + httpPost.setEntity(postParams); + return httpPost; + } + + private HttpEntity getPostParams(Map params) { + if (params == null || params.size() == 0) { + return null; + } + List nvps = new ArrayList(); + Set keySet = params.keySet(); + for (String key : keySet) { + nvps.add(new BasicNameValuePair(key, params.get(key).toString())); + } + return new UrlEncodedFormEntity(nvps, Consts.UTF_8); + } + + public HttpEntity getPostParams(String params) { + return new StringEntity(params, Consts.UTF_8); + } + + public void downloadFile(String url, String localFilePath) throws DownloadFileException { + OutputStream out = null; + InputStream in = null; + + try { + HttpGet httpGet = new HttpGet(url); + HttpResponse httpResponse = client.execute(httpGet); + HttpEntity entity = httpResponse.getEntity(); + + in = entity.getContent(); + + if (!entity.getContentType().getValue().equalsIgnoreCase("application/octet-stream")) { + out = new ByteArrayOutputStream(); + IOUtils.copy(in, out); + + throw new DownloadFileException(out.toString(), "下载文件失败"); + } + + File file = new File(localFilePath); + out = new FileOutputStream(file, false); + IOUtils.copy(in, out); + out.flush(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + IOUtils.closeQuietly(in); + IOUtils.closeQuietly(out); + } + } + + public String uploadFile(String url, String filePath) { + try { + MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create(); + File file = new File(filePath); + + multipartEntityBuilder.addBinaryBody("file", file); + + HttpEntity httpEntity = multipartEntityBuilder.build(); + + HttpPost httpPost = new HttpPost(url); + httpPost.setEntity(httpEntity); + + HttpResponse httpResponse = client.execute(httpPost); + HttpEntity responseEntity = httpResponse.getEntity(); + int statusCode= httpResponse.getStatusLine().getStatusCode(); + if (statusCode == 200) { + String result = EntityUtils.toString(responseEntity, Consts.UTF_8); + EntityUtils.consume(responseEntity); + + return result; + } + } catch (IOException e) { + log.error(String.format("上传文件 %s 到 %s 异常", filePath, url)); + e.printStackTrace(); + } + + return ""; + } + + public String sendFileAndJson(String url, String filePath, String jsonContent) { + try { + MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create(); + + if (!StringUtils.isEmpty(filePath)) { + File file = new File(filePath); + if (file.exists() && file.isFile()) { + multipartEntityBuilder.addBinaryBody("file", file); + } + } + + if (!StringUtils.isEmpty(jsonContent)) { + multipartEntityBuilder.addTextBody("content", jsonContent, ContentType.APPLICATION_JSON); + } + + HttpEntity httpEntity = multipartEntityBuilder.build(); + + HttpPost httpPost = new HttpPost(url); + httpPost.setEntity(httpEntity); + + HttpResponse httpResponse = client.execute(httpPost); + HttpEntity responseEntity = httpResponse.getEntity(); + int statusCode= httpResponse.getStatusLine().getStatusCode(); + if (statusCode == 200) { + String result = EntityUtils.toString(responseEntity, Consts.UTF_8); + EntityUtils.consume(responseEntity); + + return result; + } + } catch (Exception e) { + log.error(String.format("发送文件 %s 到 %s 异常", filePath, url)); + e.printStackTrace(); + } + + return ""; + } + + class RetryHandler implements HttpRequestRetryHandler { + @Override + public boolean retryRequest(IOException exception, int executionCount, + HttpContext context) { + System.out.println(executionCount); + if (executionCount >= RETRY_TIME) { + // Do not retry if over max retry count + + return false; + } + if (exception instanceof InterruptedIOException) { + // Timeout + return false; + } + if (exception instanceof UnknownHostException) { + // Unknown host + return false; + } + if (exception instanceof ConnectTimeoutException) { + // Connection refused + return false; + } + /* if (exception instanceof SSLException) { + // SSL handshake exception + return false; + }*/ + + HttpClientContext clientContext = HttpClientContext.adapt(context); + HttpRequest request = clientContext.getRequest(); + + // 增加日志,便于确认是否重试 + + + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(" retryCount = " + executionCount); + } + + boolean idempotent = !(request instanceof HttpEntityEnclosingRequest); + if (idempotent) { + // Retry if the request is considered idempotent + return true; + } + return false; + } + + } + +} \ No newline at end of file diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/NetUtil.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/NetUtil.java new file mode 100644 index 00000000..6addcd7b --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/NetUtil.java @@ -0,0 +1,62 @@ +package com.cgb.bcpinstall.common.util; + +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + +public class NetUtil { + + public static List getLocalIPList() { + List ipList = new ArrayList<>(); + + try { + Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces(); + NetworkInterface networkInterface; + Enumeration inetAddresses; + InetAddress inetAddress; + String ip; + while (networkInterfaces.hasMoreElements()) { + networkInterface = networkInterfaces.nextElement(); + if (networkInterface.getName().toLowerCase().contains("docker") + || networkInterface.getDisplayName().toLowerCase().contains("docker") +// || networkInterface.getName().startsWith("lo") + || networkInterface.getName().startsWith("vmnet") + || networkInterface.getName().startsWith("br-")) { + continue; + } + inetAddresses = networkInterface.getInetAddresses(); + while (inetAddresses.hasMoreElements()) { + inetAddress = inetAddresses.nextElement(); + if (inetAddress != null && inetAddress instanceof Inet4Address) { // IPV4 + ip = inetAddress.getHostAddress(); + ipList.add(ip); + } + } + } + } catch (SocketException e) { + e.printStackTrace(); + } + + return ipList; + } + + public static String getMyNormalIP() { + List ipList = NetUtil.getLocalIPList(); + for (String ip : ipList) { + if (!"127.0.0.1".equalsIgnoreCase(ip)) { + return ip; + } + } + + return null; + } + + public static boolean ipIsMine(String ip) { + List ipList = NetUtil.getLocalIPList(); + return ipList.stream().anyMatch(s -> s.equalsIgnoreCase(ip)); + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/OSinfo.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/OSinfo.java new file mode 100644 index 00000000..0afbb314 --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/OSinfo.java @@ -0,0 +1,141 @@ +package com.cgb.bcpinstall.common.util; + +/** + * 操作系统类: + * 获取System.getProperty("os.name")对应的操作系统 + * @author isea533 + */ +public class OSinfo { + + private static String OS = System.getProperty("os.name").toLowerCase(); + + private static OSinfo _instance = new OSinfo(); + + private EPlatform platform; + + private OSinfo(){} + + public static boolean isLinux(){ + return OS.indexOf("linux")>=0; + } + + public static boolean isMacOS(){ + return OS.indexOf("mac")>=0&&OS.indexOf("os")>0&&OS.indexOf("x")<0; + } + + public static boolean isMacOSX(){ + return OS.indexOf("mac")>=0&&OS.indexOf("os")>0&&OS.indexOf("x")>0; + } + + public static boolean isWindows(){ + return OS.indexOf("windows")>=0; + } + + public static boolean isOS2(){ + return OS.indexOf("os/2")>=0; + } + + public static boolean isSolaris(){ + return OS.indexOf("solaris")>=0; + } + + public static boolean isSunOS(){ + return OS.indexOf("sunos")>=0; + } + + public static boolean isMPEiX(){ + return OS.indexOf("mpe/ix")>=0; + } + + public static boolean isHPUX(){ + return OS.indexOf("hp-ux")>=0; + } + + public static boolean isAix(){ + return OS.indexOf("aix")>=0; + } + + public static boolean isOS390(){ + return OS.indexOf("os/390")>=0; + } + + public static boolean isFreeBSD(){ + return OS.indexOf("freebsd")>=0; + } + + public static boolean isIrix(){ + return OS.indexOf("irix")>=0; + } + + public static boolean isDigitalUnix(){ + return OS.indexOf("digital")>=0&&OS.indexOf("unix")>0; + } + + public static boolean isNetWare(){ + return OS.indexOf("netware")>=0; + } + + public static boolean isOSF1(){ + return OS.indexOf("osf1")>=0; + } + + public static boolean isOpenVMS(){ + return OS.indexOf("openvms")>=0; + } + + /** + * 获取操作系统名字 + * @return 操作系统名 + */ + public static EPlatform getOSname(){ + if(isAix()){ + _instance.platform = EPlatform.AIX; + }else if (isDigitalUnix()) { + _instance.platform = EPlatform.Digital_Unix; + }else if (isFreeBSD()) { + _instance.platform = EPlatform.FreeBSD; + }else if (isHPUX()) { + _instance.platform = EPlatform.HP_UX; + }else if (isIrix()) { + _instance.platform = EPlatform.Irix; + }else if (isLinux()) { + _instance.platform = EPlatform.Linux; + }else if (isMacOS()) { + _instance.platform = EPlatform.Mac_OS; + }else if (isMacOSX()) { + _instance.platform = EPlatform.Mac_OS_X; + }else if (isMPEiX()) { + _instance.platform = EPlatform.MPEiX; + }else if (isNetWare()) { + _instance.platform = EPlatform.NetWare_411; + }else if (isOpenVMS()) { + _instance.platform = EPlatform.OpenVMS; + }else if (isOS2()) { + _instance.platform = EPlatform.OS2; + }else if (isOS390()) { + _instance.platform = EPlatform.OS390; + }else if (isOSF1()) { + _instance.platform = EPlatform.OSF1; + }else if (isSolaris()) { + _instance.platform = EPlatform.Solaris; + }else if (isSunOS()) { + _instance.platform = EPlatform.SunOS; + }else if (isWindows()) { + _instance.platform = EPlatform.Windows; + }else{ + _instance.platform = EPlatform.Others; + } + return _instance.platform; + } + /** + * @param args + */ + public static void main(String[] args) { + System.out.println(OSinfo.getOSname()); + System.out.println("isWindows:"+OSinfo.isWindows()); + System.out.println("isLinux"+OSinfo.isLinux()); + System.out.println("isMacOS:"+OSinfo.isMacOS()); + System.out.println("isMacOSX:"+OSinfo.isMacOSX()); + } + +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/ProcessUtil.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/ProcessUtil.java new file mode 100644 index 00000000..a46c3f3c --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/ProcessUtil.java @@ -0,0 +1,83 @@ +package com.cgb.bcpinstall.common.util; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class ProcessUtil { + + public static Result execCmd(String cmd, String[] envp, String workingDir) throws Exception { + Process process = null; + try { + process = Runtime.getRuntime().exec(cmd, envp, new File(workingDir)); + CmdStreamReader err = new CmdStreamReader(process.getErrorStream()); + CmdStreamReader out = new CmdStreamReader(process.getInputStream()); + err.start(); + out.start(); + int exitCode = process.waitFor(); + String errMessage = err.getMessage(); + String outMessage = out.getMessage(); + if (exitCode == 0) { + return new Result(exitCode, outMessage); + } else { + return new Result(exitCode, StringUtils.isEmpty(errMessage) ? outMessage : errMessage); + } + } finally { + if (process != null) { + process.destroy(); + } + } + } + + @Data + @AllArgsConstructor + public static class Result { + /** + * 返回码,0:正常,其他:异常 + */ + public int code; + /** + * 返回结果 + */ + public String data; + } + + public static class CmdStreamReader extends Thread { + private InputStream input; + private List lines = new ArrayList(); + public CmdStreamReader(InputStream input) { + this.input = input; + setDaemon(true); + setName("process stream reader"); + } + + @Override + public void run() { + BufferedReader reader = new BufferedReader(new InputStreamReader(input)); + try { + do { + String line = reader.readLine(); + if (line != null) { + log.info(line); + this.lines.add(line); + } else { + return; + } + } while (true); + } catch (IOException e) { + log.warn(e.getMessage()); + //e.printStackTrace(); + } + } + + public String getMessage() { + return StringUtils.join(this.lines, "\r\n"); + } + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/RequestIpUtil.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/RequestIpUtil.java new file mode 100644 index 00000000..5ff7b90b --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/RequestIpUtil.java @@ -0,0 +1,45 @@ +package com.cgb.bcpinstall.common.util; + + +import javax.servlet.http.HttpServletRequest; + +import static com.cgb.bcpinstall.common.constant.LoginConstant.*; + + +/** + * class_name: RequestIpUtil + * package: com.midea.mobile.uom.common.util + * describe: 获取请求IP + * + * @author: zhun.xiao + * @date: 2017/12/15 + * @time: 18:11 + **/ +public class RequestIpUtil { + + /** + * 获取IP地址,经过F5负载均衡、代理IP等服务器后的真实IP + * + * @param request 请求 + * @return String 真实的ip地址 + */ + public static String getIpAddr(HttpServletRequest request) { + if (request == null) { + return UNKNOWN; + } + String ip = request.getHeader(X_REAL_IP); + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader(X_FORWARDED_FOR); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader(PROXY_CLIENT_IP); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader(WL_PROXY_CLIENT_IP); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return ip; + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/SpringUtil.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/SpringUtil.java new file mode 100644 index 00000000..6571e3fd --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/SpringUtil.java @@ -0,0 +1,41 @@ +package com.cgb.bcpinstall.common.util; + +import org.springframework.context.ApplicationContext; + +/** + * @author tyrantxz + * @create 2017-11-13-11:27 + */ + +public class SpringUtil { + + private static ApplicationContext applicationContext = null; + + public static void setApplicationContext(ApplicationContext applicationContext){ + if(SpringUtil.applicationContext == null){ + SpringUtil.applicationContext = applicationContext; + } + + } + + //获取applicationContext + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + //通过name获取 Bean. + public static Object getBean(String name){ + return getApplicationContext().getBean(name); + + } + + //通过class获取Bean. + public static T getBean(Class clazz){ + return getApplicationContext().getBean(clazz); + } + + //通过name,以及Clazz返回指定的Bean + public static T getBean(String name,Class clazz){ + return getApplicationContext().getBean(name, clazz); + } +} diff --git a/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/Utils.java b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/Utils.java new file mode 100644 index 00000000..57d344ab --- /dev/null +++ b/distributed-deploy/bcp-install-common/src/main/java/com/cgb/bcpinstall/common/util/Utils.java @@ -0,0 +1,273 @@ +package com.cgb.bcpinstall.common.util; + +import com.google.common.io.ByteStreams; +import io.netty.util.internal.StringUtil; +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; +import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.*; +import java.net.URI; +import java.nio.file.FileVisitOption; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.SecureRandom; +import java.util.Collection; +import java.util.Comparator; +import java.util.Properties; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.lang.String.format; +import static org.apache.commons.codec.binary.Hex.encodeHexString; + +public final class Utils { + private static final Log logger = LogFactory.getLog(Utils.class); + + private static final boolean TRACE_ENABED = logger.isTraceEnabled(); + + /** + * Compress the contents of given directory using Tar and Gzip to an in-memory byte array. + * + * @param sourceDirectory the source directory. + * @param pathPrefix a path to be prepended to every file name in the .tar.gz output, or {@code null} if no prefix is required. + * @param chaincodeMetaInf + * @return the compressed directory contents. + * @throws IOException + */ + public static byte[] generateTarGz(File sourceDirectory, String pathPrefix, File chaincodeMetaInf) throws IOException { + logger.trace(format("generateTarGz: sourceDirectory: %s, pathPrefix: %s, chaincodeMetaInf: %s", + sourceDirectory == null ? "null" : sourceDirectory.getAbsolutePath(), pathPrefix, + chaincodeMetaInf == null ? "null" : chaincodeMetaInf.getAbsolutePath())); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(4 * 1024); + + String sourcePath = sourceDirectory.getAbsolutePath(); + + TarArchiveOutputStream archiveOutputStream = new TarArchiveOutputStream(new GzipCompressorOutputStream(bos)); + archiveOutputStream.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU); + + try { + Collection childrenFiles = org.apache.commons.io.FileUtils.listFiles(sourceDirectory, null, true); + + ArchiveEntry archiveEntry; + FileInputStream fileInputStream; + for (File childFile : childrenFiles) { + String childPath = childFile.getAbsolutePath(); + String relativePath = childPath.substring((sourcePath.length() + 1), childPath.length()); + + if (pathPrefix != null) { + relativePath = Utils.combinePaths(pathPrefix, relativePath); + } + + relativePath = FilenameUtils.separatorsToUnix(relativePath); + + if (TRACE_ENABED) { + logger.trace(format("generateTarGz: Adding '%s' entry from source '%s' to archive.", relativePath, childFile.getAbsolutePath())); + } + + archiveEntry = new TarArchiveEntry(childFile, relativePath); + fileInputStream = new FileInputStream(childFile); + archiveOutputStream.putArchiveEntry(archiveEntry); + + try { + IOUtils.copy(fileInputStream, archiveOutputStream); + } finally { + IOUtils.closeQuietly(fileInputStream); + archiveOutputStream.closeArchiveEntry(); + } + + } + + if (null != chaincodeMetaInf) { + childrenFiles = org.apache.commons.io.FileUtils.listFiles(chaincodeMetaInf, null, true); + + final URI metabase = chaincodeMetaInf.toURI(); + + for (File childFile : childrenFiles) { + + final String relativePath = Paths.get("META-INF", metabase.relativize(childFile.toURI()).getPath()).toString(); + + if (TRACE_ENABED) { + logger.trace(format("generateTarGz: Adding '%s' entry from source '%s' to archive.", relativePath, childFile.getAbsolutePath())); + } + + archiveEntry = new TarArchiveEntry(childFile, relativePath); + fileInputStream = new FileInputStream(childFile); + archiveOutputStream.putArchiveEntry(archiveEntry); + + try { + IOUtils.copy(fileInputStream, archiveOutputStream); + } finally { + IOUtils.closeQuietly(fileInputStream); + archiveOutputStream.closeArchiveEntry(); + } + + } + + } + } finally { + IOUtils.closeQuietly(archiveOutputStream); + } + + return bos.toByteArray(); + } + + /** + * Read the contents a file. + * + * @param input source file to read. + * @return contents of the file. + * @throws IOException + */ + public static byte[] readFile(File input) throws IOException { + return Files.readAllBytes(Paths.get(input.getAbsolutePath())); + } + + /** + * Generate a v4 UUID + * + * @return String representation of {@link UUID} + */ + public static String generateUUID() { + return UUID.randomUUID().toString(); + } + + /** + * Delete a file or directory + * + * @param file {@link File} representing file or directory + * @throws IOException + */ + public static void deleteFileOrDirectory(File file) throws IOException { + if (file.exists()) { + if (file.isDirectory()) { + Path rootPath = Paths.get(file.getAbsolutePath()); + + Files.walk(rootPath, FileVisitOption.FOLLOW_LINKS) + .sorted(Comparator.reverseOrder()) + .map(Path::toFile) + .forEach(File::delete); + } else { + file.delete(); + } + } else { + throw new RuntimeException("File or directory does not exist"); + } + } + + /** + * Combine two or more paths + * + * @param first parent directory path + * @param other children + * @return combined path + */ + public static String combinePaths(String first, String... other) { + return Paths.get(first, other).toString(); + } + + /** + * Read a file from classpath + * + * @param fileName + * @return byte[] data + * @throws IOException + */ + public static byte[] readFileFromClasspath(String fileName) throws IOException { + InputStream is = Utils.class.getClassLoader().getResourceAsStream(fileName); + byte[] data = ByteStreams.toByteArray(is); + try { + is.close(); + } catch (IOException ex) { + } + return data; + } + + public static Properties parseGrpcUrl(String url) { + if (StringUtil.isNullOrEmpty(url)) { + throw new RuntimeException("URL cannot be null or empty"); + } + + Properties props = new Properties(); + Pattern p = Pattern.compile("([^:]+)[:]//([^:]+)[:]([0-9]+)", Pattern.CASE_INSENSITIVE); + Matcher m = p.matcher(url); + if (m.matches()) { + props.setProperty("protocol", m.group(1)); + props.setProperty("host", m.group(2)); + props.setProperty("port", m.group(3)); + + String protocol = props.getProperty("protocol"); + if (!"grpc".equals(protocol) && !"grpcs".equals(protocol)) { + throw new RuntimeException(format("Invalid protocol expected grpc or grpcs and found %s.", protocol)); + } + } else { + throw new RuntimeException("URL must be of the format protocol://host:port. Found: '" + url + "'"); + } + + // TODO: allow all possible formats of the URL + return props; + } + + /** + * Check if the strings Grpc url is valid + * + * @param url + * @return Return the exception that indicates the error or null if ok. + */ + public static Exception checkGrpcUrl(String url) { + try { + + parseGrpcUrl(url); + return null; + + } catch (Exception e) { + return e; + } + } + + /** + * Check if a string is null or empty. + * + * @param url the string to test. + * @return {@code true} if the string is null or empty; otherwise {@code false}. + */ + public static boolean isNullOrEmpty(String url) { + return url == null || url.isEmpty(); + } + + private static final int NONONCE_LENGTH = 24; + + private static final SecureRandom RANDOM = new SecureRandom(); + + public static byte[] generateNonce() { + + byte[] values = new byte[NONONCE_LENGTH]; + RANDOM.nextBytes(values); + + return values; + } + + public static String toHexString(byte[] bytes) { + if (bytes == null) { + return null; + } + + return encodeHexString(bytes); + + } + + /** + * Private constructor to prevent instantiation. + */ + private Utils() { + } + +} diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/annotation/InvokeLog.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/annotation/InvokeLog.class new file mode 100644 index 00000000..bd0c5ae8 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/annotation/InvokeLog.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/constant/DateConstant.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/constant/DateConstant.class new file mode 100644 index 00000000..d3f2501e Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/constant/DateConstant.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/constant/LoginConstant.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/constant/LoginConstant.class new file mode 100644 index 00000000..0b05764e Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/constant/LoginConstant.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/constant/ToolsConstant.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/constant/ToolsConstant.class new file mode 100644 index 00000000..eb8a740a Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/constant/ToolsConstant.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/context/RequestContextHandler$UnitTest.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/context/RequestContextHandler$UnitTest.class new file mode 100644 index 00000000..24a6816d Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/context/RequestContextHandler$UnitTest.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/context/RequestContextHandler.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/context/RequestContextHandler.class new file mode 100644 index 00000000..5458e5bc Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/context/RequestContextHandler.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/BaseEntity.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/BaseEntity.class new file mode 100644 index 00000000..150f98e3 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/BaseEntity.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/DiffHostConfigs.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/DiffHostConfigs.class new file mode 100644 index 00000000..67cc935f Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/DiffHostConfigs.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/EndCmd.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/EndCmd.class new file mode 100644 index 00000000..0eaf43e2 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/EndCmd.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/InstallCmd.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/InstallCmd.class new file mode 100644 index 00000000..31814949 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/InstallCmd.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/InstallResult.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/InstallResult.class new file mode 100644 index 00000000..efb8e4ea Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/InstallResult.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/InstallStatusEnum.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/InstallStatusEnum.class new file mode 100644 index 00000000..cf596cff Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/InstallStatusEnum.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/OSEnum.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/OSEnum.class new file mode 100644 index 00000000..d6b64a6b Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/OSEnum.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/RemoveCmd.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/RemoveCmd.class new file mode 100644 index 00000000..987e4d46 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/RemoveCmd.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/RoleEnum.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/RoleEnum.class new file mode 100644 index 00000000..a79e0fb6 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/RoleEnum.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/RoleRegEntity.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/RoleRegEntity.class new file mode 100644 index 00000000..5c170035 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/RoleRegEntity.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/ServerEntity.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/ServerEntity.class new file mode 100644 index 00000000..ed9b9499 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/ServerEntity.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/UpdateCmd.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/UpdateCmd.class new file mode 100644 index 00000000..aeec0efa Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/UpdateCmd.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/UpdateReasonEnum.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/UpdateReasonEnum.class new file mode 100644 index 00000000..eab5473d Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/UpdateReasonEnum.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/init/InitConfigEntity.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/init/InitConfigEntity.class new file mode 100644 index 00000000..1c348da0 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/entity/init/InitConfigEntity.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/exception/DownloadFileException.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/exception/DownloadFileException.class new file mode 100644 index 00000000..072b7aae Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/exception/DownloadFileException.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/BaseFastJsonConfig.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/BaseFastJsonConfig.class new file mode 100644 index 00000000..f8f1cebd Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/BaseFastJsonConfig.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/CustomSerializeConfig.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/CustomSerializeConfig.class new file mode 100644 index 00000000..9d36146b Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/CustomSerializeConfig.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/JodaTimeDeserializer.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/JodaTimeDeserializer.class new file mode 100644 index 00000000..f3c27a67 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/JodaTimeDeserializer.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/StatusCodeDeserializer.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/StatusCodeDeserializer.class new file mode 100644 index 00000000..5355c5be Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/StatusCodeDeserializer.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/StatusCodeSerializer.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/StatusCodeSerializer.class new file mode 100644 index 00000000..b724e2cb Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/fastJson/StatusCodeSerializer.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/log/AbstractPrintLog.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/log/AbstractPrintLog.class new file mode 100644 index 00000000..672f2b34 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/log/AbstractPrintLog.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/log/InvokeLogAspect.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/log/InvokeLogAspect.class new file mode 100644 index 00000000..04e88246 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/log/InvokeLogAspect.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/BaseResponse.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/BaseResponse.class new file mode 100644 index 00000000..e43b1474 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/BaseResponse.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/HttpInstallResponse.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/HttpInstallResponse.class new file mode 100644 index 00000000..33b75f20 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/HttpInstallResponse.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/ResponseCode$1.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/ResponseCode$1.class new file mode 100644 index 00000000..fb3f544e Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/ResponseCode$1.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/ResponseCode.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/ResponseCode.class new file mode 100644 index 00000000..47e337ad Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/ResponseCode.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/StatusCode.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/StatusCode.class new file mode 100644 index 00000000..6571eb3d Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/response/StatusCode.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/CacheUtil.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/CacheUtil.class new file mode 100644 index 00000000..31cbf989 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/CacheUtil.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/EPlatform.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/EPlatform.class new file mode 100644 index 00000000..f2d04dad Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/EPlatform.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/FileDataChangeUtil.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/FileDataChangeUtil.class new file mode 100644 index 00000000..3070771e Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/FileDataChangeUtil.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/FileUtil.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/FileUtil.class new file mode 100644 index 00000000..82ceade4 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/FileUtil.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/HttpClientUtil$RetryHandler.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/HttpClientUtil$RetryHandler.class new file mode 100644 index 00000000..702daeb7 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/HttpClientUtil$RetryHandler.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/HttpClientUtil.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/HttpClientUtil.class new file mode 100644 index 00000000..d0655b6a Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/HttpClientUtil.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/NetUtil.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/NetUtil.class new file mode 100644 index 00000000..d333fbbd Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/NetUtil.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/OSinfo.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/OSinfo.class new file mode 100644 index 00000000..c40002d8 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/OSinfo.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/ProcessUtil$CmdStreamReader.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/ProcessUtil$CmdStreamReader.class new file mode 100644 index 00000000..94551b56 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/ProcessUtil$CmdStreamReader.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/ProcessUtil$Result.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/ProcessUtil$Result.class new file mode 100644 index 00000000..e9d9c903 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/ProcessUtil$Result.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/ProcessUtil.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/ProcessUtil.class new file mode 100644 index 00000000..a658caf5 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/ProcessUtil.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/RequestIpUtil.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/RequestIpUtil.class new file mode 100644 index 00000000..9c60fb41 Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/RequestIpUtil.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/SpringUtil.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/SpringUtil.class new file mode 100644 index 00000000..b192782d Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/SpringUtil.class differ diff --git a/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/Utils.class b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/Utils.class new file mode 100644 index 00000000..c516041a Binary files /dev/null and b/distributed-deploy/bcp-install-common/target/classes/com/cgb/bcpinstall/common/util/Utils.class differ diff --git a/distributed-deploy/bcp-install-main/.classpath b/distributed-deploy/bcp-install-main/.classpath new file mode 100644 index 00000000..39abf1c5 --- /dev/null +++ b/distributed-deploy/bcp-install-main/.classpath @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/distributed-deploy/bcp-install-main/.factorypath b/distributed-deploy/bcp-install-main/.factorypath new file mode 100644 index 00000000..1010e792 --- /dev/null +++ b/distributed-deploy/bcp-install-main/.factorypath @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/distributed-deploy/bcp-install-main/.settings/org.eclipse.core.resources.prefs b/distributed-deploy/bcp-install-main/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..839d647e --- /dev/null +++ b/distributed-deploy/bcp-install-main/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/distributed-deploy/bcp-install-main/.settings/org.eclipse.jdt.apt.core.prefs b/distributed-deploy/bcp-install-main/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..dfa4f3ad --- /dev/null +++ b/distributed-deploy/bcp-install-main/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/distributed-deploy/bcp-install-main/.settings/org.eclipse.jdt.core.prefs b/distributed-deploy/bcp-install-main/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..90b69d45 --- /dev/null +++ b/distributed-deploy/bcp-install-main/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,10 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.methodParameters=generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/distributed-deploy/bcp-install-main/.settings/org.eclipse.m2e.core.prefs b/distributed-deploy/bcp-install-main/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 00000000..f897a7f1 --- /dev/null +++ b/distributed-deploy/bcp-install-main/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/distributed-deploy/bcp-install-main/logs/error/2020-01-19.0.log b/distributed-deploy/bcp-install-main/logs/error/2020-01-19.0.log new file mode 100644 index 00000000..cfae67c0 --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/error/2020-01-19.0.log @@ -0,0 +1,3 @@ +2020-01-19 15:53:42.794 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-19 15:55:09.758 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-19 15:56:33.240 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 diff --git a/distributed-deploy/bcp-install-main/logs/error/2020-01-20.0.log b/distributed-deploy/bcp-install-main/logs/error/2020-01-20.0.log new file mode 100644 index 00000000..a6f60be5 --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/error/2020-01-20.0.log @@ -0,0 +1,121 @@ +2020-01-20 16:49:13.130 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 初始化发生异常 +org.yaml.snakeyaml.constructor.ConstructorException: Cannot create property=backendWebsocketPortConfig for JavaBean=com.cgb.bcpinstall.common.entity.init.InitConfigEntity@7bb4ed71 + in 'reader', line 2, column 1: + network: bankunion + ^ +No single argument constructor found for interface java.util.Map : null + in 'reader', line 26, column 3: + backend.bcp.com: 9191 + ^ + + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:270) + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.construct(Constructor.java:149) + at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:309) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObjectNoCheck(BaseConstructor.java:216) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:205) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:164) + at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:148) + at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525) + at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:519) + at com.cgb.bcpinstall.biz.InitializeBiz.parseConfigFile(InitializeBiz.java:105) + at com.cgb.bcpinstall.biz.InitializeBiz.initialize(InitializeBiz.java:52) + at InitTest.testInit(InitTest.java:34) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74) + at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84) + at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) + at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) + at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) + at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) + at org.junit.runner.JUnitCore.run(JUnitCore.java:137) + at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) +Caused by: org.yaml.snakeyaml.error.YAMLException: No single argument constructor found for interface java.util.Map : null + at org.yaml.snakeyaml.constructor.Constructor$ConstructScalar.construct(Constructor.java:371) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObjectNoCheck(BaseConstructor.java:216) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:205) + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:247) + ... 41 common frames omitted +2020-01-20 16:53:51.246 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 初始化发生异常 +org.yaml.snakeyaml.constructor.ConstructorException: Cannot create property=backendWebsocketPortConfig for JavaBean=com.cgb.bcpinstall.common.entity.init.InitConfigEntity@40f1aa95 + in 'reader', line 2, column 1: + network: bankunion + ^ +No single argument constructor found for interface java.util.Map : null + in 'reader', line 26, column 3: + backend.bcp.com: 9191 + ^ + + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:270) + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.construct(Constructor.java:149) + at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:309) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObjectNoCheck(BaseConstructor.java:216) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:205) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:164) + at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:148) + at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525) + at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:519) + at com.cgb.bcpinstall.biz.InitializeBiz.parseConfigFile(InitializeBiz.java:105) + at com.cgb.bcpinstall.biz.InitializeBiz.initialize(InitializeBiz.java:52) + at InitTest.testInit(InitTest.java:34) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74) + at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84) + at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) + at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) + at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) + at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) + at org.junit.runner.JUnitCore.run(JUnitCore.java:137) + at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) +Caused by: org.yaml.snakeyaml.error.YAMLException: No single argument constructor found for interface java.util.Map : null + at org.yaml.snakeyaml.constructor.Constructor$ConstructScalar.construct(Constructor.java:371) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObjectNoCheck(BaseConstructor.java:216) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:205) + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:247) + ... 41 common frames omitted +2020-01-20 16:56:34.273 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-20 16:59:58.810 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-20 17:01:33.906 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-20 17:10:59.535 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-20 17:29:51.311 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 diff --git a/distributed-deploy/bcp-install-main/logs/error/2020-01-31.0.log b/distributed-deploy/bcp-install-main/logs/error/2020-01-31.0.log new file mode 100644 index 00000000..38ff1227 --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/error/2020-01-31.0.log @@ -0,0 +1 @@ +2020-01-31 12:27:58.235 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 diff --git a/distributed-deploy/bcp-install-main/logs/error/2020-02-19.0.log b/distributed-deploy/bcp-install-main/logs/error/2020-02-19.0.log new file mode 100644 index 00000000..3ad14655 --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/error/2020-02-19.0.log @@ -0,0 +1,2 @@ +2020-02-19 16:24:27.378 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-19 16:26:30.561 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 diff --git a/distributed-deploy/bcp-install-main/logs/error/2020-02-24.0.log b/distributed-deploy/bcp-install-main/logs/error/2020-02-24.0.log new file mode 100644 index 00000000..1342955b --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/error/2020-02-24.0.log @@ -0,0 +1,6 @@ +2020-02-24 09:50:36.813 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-24 10:03:57.142 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-24 10:06:23.546 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-24 10:07:42.061 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-24 10:11:53.062 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-24 12:38:36.838 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 diff --git a/distributed-deploy/bcp-install-main/logs/error/2020-02-27.0.log b/distributed-deploy/bcp-install-main/logs/error/2020-02-27.0.log new file mode 100644 index 00000000..a3a09873 --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/error/2020-02-27.0.log @@ -0,0 +1,6 @@ +2020-02-27 10:42:56.997 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 配置文件中peer没有配置相应的交易查询端口 +2020-02-27 10:43:25.916 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 配置文件中后台没有配置相应的websocket端口 +2020-02-27 10:43:25.917 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 配置文件中peer没有配置相应的交易查询端口 +2020-02-27 10:44:07.079 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 配置文件中orderer或peer的域名不匹配 +2020-02-27 10:44:27.795 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-27 11:03:01.920 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 配置文件中相关配置项出错或为空 diff --git a/distributed-deploy/bcp-install-main/logs/info/2020-01-19.0.log b/distributed-deploy/bcp-install-main/logs/info/2020-01-19.0.log new file mode 100644 index 00000000..fb650e7e --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/info/2020-01-19.0.log @@ -0,0 +1,228 @@ +2020-01-19 15:53:34.639 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-01-19 15:53:34.666 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-01-19 15:53:35.165 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-01-19 15:53:35.201 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@6f27a732, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@6c779568, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@f381794, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextTestExecutionListener@7e9131d5, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2e1d27ba, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@61d6015a, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@2525ff7e, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@524d6d96, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4ef37659] +2020-01-19 15:53:35.752 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 7136 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-01-19 15:53:35.752 [main] INFO InitTest - The following profiles are active: dev +2020-01-19 15:53:35.832 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Sun Jan 19 15:53:35 CST 2020]; root of context hierarchy +2020-01-19 15:53:36.858 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-01-19 15:53:37.503 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$b6d7a088] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-01-19 15:53:37.848 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-01-19 15:53:38.480 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-01-19 15:53:38.481 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-01-19 15:53:38.481 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-01-19 15:53:38.482 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-01-19 15:53:38.482 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-19 15:53:38.482 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-01-19 15:53:38.482 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-01-19 15:53:38.482 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-01-19 15:53:38.483 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-01-19 15:53:38.487 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-01-19 15:53:38.487 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-01-19 15:53:38.488 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-01-19 15:53:38.490 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-01-19 15:53:38.491 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-19 15:53:38.716 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-19 15:53:38.716 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-19 15:53:38.868 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-01-19 15:53:38.871 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-01-19 15:53:38.952 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-01-19 15:53:39.200 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Sun Jan 19 15:53:35 CST 2020]; root of context hierarchy +2020-01-19 15:53:39.310 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-01-19 15:53:40.290 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-01-19 15:53:40.291 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-01-19 15:53:40.323 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-01-19 15:53:40.370 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-01-19 15:53:40.623 [main] INFO InitTest - Started InitTest in 5.335 seconds (JVM running for 9.178) +2020-01-19 15:53:40.625 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-01-19 15:53:40.633 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-19 15:53:40.633 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-01-19 15:53:40.633 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-01-19 15:53:40.785 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-01-19 15:53:40.811 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-01-19 15:53:40.881 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-01-19 15:53:40.881 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-01-19 15:53:40.893 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-01-19 15:53:41.452 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-19 15:53:41.474 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-01-19 15:53:41.474 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-19 15:53:41.474 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-01-19 15:53:41.474 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-19 15:53:41.484 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\generate.sh: line 31: chomod: command not found +2020-01-19 15:53:41.685 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-01-19 15:53:42.436 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-01-19 15:53:42.736 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-01-19 15:53:42.713 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [6648b1fe90c78d46505674412f0d02958a82fc6de89a092ac57e5944eb8d3366]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\6648b1fe90c78d46505674412f0d02958a82fc6de89a092ac57e5944eb8d3366_sk: The system cannot find the path specified.] +2020-01-19 15:53:42.747 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-01-19 15:53:42.747 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\6648b1fe90c78d46505674412f0d02958a82fc6de89a092ac57e5944eb8d3366_sk: The system cannot find the path specified.] +2020-01-19 15:53:42.761 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-01-19 15:53:42.761 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-01-19 15:53:42.761 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-01-19 15:53:42.794 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-19 15:53:43.456 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-01-19 15:53:43.456 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-01-19 15:53:43.466 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-01-19 15:53:43.888 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-01-19 15:53:44.291 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-01-19 15:53:44.293 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-01-19 15:53:44.294 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-01-19 15:53:44.327 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-01-19 15:53:44.337 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-01-19 15:53:44.338 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-01-19 15:53:44.366 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-01-19 15:53:44.372 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-01-19 15:53:44.383 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-01-19 15:53:44.384 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-01-19 15:53:44.390 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Sun Jan 19 15:53:35 CST 2020]; root of context hierarchy +2020-01-19 15:53:44.392 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-01-19 15:55:03.315 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-01-19 15:55:03.329 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-01-19 15:55:03.736 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-01-19 15:55:03.758 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@f381794, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@2cdd0d4b, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@7e9131d5, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2e1d27ba, org.springframework.test.context.support.DirtiesContextTestExecutionListener@61d6015a, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2525ff7e, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@524d6d96, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@37858383] +2020-01-19 15:55:04.302 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 6860 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-01-19 15:55:04.303 [main] INFO InitTest - The following profiles are active: dev +2020-01-19 15:55:04.345 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Sun Jan 19 15:55:04 CST 2020]; root of context hierarchy +2020-01-19 15:55:05.444 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-01-19 15:55:06.015 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$b6d7a088] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-01-19 15:55:06.334 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-01-19 15:55:06.967 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-01-19 15:55:06.968 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-01-19 15:55:06.968 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-01-19 15:55:06.969 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-19 15:55:06.969 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-01-19 15:55:06.969 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-01-19 15:55:06.969 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-01-19 15:55:06.970 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-01-19 15:55:06.971 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-01-19 15:55:06.975 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-01-19 15:55:06.975 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-01-19 15:55:06.975 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-01-19 15:55:06.979 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-01-19 15:55:06.979 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-19 15:55:07.202 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-19 15:55:07.203 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-19 15:55:07.355 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-01-19 15:55:07.358 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-01-19 15:55:07.448 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-01-19 15:55:07.693 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Sun Jan 19 15:55:04 CST 2020]; root of context hierarchy +2020-01-19 15:55:07.808 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-01-19 15:55:08.820 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-01-19 15:55:08.820 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-01-19 15:55:08.852 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-01-19 15:55:08.896 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-01-19 15:55:09.176 [main] INFO InitTest - Started InitTest in 5.354 seconds (JVM running for 7.501) +2020-01-19 15:55:09.179 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-01-19 15:55:09.189 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-19 15:55:09.189 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-01-19 15:55:09.190 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-01-19 15:55:09.319 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-01-19 15:55:09.339 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-01-19 15:55:09.369 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-01-19 15:55:09.369 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-01-19 15:55:09.374 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-01-19 15:55:09.458 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-19 15:55:09.458 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-01-19 15:55:09.458 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-19 15:55:09.458 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-01-19 15:55:09.458 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-19 15:55:09.468 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\generate.sh: line 31: chomod: command not found +2020-01-19 15:55:09.546 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-01-19 15:55:09.614 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-01-19 15:55:09.719 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-01-19 15:55:09.719 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [dd3a753c1fc845b544840b5903d989cfefc96f75f5efba0e724e558b1a861aa8]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\dd3a753c1fc845b544840b5903d989cfefc96f75f5efba0e724e558b1a861aa8_sk: The system cannot find the path specified.] +2020-01-19 15:55:09.719 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-01-19 15:55:09.719 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\dd3a753c1fc845b544840b5903d989cfefc96f75f5efba0e724e558b1a861aa8_sk: The system cannot find the path specified.] +2020-01-19 15:55:09.733 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-01-19 15:55:09.733 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-01-19 15:55:09.733 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-01-19 15:55:09.758 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-19 15:55:10.430 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-01-19 15:55:10.431 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-01-19 15:55:10.433 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-01-19 15:55:10.826 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-01-19 15:55:11.219 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-01-19 15:55:11.221 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-01-19 15:55:11.221 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-01-19 15:55:11.222 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-01-19 15:55:11.233 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-01-19 15:55:11.234 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-01-19 15:55:11.238 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-01-19 15:55:11.239 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-01-19 15:55:11.241 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-01-19 15:55:11.243 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-01-19 15:55:11.250 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Sun Jan 19 15:55:04 CST 2020]; root of context hierarchy +2020-01-19 15:55:11.253 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-01-19 15:56:26.958 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-01-19 15:56:26.979 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-01-19 15:56:27.465 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-01-19 15:56:27.491 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@f381794, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@2cdd0d4b, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@7e9131d5, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2e1d27ba, org.springframework.test.context.support.DirtiesContextTestExecutionListener@61d6015a, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2525ff7e, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@524d6d96, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@37858383] +2020-01-19 15:56:28.024 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 4240 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-01-19 15:56:28.024 [main] INFO InitTest - The following profiles are active: dev +2020-01-19 15:56:28.067 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Sun Jan 19 15:56:28 CST 2020]; root of context hierarchy +2020-01-19 15:56:29.094 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-01-19 15:56:29.639 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$7bbd328f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-01-19 15:56:29.955 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-01-19 15:56:30.585 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-01-19 15:56:30.586 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-01-19 15:56:30.587 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-01-19 15:56:30.587 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-01-19 15:56:30.587 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-19 15:56:30.588 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-01-19 15:56:30.588 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-01-19 15:56:30.588 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-01-19 15:56:30.589 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-01-19 15:56:30.593 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-01-19 15:56:30.594 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-01-19 15:56:30.594 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-01-19 15:56:30.597 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-01-19 15:56:30.598 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-19 15:56:30.810 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-19 15:56:30.810 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-19 15:56:30.947 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-01-19 15:56:30.949 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-01-19 15:56:31.020 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-01-19 15:56:31.278 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Sun Jan 19 15:56:28 CST 2020]; root of context hierarchy +2020-01-19 15:56:31.392 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-01-19 15:56:32.312 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-01-19 15:56:32.312 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-01-19 15:56:32.340 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-01-19 15:56:32.381 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-01-19 15:56:32.639 [main] INFO InitTest - Started InitTest in 5.076 seconds (JVM running for 7.239) +2020-01-19 15:56:32.642 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-01-19 15:56:32.649 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-19 15:56:32.649 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-01-19 15:56:32.649 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-01-19 15:56:32.802 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-01-19 15:56:32.830 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-01-19 15:56:32.863 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-01-19 15:56:32.863 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-01-19 15:56:32.868 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-01-19 15:56:32.949 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-19 15:56:32.949 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-01-19 15:56:32.949 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-19 15:56:32.949 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-01-19 15:56:32.949 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-19 15:56:32.959 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\generate.sh: line 31: chomod: command not found +2020-01-19 15:56:33.036 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-01-19 15:56:33.121 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-01-19 15:56:33.204 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-01-19 15:56:33.204 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [efb499ab09a765c13a60dd47403630a74309595b65de0cbaf89cd3c171079549]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\efb499ab09a765c13a60dd47403630a74309595b65de0cbaf89cd3c171079549_sk: The system cannot find the path specified.] +2020-01-19 15:56:33.204 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-01-19 15:56:33.205 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\efb499ab09a765c13a60dd47403630a74309595b65de0cbaf89cd3c171079549_sk: The system cannot find the path specified.] +2020-01-19 15:56:33.219 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-01-19 15:56:33.219 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-01-19 15:56:33.220 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-01-19 15:56:33.240 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-19 15:56:33.901 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-01-19 15:56:33.901 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-01-19 15:56:33.904 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-01-19 15:56:34.321 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-01-19 15:56:34.718 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-01-19 15:56:34.721 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-01-19 15:56:34.721 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-01-19 15:56:34.722 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-01-19 15:56:34.737 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-01-19 15:56:34.737 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-01-19 15:56:34.742 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-01-19 15:56:34.743 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-01-19 15:56:34.745 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-01-19 15:56:34.747 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-01-19 15:56:34.754 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Sun Jan 19 15:56:28 CST 2020]; root of context hierarchy +2020-01-19 15:56:34.756 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 diff --git a/distributed-deploy/bcp-install-main/logs/info/2020-01-20.0.log b/distributed-deploy/bcp-install-main/logs/info/2020-01-20.0.log new file mode 100644 index 00000000..5050c6cc --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/info/2020-01-20.0.log @@ -0,0 +1,586 @@ +2020-01-20 16:49:05.210 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-01-20 16:49:05.223 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-01-20 16:49:06.301 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-01-20 16:49:06.334 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-01-20 16:49:07.500 [background-preinit] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.13.Final +2020-01-20 16:49:07.625 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 5256 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-01-20 16:49:07.653 [main] INFO InitTest - The following profiles are active: dev +2020-01-20 16:49:07.770 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@658c5a19: startup date [Mon Jan 20 16:49:07 CST 2020]; root of context hierarchy +2020-01-20 16:49:08.959 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-01-20 16:49:09.586 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$7c96a12f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-01-20 16:49:09.953 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-01-20 16:49:10.629 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-01-20 16:49:10.630 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-01-20 16:49:10.631 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-01-20 16:49:10.632 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-01-20 16:49:10.632 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-01-20 16:49:10.632 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 16:49:10.633 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-01-20 16:49:10.633 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-01-20 16:49:10.634 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-01-20 16:49:10.638 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-01-20 16:49:10.638 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-01-20 16:49:10.639 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-01-20 16:49:10.643 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-01-20 16:49:10.644 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 16:49:10.866 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 16:49:10.866 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 16:49:11.019 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-01-20 16:49:11.023 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-01-20 16:49:11.103 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-01-20 16:49:11.358 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@658c5a19: startup date [Mon Jan 20 16:49:07 CST 2020]; root of context hierarchy +2020-01-20 16:49:11.482 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-01-20 16:49:12.542 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-01-20 16:49:12.543 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-01-20 16:49:12.587 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-01-20 16:49:12.644 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-01-20 16:49:12.927 [main] INFO InitTest - Started InitTest in 6.446 seconds (JVM running for 9.85) +2020-01-20 16:49:12.929 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-01-20 16:49:12.938 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 16:49:12.939 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-01-20 16:49:12.939 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-01-20 16:49:13.130 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 初始化发生异常 +org.yaml.snakeyaml.constructor.ConstructorException: Cannot create property=backendWebsocketPortConfig for JavaBean=com.cgb.bcpinstall.common.entity.init.InitConfigEntity@7bb4ed71 + in 'reader', line 2, column 1: + network: bankunion + ^ +No single argument constructor found for interface java.util.Map : null + in 'reader', line 26, column 3: + backend.bcp.com: 9191 + ^ + + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:270) + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.construct(Constructor.java:149) + at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:309) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObjectNoCheck(BaseConstructor.java:216) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:205) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:164) + at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:148) + at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525) + at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:519) + at com.cgb.bcpinstall.biz.InitializeBiz.parseConfigFile(InitializeBiz.java:105) + at com.cgb.bcpinstall.biz.InitializeBiz.initialize(InitializeBiz.java:52) + at InitTest.testInit(InitTest.java:34) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74) + at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84) + at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) + at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) + at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) + at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) + at org.junit.runner.JUnitCore.run(JUnitCore.java:137) + at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) +Caused by: org.yaml.snakeyaml.error.YAMLException: No single argument constructor found for interface java.util.Map : null + at org.yaml.snakeyaml.constructor.Constructor$ConstructScalar.construct(Constructor.java:371) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObjectNoCheck(BaseConstructor.java:216) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:205) + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:247) + ... 41 common frames omitted +2020-01-20 16:49:13.141 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@658c5a19: startup date [Mon Jan 20 16:49:07 CST 2020]; root of context hierarchy +2020-01-20 16:49:13.144 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-01-20 16:53:45.119 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-01-20 16:53:45.137 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-01-20 16:53:45.548 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-01-20 16:53:45.565 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-01-20 16:53:46.078 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 7136 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-01-20 16:53:46.079 [main] INFO InitTest - The following profiles are active: dev +2020-01-20 16:53:46.131 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Mon Jan 20 16:53:46 CST 2020]; root of context hierarchy +2020-01-20 16:53:47.283 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-01-20 16:53:47.855 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$412f9273] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-01-20 16:53:48.203 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-01-20 16:53:48.908 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-01-20 16:53:48.910 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-01-20 16:53:48.910 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-01-20 16:53:48.911 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 16:53:48.911 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-01-20 16:53:48.911 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-01-20 16:53:48.912 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-01-20 16:53:48.912 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-01-20 16:53:48.913 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-01-20 16:53:48.918 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-01-20 16:53:48.920 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-01-20 16:53:48.921 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-01-20 16:53:48.925 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-01-20 16:53:48.926 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 16:53:49.164 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 16:53:49.164 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 16:53:49.308 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-01-20 16:53:49.311 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-01-20 16:53:49.389 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-01-20 16:53:49.630 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Mon Jan 20 16:53:46 CST 2020]; root of context hierarchy +2020-01-20 16:53:49.746 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-01-20 16:53:50.728 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-01-20 16:53:50.729 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-01-20 16:53:50.767 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-01-20 16:53:50.812 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-01-20 16:53:51.076 [main] INFO InitTest - Started InitTest in 5.448 seconds (JVM running for 6.816) +2020-01-20 16:53:51.079 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-01-20 16:53:51.089 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 16:53:51.090 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-01-20 16:53:51.090 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-01-20 16:53:51.246 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 初始化发生异常 +org.yaml.snakeyaml.constructor.ConstructorException: Cannot create property=backendWebsocketPortConfig for JavaBean=com.cgb.bcpinstall.common.entity.init.InitConfigEntity@40f1aa95 + in 'reader', line 2, column 1: + network: bankunion + ^ +No single argument constructor found for interface java.util.Map : null + in 'reader', line 26, column 3: + backend.bcp.com: 9191 + ^ + + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:270) + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.construct(Constructor.java:149) + at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:309) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObjectNoCheck(BaseConstructor.java:216) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:205) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:164) + at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:148) + at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525) + at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:519) + at com.cgb.bcpinstall.biz.InitializeBiz.parseConfigFile(InitializeBiz.java:105) + at com.cgb.bcpinstall.biz.InitializeBiz.initialize(InitializeBiz.java:52) + at InitTest.testInit(InitTest.java:34) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) + at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74) + at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84) + at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) + at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) + at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) + at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner.run(ParentRunner.java:363) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) + at org.junit.runner.JUnitCore.run(JUnitCore.java:137) + at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) +Caused by: org.yaml.snakeyaml.error.YAMLException: No single argument constructor found for interface java.util.Map : null + at org.yaml.snakeyaml.constructor.Constructor$ConstructScalar.construct(Constructor.java:371) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObjectNoCheck(BaseConstructor.java:216) + at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:205) + at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:247) + ... 41 common frames omitted +2020-01-20 16:53:51.254 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Mon Jan 20 16:53:46 CST 2020]; root of context hierarchy +2020-01-20 16:53:51.257 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-01-20 16:56:26.363 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-01-20 16:56:26.377 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-01-20 16:56:26.799 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-01-20 16:56:26.819 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-01-20 16:56:27.419 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 10080 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-01-20 16:56:27.420 [main] INFO InitTest - The following profiles are active: dev +2020-01-20 16:56:27.474 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Mon Jan 20 16:56:27 CST 2020]; root of context hierarchy +2020-01-20 16:56:28.677 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-01-20 16:56:29.230 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$412f9273] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-01-20 16:56:29.581 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-01-20 16:56:30.292 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-01-20 16:56:30.293 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-01-20 16:56:30.294 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-01-20 16:56:30.294 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-01-20 16:56:30.295 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-01-20 16:56:30.296 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 16:56:30.296 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-01-20 16:56:30.297 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-01-20 16:56:30.298 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-01-20 16:56:30.303 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-01-20 16:56:30.305 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-01-20 16:56:30.305 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-01-20 16:56:30.310 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-01-20 16:56:30.310 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 16:56:30.545 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 16:56:30.545 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 16:56:30.704 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-01-20 16:56:30.707 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-01-20 16:56:30.789 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-01-20 16:56:31.051 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Mon Jan 20 16:56:27 CST 2020]; root of context hierarchy +2020-01-20 16:56:31.170 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-01-20 16:56:32.135 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-01-20 16:56:32.136 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-01-20 16:56:32.172 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-01-20 16:56:32.228 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-01-20 16:56:32.497 [main] INFO InitTest - Started InitTest in 5.613 seconds (JVM running for 6.986) +2020-01-20 16:56:32.500 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-01-20 16:56:32.508 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 16:56:32.508 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-01-20 16:56:32.509 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-01-20 16:56:32.645 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-01-20 16:56:32.669 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-01-20 16:56:32.743 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-01-20 16:56:32.743 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-01-20 16:56:32.752 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-01-20 16:56:33.003 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 16:56:33.003 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-01-20 16:56:33.003 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-20 16:56:33.003 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-01-20 16:56:33.003 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-20 16:56:33.021 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\generate.sh: line 31: chomod: command not found +2020-01-20 16:56:33.181 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-01-20 16:56:34.017 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-01-20 16:56:34.228 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-01-20 16:56:34.189 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [7ce21af2f312b20dedc6171249aba3e30d5fa308b14f2a8a175f392f8d7a8627]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\7ce21af2f312b20dedc6171249aba3e30d5fa308b14f2a8a175f392f8d7a8627_sk: The system cannot find the path specified.] +2020-01-20 16:56:34.239 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-01-20 16:56:34.239 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\7ce21af2f312b20dedc6171249aba3e30d5fa308b14f2a8a175f392f8d7a8627_sk: The system cannot find the path specified.] +2020-01-20 16:56:34.253 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-01-20 16:56:34.253 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-01-20 16:56:34.253 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-01-20 16:56:34.273 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-20 16:56:34.948 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-01-20 16:56:34.949 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-01-20 16:56:34.958 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-01-20 16:56:35.385 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-01-20 16:56:35.783 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-01-20 16:56:35.787 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-01-20 16:56:35.787 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-01-20 16:56:35.796 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-01-20 16:56:35.806 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-01-20 16:56:35.807 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-01-20 16:56:35.811 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-01-20 16:56:35.819 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-01-20 16:56:35.830 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-01-20 16:56:35.832 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-01-20 16:56:35.838 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-01-20 16:56:35.843 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Mon Jan 20 16:56:27 CST 2020]; root of context hierarchy +2020-01-20 16:56:35.846 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-01-20 16:59:52.388 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-01-20 16:59:52.401 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-01-20 16:59:52.724 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-01-20 16:59:52.745 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@f381794, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@2cdd0d4b, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@7e9131d5, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2e1d27ba, org.springframework.test.context.support.DirtiesContextTestExecutionListener@61d6015a, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2525ff7e, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@524d6d96, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@37858383] +2020-01-20 16:59:53.235 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 12664 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-01-20 16:59:53.236 [main] INFO InitTest - The following profiles are active: dev +2020-01-20 16:59:53.289 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Jan 20 16:59:53 CST 2020]; root of context hierarchy +2020-01-20 16:59:54.372 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-01-20 16:59:54.964 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$b6d7a088] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-01-20 16:59:55.298 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-01-20 16:59:55.958 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-01-20 16:59:55.959 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-01-20 16:59:55.959 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-01-20 16:59:55.959 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-01-20 16:59:55.960 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-01-20 16:59:55.960 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-01-20 16:59:55.960 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 16:59:55.961 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-01-20 16:59:55.962 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-01-20 16:59:55.967 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-01-20 16:59:55.968 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-01-20 16:59:55.968 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-01-20 16:59:55.973 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-01-20 16:59:55.973 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 16:59:56.211 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 16:59:56.211 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 16:59:56.369 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-01-20 16:59:56.371 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-01-20 16:59:56.451 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-01-20 16:59:56.705 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Jan 20 16:59:53 CST 2020]; root of context hierarchy +2020-01-20 16:59:56.812 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-01-20 16:59:57.823 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-01-20 16:59:57.824 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-01-20 16:59:57.863 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-01-20 16:59:57.912 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-01-20 16:59:58.182 [main] INFO InitTest - Started InitTest in 5.372 seconds (JVM running for 7.38) +2020-01-20 16:59:58.185 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-01-20 16:59:58.196 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 16:59:58.196 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-01-20 16:59:58.196 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-01-20 16:59:58.361 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-01-20 16:59:58.387 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-01-20 16:59:58.420 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-01-20 16:59:58.421 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-01-20 16:59:58.426 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-01-20 16:59:58.508 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 16:59:58.509 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-01-20 16:59:58.509 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-20 16:59:58.509 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-01-20 16:59:58.509 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-20 16:59:58.519 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\generate.sh: line 31: chomod: command not found +2020-01-20 16:59:58.585 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-01-20 16:59:58.674 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-01-20 16:59:58.785 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-01-20 16:59:58.785 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-01-20 16:59:58.785 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [90e8cd2d18ab4d97aa3d62f89716a38283708559451ea0136f089552eff027bc]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\90e8cd2d18ab4d97aa3d62f89716a38283708559451ea0136f089552eff027bc_sk: The system cannot find the path specified.] +2020-01-20 16:59:58.785 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\90e8cd2d18ab4d97aa3d62f89716a38283708559451ea0136f089552eff027bc_sk: The system cannot find the path specified.] +2020-01-20 16:59:58.790 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-01-20 16:59:58.790 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-01-20 16:59:58.791 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-01-20 16:59:58.810 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-20 16:59:59.470 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-01-20 16:59:59.470 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-01-20 16:59:59.473 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-01-20 16:59:59.888 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-01-20 17:00:00.318 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-01-20 17:00:00.321 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-01-20 17:00:00.321 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-01-20 17:00:00.322 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-01-20 17:00:00.332 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-01-20 17:00:00.333 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-01-20 17:00:00.337 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-01-20 17:00:00.339 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-01-20 17:00:00.341 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-01-20 17:00:00.343 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-01-20 17:00:00.350 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-01-20 17:00:00.355 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Jan 20 16:59:53 CST 2020]; root of context hierarchy +2020-01-20 17:00:00.358 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-01-20 17:01:27.498 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-01-20 17:01:27.511 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-01-20 17:01:27.849 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-01-20 17:01:27.871 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@6f27a732, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@6c779568, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@f381794, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextTestExecutionListener@7e9131d5, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2e1d27ba, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@61d6015a, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@2525ff7e, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@524d6d96, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4ef37659] +2020-01-20 17:01:28.298 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 9060 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-01-20 17:01:28.298 [main] INFO InitTest - The following profiles are active: dev +2020-01-20 17:01:28.339 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6986852: startup date [Mon Jan 20 17:01:28 CST 2020]; root of context hierarchy +2020-01-20 17:01:29.409 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-01-20 17:01:30.002 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$31510e74] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-01-20 17:01:30.361 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-01-20 17:01:31.037 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-01-20 17:01:31.038 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-01-20 17:01:31.039 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-01-20 17:01:31.039 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-01-20 17:01:31.040 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 17:01:31.040 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-01-20 17:01:31.041 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-01-20 17:01:31.041 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-01-20 17:01:31.042 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-01-20 17:01:31.047 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-01-20 17:01:31.048 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-01-20 17:01:31.048 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-01-20 17:01:31.053 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-01-20 17:01:31.053 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 17:01:31.292 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 17:01:31.292 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 17:01:31.453 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-01-20 17:01:31.456 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-01-20 17:01:31.541 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-01-20 17:01:31.829 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6986852: startup date [Mon Jan 20 17:01:28 CST 2020]; root of context hierarchy +2020-01-20 17:01:31.950 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-01-20 17:01:32.941 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-01-20 17:01:32.941 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-01-20 17:01:32.978 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-01-20 17:01:33.033 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-01-20 17:01:33.303 [main] INFO InitTest - Started InitTest in 5.378 seconds (JVM running for 7.669) +2020-01-20 17:01:33.306 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-01-20 17:01:33.316 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 17:01:33.316 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-01-20 17:01:33.316 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-01-20 17:01:33.456 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-01-20 17:01:33.478 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-01-20 17:01:33.511 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-01-20 17:01:33.511 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-01-20 17:01:33.516 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-01-20 17:01:33.594 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 17:01:33.594 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-01-20 17:01:33.595 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-20 17:01:33.595 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-01-20 17:01:33.595 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-20 17:01:33.606 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\generate.sh: line 31: chomod: command not found +2020-01-20 17:01:33.695 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-01-20 17:01:33.780 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-01-20 17:01:33.891 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-01-20 17:01:33.891 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [7e2dcb27536ad1a4c3aea2ff92958ab857829e1d07271d214d67fb1cd635a316]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\7e2dcb27536ad1a4c3aea2ff92958ab857829e1d07271d214d67fb1cd635a316_sk: The system cannot find the path specified.] +2020-01-20 17:01:33.891 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-01-20 17:01:33.891 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\7e2dcb27536ad1a4c3aea2ff92958ab857829e1d07271d214d67fb1cd635a316_sk: The system cannot find the path specified.] +2020-01-20 17:01:33.895 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-01-20 17:01:33.895 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-01-20 17:01:33.895 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-01-20 17:01:33.906 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-20 17:01:34.556 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-01-20 17:01:34.557 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-01-20 17:01:34.561 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-01-20 17:01:34.972 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-01-20 17:01:35.372 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-01-20 17:01:35.375 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-01-20 17:01:35.375 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-01-20 17:01:35.376 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-01-20 17:01:35.387 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-01-20 17:01:35.388 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-01-20 17:01:35.392 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-01-20 17:01:35.393 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-01-20 17:01:35.394 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-01-20 17:01:35.396 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-01-20 17:01:35.402 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-01-20 17:01:35.407 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6986852: startup date [Mon Jan 20 17:01:28 CST 2020]; root of context hierarchy +2020-01-20 17:01:35.410 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-01-20 17:10:52.050 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-01-20 17:10:52.064 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-01-20 17:10:52.555 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-01-20 17:10:52.591 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-01-20 17:10:53.325 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 12340 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-01-20 17:10:53.326 [main] INFO InitTest - The following profiles are active: dev +2020-01-20 17:10:53.388 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6c61a903: startup date [Mon Jan 20 17:10:53 CST 2020]; root of context hierarchy +2020-01-20 17:10:54.830 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-01-20 17:10:55.424 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$7c96a12f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-01-20 17:10:55.813 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-01-20 17:10:56.539 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-01-20 17:10:56.540 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-01-20 17:10:56.541 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-01-20 17:10:56.541 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 17:10:56.541 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-01-20 17:10:56.542 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-01-20 17:10:56.542 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-01-20 17:10:56.542 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-01-20 17:10:56.543 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-01-20 17:10:56.548 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-01-20 17:10:56.549 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-01-20 17:10:56.550 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-01-20 17:10:56.553 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-01-20 17:10:56.554 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 17:10:56.790 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 17:10:56.790 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 17:10:56.943 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-01-20 17:10:56.947 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-01-20 17:10:57.044 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-01-20 17:10:57.316 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6c61a903: startup date [Mon Jan 20 17:10:53 CST 2020]; root of context hierarchy +2020-01-20 17:10:57.450 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-01-20 17:10:58.529 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-01-20 17:10:58.529 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-01-20 17:10:58.566 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-01-20 17:10:58.624 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-01-20 17:10:58.907 [main] INFO InitTest - Started InitTest in 6.177 seconds (JVM running for 8.513) +2020-01-20 17:10:58.910 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-01-20 17:10:58.917 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 17:10:58.918 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-01-20 17:10:58.918 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-01-20 17:10:59.068 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-01-20 17:10:59.097 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-01-20 17:10:59.131 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-01-20 17:10:59.132 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-01-20 17:10:59.137 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-01-20 17:10:59.223 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 17:10:59.223 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-01-20 17:10:59.223 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-20 17:10:59.223 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-01-20 17:10:59.223 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-20 17:10:59.232 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\generate.sh: line 31: chomod: command not found +2020-01-20 17:10:59.316 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-01-20 17:10:59.385 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-01-20 17:10:59.508 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-01-20 17:10:59.508 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-01-20 17:10:59.508 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [7dd803a79419e310be12844b6243ef9ca5a7d3530aa52d3113f1e9c7d35f077d]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\7dd803a79419e310be12844b6243ef9ca5a7d3530aa52d3113f1e9c7d35f077d_sk: The system cannot find the path specified.] +2020-01-20 17:10:59.508 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\7dd803a79419e310be12844b6243ef9ca5a7d3530aa52d3113f1e9c7d35f077d_sk: The system cannot find the path specified.] +2020-01-20 17:10:59.513 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-01-20 17:10:59.513 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-01-20 17:10:59.514 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-01-20 17:10:59.535 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-20 17:11:00.224 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-01-20 17:11:00.225 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-01-20 17:11:00.228 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-01-20 17:11:00.692 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-01-20 17:11:01.142 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-01-20 17:11:01.144 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-01-20 17:11:01.144 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-01-20 17:11:01.145 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-01-20 17:11:01.157 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-01-20 17:11:01.158 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-01-20 17:11:01.179 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-01-20 17:11:01.180 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-01-20 17:11:01.181 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-01-20 17:11:01.183 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-01-20 17:11:01.188 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-01-20 17:11:01.194 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6c61a903: startup date [Mon Jan 20 17:10:53 CST 2020]; root of context hierarchy +2020-01-20 17:11:01.197 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-01-20 17:29:44.656 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-01-20 17:29:44.669 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-01-20 17:29:45.093 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-01-20 17:29:45.121 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@f381794, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@2cdd0d4b, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@7e9131d5, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2e1d27ba, org.springframework.test.context.support.DirtiesContextTestExecutionListener@61d6015a, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2525ff7e, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@524d6d96, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@37858383] +2020-01-20 17:29:45.597 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 132 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-01-20 17:29:45.597 [main] INFO InitTest - The following profiles are active: dev +2020-01-20 17:29:45.635 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Jan 20 17:29:45 CST 2020]; root of context hierarchy +2020-01-20 17:29:46.768 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-01-20 17:29:47.386 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$b6d7a088] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-01-20 17:29:47.740 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-01-20 17:29:48.420 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-01-20 17:29:48.421 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-01-20 17:29:48.422 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-01-20 17:29:48.422 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-01-20 17:29:48.422 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-01-20 17:29:48.423 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 17:29:48.423 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-01-20 17:29:48.423 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-01-20 17:29:48.424 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-01-20 17:29:48.429 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-01-20 17:29:48.429 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-01-20 17:29:48.430 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-01-20 17:29:48.434 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-01-20 17:29:48.434 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-20 17:29:48.672 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 17:29:48.673 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-20 17:29:48.822 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-01-20 17:29:48.826 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-01-20 17:29:48.913 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-01-20 17:29:49.180 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Jan 20 17:29:45 CST 2020]; root of context hierarchy +2020-01-20 17:29:49.306 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-01-20 17:29:50.318 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-01-20 17:29:50.318 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-01-20 17:29:50.354 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-01-20 17:29:50.402 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-01-20 17:29:50.689 [main] INFO InitTest - Started InitTest in 5.506 seconds (JVM running for 8.139) +2020-01-20 17:29:50.692 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-01-20 17:29:50.701 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 17:29:50.702 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-01-20 17:29:50.702 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-01-20 17:29:50.869 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-01-20 17:29:50.894 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-01-20 17:29:50.923 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-01-20 17:29:50.923 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-01-20 17:29:50.928 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-01-20 17:29:51.016 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-20 17:29:51.016 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-01-20 17:29:51.016 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-20 17:29:51.016 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-01-20 17:29:51.016 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-20 17:29:51.025 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\generate.sh: line 31: chomod: command not found +2020-01-20 17:29:51.096 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-01-20 17:29:51.178 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-01-20 17:29:51.275 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-01-20 17:29:51.275 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-01-20 17:29:51.275 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [96a1bca6444ca10283b65297248488731ac57b54becec417b3a9741697785bb7]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\96a1bca6444ca10283b65297248488731ac57b54becec417b3a9741697785bb7_sk: The system cannot find the path specified.] +2020-01-20 17:29:51.275 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\96a1bca6444ca10283b65297248488731ac57b54becec417b3a9741697785bb7_sk: The system cannot find the path specified.] +2020-01-20 17:29:51.290 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-01-20 17:29:51.290 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-01-20 17:29:51.290 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-01-20 17:29:51.311 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-20 17:29:52.015 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-01-20 17:29:52.016 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-01-20 17:29:52.019 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-01-20 17:29:52.489 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-01-20 17:29:52.915 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-01-20 17:29:52.918 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-01-20 17:29:52.918 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-01-20 17:29:52.919 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-01-20 17:29:52.930 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-01-20 17:29:52.931 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-01-20 17:29:52.935 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-01-20 17:29:52.936 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-01-20 17:29:52.937 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-01-20 17:29:52.939 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-01-20 17:29:52.945 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-01-20 17:29:52.951 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Jan 20 17:29:45 CST 2020]; root of context hierarchy +2020-01-20 17:29:52.953 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 diff --git a/distributed-deploy/bcp-install-main/logs/info/2020-01-31.0.log b/distributed-deploy/bcp-install-main/logs/info/2020-01-31.0.log new file mode 100644 index 00000000..888d2108 --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/info/2020-01-31.0.log @@ -0,0 +1,77 @@ +2020-01-31 12:27:45.641 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-01-31 12:27:45.657 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-01-31 12:27:46.485 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-01-31 12:27:46.610 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-01-31 12:27:48.016 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 2160 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-01-31 12:27:48.016 [main] INFO InitTest - The following profiles are active: dev +2020-01-31 12:27:48.078 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@658c5a19: startup date [Fri Jan 31 12:27:48 CST 2020]; root of context hierarchy +2020-01-31 12:27:51.297 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-01-31 12:27:51.953 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$a065ed84] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-01-31 12:27:52.344 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-01-31 12:27:53.063 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-01-31 12:27:53.063 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-01-31 12:27:53.063 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-01-31 12:27:53.063 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-01-31 12:27:53.063 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-01-31 12:27:53.063 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-31 12:27:53.063 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-01-31 12:27:53.063 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-01-31 12:27:53.063 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-01-31 12:27:53.079 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-01-31 12:27:53.079 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-01-31 12:27:53.079 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-01-31 12:27:53.079 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-01-31 12:27:53.079 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-01-31 12:27:53.313 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-31 12:27:53.313 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-01-31 12:27:53.532 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-01-31 12:27:53.547 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-01-31 12:27:53.641 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-01-31 12:27:53.922 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@658c5a19: startup date [Fri Jan 31 12:27:48 CST 2020]; root of context hierarchy +2020-01-31 12:27:54.047 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-01-31 12:27:55.063 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-01-31 12:27:55.063 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-01-31 12:27:55.110 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-01-31 12:27:55.157 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-01-31 12:27:55.438 [main] INFO InitTest - Started InitTest in 8.687 seconds (JVM running for 10.908) +2020-01-31 12:27:55.438 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-01-31 12:27:55.454 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-31 12:27:55.454 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-01-31 12:27:55.454 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-01-31 12:27:55.688 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-01-31 12:27:55.720 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-01-31 12:27:55.782 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-01-31 12:27:55.782 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-01-31 12:27:55.813 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-01-31 12:27:56.407 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-01-31 12:27:56.423 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-01-31 12:27:56.423 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-31 12:27:56.423 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-01-31 12:27:56.423 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-01-31 12:27:56.454 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\generate.sh: line 31: chomod: command not found +2020-01-31 12:27:56.720 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-01-31 12:27:57.885 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-01-31 12:27:58.175 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-01-31 12:27:58.134 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [b3bec1b31ba81a1861469c233396b1527099c4a72cd26e3c90f281120ffbd92c]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\b3bec1b31ba81a1861469c233396b1527099c4a72cd26e3c90f281120ffbd92c_sk: The system cannot find the path specified.] +2020-01-31 12:27:58.186 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-01-31 12:27:58.186 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\b3bec1b31ba81a1861469c233396b1527099c4a72cd26e3c90f281120ffbd92c_sk: The system cannot find the path specified.] +2020-01-31 12:27:58.204 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-01-31 12:27:58.204 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-01-31 12:27:58.204 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-01-31 12:27:58.235 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-01-31 12:27:59.141 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-01-31 12:27:59.141 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-01-31 12:27:59.172 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-01-31 12:27:59.704 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-01-31 12:28:00.204 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-01-31 12:28:00.204 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-01-31 12:28:00.204 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-01-31 12:28:00.235 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-01-31 12:28:00.250 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-01-31 12:28:00.250 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-01-31 12:28:00.266 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-01-31 12:28:00.282 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-01-31 12:28:00.282 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-01-31 12:28:00.282 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-01-31 12:28:00.438 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-01-31 12:28:00.438 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@658c5a19: startup date [Fri Jan 31 12:27:48 CST 2020]; root of context hierarchy +2020-01-31 12:28:00.454 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 diff --git a/distributed-deploy/bcp-install-main/logs/info/2020-02-19.0.log b/distributed-deploy/bcp-install-main/logs/info/2020-02-19.0.log new file mode 100644 index 00000000..5b5d90fa --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/info/2020-02-19.0.log @@ -0,0 +1,154 @@ +2020-02-19 16:24:14.565 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-19 16:24:14.581 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-19 16:24:15.226 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-19 16:24:15.261 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-02-19 16:24:16.465 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 11940 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-19 16:24:16.465 [main] INFO InitTest - The following profiles are active: dev +2020-02-19 16:24:16.564 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Wed Feb 19 16:24:16 CST 2020]; root of context hierarchy +2020-02-19 16:24:19.207 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-19 16:24:20.220 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$85792988] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-19 16:24:20.660 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-19 16:24:21.582 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-19 16:24:21.585 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-19 16:24:21.585 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-19 16:24:21.586 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-02-19 16:24:21.586 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-19 16:24:21.586 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-19 16:24:21.587 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-19 16:24:21.587 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-19 16:24:21.588 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-19 16:24:21.595 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-19 16:24:21.596 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-19 16:24:21.596 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-19 16:24:21.600 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-19 16:24:21.601 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-19 16:24:21.896 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-19 16:24:21.896 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-19 16:24:22.114 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-19 16:24:22.117 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-19 16:24:22.197 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-19 16:24:22.500 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Wed Feb 19 16:24:16 CST 2020]; root of context hierarchy +2020-02-19 16:24:22.652 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-19 16:24:23.815 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-19 16:24:23.816 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-19 16:24:23.864 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-19 16:24:23.916 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-19 16:24:24.240 [main] INFO InitTest - Started InitTest in 8.814 seconds (JVM running for 11.192) +2020-02-19 16:24:24.243 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-19 16:24:24.255 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-19 16:24:24.255 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-19 16:24:24.255 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-19 16:24:24.533 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-02-19 16:24:24.576 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-02-19 16:24:24.626 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-02-19 16:24:24.626 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-02-19 16:24:24.651 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-02-19 16:24:25.269 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-19 16:24:25.277 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-02-19 16:24:25.277 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-19 16:24:25.277 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-02-19 16:24:25.277 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-19 16:24:25.652 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-02-19 16:24:26.994 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-02-19 16:24:27.305 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-02-19 16:24:27.284 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [c4368bb7204ea94e379613560b7ef1e4d3cede2b9c647e03b806ae86a7eca9dc]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\c4368bb7204ea94e379613560b7ef1e4d3cede2b9c647e03b806ae86a7eca9dc_sk: The system cannot find the path specified.] +2020-02-19 16:24:27.316 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-02-19 16:24:27.316 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\c4368bb7204ea94e379613560b7ef1e4d3cede2b9c647e03b806ae86a7eca9dc_sk: The system cannot find the path specified.] +2020-02-19 16:24:27.332 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-02-19 16:24:27.332 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-02-19 16:24:27.333 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-02-19 16:24:27.378 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-19 16:24:28.345 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-02-19 16:24:28.346 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-02-19 16:24:28.358 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-02-19 16:24:28.938 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-02-19 16:24:29.473 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-02-19 16:24:29.476 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-02-19 16:24:29.477 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-02-19 16:24:29.506 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-02-19 16:24:29.520 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-02-19 16:24:29.521 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-02-19 16:24:29.540 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-02-19 16:24:29.709 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-19 16:24:29.719 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-02-19 16:24:29.739 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-02-19 16:24:29.750 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-02-19 16:24:29.898 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-19 16:24:29.909 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Wed Feb 19 16:24:16 CST 2020]; root of context hierarchy +2020-02-19 16:24:29.911 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-02-19 16:26:22.350 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-19 16:26:22.381 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-19 16:26:22.865 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-19 16:26:22.884 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-02-19 16:26:23.457 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 13592 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-19 16:26:23.457 [main] INFO InitTest - The following profiles are active: dev +2020-02-19 16:26:23.550 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Wed Feb 19 16:26:23 CST 2020]; root of context hierarchy +2020-02-19 16:26:24.791 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-19 16:26:25.489 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$a0595e58] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-19 16:26:25.863 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-19 16:26:26.690 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-19 16:26:26.692 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-19 16:26:26.693 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-19 16:26:26.693 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-19 16:26:26.693 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-19 16:26:26.694 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-19 16:26:26.694 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-02-19 16:26:26.694 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-19 16:26:26.695 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-19 16:26:26.701 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-19 16:26:26.702 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-19 16:26:26.703 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-19 16:26:26.707 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-19 16:26:26.708 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-19 16:26:26.989 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-19 16:26:26.989 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-19 16:26:27.148 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-19 16:26:27.150 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-19 16:26:27.245 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-19 16:26:27.516 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Wed Feb 19 16:26:23 CST 2020]; root of context hierarchy +2020-02-19 16:26:27.644 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-19 16:26:28.732 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-19 16:26:28.732 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-19 16:26:28.782 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-19 16:26:28.844 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-19 16:26:29.164 [main] INFO InitTest - Started InitTest in 6.213 seconds (JVM running for 7.818) +2020-02-19 16:26:29.168 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-19 16:26:29.179 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-19 16:26:29.180 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-19 16:26:29.180 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-19 16:26:29.355 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-02-19 16:26:29.386 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-02-19 16:26:29.425 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-02-19 16:26:29.425 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-02-19 16:26:29.431 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-02-19 16:26:29.579 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-19 16:26:29.579 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-02-19 16:26:29.579 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-19 16:26:29.579 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-02-19 16:26:29.579 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-19 16:26:29.804 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-02-19 16:26:30.405 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-02-19 16:26:30.543 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-02-19 16:26:30.543 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [e0c60d1d839367de8be4546fa42476ec4410f3089af50fbcc0e0fafe117c5150]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\e0c60d1d839367de8be4546fa42476ec4410f3089af50fbcc0e0fafe117c5150_sk: The system cannot find the path specified.] +2020-02-19 16:26:30.543 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-02-19 16:26:30.543 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\e0c60d1d839367de8be4546fa42476ec4410f3089af50fbcc0e0fafe117c5150_sk: The system cannot find the path specified.] +2020-02-19 16:26:30.549 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-02-19 16:26:30.549 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-02-19 16:26:30.549 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-02-19 16:26:30.561 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-19 16:26:31.437 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-02-19 16:26:31.439 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-02-19 16:26:31.442 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-02-19 16:26:32.026 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-02-19 16:26:32.604 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-02-19 16:26:32.608 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-02-19 16:26:32.608 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-02-19 16:26:32.609 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-02-19 16:26:32.621 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-02-19 16:26:32.622 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-02-19 16:26:32.627 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-02-19 16:26:32.936 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-19 16:26:32.937 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-02-19 16:26:32.939 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-02-19 16:26:32.941 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-02-19 16:26:33.283 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-19 16:26:33.288 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Wed Feb 19 16:26:23 CST 2020]; root of context hierarchy +2020-02-19 16:26:33.290 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 diff --git a/distributed-deploy/bcp-install-main/logs/info/2020-02-24.0.log b/distributed-deploy/bcp-install-main/logs/info/2020-02-24.0.log new file mode 100644 index 00000000..a3f3c701 --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/info/2020-02-24.0.log @@ -0,0 +1,462 @@ +2020-02-24 09:50:25.002 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-24 09:50:25.052 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-24 09:50:26.311 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-24 09:50:26.348 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@f381794, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@2cdd0d4b, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@7e9131d5, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2e1d27ba, org.springframework.test.context.support.DirtiesContextTestExecutionListener@61d6015a, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2525ff7e, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@524d6d96, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@37858383] +2020-02-24 09:50:27.019 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 9060 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-24 09:50:27.019 [main] INFO InitTest - The following profiles are active: dev +2020-02-24 09:50:27.118 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 09:50:27 CST 2020]; root of context hierarchy +2020-02-24 09:50:28.384 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-24 09:50:29.068 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$9ddde8f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-24 09:50:29.415 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-24 09:50:30.152 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-24 09:50:30.153 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 09:50:30.154 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-02-24 09:50:30.154 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-24 09:50:30.155 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-24 09:50:30.155 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-24 09:50:30.155 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-24 09:50:30.155 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-24 09:50:30.156 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-24 09:50:30.162 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-24 09:50:30.163 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-24 09:50:30.164 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-24 09:50:30.168 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-24 09:50:30.169 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 09:50:30.396 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 09:50:30.396 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 09:50:30.583 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-24 09:50:30.587 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-24 09:50:30.675 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-24 09:50:30.948 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 09:50:27 CST 2020]; root of context hierarchy +2020-02-24 09:50:31.069 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-24 09:50:32.093 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-24 09:50:32.093 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-24 09:50:32.136 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-24 09:50:32.191 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-24 09:50:32.487 [main] INFO InitTest - Started InitTest in 6.041 seconds (JVM running for 12.077) +2020-02-24 09:50:32.491 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-24 09:50:32.500 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 09:50:32.500 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-24 09:50:32.500 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-24 09:50:32.701 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-02-24 09:50:32.758 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-02-24 09:50:32.963 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-02-24 09:50:32.963 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-02-24 09:50:32.988 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-02-24 09:50:33.563 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 09:50:33.564 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-02-24 09:50:33.564 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 09:50:33.564 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-02-24 09:50:33.564 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 09:50:33.912 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-02-24 09:50:36.387 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-02-24 09:50:36.743 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-02-24 09:50:36.728 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [75f3a096a4bd7f99b6748492d44f2ce95e7786d4d2a0f36e6606754e796dc21f]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\75f3a096a4bd7f99b6748492d44f2ce95e7786d4d2a0f36e6606754e796dc21f_sk: The system cannot find the path specified.] +2020-02-24 09:50:36.753 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-02-24 09:50:36.754 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\75f3a096a4bd7f99b6748492d44f2ce95e7786d4d2a0f36e6606754e796dc21f_sk: The system cannot find the path specified.] +2020-02-24 09:50:36.769 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-02-24 09:50:36.769 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-02-24 09:50:36.770 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-02-24 09:50:36.813 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-24 09:50:37.683 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-02-24 09:50:37.696 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-02-24 09:50:37.706 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-02-24 09:50:38.212 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-02-24 09:50:38.686 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-02-24 09:50:38.691 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-02-24 09:50:38.691 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-02-24 09:50:38.725 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-02-24 09:50:38.753 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-02-24 09:50:38.754 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-02-24 09:50:38.763 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-02-24 09:50:39.035 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 09:50:39.086 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-02-24 09:50:39.100 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-02-24 09:50:39.126 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-02-24 09:50:39.393 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 09:50:39.399 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 09:50:27 CST 2020]; root of context hierarchy +2020-02-24 09:50:39.401 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-02-24 10:03:50.302 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-24 10:03:50.315 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-24 10:03:50.624 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-24 10:03:50.648 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-02-24 10:03:51.118 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 8668 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-24 10:03:51.119 [main] INFO InitTest - The following profiles are active: dev +2020-02-24 10:03:51.196 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Mon Feb 24 10:03:51 CST 2020]; root of context hierarchy +2020-02-24 10:03:52.337 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-24 10:03:52.968 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$3fabf660] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-24 10:03:53.302 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-24 10:03:54.028 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-24 10:03:54.031 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-24 10:03:54.031 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-24 10:03:54.032 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-02-24 10:03:54.032 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-24 10:03:54.033 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-24 10:03:54.033 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-24 10:03:54.034 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 10:03:54.035 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-24 10:03:54.041 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-24 10:03:54.042 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-24 10:03:54.043 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-24 10:03:54.047 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-24 10:03:54.047 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 10:03:54.272 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 10:03:54.272 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 10:03:54.441 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-24 10:03:54.444 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-24 10:03:54.525 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-24 10:03:54.764 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Mon Feb 24 10:03:51 CST 2020]; root of context hierarchy +2020-02-24 10:03:54.887 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-24 10:03:55.860 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-24 10:03:55.861 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-24 10:03:55.897 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-24 10:03:55.949 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-24 10:03:56.218 [main] INFO InitTest - Started InitTest in 5.5 seconds (JVM running for 7.142) +2020-02-24 10:03:56.221 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-24 10:03:56.229 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 10:03:56.229 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-24 10:03:56.229 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-24 10:03:56.390 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-02-24 10:03:56.410 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-02-24 10:03:56.445 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-02-24 10:03:56.445 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-02-24 10:03:56.450 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-02-24 10:03:56.610 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 10:03:56.610 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-02-24 10:03:56.610 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 10:03:56.610 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-02-24 10:03:56.610 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 10:03:56.793 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-02-24 10:03:57.018 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-02-24 10:03:57.115 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-02-24 10:03:57.115 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-02-24 10:03:57.115 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [b2106384a4bb500f38cb48c145af3fc472a1e8b49ddd4c5be4dfc33522b4d777]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\b2106384a4bb500f38cb48c145af3fc472a1e8b49ddd4c5be4dfc33522b4d777_sk: The system cannot find the path specified.] +2020-02-24 10:03:57.115 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\b2106384a4bb500f38cb48c145af3fc472a1e8b49ddd4c5be4dfc33522b4d777_sk: The system cannot find the path specified.] +2020-02-24 10:03:57.120 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-02-24 10:03:57.120 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-02-24 10:03:57.121 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-02-24 10:03:57.142 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-24 10:03:57.890 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-02-24 10:03:57.891 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-02-24 10:03:57.894 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-02-24 10:03:58.377 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-02-24 10:03:58.861 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-02-24 10:03:58.864 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-02-24 10:03:58.865 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-02-24 10:03:58.866 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-02-24 10:03:58.878 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-02-24 10:03:58.878 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-02-24 10:03:58.883 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-02-24 10:03:59.140 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 10:03:59.143 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-02-24 10:03:59.144 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-02-24 10:03:59.146 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-02-24 10:03:59.402 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 10:03:59.408 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Mon Feb 24 10:03:51 CST 2020]; root of context hierarchy +2020-02-24 10:03:59.411 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-02-24 10:06:16.785 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-24 10:06:16.801 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-24 10:06:17.142 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-24 10:06:17.163 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@f381794, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@2cdd0d4b, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@7e9131d5, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2e1d27ba, org.springframework.test.context.support.DirtiesContextTestExecutionListener@61d6015a, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2525ff7e, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@524d6d96, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@37858383] +2020-02-24 10:06:17.616 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 9360 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-24 10:06:17.616 [main] INFO InitTest - The following profiles are active: dev +2020-02-24 10:06:17.673 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 10:06:17 CST 2020]; root of context hierarchy +2020-02-24 10:06:18.737 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-24 10:06:19.364 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$9ddde8f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-24 10:06:19.714 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-24 10:06:20.408 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-24 10:06:20.410 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-24 10:06:20.410 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-24 10:06:20.410 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 10:06:20.411 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-02-24 10:06:20.411 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-24 10:06:20.412 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-24 10:06:20.412 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-24 10:06:20.413 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-24 10:06:20.420 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-24 10:06:20.420 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-24 10:06:20.420 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-24 10:06:20.424 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-24 10:06:20.425 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 10:06:20.650 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 10:06:20.651 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 10:06:20.810 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-24 10:06:20.813 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-24 10:06:20.900 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-24 10:06:21.145 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 10:06:17 CST 2020]; root of context hierarchy +2020-02-24 10:06:21.263 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-24 10:06:22.199 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-24 10:06:22.200 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-24 10:06:22.233 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-24 10:06:22.287 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-24 10:06:22.546 [main] INFO InitTest - Started InitTest in 5.324 seconds (JVM running for 7.47) +2020-02-24 10:06:22.549 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-24 10:06:22.559 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 10:06:22.559 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-24 10:06:22.559 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-24 10:06:22.705 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-02-24 10:06:22.731 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-02-24 10:06:22.766 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-02-24 10:06:22.766 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-02-24 10:06:22.772 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-02-24 10:06:22.919 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 10:06:22.920 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-02-24 10:06:22.920 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 10:06:22.920 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-02-24 10:06:22.920 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 10:06:23.097 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-02-24 10:06:23.402 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-02-24 10:06:23.517 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-02-24 10:06:23.517 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-02-24 10:06:23.517 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [a25caf253e6c363f02f8a209aa1018a8fe434b09e0fb70b9339282b5788d44d5]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\a25caf253e6c363f02f8a209aa1018a8fe434b09e0fb70b9339282b5788d44d5_sk: The system cannot find the path specified.] +2020-02-24 10:06:23.518 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\a25caf253e6c363f02f8a209aa1018a8fe434b09e0fb70b9339282b5788d44d5_sk: The system cannot find the path specified.] +2020-02-24 10:06:23.535 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-02-24 10:06:23.535 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-02-24 10:06:23.535 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-02-24 10:06:23.546 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-24 10:06:24.299 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-02-24 10:06:24.300 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-02-24 10:06:24.302 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-02-24 10:06:24.793 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-02-24 10:06:25.283 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-02-24 10:06:25.287 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-02-24 10:06:25.287 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-02-24 10:06:25.288 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-02-24 10:06:25.298 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-02-24 10:06:25.299 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-02-24 10:06:25.304 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-02-24 10:06:25.573 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 10:06:25.576 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-02-24 10:06:25.578 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-02-24 10:06:25.580 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-02-24 10:06:25.831 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 10:06:25.836 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 10:06:17 CST 2020]; root of context hierarchy +2020-02-24 10:06:25.839 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-02-24 10:07:35.302 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-24 10:07:35.321 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-24 10:07:35.680 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-24 10:07:35.701 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@f381794, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@2cdd0d4b, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@7e9131d5, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2e1d27ba, org.springframework.test.context.support.DirtiesContextTestExecutionListener@61d6015a, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2525ff7e, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@524d6d96, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@37858383] +2020-02-24 10:07:36.190 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 1196 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-24 10:07:36.191 [main] INFO InitTest - The following profiles are active: dev +2020-02-24 10:07:36.233 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 10:07:36 CST 2020]; root of context hierarchy +2020-02-24 10:07:37.312 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-24 10:07:37.937 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$9ddde8f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-24 10:07:38.282 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-24 10:07:38.977 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-24 10:07:38.978 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-24 10:07:38.979 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-24 10:07:38.979 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-02-24 10:07:38.980 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-24 10:07:38.980 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 10:07:38.980 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-24 10:07:38.980 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-24 10:07:38.982 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-24 10:07:38.988 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-24 10:07:38.988 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-24 10:07:38.989 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-24 10:07:38.993 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-24 10:07:38.994 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 10:07:39.256 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 10:07:39.257 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 10:07:39.406 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-24 10:07:39.408 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-24 10:07:39.503 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-24 10:07:39.749 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 10:07:36 CST 2020]; root of context hierarchy +2020-02-24 10:07:39.885 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-24 10:07:40.828 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-24 10:07:40.829 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-24 10:07:40.868 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-24 10:07:40.914 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-24 10:07:41.177 [main] INFO InitTest - Started InitTest in 5.41 seconds (JVM running for 7.482) +2020-02-24 10:07:41.181 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-24 10:07:41.191 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 10:07:41.191 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-24 10:07:41.192 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-24 10:07:41.329 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-02-24 10:07:41.354 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-02-24 10:07:41.379 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-02-24 10:07:41.380 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-02-24 10:07:41.384 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-02-24 10:07:41.503 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 10:07:41.504 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-02-24 10:07:41.504 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 10:07:41.504 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-02-24 10:07:41.504 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 10:07:41.672 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-02-24 10:07:41.886 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-02-24 10:07:42.044 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-02-24 10:07:42.044 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\ce26216b1619101065ee53be6bf1afb96af656ab66a976875d28062b43e310b0_sk: The system cannot find the path specified.] +2020-02-24 10:07:42.044 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-02-24 10:07:42.044 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [ce26216b1619101065ee53be6bf1afb96af656ab66a976875d28062b43e310b0]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\ce26216b1619101065ee53be6bf1afb96af656ab66a976875d28062b43e310b0_sk: The system cannot find the path specified.] +2020-02-24 10:07:42.050 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-02-24 10:07:42.050 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-02-24 10:07:42.050 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-02-24 10:07:42.061 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-24 10:07:42.849 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-02-24 10:07:42.850 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-02-24 10:07:42.853 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-02-24 10:07:43.357 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-02-24 10:07:43.852 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-02-24 10:07:43.857 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-02-24 10:07:43.857 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-02-24 10:07:43.858 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-02-24 10:07:43.870 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-02-24 10:07:43.871 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-02-24 10:07:43.876 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-02-24 10:07:44.153 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 10:07:44.156 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-02-24 10:07:44.158 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-02-24 10:07:44.159 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-02-24 10:07:44.434 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 10:07:44.439 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 10:07:36 CST 2020]; root of context hierarchy +2020-02-24 10:07:44.441 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-02-24 10:11:46.260 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-24 10:11:46.272 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-24 10:11:46.674 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-24 10:11:46.696 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@6f27a732, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@6c779568, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@f381794, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextTestExecutionListener@7e9131d5, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2e1d27ba, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@61d6015a, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@2525ff7e, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@524d6d96, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4ef37659] +2020-02-24 10:11:47.190 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 3260 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-24 10:11:47.191 [main] INFO InitTest - The following profiles are active: dev +2020-02-24 10:11:47.232 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6986852: startup date [Mon Feb 24 10:11:47 CST 2020]; root of context hierarchy +2020-02-24 10:11:48.316 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-24 10:11:48.919 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$6298c94e] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-24 10:11:49.235 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-24 10:11:49.900 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-24 10:11:49.902 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-24 10:11:49.902 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-24 10:11:49.902 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-24 10:11:49.903 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-02-24 10:11:49.903 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-24 10:11:49.904 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-24 10:11:49.904 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 10:11:49.905 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-24 10:11:49.910 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-24 10:11:49.912 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-24 10:11:49.912 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-24 10:11:49.917 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-24 10:11:49.917 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 10:11:50.170 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 10:11:50.171 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 10:11:50.322 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-24 10:11:50.325 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-24 10:11:50.405 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-24 10:11:50.654 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6986852: startup date [Mon Feb 24 10:11:47 CST 2020]; root of context hierarchy +2020-02-24 10:11:50.763 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-24 10:11:51.726 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-24 10:11:51.727 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-24 10:11:51.760 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-24 10:11:51.807 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-24 10:11:52.090 [main] INFO InitTest - Started InitTest in 5.341 seconds (JVM running for 7.85) +2020-02-24 10:11:52.093 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-24 10:11:52.101 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 10:11:52.102 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-24 10:11:52.102 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-24 10:11:52.233 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-02-24 10:11:52.254 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-02-24 10:11:52.286 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-02-24 10:11:52.286 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-02-24 10:11:52.291 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-02-24 10:11:52.427 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 10:11:52.427 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-02-24 10:11:52.427 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 10:11:52.427 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-02-24 10:11:52.427 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 10:11:52.671 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-02-24 10:11:52.909 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-02-24 10:11:53.023 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-02-24 10:11:53.023 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-02-24 10:11:53.023 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [fad9d3113ee5a0e4e1d392de74f4569a23685722c5869e3fd02bace656001c82]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\fad9d3113ee5a0e4e1d392de74f4569a23685722c5869e3fd02bace656001c82_sk: The system cannot find the path specified.] +2020-02-24 10:11:53.024 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\fad9d3113ee5a0e4e1d392de74f4569a23685722c5869e3fd02bace656001c82_sk: The system cannot find the path specified.] +2020-02-24 10:11:53.040 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-02-24 10:11:53.040 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-02-24 10:11:53.040 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-02-24 10:11:53.062 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-24 10:11:53.869 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-02-24 10:11:53.870 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-02-24 10:11:53.874 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-02-24 10:11:54.389 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-02-24 10:11:54.903 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-02-24 10:11:54.908 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-02-24 10:11:54.908 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-02-24 10:11:54.910 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-02-24 10:11:54.922 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-02-24 10:11:54.922 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-02-24 10:11:54.927 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-02-24 10:11:55.207 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 10:11:55.209 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-02-24 10:11:55.211 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-02-24 10:11:55.212 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-02-24 10:11:55.471 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 10:11:55.476 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6986852: startup date [Mon Feb 24 10:11:47 CST 2020]; root of context hierarchy +2020-02-24 10:11:55.479 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-02-24 12:38:29.327 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-24 12:38:29.418 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-24 12:38:30.156 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-24 12:38:30.191 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@f381794, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@2cdd0d4b, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@7e9131d5, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2e1d27ba, org.springframework.test.context.support.DirtiesContextTestExecutionListener@61d6015a, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2525ff7e, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@524d6d96, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@37858383] +2020-02-24 12:38:30.668 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 6140 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-24 12:38:30.668 [main] INFO InitTest - The following profiles are active: dev +2020-02-24 12:38:30.749 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 12:38:30 CST 2020]; root of context hierarchy +2020-02-24 12:38:31.901 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-24 12:38:32.488 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$9ddde8f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-24 12:38:32.805 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-24 12:38:33.488 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-24 12:38:33.489 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 12:38:33.490 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-24 12:38:33.490 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-24 12:38:33.491 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(com.cgb.bcpinstall.common.entity.InstallCmd,javax.servlet.http.HttpServletRequest) +2020-02-24 12:38:33.491 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-24 12:38:33.491 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-24 12:38:33.492 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-24 12:38:33.493 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-24 12:38:33.498 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-24 12:38:33.499 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-24 12:38:33.500 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-24 12:38:33.504 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-24 12:38:33.504 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-24 12:38:33.748 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 12:38:33.748 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-24 12:38:33.877 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-24 12:38:33.879 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-24 12:38:33.950 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-24 12:38:34.261 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 12:38:30 CST 2020]; root of context hierarchy +2020-02-24 12:38:34.410 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-24 12:38:35.366 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-24 12:38:35.366 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-24 12:38:35.399 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-24 12:38:35.444 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-24 12:38:35.727 [main] INFO InitTest - Started InitTest in 5.476 seconds (JVM running for 9.803) +2020-02-24 12:38:35.729 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-24 12:38:35.737 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 12:38:35.738 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-24 12:38:35.738 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-24 12:38:35.904 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-02-24 12:38:35.934 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-02-24 12:38:35.962 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-02-24 12:38:35.963 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-02-24 12:38:35.967 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-02-24 12:38:36.124 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-24 12:38:36.125 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-02-24 12:38:36.125 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 12:38:36.125 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-02-24 12:38:36.125 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-24 12:38:36.297 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-02-24 12:38:36.698 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-02-24 12:38:36.809 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-02-24 12:38:36.809 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-02-24 12:38:36.809 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [157147e69aab023cdc78eff87c48ead39b9435e1ca7753204b45eabc9f59b689]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\157147e69aab023cdc78eff87c48ead39b9435e1ca7753204b45eabc9f59b689_sk: The system cannot find the path specified.] +2020-02-24 12:38:36.809 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\157147e69aab023cdc78eff87c48ead39b9435e1ca7753204b45eabc9f59b689_sk: The system cannot find the path specified.] +2020-02-24 12:38:36.825 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-02-24 12:38:36.825 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-02-24 12:38:36.825 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-02-24 12:38:36.838 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-24 12:38:37.505 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-02-24 12:38:37.506 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-02-24 12:38:37.508 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-02-24 12:38:37.928 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-02-24 12:38:38.347 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-02-24 12:38:38.351 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-02-24 12:38:38.351 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-02-24 12:38:38.352 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-02-24 12:38:38.364 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-02-24 12:38:38.365 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-02-24 12:38:38.370 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-02-24 12:38:38.598 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 12:38:39.451 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-02-24 12:38:39.453 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-02-24 12:38:39.454 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-02-24 12:38:39.680 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-24 12:38:39.685 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Mon Feb 24 12:38:30 CST 2020]; root of context hierarchy +2020-02-24 12:38:39.688 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 diff --git a/distributed-deploy/bcp-install-main/logs/info/2020-02-27.0.log b/distributed-deploy/bcp-install-main/logs/info/2020-02-27.0.log new file mode 100644 index 00000000..629c4e15 --- /dev/null +++ b/distributed-deploy/bcp-install-main/logs/info/2020-02-27.0.log @@ -0,0 +1,292 @@ +2020-02-27 10:42:50.622 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-27 10:42:50.631 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-27 10:42:50.884 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-27 10:42:50.908 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@f381794, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@2cdd0d4b, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@7e9131d5, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2e1d27ba, org.springframework.test.context.support.DirtiesContextTestExecutionListener@61d6015a, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2525ff7e, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@524d6d96, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@152aa092, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@37858383] +2020-02-27 10:42:51.402 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 13464 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-27 10:42:51.403 [main] INFO InitTest - The following profiles are active: dev +2020-02-27 10:42:51.455 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Thu Feb 27 10:42:51 CST 2020]; root of context hierarchy +2020-02-27 10:42:52.695 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-27 10:42:53.375 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$9ddde8f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-27 10:42:53.703 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-27 10:42:54.483 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-27 10:42:54.484 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-27 10:42:54.485 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 10:42:54.485 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(javax.servlet.http.HttpServletRequest) +2020-02-27 10:42:54.486 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-27 10:42:54.486 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-27 10:42:54.486 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-27 10:42:54.487 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-27 10:42:54.488 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-27 10:42:54.492 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-27 10:42:54.494 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-27 10:42:54.494 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-27 10:42:54.498 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-27 10:42:54.498 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 10:42:54.720 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 10:42:54.721 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 10:42:54.873 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-27 10:42:54.875 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-27 10:42:54.967 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-27 10:42:55.223 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Thu Feb 27 10:42:51 CST 2020]; root of context hierarchy +2020-02-27 10:42:55.343 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-27 10:42:56.385 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-27 10:42:56.386 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-27 10:42:56.430 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-27 10:42:56.487 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-27 10:42:56.817 [main] INFO InitTest - Started InitTest in 5.857 seconds (JVM running for 8.305) +2020-02-27 10:42:56.820 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-27 10:42:56.831 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-27 10:42:56.831 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-27 10:42:56.831 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-27 10:42:56.997 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 配置文件中peer没有配置相应的交易查询端口 +2020-02-27 10:42:57.004 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@6e01f9b0: startup date [Thu Feb 27 10:42:51 CST 2020]; root of context hierarchy +2020-02-27 10:42:57.006 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-02-27 10:43:19.148 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-27 10:43:19.191 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-27 10:43:19.661 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-27 10:43:19.694 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-02-27 10:43:20.383 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 8100 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-27 10:43:20.385 [main] INFO InitTest - The following profiles are active: dev +2020-02-27 10:43:20.508 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 10:43:20 CST 2020]; root of context hierarchy +2020-02-27 10:43:21.702 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-27 10:43:22.344 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$3fabf660] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-27 10:43:22.693 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-27 10:43:23.442 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-27 10:43:23.444 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-27 10:43:23.444 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-27 10:43:23.444 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-27 10:43:23.445 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 10:43:23.445 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-27 10:43:23.445 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(javax.servlet.http.HttpServletRequest) +2020-02-27 10:43:23.445 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-27 10:43:23.446 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-27 10:43:23.450 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-27 10:43:23.450 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-27 10:43:23.451 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-27 10:43:23.454 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-27 10:43:23.455 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 10:43:23.704 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 10:43:23.704 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 10:43:23.851 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-27 10:43:23.855 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-27 10:43:23.950 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-27 10:43:24.216 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 10:43:20 CST 2020]; root of context hierarchy +2020-02-27 10:43:24.347 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-27 10:43:25.364 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-27 10:43:25.365 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-27 10:43:25.401 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-27 10:43:25.455 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-27 10:43:25.726 [main] INFO InitTest - Started InitTest in 5.948 seconds (JVM running for 7.673) +2020-02-27 10:43:25.730 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-27 10:43:25.742 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-27 10:43:25.742 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-27 10:43:25.742 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-27 10:43:25.916 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 配置文件中后台没有配置相应的websocket端口 +2020-02-27 10:43:25.917 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 配置文件中peer没有配置相应的交易查询端口 +2020-02-27 10:43:25.924 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 10:43:20 CST 2020]; root of context hierarchy +2020-02-27 10:43:25.927 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-02-27 10:44:00.466 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-27 10:44:00.481 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-27 10:44:00.949 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-27 10:44:00.969 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-02-27 10:44:01.510 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 9100 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-27 10:44:01.510 [main] INFO InitTest - The following profiles are active: dev +2020-02-27 10:44:01.609 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 10:44:01 CST 2020]; root of context hierarchy +2020-02-27 10:44:02.824 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-27 10:44:03.458 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$3fabf660] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-27 10:44:03.806 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-27 10:44:04.585 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:04.586 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:04.586 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:04.587 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:04.587 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 10:44:04.587 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-27 10:44:04.587 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:04.587 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:04.588 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:04.593 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-27 10:44:04.595 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-27 10:44:04.595 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-27 10:44:04.600 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:04.600 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 10:44:04.873 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 10:44:04.873 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 10:44:05.051 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-27 10:44:05.054 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-27 10:44:05.148 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-27 10:44:05.390 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 10:44:01 CST 2020]; root of context hierarchy +2020-02-27 10:44:05.514 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-27 10:44:06.530 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-27 10:44:06.531 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-27 10:44:06.564 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-27 10:44:06.613 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-27 10:44:06.895 [main] INFO InitTest - Started InitTest in 5.87 seconds (JVM running for 7.473) +2020-02-27 10:44:06.899 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-27 10:44:06.910 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-27 10:44:06.911 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-27 10:44:06.911 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-27 10:44:07.079 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 配置文件中orderer或peer的域名不匹配 +2020-02-27 10:44:07.087 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 10:44:01 CST 2020]; root of context hierarchy +2020-02-27 10:44:07.090 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-02-27 10:44:19.055 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-27 10:44:19.073 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-27 10:44:19.574 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-27 10:44:19.599 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-02-27 10:44:20.133 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 10880 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-27 10:44:20.133 [main] INFO InitTest - The following profiles are active: dev +2020-02-27 10:44:20.194 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 10:44:20 CST 2020]; root of context hierarchy +2020-02-27 10:44:21.367 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-27 10:44:22.033 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$3fabf660] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-27 10:44:22.460 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-27 10:44:23.204 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:23.206 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:23.206 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:23.206 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:23.207 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-27 10:44:23.207 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:23.208 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:23.208 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 10:44:23.209 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:23.214 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-27 10:44:23.215 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-27 10:44:23.216 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-27 10:44:23.220 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-27 10:44:23.221 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 10:44:23.455 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 10:44:23.456 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 10:44:23.599 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-27 10:44:23.601 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-27 10:44:23.674 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-27 10:44:23.953 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 10:44:20 CST 2020]; root of context hierarchy +2020-02-27 10:44:24.063 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-27 10:44:25.097 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-27 10:44:25.097 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-27 10:44:25.133 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-27 10:44:25.181 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-27 10:44:25.483 [main] INFO InitTest - Started InitTest in 5.818 seconds (JVM running for 7.465) +2020-02-27 10:44:25.486 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-27 10:44:25.497 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-27 10:44:25.497 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-27 10:44:25.497 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-27 10:44:25.667 [main] INFO com.cgb.bcpinstall.biz.InitializeBiz - 当前机构状态为:1 +2020-02-27 10:44:25.697 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 chaincodeendorsementpolicy.yaml 文件成功 +2020-02-27 10:44:25.809 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 configtx.yaml 文件成功 +2020-02-27 10:44:25.809 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成配置文件,当前机构状态为:1 +2020-02-27 10:44:25.826 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 crypto-config.yaml 文件成功 +2020-02-27 10:44:26.300 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-27 10:44:26.300 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - +2020-02-27 10:44:26.300 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-27 10:44:26.300 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ############### 使用 cryptogen 工具创建证书 ############## +2020-02-27 10:44:26.300 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - ########################################################## +2020-02-27 10:44:26.626 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + 'F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe' generate --config=./crypto-config.yaml +2020-02-27 10:44:27.468 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - bcp.com +2020-02-27 10:44:27.746 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 2020-02-27 10:44:27.715 CST [bccsp_sw] storePrivateKey -> ERRO 001 Failed storing private key [d00b6b83c8371934b935c7f802dd355a4ffe87191502bc1650a13a0c90ed2223]: [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\d00b6b83c8371934b935c7f802dd355a4ffe87191502bc1650a13a0c90ed2223_sk: The system cannot find the path specified.] +2020-02-27 10:44:27.746 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Error generating local MSP for {orderer orderer.bcp.com [orderer.bcp.com orderer]}: +2020-02-27 10:44:27.746 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - Failed storing key [ECDSAP256]: Failed storing ECDSA private key [open crypto-config\ordererOrganizations\bcp.com\orderers\orderer.bcp.com\msp\keystore\d00b6b83c8371934b935c7f802dd355a4ffe87191502bc1650a13a0c90ed2223_sk: The system cannot find the path specified.] +2020-02-27 10:44:27.764 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - 创建证书失败... +2020-02-27 10:44:27.764 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + res=1 +2020-02-27 10:44:27.764 [process stream reader] INFO com.cgb.bcpinstall.common.util.ProcessUtil - + set +x +2020-02-27 10:44:27.795 [main] ERROR com.cgb.bcpinstall.biz.helper.Initializer - 创建证书失败 +2020-02-27 10:44:28.674 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-orderer.yaml 文件成功 +2020-02-27 10:44:28.687 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 orderer.properties 文件成功 +2020-02-27 10:44:28.698 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer1.bcp.com +2020-02-27 10:44:29.206 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 扩容节点其他节点的host:peer0.bcp.com +2020-02-27 10:44:29.705 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 新节点生成docker-compose文件路径:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml +2020-02-27 10:44:29.710 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 docker-compose-peer.yaml 文件成功 +2020-02-27 10:44:29.710 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 开始创建 backend 相关文件 +2020-02-27 10:44:29.718 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 initData.yaml 文件成功 +2020-02-27 10:44:29.731 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 network-config.json 文件成功 +2020-02-27 10:44:29.732 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 bcsconfig.properties 文件成功 +2020-02-27 10:44:29.744 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-backend.sh 文件成功 +2020-02-27 10:44:30.008 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-27 10:44:30.957 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 vue.config.js 文件成功 +2020-02-27 10:44:30.974 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 start-web.sh 文件成功 +2020-02-27 10:44:30.996 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 collections_config.json 文件成功 +2020-02-27 10:44:31.230 [main] INFO com.cgb.bcpinstall.biz.helper.Initializer - 生成 application.yml 文件成功 +2020-02-27 10:44:31.235 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 10:44:20 CST 2020]; root of context hierarchy +2020-02-27 10:44:31.239 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-02-27 11:01:59.461 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-27 11:01:59.496 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-27 11:01:59.948 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-27 11:01:59.969 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-02-27 11:02:00.570 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 5928 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-27 11:02:00.570 [main] INFO InitTest - The following profiles are active: dev +2020-02-27 11:02:00.622 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 11:02:00 CST 2020]; root of context hierarchy +2020-02-27 11:02:01.896 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-27 11:02:02.569 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$3fabf660] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-27 11:02:02.977 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-27 11:02:03.728 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:03.729 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:03.730 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-27 11:02:03.731 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 11:02:03.731 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:03.732 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:03.732 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:03.732 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:03.733 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:03.738 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-27 11:02:03.740 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-27 11:02:03.740 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-27 11:02:03.744 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:03.745 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 11:02:03.979 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 11:02:03.979 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 11:02:04.148 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-27 11:02:04.151 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-27 11:02:04.256 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-27 11:02:04.552 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 11:02:00 CST 2020]; root of context hierarchy +2020-02-27 11:02:04.689 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-27 11:02:05.723 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-27 11:02:05.724 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-27 11:02:05.763 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-27 11:02:05.827 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-27 11:02:06.101 [main] INFO InitTest - Started InitTest in 6.055 seconds (JVM running for 7.588) +2020-02-27 11:02:06.103 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-27 11:02:06.111 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-27 11:02:06.112 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-27 11:02:06.112 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-27 11:02:06.272 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 11:02:00 CST 2020]; root of context hierarchy +2020-02-27 11:02:06.274 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 +2020-02-27 11:02:55.027 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [InitTest], using SpringBootContextLoader +2020-02-27 11:02:55.057 [main] INFO o.s.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [InitTest]: no resource found for suffixes {-context.xml, Context.groovy}. +2020-02-27 11:02:55.650 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener] +2020-02-27 11:02:55.678 [main] INFO o.s.b.t.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@2cdd0d4b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7e9131d5, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@2e1d27ba, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@61d6015a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2525ff7e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@524d6d96, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@152aa092, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@44a7bfbc, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@4ef37659, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@776b83cc, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37858383, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4e268090] +2020-02-27 11:02:56.397 [main] INFO InitTest - Starting InitTest on DESKTOP-7VAN58A with PID 12680 (started by Ddpool in F:\space30\bcp-app-install\bcp-install-main) +2020-02-27 11:02:56.397 [main] INFO InitTest - The following profiles are active: dev +2020-02-27 11:02:56.450 [main] INFO o.s.w.context.support.GenericWebApplicationContext - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 11:02:56 CST 2020]; root of context hierarchy +2020-02-27 11:02:57.734 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode! +2020-02-27 11:02:58.354 [main] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$9ddde8f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2020-02-27 11:02:58.699 [main] INFO com.cgb.bcpinstall.common.util.HttpClientUtil - HttpClientUtil init. poolsize:30, socketTimeout:60000, connectTimeout:60000, connectionRequestTimeout:60000, defaultMaxPerRoute:10 +2020-02-27 11:02:59.487 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/remove],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doRemove(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:59.489 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/pushPackage],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.pushInstallPackage(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:59.489 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/backendStatus],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.checkBackendStatus(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:59.489 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/finished],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.installFinished(com.cgb.bcpinstall.common.entity.InstallResult,javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:59.490 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/end],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.endInstall(com.cgb.bcpinstall.common.entity.EndCmd) +2020-02-27 11:02:59.490 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/getPackage/{os}],produces=[application/json;charset=UTF-8]}" onto public void com.cgb.bcpinstall.api.controller.InstallController.getInstallData(java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 11:02:59.490 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/start],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doInstall(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:59.491 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/install/update],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.InstallController.doUpdate(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:59.491 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/v1/reg/role],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public com.cgb.bcpinstall.common.response.HttpInstallResponse com.cgb.bcpinstall.api.controller.RegisterController.regRole(com.cgb.bcpinstall.common.entity.RoleRegEntity,javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:59.496 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/security]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() +2020-02-27 11:02:59.498 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources]}" onto public org.springframework.http.ResponseEntity> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() +2020-02-27 11:02:59.498 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/swagger-resources/configuration/ui]}" onto public org.springframework.http.ResponseEntity springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() +2020-02-27 11:02:59.502 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest) +2020-02-27 11:02:59.503 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) +2020-02-27 11:02:59.753 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/swagger-ui.html] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 11:02:59.753 [main] INFO o.s.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] +2020-02-27 11:02:59.902 [main] INFO com.cgb.bcpinstall.main.config.WebConfiguration - configureMessageConverters........ +2020-02-27 11:02:59.906 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - fastJsonHttpMessageConverter........ +2020-02-27 11:02:59.975 [main] INFO c.c.bcpinstall.common.fastJson.BaseFastJsonConfig - getFastJsonConfig..... +2020-02-27 11:03:00.245 [main] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 11:02:56 CST 2020]; root of context hierarchy +2020-02-27 11:03:00.363 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)] +2020-02-27 11:03:01.402 [main] INFO o.s.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647 +2020-02-27 11:03:01.403 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed +2020-02-27 11:03:01.438 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s) +2020-02-27 11:03:01.491 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references +2020-02-27 11:03:01.744 [main] INFO InitTest - Started InitTest in 5.988 seconds (JVM running for 7.684) +2020-02-27 11:03:01.747 [main] INFO com.cgb.bcpinstall.main.MainApplication - bcp-app-install 完成资源初始化 +2020-02-27 11:03:01.756 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** cryptogen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/cryptogen.exe +2020-02-27 11:03:01.756 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxgen工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxgen.exe +2020-02-27 11:03:01.756 [main] INFO com.cgb.bcpinstall.main.MainApplication - *** configtxlator工具本地路径为:F:\space30\bcp-app-install\bcp-install-main\resources/generateInstallPackage/masterPackage/\tools/windows/configtxlator.exe +2020-02-27 11:03:01.920 [main] ERROR com.cgb.bcpinstall.biz.InitializeBiz - 配置文件中相关配置项出错或为空 +2020-02-27 11:03:01.929 [Thread-2] INFO o.s.w.context.support.GenericWebApplicationContext - Closing org.springframework.web.context.support.GenericWebApplicationContext@2b9ed6da: startup date [Thu Feb 27 11:02:56 CST 2020]; root of context hierarchy +2020-02-27 11:03:01.931 [Thread-2] INFO o.s.context.support.DefaultLifecycleProcessor - Stopping beans in phase 2147483647 diff --git a/distributed-deploy/bcp-install-main/pom.xml b/distributed-deploy/bcp-install-main/pom.xml new file mode 100644 index 00000000..19062ab8 --- /dev/null +++ b/distributed-deploy/bcp-install-main/pom.xml @@ -0,0 +1,55 @@ + + + + bcp-install + com.cgb + 1.0.0-RELEASE + + 4.0.0 + + bcp-install-main + + + + com.cgb + bcp-install-biz + 1.0.0-RELEASE + + + com.cgb + bcp-install-api + 1.0.0-RELEASE + + + com.cgb + bcp-install-common + 1.0.0-RELEASE + compile + + + org.springframework + spring-test + 5.1.8.RELEASE + test + + + org.springframework.boot + spring-boot-test + 2.1.6.RELEASE + test + + + + + bcp-install + + + org.springframework.boot + spring-boot-maven-plugin + + + + + \ No newline at end of file diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/bcp-install.jar b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/bcp-install.jar new file mode 100644 index 00000000..e69de29b diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/configtx.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/configtx.yaml new file mode 100644 index 00000000..a8b7db87 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/configtx.yaml @@ -0,0 +1,162 @@ +Organizations: +- &id004 + Name: OrdererOrg + ID: OrdererMSP + MSPDir: crypto-config/ordererOrganizations/bcp.com/msp + Policies: + Readers: + Type: Signature + Rule: OR('OrdererMSP.member') + Writers: + Type: Signature + Rule: OR('OrdererMSP.member') + Admins: + Type: Signature + Rule: OR('OrdererMSP.admin') +- &id008 + Name: BcpMSP + ID: BcpMSP + MSPDir: crypto-config/peerOrganizations/bcp.com/msp + Policies: + Readers: + Type: Signature + Rule: OR('BcpMSP.admin','BcpMSP.peer','BcpMSP.client') + Writers: + Type: Signature + Rule: OR('BcpMSP.admin','BcpMSP.client') + Admins: + Type: Signature + Rule: OR('BcpMSP.admin') + AnchorPeers: + - Host: peer0.bcp.com + Port: 7051 +Capabilities: + Channel: + V1_3: true + Orderer: + V1_1: true + Application: + V1_3: true + V1_2: false + V1_1: false +Application: + Organizations: + Policies: &id006 + Readers: + Type: ImplicitMeta + Rule: ANY Readers + Writers: + Type: ImplicitMeta + Rule: ANY Writers + Admins: + Type: ImplicitMeta + Rule: MAJORITY Admins + Capabilities: &id007 + V1_3: true + V1_2: false + V1_1: false +Orderer: + OrdererType: solo + Addresses: + - orderer.bcp.com:7050 + BatchTimeout: 2s + BatchSize: &id002 + MaxMessageCount: 10 + AbsoluteMaxBytes: 99 MB + PreferredMaxBytes: 512 KB + Kafka: &id003 + Brokers: + - 127.0.0.1:9092 + Organizations: + Policies: &id005 + Readers: + Type: ImplicitMeta + Rule: ANY Readers + Writers: + Type: ImplicitMeta + Rule: ANY Writers + Admins: + Type: ImplicitMeta + Rule: MAJORITY Admins + BlockValidation: + Type: ImplicitMeta + Rule: ANY Writers +Channel: + Policies: &id001 + Readers: + Type: ImplicitMeta + Rule: ANY Readers + Writers: + Type: ImplicitMeta + Rule: ANY Writers + Admins: + Type: ImplicitMeta + Rule: MAJORITY Admins + Capabilities: &id009 + V1_3: true +Profiles: + SampleMultiNodeEtcdRaft: + Policies: *id001 + Capabilities: + V1_3: true + Orderer: + OrdererType: etcdraft + Addresses: + - orderer.bcp.com:7050 + - orderer2.bcp.com:8050 + - orderer3.bcp.com:9050 + BatchTimeout: 2s + BatchSize: *id002 + Kafka: *id003 + Organizations: + - *id004 + Policies: *id005 + EtcdRaft: + Consenters: + - ClientTLSCert: crypto-config/ordererOrganizations/bcp.com/orderers/orderer.bcp.com/tls/server.crt + Port: 7050 + Host: orderer.bcp.com + ServerTLSCert: crypto-config/ordererOrganizations/bcp.com/orderers/orderer.bcp.com/tls/server.crt + - ClientTLSCert: crypto-config/ordererOrganizations/bcp.com/orderers/orderer2.bcp.com/tls/server.crt + Port: 8050 + Host: orderer2.bcp.com + ServerTLSCert: crypto-config/ordererOrganizations/bcp.com/orderers/orderer2.bcp.com/tls/server.crt + - ClientTLSCert: crypto-config/ordererOrganizations/bcp.com/orderers/orderer3.bcp.com/tls/server.crt + Port: 9050 + Host: orderer3.bcp.com + ServerTLSCert: crypto-config/ordererOrganizations/bcp.com/orderers/orderer3.bcp.com/tls/server.crt + Capabilities: + V1_1: true + Application: + Organizations: + - *id004 + Policies: *id006 + Capabilities: *id007 + Consortiums: + SampleConsortium: + Organizations: + - *id008 + PrivateChannel: + Consortium: SampleConsortium + Policies: *id001 + Capabilities: *id009 + Application: + Organizations: + - *id008 + Policies: *id006 + Capabilities: + V1_3: true + V1_2: false + V1_1: false + OneOrgChannel: + Consortium: SampleConsortium + Policies: *id001 + Capabilities: *id009 + Application: + Organizations: + - *id008 + Policies: *id006 + Capabilities: + V1_3: true + V1_2: false + V1_1: false diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config.yaml new file mode 100644 index 00000000..891786b6 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config.yaml @@ -0,0 +1,16 @@ +OrdererOrgs: +- Name: Orderer + Domain: bcp.com + Specs: + - Hostname: orderer + - Hostname: orderer2 + - Hostname: orderer3 +PeerOrgs: +- Name: Bcp + Domain: bcp.com + EnableNodeOUs: true + Specs: + - Hostname: peer0 + - Hostname: peer1 + Users: + Count: 1 diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/ca/43fc76d71fe91d1c0aee839b815234ef5caf07aaa5003f535b765068ec8f294c_sk b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/ca/43fc76d71fe91d1c0aee839b815234ef5caf07aaa5003f535b765068ec8f294c_sk new file mode 100644 index 00000000..202311b6 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/ca/43fc76d71fe91d1c0aee839b815234ef5caf07aaa5003f535b765068ec8f294c_sk @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg0Flk7l5PTpMZyWHq +oTYHVZwcrfi+bLrSqLZqsOI/8BehRANCAASPWFWf6WMfYuriClnBboEmViykbfUT +EGtXK5fBTZEl7A+ZEaSfqXFpXQiM30lL+Vw1apx47Wy2w6Qvb7P1u5Hl +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/ca/ca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/ca/ca.bcp.com-cert.pem new file mode 100644 index 00000000..1d2b0bcc --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/ca/ca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICLjCCAdSgAwIBAgIRAOKc4aDvgMc56N/TlLgIQx0wCgYIKoZIzj0EAwIwYTEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xEzARBgNVBAMTCmNhLmJjcC5jb20w +HhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBhMQswCQYDVQQGEwJVUzET +MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQMA4G +A1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABI9YVZ/pYx9i6uIKWcFugSZWLKRt9RMQa1crl8FNkSXsD5kR +pJ+pcWldCIzfSUv5XDVqnHjtbLbDpC9vs/W7keWjbTBrMA4GA1UdDwEB/wQEAwIB +pjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB +/zApBgNVHQ4EIgQgQ/x21x/pHRwK7oObgVI071yvB6qlAD9TW3ZQaOyPKUwwCgYI +KoZIzj0EAwIDSAAwRQIhAL9OwwwTfy/vAJo5dOjTtXZIEYZzQELMv7LLeu/qAN0W +AiAUw8EFm4uZEd26wZW38K8XYtIdavoIe+RHJ/aO/mchOg== +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/msp/admincerts/ca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/msp/admincerts/ca.bcp.com-cert.pem new file mode 100644 index 00000000..940c9c62 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/msp/admincerts/ca.bcp.com-cert.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB+jCCAaGgAwIBAgIQJAP+94f2U1aUetXkSQmejjAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaME8xCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYD +VQQDEwpjYS5iY3AuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0M4zXp5v +fXN1yfNH7MoFungnTW+JhO8bo1DXSH+jeg9FmdNLv/ZP0cuYrvYoXENN00Bi5DAs +gH2rD7b9N1sE8qNNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYD +VR0jBCQwIoAgQ/x21x/pHRwK7oObgVI071yvB6qlAD9TW3ZQaOyPKUwwCgYIKoZI +zj0EAwIDRwAwRAIgMwwexYRzdFtKVRwN1q5JKqJiAuS/oXF/KVmJQkoq92ECIGnG +YCHF9b+CcUDNtxZDvVD9VMaEJ2Jn4e69jBCTEH+Y +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/msp/cacerts/ca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/msp/cacerts/ca.bcp.com-cert.pem new file mode 100644 index 00000000..1d2b0bcc --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/msp/cacerts/ca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICLjCCAdSgAwIBAgIRAOKc4aDvgMc56N/TlLgIQx0wCgYIKoZIzj0EAwIwYTEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xEzARBgNVBAMTCmNhLmJjcC5jb20w +HhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBhMQswCQYDVQQGEwJVUzET +MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQMA4G +A1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABI9YVZ/pYx9i6uIKWcFugSZWLKRt9RMQa1crl8FNkSXsD5kR +pJ+pcWldCIzfSUv5XDVqnHjtbLbDpC9vs/W7keWjbTBrMA4GA1UdDwEB/wQEAwIB +pjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB +/zApBgNVHQ4EIgQgQ/x21x/pHRwK7oObgVI071yvB6qlAD9TW3ZQaOyPKUwwCgYI +KoZIzj0EAwIDSAAwRQIhAL9OwwwTfy/vAJo5dOjTtXZIEYZzQELMv7LLeu/qAN0W +AiAUw8EFm4uZEd26wZW38K8XYtIdavoIe+RHJ/aO/mchOg== +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem new file mode 100644 index 00000000..21ebb46e --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMjCCAdmgAwIBAgIQZdM0SdQDeiKHTgNj27DIPjAKBggqhkjOPQQDAjBkMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNv +bTAeFw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGQxCzAJBgNVBAYTAlVT +MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRAw +DgYDVQQKEwdiY3AuY29tMRYwFAYDVQQDEw10bHNjYS5iY3AuY29tMFkwEwYHKoZI +zj0CAQYIKoZIzj0DAQcDQgAEolFqqCxkJ2yLMeo08rsD01JbyUgz+VMreYueIx4I +VQkGCvGBmqpiyvJX5dCu8vdkCSeU9fijvw5RsmYdoltq/aNtMGswDgYDVR0PAQH/ +BAQDAgGmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8E +BTADAQH/MCkGA1UdDgQiBCB01hlXy9NOGoSsDG+YSZnuSScwWaHQKAlSlaGBOw5A +EjAKBggqhkjOPQQDAgNHADBEAiAu3h+iRW35H7YX5Xwh67IPqJQGNGtIFqg5VLjZ +BcKuTgIgYau/gPw7jWwFqxQvzbA/tjR51iSmZmWER6/OmV2d4aY= +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/tlsca/74d61957cbd34e1a84ac0c6f984999ee49273059a1d028095295a1813b0e4012_sk b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/tlsca/74d61957cbd34e1a84ac0c6f984999ee49273059a1d028095295a1813b0e4012_sk new file mode 100644 index 00000000..b7354155 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/tlsca/74d61957cbd34e1a84ac0c6f984999ee49273059a1d028095295a1813b0e4012_sk @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgoRUCHDHPgsfJwq7Y +6wXaU2w68NKfB/nng+r9i94G5VuhRANCAASiUWqoLGQnbIsx6jTyuwPTUlvJSDP5 +Uyt5i54jHghVCQYK8YGaqmLK8lfl0K7y92QJJ5T1+KO/DlGyZh2iW2r9 +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/tlsca/tlsca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/tlsca/tlsca.bcp.com-cert.pem new file mode 100644 index 00000000..21ebb46e --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/ordererOrganizations/bcp.com/tlsca/tlsca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMjCCAdmgAwIBAgIQZdM0SdQDeiKHTgNj27DIPjAKBggqhkjOPQQDAjBkMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNv +bTAeFw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGQxCzAJBgNVBAYTAlVT +MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRAw +DgYDVQQKEwdiY3AuY29tMRYwFAYDVQQDEw10bHNjYS5iY3AuY29tMFkwEwYHKoZI +zj0CAQYIKoZIzj0DAQcDQgAEolFqqCxkJ2yLMeo08rsD01JbyUgz+VMreYueIx4I +VQkGCvGBmqpiyvJX5dCu8vdkCSeU9fijvw5RsmYdoltq/aNtMGswDgYDVR0PAQH/ +BAQDAgGmMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8E +BTADAQH/MCkGA1UdDgQiBCB01hlXy9NOGoSsDG+YSZnuSScwWaHQKAlSlaGBOw5A +EjAKBggqhkjOPQQDAgNHADBEAiAu3h+iRW35H7YX5Xwh67IPqJQGNGtIFqg5VLjZ +BcKuTgIgYau/gPw7jWwFqxQvzbA/tjR51iSmZmWER6/OmV2d4aY= +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/ca/7da473864b7fd729c4f81678c99ea81dccd38fbc71fb09696f65e3947cb11532_sk b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/ca/7da473864b7fd729c4f81678c99ea81dccd38fbc71fb09696f65e3947cb11532_sk new file mode 100644 index 00000000..23c17b02 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/ca/7da473864b7fd729c4f81678c99ea81dccd38fbc71fb09696f65e3947cb11532_sk @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgev5F5Wj7s4FntI+2 +tilkhhmYvSP+/+jiMWax1KFkU7GhRANCAASnP9D9gcL4za4qKQLBwGHBxAsEJUlt +ZwcDW28fVvq4g8cE6Vpz1rzGmmH425adiXdJpJWk1DlDx0XTSxhQ2u6E +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/ca/ca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/ca/ca.bcp.com-cert.pem new file mode 100644 index 00000000..b4df8568 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/ca/ca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICLTCCAdOgAwIBAgIQUhXl4dd8+ZPGIvFY+kg82zAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGExCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRAwDgYD +VQQKEwdiY3AuY29tMRMwEQYDVQQDEwpjYS5iY3AuY29tMFkwEwYHKoZIzj0CAQYI +KoZIzj0DAQcDQgAEpz/Q/YHC+M2uKikCwcBhwcQLBCVJbWcHA1tvH1b6uIPHBOla +c9a8xpph+NuWnYl3SaSVpNQ5Q8dF00sYUNruhKNtMGswDgYDVR0PAQH/BAQDAgGm +MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/ +MCkGA1UdDgQiBCB9pHOGS3/XKcT4FnjJnqgdzNOPvHH7CWlvZeOUfLEVMjAKBggq +hkjOPQQDAgNIADBFAiEAqZfphrVV83wdcbspzXprS6AOgiA4xhNfNn+dVkQ0lYEC +IGYhsSnRhxd2rCdZudw5j6c1qNeuYH3PSFZPDEV4lD5/ +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/admincerts/Admin@bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/admincerts/Admin@bcp.com-cert.pem new file mode 100644 index 00000000..0934ce5e --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/admincerts/Admin@bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICDjCCAbWgAwIBAgIQeCnMlE1M0lPGQlv7RXyiOjAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGMxCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ8wDQYD +VQQLEwZjbGllbnQxFjAUBgNVBAMMDUFkbWluQGJjcC5jb20wWTATBgcqhkjOPQIB +BggqhkjOPQMBBwNCAATXhnbdBNSI6ZAExIdfHCjFVqPVas5OvhBSS5VRZyLexJBl +9CHiPLHEX0qmOHnLvHswj/dccwmZInkdrTFrUfijo00wSzAOBgNVHQ8BAf8EBAMC +B4AwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCB9pHOGS3/XKcT4FnjJnqgdzNOP +vHH7CWlvZeOUfLEVMjAKBggqhkjOPQQDAgNHADBEAiAZxYePz7kA0tyBoRaywM3c +dXErOp0iEnf9KA8HWWLqkAIgUVuOAXYLrfeM2Frc70YTTEe5hnO+zQAJNrM/4QMk +plY= +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/cacerts/ca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/cacerts/ca.bcp.com-cert.pem new file mode 100644 index 00000000..b4df8568 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/cacerts/ca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICLTCCAdOgAwIBAgIQUhXl4dd8+ZPGIvFY+kg82zAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGExCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRAwDgYD +VQQKEwdiY3AuY29tMRMwEQYDVQQDEwpjYS5iY3AuY29tMFkwEwYHKoZIzj0CAQYI +KoZIzj0DAQcDQgAEpz/Q/YHC+M2uKikCwcBhwcQLBCVJbWcHA1tvH1b6uIPHBOla +c9a8xpph+NuWnYl3SaSVpNQ5Q8dF00sYUNruhKNtMGswDgYDVR0PAQH/BAQDAgGm +MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/ +MCkGA1UdDgQiBCB9pHOGS3/XKcT4FnjJnqgdzNOPvHH7CWlvZeOUfLEVMjAKBggq +hkjOPQQDAgNIADBFAiEAqZfphrVV83wdcbspzXprS6AOgiA4xhNfNn+dVkQ0lYEC +IGYhsSnRhxd2rCdZudw5j6c1qNeuYH3PSFZPDEV4lD5/ +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/config.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/config.yaml new file mode 100644 index 00000000..481cd471 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/config.yaml @@ -0,0 +1,8 @@ +NodeOUs: + Enable: true + ClientOUIdentifier: + Certificate: cacerts/ca.bcp.com-cert.pem + OrganizationalUnitIdentifier: client + PeerOUIdentifier: + Certificate: cacerts/ca.bcp.com-cert.pem + OrganizationalUnitIdentifier: peer diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem new file mode 100644 index 00000000..b4b47d80 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMzCCAdqgAwIBAgIRAIjYNCJcuDd7LV0RYys+vL0wCgYIKoZIzj0EAwIwZDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xFjAUBgNVBAMTDXRsc2NhLmJjcC5j +b20wHhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBkMQswCQYDVQQGEwJV +UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQ +MA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNvbTBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABHMSWZF0Mvu4JWhQMQoJDkg5Imh8tWqIV7CnDz4G +4nwBYVpyUoA8ir+aE7p80VHjW4w4I1g7/Kypx2kb0JmVS5WjbTBrMA4GA1UdDwEB +/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/ +BAUwAwEB/zApBgNVHQ4EIgQgj1TPj5/1ivsvbuTlxkaONcy/pLHLjDf1BMonrXgd +q/AwCgYIKoZIzj0EAwIDRwAwRAIgHM8zhTJ4REtJ4r1OOLGYVXmpZwdUSKkBBgwR +hQsZGx4CIHTaTIFlF7GTQrQIShFcPTLDBMfqHz8kg6gyhim/ZaI7 +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/admincerts/Admin@bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/admincerts/Admin@bcp.com-cert.pem new file mode 100644 index 00000000..0934ce5e --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/admincerts/Admin@bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICDjCCAbWgAwIBAgIQeCnMlE1M0lPGQlv7RXyiOjAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGMxCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ8wDQYD +VQQLEwZjbGllbnQxFjAUBgNVBAMMDUFkbWluQGJjcC5jb20wWTATBgcqhkjOPQIB +BggqhkjOPQMBBwNCAATXhnbdBNSI6ZAExIdfHCjFVqPVas5OvhBSS5VRZyLexJBl +9CHiPLHEX0qmOHnLvHswj/dccwmZInkdrTFrUfijo00wSzAOBgNVHQ8BAf8EBAMC +B4AwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCB9pHOGS3/XKcT4FnjJnqgdzNOP +vHH7CWlvZeOUfLEVMjAKBggqhkjOPQQDAgNHADBEAiAZxYePz7kA0tyBoRaywM3c +dXErOp0iEnf9KA8HWWLqkAIgUVuOAXYLrfeM2Frc70YTTEe5hnO+zQAJNrM/4QMk +plY= +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/cacerts/ca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/cacerts/ca.bcp.com-cert.pem new file mode 100644 index 00000000..b4df8568 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/cacerts/ca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICLTCCAdOgAwIBAgIQUhXl4dd8+ZPGIvFY+kg82zAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGExCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRAwDgYD +VQQKEwdiY3AuY29tMRMwEQYDVQQDEwpjYS5iY3AuY29tMFkwEwYHKoZIzj0CAQYI +KoZIzj0DAQcDQgAEpz/Q/YHC+M2uKikCwcBhwcQLBCVJbWcHA1tvH1b6uIPHBOla +c9a8xpph+NuWnYl3SaSVpNQ5Q8dF00sYUNruhKNtMGswDgYDVR0PAQH/BAQDAgGm +MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/ +MCkGA1UdDgQiBCB9pHOGS3/XKcT4FnjJnqgdzNOPvHH7CWlvZeOUfLEVMjAKBggq +hkjOPQQDAgNIADBFAiEAqZfphrVV83wdcbspzXprS6AOgiA4xhNfNn+dVkQ0lYEC +IGYhsSnRhxd2rCdZudw5j6c1qNeuYH3PSFZPDEV4lD5/ +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/config.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/config.yaml new file mode 100644 index 00000000..481cd471 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/config.yaml @@ -0,0 +1,8 @@ +NodeOUs: + Enable: true + ClientOUIdentifier: + Certificate: cacerts/ca.bcp.com-cert.pem + OrganizationalUnitIdentifier: client + PeerOUIdentifier: + Certificate: cacerts/ca.bcp.com-cert.pem + OrganizationalUnitIdentifier: peer diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/keystore/6d53a8d3b47e10e3e49a13618649df8bd2624b15232523759dca30beb2a2be02_sk b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/keystore/6d53a8d3b47e10e3e49a13618649df8bd2624b15232523759dca30beb2a2be02_sk new file mode 100644 index 00000000..3e76492b --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/keystore/6d53a8d3b47e10e3e49a13618649df8bd2624b15232523759dca30beb2a2be02_sk @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgHdGKziuEDNhFuVxX +ueuN+apHAaGgxXYeojzHcwS3fz2hRANCAASdzEGMhPfl+XaUwl9jBnaQJxM+F7+l +aNFAqLe4glg5IZt/RueWceqbyM5nlNzTERvI017Fyb9fatON7CP7TWkF +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/signcerts/peer0.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/signcerts/peer0.bcp.com-cert.pem new file mode 100644 index 00000000..8523a10d --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/signcerts/peer0.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICDjCCAbSgAwIBAgIRAMJUZUTAxXckNOsKNCQ1+qgwCgYIKoZIzj0EAwIwYTEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xEzARBgNVBAMTCmNhLmJjcC5jb20w +HhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBhMQswCQYDVQQGEwJVUzET +MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzENMAsG +A1UECxMEcGVlcjEWMBQGA1UEAxMNcGVlcjAuYmNwLmNvbTBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABJ3MQYyE9+X5dpTCX2MGdpAnEz4Xv6Vo0UCot7iCWDkhm39G +55Zx6pvIzmeU3NMRG8jTXsXJv19q043sI/tNaQWjTTBLMA4GA1UdDwEB/wQEAwIH +gDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIH2kc4ZLf9cpxPgWeMmeqB3M04+8 +cfsJaW9l45R8sRUyMAoGCCqGSM49BAMCA0gAMEUCIQDIn7P0rP8ZenpbohLdjBPa +pfVdlON6UKUmqd9kNRzj9gIgXYnlR9mZgzkCjCS5K1rxOOrYEQyWvTTI/BJMrwWq +Hkg= +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem new file mode 100644 index 00000000..b4b47d80 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMzCCAdqgAwIBAgIRAIjYNCJcuDd7LV0RYys+vL0wCgYIKoZIzj0EAwIwZDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xFjAUBgNVBAMTDXRsc2NhLmJjcC5j +b20wHhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBkMQswCQYDVQQGEwJV +UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQ +MA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNvbTBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABHMSWZF0Mvu4JWhQMQoJDkg5Imh8tWqIV7CnDz4G +4nwBYVpyUoA8ir+aE7p80VHjW4w4I1g7/Kypx2kb0JmVS5WjbTBrMA4GA1UdDwEB +/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/ +BAUwAwEB/zApBgNVHQ4EIgQgj1TPj5/1ivsvbuTlxkaONcy/pLHLjDf1BMonrXgd +q/AwCgYIKoZIzj0EAwIDRwAwRAIgHM8zhTJ4REtJ4r1OOLGYVXmpZwdUSKkBBgwR +hQsZGx4CIHTaTIFlF7GTQrQIShFcPTLDBMfqHz8kg6gyhim/ZaI7 +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/ca.crt b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/ca.crt new file mode 100644 index 00000000..b4b47d80 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/ca.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMzCCAdqgAwIBAgIRAIjYNCJcuDd7LV0RYys+vL0wCgYIKoZIzj0EAwIwZDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xFjAUBgNVBAMTDXRsc2NhLmJjcC5j +b20wHhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBkMQswCQYDVQQGEwJV +UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQ +MA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNvbTBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABHMSWZF0Mvu4JWhQMQoJDkg5Imh8tWqIV7CnDz4G +4nwBYVpyUoA8ir+aE7p80VHjW4w4I1g7/Kypx2kb0JmVS5WjbTBrMA4GA1UdDwEB +/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/ +BAUwAwEB/zApBgNVHQ4EIgQgj1TPj5/1ivsvbuTlxkaONcy/pLHLjDf1BMonrXgd +q/AwCgYIKoZIzj0EAwIDRwAwRAIgHM8zhTJ4REtJ4r1OOLGYVXmpZwdUSKkBBgwR +hQsZGx4CIHTaTIFlF7GTQrQIShFcPTLDBMfqHz8kg6gyhim/ZaI7 +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/server.crt b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/server.crt new file mode 100644 index 00000000..a0d87693 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/server.crt @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICRDCCAeqgAwIBAgIRAJQUS4zSMbFDh9qdjSMMBCQwCgYIKoZIzj0EAwIwZDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xFjAUBgNVBAMTDXRsc2NhLmJjcC5j +b20wHhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBSMQswCQYDVQQGEwJV +UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEW +MBQGA1UEAxMNcGVlcjAuYmNwLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA +BGR7TNL4W+CGjQuSscX7SHcChE3Zmb39i++/K4rpSjjTMSGMFeDOGtSYUaVwsXrR +bDFhnrMRC98DniKlxeGztNujgY4wgYswDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQW +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKA +II9Uz4+f9Yr7L27k5cZGjjXMv6Sxy4w39QTKJ614HavwMB8GA1UdEQQYMBaCDXBl +ZXIwLmJjcC5jb22CBXBlZXIwMAoGCCqGSM49BAMCA0gAMEUCIQCudGK+DN5LdhCI +nX9mtJe67uWYrsbSjK75ha1DdTb4bgIgbdwIubYKVF+vex1Y3kIP5IAZehgxIXHP +nI6bNJLyqYI= +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/server.key b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/server.key new file mode 100644 index 00000000..dda19e38 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/server.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgq3t0awzdToCmrxkC +Kb+9NUzr13SPHF7MWYjSsJEnFUihRANCAARke0zS+Fvgho0LkrHF+0h3AoRN2Zm9 +/YvvvyuK6Uo40zEhjBXgzhrUmFGlcLF60WwxYZ6zEQvfA54ipcXhs7Tb +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/admincerts/Admin@bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/admincerts/Admin@bcp.com-cert.pem new file mode 100644 index 00000000..0934ce5e --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/admincerts/Admin@bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICDjCCAbWgAwIBAgIQeCnMlE1M0lPGQlv7RXyiOjAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGMxCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ8wDQYD +VQQLEwZjbGllbnQxFjAUBgNVBAMMDUFkbWluQGJjcC5jb20wWTATBgcqhkjOPQIB +BggqhkjOPQMBBwNCAATXhnbdBNSI6ZAExIdfHCjFVqPVas5OvhBSS5VRZyLexJBl +9CHiPLHEX0qmOHnLvHswj/dccwmZInkdrTFrUfijo00wSzAOBgNVHQ8BAf8EBAMC +B4AwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCB9pHOGS3/XKcT4FnjJnqgdzNOP +vHH7CWlvZeOUfLEVMjAKBggqhkjOPQQDAgNHADBEAiAZxYePz7kA0tyBoRaywM3c +dXErOp0iEnf9KA8HWWLqkAIgUVuOAXYLrfeM2Frc70YTTEe5hnO+zQAJNrM/4QMk +plY= +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/cacerts/ca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/cacerts/ca.bcp.com-cert.pem new file mode 100644 index 00000000..b4df8568 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/cacerts/ca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICLTCCAdOgAwIBAgIQUhXl4dd8+ZPGIvFY+kg82zAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGExCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRAwDgYD +VQQKEwdiY3AuY29tMRMwEQYDVQQDEwpjYS5iY3AuY29tMFkwEwYHKoZIzj0CAQYI +KoZIzj0DAQcDQgAEpz/Q/YHC+M2uKikCwcBhwcQLBCVJbWcHA1tvH1b6uIPHBOla +c9a8xpph+NuWnYl3SaSVpNQ5Q8dF00sYUNruhKNtMGswDgYDVR0PAQH/BAQDAgGm +MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/ +MCkGA1UdDgQiBCB9pHOGS3/XKcT4FnjJnqgdzNOPvHH7CWlvZeOUfLEVMjAKBggq +hkjOPQQDAgNIADBFAiEAqZfphrVV83wdcbspzXprS6AOgiA4xhNfNn+dVkQ0lYEC +IGYhsSnRhxd2rCdZudw5j6c1qNeuYH3PSFZPDEV4lD5/ +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/config.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/config.yaml new file mode 100644 index 00000000..481cd471 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/config.yaml @@ -0,0 +1,8 @@ +NodeOUs: + Enable: true + ClientOUIdentifier: + Certificate: cacerts/ca.bcp.com-cert.pem + OrganizationalUnitIdentifier: client + PeerOUIdentifier: + Certificate: cacerts/ca.bcp.com-cert.pem + OrganizationalUnitIdentifier: peer diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/keystore/58d543251d49bc6b8854b278e132f6d1e4e3d4a4c74fa83d42012983ada9296f_sk b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/keystore/58d543251d49bc6b8854b278e132f6d1e4e3d4a4c74fa83d42012983ada9296f_sk new file mode 100644 index 00000000..62a8a935 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/keystore/58d543251d49bc6b8854b278e132f6d1e4e3d4a4c74fa83d42012983ada9296f_sk @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGoOo0URFeduJ1hGy +B5qXFTAcfx4OUnMCiitIE616Fb2hRANCAAQB/hYKvqX18g9rK9v1qY+lNCNKTXDd +iHw4r3/2297OczJosk7JCa75Z02k52wwMnAdkMXaU8C/ueCMPQakwSI0 +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/signcerts/peer1.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/signcerts/peer1.bcp.com-cert.pem new file mode 100644 index 00000000..1f26e6f9 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/signcerts/peer1.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICDTCCAbOgAwIBAgIQeU0Fq8kd3bVsLbyekaUKuTAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGExCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ0wCwYD +VQQLEwRwZWVyMRYwFAYDVQQDEw1wZWVyMS5iY3AuY29tMFkwEwYHKoZIzj0CAQYI +KoZIzj0DAQcDQgAEAf4WCr6l9fIPayvb9amPpTQjSk1w3Yh8OK9/9tveznMyaLJO +yQmu+WdNpOdsMDJwHZDF2lPAv7ngjD0GpMEiNKNNMEswDgYDVR0PAQH/BAQDAgeA +MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgfaRzhkt/1ynE+BZ4yZ6oHczTj7xx ++wlpb2XjlHyxFTIwCgYIKoZIzj0EAwIDSAAwRQIhAPF36cjw/HEt+XfmB9qtRFAI +Ult77kanLE7XWanX/lT8AiBVZntNjSaid6S/POdt48PSLEED97LatHmV8db6RatV +kg== +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem new file mode 100644 index 00000000..b4b47d80 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMzCCAdqgAwIBAgIRAIjYNCJcuDd7LV0RYys+vL0wCgYIKoZIzj0EAwIwZDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xFjAUBgNVBAMTDXRsc2NhLmJjcC5j +b20wHhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBkMQswCQYDVQQGEwJV +UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQ +MA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNvbTBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABHMSWZF0Mvu4JWhQMQoJDkg5Imh8tWqIV7CnDz4G +4nwBYVpyUoA8ir+aE7p80VHjW4w4I1g7/Kypx2kb0JmVS5WjbTBrMA4GA1UdDwEB +/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/ +BAUwAwEB/zApBgNVHQ4EIgQgj1TPj5/1ivsvbuTlxkaONcy/pLHLjDf1BMonrXgd +q/AwCgYIKoZIzj0EAwIDRwAwRAIgHM8zhTJ4REtJ4r1OOLGYVXmpZwdUSKkBBgwR +hQsZGx4CIHTaTIFlF7GTQrQIShFcPTLDBMfqHz8kg6gyhim/ZaI7 +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/tls/ca.crt b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/tls/ca.crt new file mode 100644 index 00000000..b4b47d80 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/tls/ca.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMzCCAdqgAwIBAgIRAIjYNCJcuDd7LV0RYys+vL0wCgYIKoZIzj0EAwIwZDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xFjAUBgNVBAMTDXRsc2NhLmJjcC5j +b20wHhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBkMQswCQYDVQQGEwJV +UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQ +MA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNvbTBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABHMSWZF0Mvu4JWhQMQoJDkg5Imh8tWqIV7CnDz4G +4nwBYVpyUoA8ir+aE7p80VHjW4w4I1g7/Kypx2kb0JmVS5WjbTBrMA4GA1UdDwEB +/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/ +BAUwAwEB/zApBgNVHQ4EIgQgj1TPj5/1ivsvbuTlxkaONcy/pLHLjDf1BMonrXgd +q/AwCgYIKoZIzj0EAwIDRwAwRAIgHM8zhTJ4REtJ4r1OOLGYVXmpZwdUSKkBBgwR +hQsZGx4CIHTaTIFlF7GTQrQIShFcPTLDBMfqHz8kg6gyhim/ZaI7 +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/tls/server.crt b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/tls/server.crt new file mode 100644 index 00000000..b2b7e911 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/tls/server.crt @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICQzCCAemgAwIBAgIQdKtBGJwfiVZWxEzxOUB3CzAKBggqhkjOPQQDAjBkMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNv +bTAeFw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMFIxCzAJBgNVBAYTAlVT +MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRYw +FAYDVQQDEw1wZWVyMS5iY3AuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +Cblszp8IQZokQjDrEA+rWgIgsQ3ua/LHgutz4nQ9YopDt5GM4KrI8w7Ya48lrC+R +RIeeHC0ZYAD3HUUO3h3BcaOBjjCBizAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYw +FAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAg +j1TPj5/1ivsvbuTlxkaONcy/pLHLjDf1BMonrXgdq/AwHwYDVR0RBBgwFoINcGVl +cjEuYmNwLmNvbYIFcGVlcjEwCgYIKoZIzj0EAwIDSAAwRQIhAOMyv0Y9TuUl7gmN +zdK2U/0YhpQKQZiBj7Glqn7QGHI7AiB8cQdr6SwumJXAFP1nxNoDN47BXIko6clj +Jqu+ohRuew== +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/tls/server.key b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/tls/server.key new file mode 100644 index 00000000..7366ed2b --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/tls/server.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgAIJOrfrd6/u+0b7H +78czEj7lwYolSbpyvaiISXyqJpqhRANCAAQJuWzOnwhBmiRCMOsQD6taAiCxDe5r +8seC63PidD1iikO3kYzgqsjzDthrjyWsL5FEh54cLRlgAPcdRQ7eHcFx +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/tlsca/8f54cf8f9ff58afb2f6ee4e5c6468e35ccbfa4b1cb8c37f504ca27ad781dabf0_sk b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/tlsca/8f54cf8f9ff58afb2f6ee4e5c6468e35ccbfa4b1cb8c37f504ca27ad781dabf0_sk new file mode 100644 index 00000000..b2591887 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/tlsca/8f54cf8f9ff58afb2f6ee4e5c6468e35ccbfa4b1cb8c37f504ca27ad781dabf0_sk @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgaN1+9HxNDDH0UTMR +aU6/0sVXwpjTuiLS2TNznOXaBtOhRANCAARzElmRdDL7uCVoUDEKCQ5IOSJofLVq +iFewpw8+BuJ8AWFaclKAPIq/mhO6fNFR41uMOCNYO/ysqcdpG9CZlUuV +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/tlsca/tlsca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/tlsca/tlsca.bcp.com-cert.pem new file mode 100644 index 00000000..b4b47d80 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/tlsca/tlsca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMzCCAdqgAwIBAgIRAIjYNCJcuDd7LV0RYys+vL0wCgYIKoZIzj0EAwIwZDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xFjAUBgNVBAMTDXRsc2NhLmJjcC5j +b20wHhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBkMQswCQYDVQQGEwJV +UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQ +MA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNvbTBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABHMSWZF0Mvu4JWhQMQoJDkg5Imh8tWqIV7CnDz4G +4nwBYVpyUoA8ir+aE7p80VHjW4w4I1g7/Kypx2kb0JmVS5WjbTBrMA4GA1UdDwEB +/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/ +BAUwAwEB/zApBgNVHQ4EIgQgj1TPj5/1ivsvbuTlxkaONcy/pLHLjDf1BMonrXgd +q/AwCgYIKoZIzj0EAwIDRwAwRAIgHM8zhTJ4REtJ4r1OOLGYVXmpZwdUSKkBBgwR +hQsZGx4CIHTaTIFlF7GTQrQIShFcPTLDBMfqHz8kg6gyhim/ZaI7 +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/admincerts/Admin@bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/admincerts/Admin@bcp.com-cert.pem new file mode 100644 index 00000000..0934ce5e --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/admincerts/Admin@bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICDjCCAbWgAwIBAgIQeCnMlE1M0lPGQlv7RXyiOjAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGMxCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ8wDQYD +VQQLEwZjbGllbnQxFjAUBgNVBAMMDUFkbWluQGJjcC5jb20wWTATBgcqhkjOPQIB +BggqhkjOPQMBBwNCAATXhnbdBNSI6ZAExIdfHCjFVqPVas5OvhBSS5VRZyLexJBl +9CHiPLHEX0qmOHnLvHswj/dccwmZInkdrTFrUfijo00wSzAOBgNVHQ8BAf8EBAMC +B4AwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCB9pHOGS3/XKcT4FnjJnqgdzNOP +vHH7CWlvZeOUfLEVMjAKBggqhkjOPQQDAgNHADBEAiAZxYePz7kA0tyBoRaywM3c +dXErOp0iEnf9KA8HWWLqkAIgUVuOAXYLrfeM2Frc70YTTEe5hnO+zQAJNrM/4QMk +plY= +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/cacerts/ca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/cacerts/ca.bcp.com-cert.pem new file mode 100644 index 00000000..b4df8568 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/cacerts/ca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICLTCCAdOgAwIBAgIQUhXl4dd8+ZPGIvFY+kg82zAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGExCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRAwDgYD +VQQKEwdiY3AuY29tMRMwEQYDVQQDEwpjYS5iY3AuY29tMFkwEwYHKoZIzj0CAQYI +KoZIzj0DAQcDQgAEpz/Q/YHC+M2uKikCwcBhwcQLBCVJbWcHA1tvH1b6uIPHBOla +c9a8xpph+NuWnYl3SaSVpNQ5Q8dF00sYUNruhKNtMGswDgYDVR0PAQH/BAQDAgGm +MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/ +MCkGA1UdDgQiBCB9pHOGS3/XKcT4FnjJnqgdzNOPvHH7CWlvZeOUfLEVMjAKBggq +hkjOPQQDAgNIADBFAiEAqZfphrVV83wdcbspzXprS6AOgiA4xhNfNn+dVkQ0lYEC +IGYhsSnRhxd2rCdZudw5j6c1qNeuYH3PSFZPDEV4lD5/ +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/keystore/41a17d30e2871823ff775d59d57e742615ef0e86caa847b52b8c7ca3e8ce5297_sk b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/keystore/41a17d30e2871823ff775d59d57e742615ef0e86caa847b52b8c7ca3e8ce5297_sk new file mode 100644 index 00000000..19e9da5c --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/keystore/41a17d30e2871823ff775d59d57e742615ef0e86caa847b52b8c7ca3e8ce5297_sk @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg83tTK0Pl5hplpuVS +5nXfb34oA3JdgUEwJEgFv/b6SrihRANCAATXhnbdBNSI6ZAExIdfHCjFVqPVas5O +vhBSS5VRZyLexJBl9CHiPLHEX0qmOHnLvHswj/dccwmZInkdrTFrUfij +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/signcerts/Admin@bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/signcerts/Admin@bcp.com-cert.pem new file mode 100644 index 00000000..0934ce5e --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/signcerts/Admin@bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICDjCCAbWgAwIBAgIQeCnMlE1M0lPGQlv7RXyiOjAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGMxCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMQ8wDQYD +VQQLEwZjbGllbnQxFjAUBgNVBAMMDUFkbWluQGJjcC5jb20wWTATBgcqhkjOPQIB +BggqhkjOPQMBBwNCAATXhnbdBNSI6ZAExIdfHCjFVqPVas5OvhBSS5VRZyLexJBl +9CHiPLHEX0qmOHnLvHswj/dccwmZInkdrTFrUfijo00wSzAOBgNVHQ8BAf8EBAMC +B4AwDAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCB9pHOGS3/XKcT4FnjJnqgdzNOP +vHH7CWlvZeOUfLEVMjAKBggqhkjOPQQDAgNHADBEAiAZxYePz7kA0tyBoRaywM3c +dXErOp0iEnf9KA8HWWLqkAIgUVuOAXYLrfeM2Frc70YTTEe5hnO+zQAJNrM/4QMk +plY= +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem new file mode 100644 index 00000000..b4b47d80 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMzCCAdqgAwIBAgIRAIjYNCJcuDd7LV0RYys+vL0wCgYIKoZIzj0EAwIwZDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xFjAUBgNVBAMTDXRsc2NhLmJjcC5j +b20wHhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBkMQswCQYDVQQGEwJV +UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQ +MA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNvbTBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABHMSWZF0Mvu4JWhQMQoJDkg5Imh8tWqIV7CnDz4G +4nwBYVpyUoA8ir+aE7p80VHjW4w4I1g7/Kypx2kb0JmVS5WjbTBrMA4GA1UdDwEB +/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/ +BAUwAwEB/zApBgNVHQ4EIgQgj1TPj5/1ivsvbuTlxkaONcy/pLHLjDf1BMonrXgd +q/AwCgYIKoZIzj0EAwIDRwAwRAIgHM8zhTJ4REtJ4r1OOLGYVXmpZwdUSKkBBgwR +hQsZGx4CIHTaTIFlF7GTQrQIShFcPTLDBMfqHz8kg6gyhim/ZaI7 +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/tls/ca.crt b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/tls/ca.crt new file mode 100644 index 00000000..b4b47d80 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/tls/ca.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMzCCAdqgAwIBAgIRAIjYNCJcuDd7LV0RYys+vL0wCgYIKoZIzj0EAwIwZDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xFjAUBgNVBAMTDXRsc2NhLmJjcC5j +b20wHhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBkMQswCQYDVQQGEwJV +UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQ +MA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNvbTBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABHMSWZF0Mvu4JWhQMQoJDkg5Imh8tWqIV7CnDz4G +4nwBYVpyUoA8ir+aE7p80VHjW4w4I1g7/Kypx2kb0JmVS5WjbTBrMA4GA1UdDwEB +/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/ +BAUwAwEB/zApBgNVHQ4EIgQgj1TPj5/1ivsvbuTlxkaONcy/pLHLjDf1BMonrXgd +q/AwCgYIKoZIzj0EAwIDRwAwRAIgHM8zhTJ4REtJ4r1OOLGYVXmpZwdUSKkBBgwR +hQsZGx4CIHTaTIFlF7GTQrQIShFcPTLDBMfqHz8kg6gyhim/ZaI7 +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/tls/client.crt b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/tls/client.crt new file mode 100644 index 00000000..2aa62149 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/tls/client.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHzCCAcagAwIBAgIQbrMB075+ectcgBePKiFLcTAKBggqhkjOPQQDAjBkMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNv +bTAeFw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMFIxCzAJBgNVBAYTAlVT +MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRYw +FAYDVQQDDA1BZG1pbkBiY3AuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +gXNTaMulZcs0G3yeieNQUBqV8Z8ctQQWIHPpH0Hg5FHAfGriETjpUNsW0lTwLTaf +XlsjAKOjaPDbZ1u+0HRBRKNsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQG +CCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAII9U +z4+f9Yr7L27k5cZGjjXMv6Sxy4w39QTKJ614HavwMAoGCCqGSM49BAMCA0cAMEQC +IGl6C1TWnk78ZTggNq/afNRVXg8syP8X3JGsQc3Zavw9AiBkInz3y6nMNi6jpERa +ne57lN9m+8kiqOOUY5Pifh90sA== +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/tls/client.key b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/tls/client.key new file mode 100644 index 00000000..1e255b99 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/Admin@bcp.com/tls/client.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgkg8yQzNU7lvSKC3R +3G9fXKVhPsq+U8EqoiPB2Djsic6hRANCAASBc1Noy6VlyzQbfJ6J41BQGpXxnxy1 +BBYgc+kfQeDkUcB8auIROOlQ2xbSVPAtNp9eWyMAo6No8NtnW77QdEFE +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/admincerts/User1@bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/admincerts/User1@bcp.com-cert.pem new file mode 100644 index 00000000..50136d97 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/admincerts/User1@bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICEDCCAbagAwIBAgIRAMpN5Ve8fnGEfx2q5rk5QfowCgYIKoZIzj0EAwIwYTEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xEzARBgNVBAMTCmNhLmJjcC5jb20w +HhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBjMQswCQYDVQQGEwJVUzET +MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEPMA0G +A1UECxMGY2xpZW50MRYwFAYDVQQDDA1Vc2VyMUBiY3AuY29tMFkwEwYHKoZIzj0C +AQYIKoZIzj0DAQcDQgAEHK61cIAJWYEVKrt4xP1lgKN7xrn98yZ4IYbYEJZDjjlK +E9REwG5v+UUC3G4x/NPkrkS+ZJ07Nn9WjrR5Ae78eaNNMEswDgYDVR0PAQH/BAQD +AgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgfaRzhkt/1ynE+BZ4yZ6oHczT +j7xx+wlpb2XjlHyxFTIwCgYIKoZIzj0EAwIDSAAwRQIhALYstkhAYwxDeqhHd/qU +G07IWP2Bs5qa+w1ePTKZQogmAiBAiXAzD8QVclddHirSrEati4ZNCNzmxYBeVDmm +Kdyo7A== +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/cacerts/ca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/cacerts/ca.bcp.com-cert.pem new file mode 100644 index 00000000..b4df8568 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/cacerts/ca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICLTCCAdOgAwIBAgIQUhXl4dd8+ZPGIvFY+kg82zAKBggqhkjOPQQDAjBhMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTETMBEGA1UEAxMKY2EuYmNwLmNvbTAe +Fw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMGExCzAJBgNVBAYTAlVTMRMw +EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRAwDgYD +VQQKEwdiY3AuY29tMRMwEQYDVQQDEwpjYS5iY3AuY29tMFkwEwYHKoZIzj0CAQYI +KoZIzj0DAQcDQgAEpz/Q/YHC+M2uKikCwcBhwcQLBCVJbWcHA1tvH1b6uIPHBOla +c9a8xpph+NuWnYl3SaSVpNQ5Q8dF00sYUNruhKNtMGswDgYDVR0PAQH/BAQDAgGm +MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/ +MCkGA1UdDgQiBCB9pHOGS3/XKcT4FnjJnqgdzNOPvHH7CWlvZeOUfLEVMjAKBggq +hkjOPQQDAgNIADBFAiEAqZfphrVV83wdcbspzXprS6AOgiA4xhNfNn+dVkQ0lYEC +IGYhsSnRhxd2rCdZudw5j6c1qNeuYH3PSFZPDEV4lD5/ +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/keystore/126e2edc58afc2e92da73a2b481a89872696d5c2b4687c429b807f5f8cb08751_sk b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/keystore/126e2edc58afc2e92da73a2b481a89872696d5c2b4687c429b807f5f8cb08751_sk new file mode 100644 index 00000000..22194e0e --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/keystore/126e2edc58afc2e92da73a2b481a89872696d5c2b4687c429b807f5f8cb08751_sk @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgtW8Ag92yBbkY5FFZ +mJTMABasvYNQBYzDs0D1Kzt4alWhRANCAAQcrrVwgAlZgRUqu3jE/WWAo3vGuf3z +JnghhtgQlkOOOUoT1ETAbm/5RQLcbjH80+SuRL5knTs2f1aOtHkB7vx5 +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/signcerts/User1@bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/signcerts/User1@bcp.com-cert.pem new file mode 100644 index 00000000..50136d97 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/signcerts/User1@bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICEDCCAbagAwIBAgIRAMpN5Ve8fnGEfx2q5rk5QfowCgYIKoZIzj0EAwIwYTEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xEzARBgNVBAMTCmNhLmJjcC5jb20w +HhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBjMQswCQYDVQQGEwJVUzET +MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEPMA0G +A1UECxMGY2xpZW50MRYwFAYDVQQDDA1Vc2VyMUBiY3AuY29tMFkwEwYHKoZIzj0C +AQYIKoZIzj0DAQcDQgAEHK61cIAJWYEVKrt4xP1lgKN7xrn98yZ4IYbYEJZDjjlK +E9REwG5v+UUC3G4x/NPkrkS+ZJ07Nn9WjrR5Ae78eaNNMEswDgYDVR0PAQH/BAQD +AgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgfaRzhkt/1ynE+BZ4yZ6oHczT +j7xx+wlpb2XjlHyxFTIwCgYIKoZIzj0EAwIDSAAwRQIhALYstkhAYwxDeqhHd/qU +G07IWP2Bs5qa+w1ePTKZQogmAiBAiXAzD8QVclddHirSrEati4ZNCNzmxYBeVDmm +Kdyo7A== +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem new file mode 100644 index 00000000..b4b47d80 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/msp/tlscacerts/tlsca.bcp.com-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMzCCAdqgAwIBAgIRAIjYNCJcuDd7LV0RYys+vL0wCgYIKoZIzj0EAwIwZDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xFjAUBgNVBAMTDXRsc2NhLmJjcC5j +b20wHhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBkMQswCQYDVQQGEwJV +UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQ +MA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNvbTBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABHMSWZF0Mvu4JWhQMQoJDkg5Imh8tWqIV7CnDz4G +4nwBYVpyUoA8ir+aE7p80VHjW4w4I1g7/Kypx2kb0JmVS5WjbTBrMA4GA1UdDwEB +/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/ +BAUwAwEB/zApBgNVHQ4EIgQgj1TPj5/1ivsvbuTlxkaONcy/pLHLjDf1BMonrXgd +q/AwCgYIKoZIzj0EAwIDRwAwRAIgHM8zhTJ4REtJ4r1OOLGYVXmpZwdUSKkBBgwR +hQsZGx4CIHTaTIFlF7GTQrQIShFcPTLDBMfqHz8kg6gyhim/ZaI7 +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/tls/ca.crt b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/tls/ca.crt new file mode 100644 index 00000000..b4b47d80 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/tls/ca.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICMzCCAdqgAwIBAgIRAIjYNCJcuDd7LV0RYys+vL0wCgYIKoZIzj0EAwIwZDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xEDAOBgNVBAoTB2JjcC5jb20xFjAUBgNVBAMTDXRsc2NhLmJjcC5j +b20wHhcNMjAwMjI3MDIzOTAwWhcNMzAwMjI0MDIzOTAwWjBkMQswCQYDVQQGEwJV +UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEQ +MA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNvbTBZMBMGByqG +SM49AgEGCCqGSM49AwEHA0IABHMSWZF0Mvu4JWhQMQoJDkg5Imh8tWqIV7CnDz4G +4nwBYVpyUoA8ir+aE7p80VHjW4w4I1g7/Kypx2kb0JmVS5WjbTBrMA4GA1UdDwEB +/wQEAwIBpjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/ +BAUwAwEB/zApBgNVHQ4EIgQgj1TPj5/1ivsvbuTlxkaONcy/pLHLjDf1BMonrXgd +q/AwCgYIKoZIzj0EAwIDRwAwRAIgHM8zhTJ4REtJ4r1OOLGYVXmpZwdUSKkBBgwR +hQsZGx4CIHTaTIFlF7GTQrQIShFcPTLDBMfqHz8kg6gyhim/ZaI7 +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/tls/client.crt b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/tls/client.crt new file mode 100644 index 00000000..1a93857e --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/tls/client.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHzCCAcagAwIBAgIQWzHjF/36i/BgtmlVnzAVMjAKBggqhkjOPQQDAjBkMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEQMA4GA1UEChMHYmNwLmNvbTEWMBQGA1UEAxMNdGxzY2EuYmNwLmNv +bTAeFw0yMDAyMjcwMjM5MDBaFw0zMDAyMjQwMjM5MDBaMFIxCzAJBgNVBAYTAlVT +MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRYw +FAYDVQQDDA1Vc2VyMUBiY3AuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +l6MHGgFsfAsKYsNqyUMlbbiGmDg7MUmjmEg20e6B8aPVefrz/gK+XMeNM5bAOrXB +D1gsBC7UCcHPTgb3hbea2aNsMGowDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQG +CCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAII9U +z4+f9Yr7L27k5cZGjjXMv6Sxy4w39QTKJ614HavwMAoGCCqGSM49BAMCA0cAMEQC +IHiP5lHm/Ewx7LNGdzgDuAsfiDruWtzky/AWmK0iZ6osAiAGIWe7Qjdlk0fV8ngS +W96sdeT6A0ZYC+iDN1FTpDZ6Bg== +-----END CERTIFICATE----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/tls/client.key b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/tls/client.key new file mode 100644 index 00000000..9fa843ab --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/cryptoAndConfig/crypto-config/peerOrganizations/bcp.com/users/User1@bcp.com/tls/client.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgrdq/yC8//5q7onQw +Oeg/Kx1sKKJevD5ivuX+gorwmSWhRANCAASXowcaAWx8Cwpiw2rJQyVtuIaYODsx +SaOYSDbR7oHxo9V5+vP+Ar5cx40zlsA6tcEPWCwELtQJwc9OBveFt5rZ +-----END PRIVATE KEY----- diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/.gitkeep b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/order-127.0.0.1/docker-compose-orderer.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/order-127.0.0.1/docker-compose-orderer.yaml new file mode 100644 index 00000000..ed2fa41c --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/order-127.0.0.1/docker-compose-orderer.yaml @@ -0,0 +1,112 @@ +version: '2' +volumes: + orderer.bcp.com: + orderer2.bcp.com: + orderer3.bcp.com: +networks: + null0: + null1: + null2: +services: + orderer.bcp.com: + image: hyperledger/fabric-orderer:$IMAGE_TAG + environment: + - FABRIC_LOGGING_SPEC=INFO + - 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 + - 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] + - ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1 + - ORDERER_KAFKA_VERBOSE=true + - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt + - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key + - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] + working_dir: /opt/gopath/src/github.com/hyperledger/fabric + command: orderer + container_name: orderer.bcp.com + networks: + - null0 + volumes: + - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block + - ../crypto-config/ordererOrganizations/bcp.com/orderers/orderer.bcp.com/msp:/var/hyperledger/orderer/msp + - ../crypto-config/ordererOrganizations/bcp.com/orderers/orderer.bcp.com/tls/:/var/hyperledger/orderer/tls + - orderer.bcp.com:/var/hyperledger/production/orderer + - /var/run/:/opt/gopath/src/github.com/hyperledger/fabric + ports: + - 7050:7050 + extra_hosts: + - orderer2.bcp.com:192.168.43.59 + - orderer3.bcp.com:192.168.43.59 + orderer2.bcp.com: + image: hyperledger/fabric-orderer:$IMAGE_TAG + environment: + - FABRIC_LOGGING_SPEC=INFO + - 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 + - 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] + - ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1 + - ORDERER_KAFKA_VERBOSE=true + - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt + - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key + - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] + working_dir: /opt/gopath/src/github.com/hyperledger/fabric + command: orderer + container_name: orderer2.bcp.com + networks: + - null1 + volumes: + - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block + - ../crypto-config/ordererOrganizations/bcp.com/orderers/orderer2.bcp.com/msp:/var/hyperledger/orderer/msp + - ../crypto-config/ordererOrganizations/bcp.com/orderers/orderer2.bcp.com/tls/:/var/hyperledger/orderer/tls + - orderer2.bcp.com:/var/hyperledger/production/orderer + - /var/run/:/opt/gopath/src/github.com/hyperledger/fabric + ports: + - 8050:7050 + extra_hosts: + - orderer.bcp.com:192.168.43.59 + - orderer3.bcp.com:192.168.43.59 + orderer3.bcp.com: + image: hyperledger/fabric-orderer:$IMAGE_TAG + environment: + - FABRIC_LOGGING_SPEC=INFO + - 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 + - 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] + - ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1 + - ORDERER_KAFKA_VERBOSE=true + - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt + - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key + - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] + working_dir: /opt/gopath/src/github.com/hyperledger/fabric + command: orderer + container_name: orderer3.bcp.com + networks: + - null2 + volumes: + - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block + - ../crypto-config/ordererOrganizations/bcp.com/orderers/orderer3.bcp.com/msp:/var/hyperledger/orderer/msp + - ../crypto-config/ordererOrganizations/bcp.com/orderers/orderer3.bcp.com/tls/:/var/hyperledger/orderer/tls + - orderer3.bcp.com:/var/hyperledger/production/orderer + - /var/run/:/opt/gopath/src/github.com/hyperledger/fabric + ports: + - 9050:7050 + extra_hosts: + - orderer.bcp.com:192.168.43.59 + - orderer2.bcp.com:192.168.43.59 diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/order-127.0.0.1/start-orderer.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/order-127.0.0.1/start-orderer.sh new file mode 100644 index 00000000..45daa93d --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/order-127.0.0.1/start-orderer.sh @@ -0,0 +1,254 @@ +#!/bin/bash + +export PATH=${PWD}/../bin:${PWD}:$PATH +export FABRIC_CFG_PATH=${PWD} +export VERBOSE=false + +# if version not passed in, default to latest released version +export VERSION=1.4.2 +# current version of thirdparty images (couchdb, kafka and zookeeper) released +export THIRDPARTY_IMAGE_VERSION=0.4.15 + +# 两个 tag 变量值 +: ${FABRIC_TAG:="$VERSION"} +: ${THIRDPARTY_TAG:="$THIRDPARTY_IMAGE_VERSION"} + +# default image tag +IMAGETAG=${VERSION} + +# 检查是启动 orderer 或 peer +THIS_FILE_PATH=$0 +FILE_NAME=${THIS_FILE_PATH##*-} +PEER_TYPE=${FILE_NAME%.*} + +NEED_DOWNLOAD_IMAGES=(peer tools orderer) + +# 设置 go 相关环境 +GOPATH="/opt/gopath" +GOROOT="/usr/local/go/" + +# 需要下载的 docker image +if [ "$PEER_TYPE"x == "orderer"x ]; then + NEED_DOWNLOAD_IMAGES=(orderer tools) +else + NEED_DOWNLOAD_IMAGES=(peer tools) +fi + +function printHelp() { + echo "用法:" + echo " start-$PEER_TYPE.sh " + echo " - 必须是 'up', 'down' 两者之一" + echo " - 'up' - 启动${PEER_TYPE}节点" + echo " - 'down' - 停止${PEER_TYPE}节点" + echo " start-$PEER_TYPE.sh -h (打印帮助信息)" + echo +} + +if [ "$#" -eq 0 ]; then + printHelp + exit 0 +fi + +checkAndInstallGo() { + which go >& /dev/null + if [ $? -ne 0 ]; then + mkdir -p /tmp/golang + cd /tmp/golang + curl -L https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz > ./go1.13.5.linux-amd64.tar.gz + tar xf ./go1.13.5.linux-amd64.tar.gz + mv ./go /usr/local/go + cd - + rm -rf /tmp/golang + fi + env | grep 'GOPATH' + if [ $? -ne 0 ]; then + echo "export GOROOT=$GOROOT">>/etc/profile + echo "export GOPATH=$GOPATH">>/etc/profile + mkdir -p $GOPATH/src/github.com/hyperledger + mkdir -p $GOPATH/bin + echo "export PATH=$PATH:$GOPATH/bin:$GOROOT/bin">>/etc/profile + source /etc/profile + fi +} + +fabricCodePull() { + if [ ! -d "$GOPATH/src/github.com/hyperledger/fabric" ]; then + cd $GOPATH/src/github.com/hyperledger + git clone https://github.com/hyperledger/fabric.git + cd - + cd $GOPATH/src/github.com/hyperledger/fabric + git checkout "v${VERSION}" + make release && cp ./release/linux-amd64/bin/* $GOPATH/bin + cd - + fi +} + +dockerFabricPull() { + local FABRIC_TAG=$1 + for IMAGES in $NEED_DOWNLOAD_IMAGES; do + echo "==> FABRIC IMAGE: $IMAGES" + echo + docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG + docker tag hyperledger/fabric-$IMAGES:$FABRIC_TAG hyperledger/fabric-$IMAGES + done +} + +dockerThirdPartyImagesPull() { + if [ "$PEER_TYPE"x == "peer"x ]; then + local THIRDPARTY_TAG=$1 + IMAGES="couchdb" + echo "==> THIRDPARTY DOCKER IMAGE: $IMAGES" + echo + docker pull hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG + docker tag hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG hyperledger/fabric-$IMAGES + fi +} + +dockerInstall() { + which docker >& /dev/null + NODOCKER=$? + if [ "${NODOCKER}" -ne 0 ]; then + yum install docker-ce + + which docker-compose >& /dev/null + if [ "$?" -ne 0 ]; then + curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose + chmod +x /usr/local/bin/docker-compose + fi + fi + + echo "===> Pulling fabric Images" + dockerFabricPull ${FABRIC_TAG} + echo "===> Pulling thirdparty docker images" + dockerThirdPartyImagesPull ${THIRDPARTY_TAG} + echo + echo "===> List out hyperledger docker images" + docker images | grep hyperledger* +} + +# Obtain CONTAINER_IDS and remove them +# TODO Might want to make this optional - could clear other containers +function clearContainers() { + CONTAINER_IDS=$(docker ps -a -q) + if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then + echo "---- No containers available for deletion ----" + else + docker rm -f $CONTAINER_IDS + fi +} + +# Delete any images that were generated as a part of this setup +# specifically the following images are often left behind: +# TODO list generated image naming patterns +function removeUnwantedImages() { + DOCKER_IMAGE_IDS=$(docker images | awk '($1 ~ /dev-peer.*/) {print $3}') + if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" == " " ]; then + echo "---- No images available for deletion ----" + else + docker rmi -f $DOCKER_IMAGE_IDS + fi +} + +function removeDockerRubbish() { + docker network prune -f + docker volume prune -f +} + +# Versions of fabric known not to work with this release of first-network +BLACKLISTED_VERSIONS="^1\.0\. ^1\.1\.0-preview ^1\.1\.0-alpha" + +# Do some basic sanity checking to make sure that the appropriate versions of fabric +# binaries/images are available. In the future, additional checking for the presence +# of go or other items could be added. +function checkPrereqs() { + # Note, we check configtxlator externally because it does not require a config file, and peer in the + # docker image because of FAB-8551 that makes configtxlator return 'development version' in docker + DOCKER_IMAGE_VERSION=$(docker run --rm hyperledger/fabric-tools:$IMAGETAG peer version | sed -ne 's/ Version: //p' | head -1) + + echo "DOCKER_IMAGE_VERSION=$DOCKER_IMAGE_VERSION" + + for UNSUPPORTED_VERSION in $BLACKLISTED_VERSIONS; do + echo "$DOCKER_IMAGE_VERSION" | grep -q $UNSUPPORTED_VERSION + if [ $? -eq 0 ]; then + echo "ERROR! Fabric Docker image version of $DOCKER_IMAGE_VERSION does not match this newer version of BYFN and is unsupported. Either move to a later version of Fabric or checkout an earlier version of fabric-samples." + exit 1 + fi + done +} + +function clearCli(){ + docker stop cli + docker rm cli +} + +# Generate the needed certificates, the genesis block and start the network. +function networkUp() { + checkAndInstallGo + fabricCodePull + + checkPrereqs + dockerInstall + + # check artifacts directory + if [ ! -d "../crypto-config" ]; then + echo "ERROR! crypto-config path not exist" + exit 1 + fi + + COMPOSE_FILES="-f ${COMPOSE_FILE}" + IMAGE_TAG=$IMAGETAG docker-compose ${COMPOSE_FILES} up -d 2>&1 + docker ps -a + if [ $? -ne 0 ]; then + echo "ERROR !!!! Unable to start network" + exit 1 + fi +} + +# Tear down running network +function networkDown() { + # stop org3 containers also in addition to org1 and org2, in case we were running sample to add org3 + # stop kafka and zookeeper containers in case we're running with kafka consensus-type + docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH -f $COMPOSE_FILE_KAFKA -f $COMPOSE_FILE_RAFT2 -f $COMPOSE_FILE_CA -f $COMPOSE_FILE_ORG3 down --volumes --remove-orphans + + # Don't remove the generated artifacts -- note, the ledgers are always removed + if [ "$MODE" != "restart" ]; then + # Bring down the network, deleting the volumes + # Delete any ledger backups + docker run -v $PWD:/tmp/first-network --rm hyperledger/fabric-tools:$IMAGETAG rm -Rf /tmp/first-network/ledgers-backup + #Cleanup the chaincode containers + clearContainers + #Cleanup images + removeUnwantedImages + # clear docker's network and volumns + removeDockerRubbish + fi +} + +function clearCli(){ + docker stop cli + docker rm cli +} + +# use this as the default docker-compose yaml definition +COMPOSE_FILE=docker-compose-$PEER_TYPE.yaml +# +# use golang as the default language for chaincode +LANGUAGE=golang + +# Parse commandline args +MODE=$1 + +#Create the network using docker compose +if [ "${MODE}" == "up" ]; then + networkUp +elif [ "${MODE}" == "down" ]; then ## Clear the network + networkDown +elif [ "${MODE}" == "restart" ]; then ## Restart the network + networkDown + networkUp +elif [ "${MODE}" == "startCli" ]; then + clearCli + networkUp +else + exit 1 +fi diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml new file mode 100644 index 00000000..60f536b7 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/peer-127.0.0.1/docker-compose-peer.yaml @@ -0,0 +1,148 @@ +version: '2' +volumes: + peer0.bcp.com: + peer1.bcp.com: +networks: + ? + : +services: + peer0.BcpMSP.couchdb0: + image: hyperledger/fabric-couchdb + environment: + - COUCHDB_USER= + - COUCHDB_PASSWORD= + container_name: peer0.BcpMSP.couchdb0 + networks: + - + peer0.bcp.com: + container_name: peer0.bcp.com + image: hyperledger/fabric-peer:$IMAGE_TAG + environment: + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=peer_null + - FABRIC_LOGGING_SPEC=INFO + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + - CORE_PEER_PROFILE_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt + - CORE_PEER_ID=peer0.bcp.com + - CORE_PEER_ADDRESS=peer0.bcp.com:7051 + - CORE_PEER_LISTENADDRESS=0.0.0.0:7051 + - CORE_PEER_CHAINCODEADDRESS=peer0.bcp.com:7052 + - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.bcp.com:8051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.bcp.com:7051 + - CORE_PEER_LOCALMSPID=BcpMSP + - CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443 + - CORE_METRICS_PROVIDER=prometheus + - CORE_LEDGER_STATE_STATEDATABASE=CouchDB + - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=peer0.BcpMSP.couchdb0:5984 + - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= + - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= + depends_on: + - peer0.BcpMSP.couchdb0 + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + command: peer node start + volumes: + - /var/run/:/host/var/run/ + - ../crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/msp:/etc/hyperledger/fabric/msp + - ../crypto-config/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls:/etc/hyperledger/fabric/tls + - peer0.bcp.com:/var/hyperledger/production + extra_hosts: + - orderer.bcp.com:192.168.43.59 + - orderer2.bcp.com:192.168.43.59 + - orderer3.bcp.com:192.168.43.59 + - peer1.bcp.com:192.168.43.59 + ports: + - 7051:7051 + - 9443:9443 + networks: + - + peer1.BcpMSP.couchdb1: + image: hyperledger/fabric-couchdb + environment: + - COUCHDB_USER= + - COUCHDB_PASSWORD= + container_name: peer1.BcpMSP.couchdb1 + networks: + - + peer1.bcp.com: + container_name: peer1.bcp.com + image: hyperledger/fabric-peer:$IMAGE_TAG + environment: + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=peer_null + - FABRIC_LOGGING_SPEC=INFO + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + - CORE_PEER_PROFILE_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt + - CORE_PEER_ID=peer1.bcp.com + - CORE_PEER_ADDRESS=peer1.bcp.com:8051 + - CORE_PEER_LISTENADDRESS=0.0.0.0:8051 + - CORE_PEER_CHAINCODEADDRESS=peer1.bcp.com:8052 + - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:8052 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.bcp.com:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.bcp.com:8051 + - CORE_PEER_LOCALMSPID=BcpMSP + - CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443 + - CORE_METRICS_PROVIDER=prometheus + - CORE_LEDGER_STATE_STATEDATABASE=CouchDB + - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=peer1.BcpMSP.couchdb1:5984 + - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= + - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= + depends_on: + - peer1.BcpMSP.couchdb1 + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + command: peer node start + volumes: + - /var/run/:/host/var/run/ + - ../crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/msp:/etc/hyperledger/fabric/msp + - ../crypto-config/peerOrganizations/bcp.com/peers/peer1.bcp.com/tls:/etc/hyperledger/fabric/tls + - peer1.bcp.com:/var/hyperledger/production + extra_hosts: + - orderer.bcp.com:192.168.43.59 + - orderer2.bcp.com:192.168.43.59 + - orderer3.bcp.com:192.168.43.59 + - peer0.bcp.com:192.168.43.59 + ports: + - 8051:8051 + - 10443:9443 + networks: + - + 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 + - FABRIC_LOGGING_SPEC=INFO + - CORE_PEER_ID=cli + - CORE_PEER_ADDRESS=peer0.bcp.com:7051 + - CORE_PEER_LOCALMSPID=BcpMSP + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/bcp.com/peers/peer0.bcp.com/tls/ca.crt + - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/bcp.com/users/Admin@bcp.com/msp + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + command: /bin/bash + volumes: + - /var/run/:/host/var/run/ + - /opt/gopath/src/github.com/hyperledger/fabric/core:/opt/gopath/src/github.com/hyperledger/fabric/core + - ../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: + - peer0.bcp.com + - peer1.bcp.com + networks: + - diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/peer-127.0.0.1/start-peer.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/peer-127.0.0.1/start-peer.sh new file mode 100644 index 00000000..45daa93d --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/fabric-net/dockerFile/peer-127.0.0.1/start-peer.sh @@ -0,0 +1,254 @@ +#!/bin/bash + +export PATH=${PWD}/../bin:${PWD}:$PATH +export FABRIC_CFG_PATH=${PWD} +export VERBOSE=false + +# if version not passed in, default to latest released version +export VERSION=1.4.2 +# current version of thirdparty images (couchdb, kafka and zookeeper) released +export THIRDPARTY_IMAGE_VERSION=0.4.15 + +# 两个 tag 变量值 +: ${FABRIC_TAG:="$VERSION"} +: ${THIRDPARTY_TAG:="$THIRDPARTY_IMAGE_VERSION"} + +# default image tag +IMAGETAG=${VERSION} + +# 检查是启动 orderer 或 peer +THIS_FILE_PATH=$0 +FILE_NAME=${THIS_FILE_PATH##*-} +PEER_TYPE=${FILE_NAME%.*} + +NEED_DOWNLOAD_IMAGES=(peer tools orderer) + +# 设置 go 相关环境 +GOPATH="/opt/gopath" +GOROOT="/usr/local/go/" + +# 需要下载的 docker image +if [ "$PEER_TYPE"x == "orderer"x ]; then + NEED_DOWNLOAD_IMAGES=(orderer tools) +else + NEED_DOWNLOAD_IMAGES=(peer tools) +fi + +function printHelp() { + echo "用法:" + echo " start-$PEER_TYPE.sh " + echo " - 必须是 'up', 'down' 两者之一" + echo " - 'up' - 启动${PEER_TYPE}节点" + echo " - 'down' - 停止${PEER_TYPE}节点" + echo " start-$PEER_TYPE.sh -h (打印帮助信息)" + echo +} + +if [ "$#" -eq 0 ]; then + printHelp + exit 0 +fi + +checkAndInstallGo() { + which go >& /dev/null + if [ $? -ne 0 ]; then + mkdir -p /tmp/golang + cd /tmp/golang + curl -L https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz > ./go1.13.5.linux-amd64.tar.gz + tar xf ./go1.13.5.linux-amd64.tar.gz + mv ./go /usr/local/go + cd - + rm -rf /tmp/golang + fi + env | grep 'GOPATH' + if [ $? -ne 0 ]; then + echo "export GOROOT=$GOROOT">>/etc/profile + echo "export GOPATH=$GOPATH">>/etc/profile + mkdir -p $GOPATH/src/github.com/hyperledger + mkdir -p $GOPATH/bin + echo "export PATH=$PATH:$GOPATH/bin:$GOROOT/bin">>/etc/profile + source /etc/profile + fi +} + +fabricCodePull() { + if [ ! -d "$GOPATH/src/github.com/hyperledger/fabric" ]; then + cd $GOPATH/src/github.com/hyperledger + git clone https://github.com/hyperledger/fabric.git + cd - + cd $GOPATH/src/github.com/hyperledger/fabric + git checkout "v${VERSION}" + make release && cp ./release/linux-amd64/bin/* $GOPATH/bin + cd - + fi +} + +dockerFabricPull() { + local FABRIC_TAG=$1 + for IMAGES in $NEED_DOWNLOAD_IMAGES; do + echo "==> FABRIC IMAGE: $IMAGES" + echo + docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG + docker tag hyperledger/fabric-$IMAGES:$FABRIC_TAG hyperledger/fabric-$IMAGES + done +} + +dockerThirdPartyImagesPull() { + if [ "$PEER_TYPE"x == "peer"x ]; then + local THIRDPARTY_TAG=$1 + IMAGES="couchdb" + echo "==> THIRDPARTY DOCKER IMAGE: $IMAGES" + echo + docker pull hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG + docker tag hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG hyperledger/fabric-$IMAGES + fi +} + +dockerInstall() { + which docker >& /dev/null + NODOCKER=$? + if [ "${NODOCKER}" -ne 0 ]; then + yum install docker-ce + + which docker-compose >& /dev/null + if [ "$?" -ne 0 ]; then + curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose + chmod +x /usr/local/bin/docker-compose + fi + fi + + echo "===> Pulling fabric Images" + dockerFabricPull ${FABRIC_TAG} + echo "===> Pulling thirdparty docker images" + dockerThirdPartyImagesPull ${THIRDPARTY_TAG} + echo + echo "===> List out hyperledger docker images" + docker images | grep hyperledger* +} + +# Obtain CONTAINER_IDS and remove them +# TODO Might want to make this optional - could clear other containers +function clearContainers() { + CONTAINER_IDS=$(docker ps -a -q) + if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then + echo "---- No containers available for deletion ----" + else + docker rm -f $CONTAINER_IDS + fi +} + +# Delete any images that were generated as a part of this setup +# specifically the following images are often left behind: +# TODO list generated image naming patterns +function removeUnwantedImages() { + DOCKER_IMAGE_IDS=$(docker images | awk '($1 ~ /dev-peer.*/) {print $3}') + if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" == " " ]; then + echo "---- No images available for deletion ----" + else + docker rmi -f $DOCKER_IMAGE_IDS + fi +} + +function removeDockerRubbish() { + docker network prune -f + docker volume prune -f +} + +# Versions of fabric known not to work with this release of first-network +BLACKLISTED_VERSIONS="^1\.0\. ^1\.1\.0-preview ^1\.1\.0-alpha" + +# Do some basic sanity checking to make sure that the appropriate versions of fabric +# binaries/images are available. In the future, additional checking for the presence +# of go or other items could be added. +function checkPrereqs() { + # Note, we check configtxlator externally because it does not require a config file, and peer in the + # docker image because of FAB-8551 that makes configtxlator return 'development version' in docker + DOCKER_IMAGE_VERSION=$(docker run --rm hyperledger/fabric-tools:$IMAGETAG peer version | sed -ne 's/ Version: //p' | head -1) + + echo "DOCKER_IMAGE_VERSION=$DOCKER_IMAGE_VERSION" + + for UNSUPPORTED_VERSION in $BLACKLISTED_VERSIONS; do + echo "$DOCKER_IMAGE_VERSION" | grep -q $UNSUPPORTED_VERSION + if [ $? -eq 0 ]; then + echo "ERROR! Fabric Docker image version of $DOCKER_IMAGE_VERSION does not match this newer version of BYFN and is unsupported. Either move to a later version of Fabric or checkout an earlier version of fabric-samples." + exit 1 + fi + done +} + +function clearCli(){ + docker stop cli + docker rm cli +} + +# Generate the needed certificates, the genesis block and start the network. +function networkUp() { + checkAndInstallGo + fabricCodePull + + checkPrereqs + dockerInstall + + # check artifacts directory + if [ ! -d "../crypto-config" ]; then + echo "ERROR! crypto-config path not exist" + exit 1 + fi + + COMPOSE_FILES="-f ${COMPOSE_FILE}" + IMAGE_TAG=$IMAGETAG docker-compose ${COMPOSE_FILES} up -d 2>&1 + docker ps -a + if [ $? -ne 0 ]; then + echo "ERROR !!!! Unable to start network" + exit 1 + fi +} + +# Tear down running network +function networkDown() { + # stop org3 containers also in addition to org1 and org2, in case we were running sample to add org3 + # stop kafka and zookeeper containers in case we're running with kafka consensus-type + docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH -f $COMPOSE_FILE_KAFKA -f $COMPOSE_FILE_RAFT2 -f $COMPOSE_FILE_CA -f $COMPOSE_FILE_ORG3 down --volumes --remove-orphans + + # Don't remove the generated artifacts -- note, the ledgers are always removed + if [ "$MODE" != "restart" ]; then + # Bring down the network, deleting the volumes + # Delete any ledger backups + docker run -v $PWD:/tmp/first-network --rm hyperledger/fabric-tools:$IMAGETAG rm -Rf /tmp/first-network/ledgers-backup + #Cleanup the chaincode containers + clearContainers + #Cleanup images + removeUnwantedImages + # clear docker's network and volumns + removeDockerRubbish + fi +} + +function clearCli(){ + docker stop cli + docker rm cli +} + +# use this as the default docker-compose yaml definition +COMPOSE_FILE=docker-compose-$PEER_TYPE.yaml +# +# use golang as the default language for chaincode +LANGUAGE=golang + +# Parse commandline args +MODE=$1 + +#Create the network using docker compose +if [ "${MODE}" == "up" ]; then + networkUp +elif [ "${MODE}" == "down" ]; then ## Clear the network + networkDown +elif [ "${MODE}" == "restart" ]; then ## Restart the network + networkDown + networkUp +elif [ "${MODE}" == "startCli" ]; then + clearCli + networkUp +else + exit 1 +fi diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/generate.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/generate.sh new file mode 100644 index 00000000..fa8793ac --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/generate.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +function printHelp() { + echo "在调用前,需要设置 CRYPTTOGEN_FILE_PATH 环境变量,使其指向 cryptogen 工具路径" + echo "用法:" + echo " generate.sh " + echo " - one of 'up', 'down'" + echo " - 'up' - 生成 crypto-config 目录及证书" + echo " - 'down' - 删除 crypto-config 目录及证书" + echo " - 'extend' - 添加新节点的证书" + echo " generate.sh -h (print this message)" + echo + echo "示例:" + echo " export CRYPTTOGEN_FILE_PATH=$(pwd)../cryptogen && generate.sh up" + echo " export CRYPTTOGEN_FILE_PATH=$(pwd)../cryptogen && generate.sh down" +} + +# Generates Org certs using cryptogen tool +function generateCerts() { + echo ${CRYPTTOGEN_FILE_PATH} + + if [ ! -e "${CRYPTTOGEN_FILE_PATH}" ]; then + echo "cryptogen 工具不存在. 结束运行" + exit 1 + fi + echo + echo "##########################################################" + echo "############### 使用 cryptogen 工具创建证书 ##############" + echo "##########################################################" + + chmod +x ${CRYPTTOGEN_FILE_PATH} + + if [ -d "crypto-config" ]; then + rm -Rf crypto-config + fi + set -x + ${CRYPTTOGEN_FILE_PATH} generate --config=./crypto-config.yaml + res=$? + set +x + if [ $res -ne 0 ]; then + echo "创建证书失败..." + exit 1 + fi +} + +# Generates Org certs using cryptogen tool +function extendCerts() { + echo ${CRYPTTOGEN_FILE_PATH} + + if [ ! -e "${CRYPTTOGEN_FILE_PATH}" ]; then + echo "cryptogen 工具不存在. 结束运行" + exit 1 + fi + echo + echo "##########################################################" + echo "############### 使用 cryptogen 工具创建新节点证书 ##############" + echo "##########################################################" + + chmod +x ${CRYPTTOGEN_FILE_PATH} + + #if [ -d "crypto-config" ]; then + # rm -Rf crypto-config + #fi + set -x + ${CRYPTTOGEN_FILE_PATH} extend --config=./crypto-config.yaml + res=$? + set +x + if [ $res -ne 0 ]; then + echo "创建新节点证书失败..." + exit 1 + fi +} + +function removeCerts() { + if [ -d "crypto-config" ]; then + rm -Rf crypto-config + fi +} + +while getopts "h?" opt; do + case "$opt" in + h | \?) + printHelp + exit 0 + ;; + esac +done + +# Parse commandline args +MODE=$1 + +if [ "${MODE}" == "up" ]; then + generateCerts +elif [ "${MODE}" == "down" ]; then ## Clear the network + removeCerts +elif [ "${MODE}" == "extend" ]; then + extendCerts +else + printHelp + exit 1 +fi diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/init.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/init.sh new file mode 100644 index 00000000..231a66d3 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/init.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +chmod +x $(pwd)/tools/linux/configtxgen +chmod +x $(pwd)/tools/linux/cryptogen +chmod +x $(pwd)/tools/linux/configtxlator + +INSTALL_MODE=$1 + +which java +if [ "$?" -ne 0 ]; then + echo "请先按转JDK并将其可执行目录放入环境变量PATH中。结束运行" + exit 1 +fi + +if [ "${INSTALL_MODE}" == "newInstall" ]; then + rm -rf ./fabric-net/cryptoAndConfig/crypto-config + echo "rm -rf ./fabric-net/cryptoAndConfig/crypto-config" + rm -rf ./fabric-net/cryptoAndConfig/configtx.yaml + echo "rm -rf ./fabric-net/cryptoAndConfig/configtx.yaml" + rm -rf ./fabric-net/cryptoAndConfig/crypto-config.yaml + echo "rm -rf ./fabric-net/cryptoAndConfig/crypto-config.yaml" + rm -rf ./fabric-net/dockerFile/* + echo "rm -rf ./fabric-net/dockerFile/*" + rm -rf ./bcp-install.mv.db + echo "rm -rf ./bcp-install.mv.db" +fi + +java -jar bcp-install.jar --init.config=$(pwd)/initconfig.propertise --init.dir=$(pwd) --init.yes=1 --global.master=1 diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/initconfig.propertise b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/initconfig.propertise new file mode 100644 index 00000000..76db9a3e --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/initconfig.propertise @@ -0,0 +1,19 @@ +network: bankunion +channelName: bankconsortium +orgMSPID: BcpMSP +orgName: bcp +ordererDomain: bcp.com +peerDomain: bcp.com +ordererHostConfig: + orderer.bcp.com: 127.0.0.1:7050 + orderer2.bcp.com: 127.0.0.1:8050 + orderer3.bcp.com: 127.0.0.1:9050 +peerHostConfig: + peer0.bcp.com: 127.0.0.1:7051 + peer1.bcp.com: 127.0.0.1:8051 +metricPortConfig: + peer0.bcp.com: 9443 + peer1.bcp.com: 10443 +couchdbPortConfig: + peer0.bcp.com: 5984 + peer1.bcp.com: 6984 diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/start-installService-master.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/start-installService-master.sh new file mode 100644 index 00000000..cd0af221 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/start-installService-master.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +function printHelp() { + echo "用法:" + echo " start-installService-master.sh -m newInstall -p path" + echo " -m - 指定安装模式,newInstall--全新模式安装, updateNetwork--扩缩容模式安装" + echo " -p - 指定安装路径" + echo " start-installService-master.sh -h (print this message)" + echo +} + +if [ $# == 0 ]; then + printHelp + exit 0 +fi + +INIT_ORG=1 +INSTALL_PATH="" +INSTALL_MODE="" + +while getopts "h?m:p:" opt; do + case "$opt" in + h | \?) + printHelp + exit 0 + ;; + m) + INSTALL_MODE=$OPTARG + ;; + p) + INSTALL_PATH=$OPTARG + ;; + esac +done + +if [ "${INSTALL_MODE}x" == "x" ]; then + echo + echo "请指定安装模式" + printHelp + exit 0 +elif [[ "${INSTALL_MODE}" != "newInstall" && "${INSTALL_MODE}" != "updateNetwork" ]]; then + echo + echo "请指定正确的安装模式" + printHelp + exit 0 +fi + +if [ "${INSTALL_MODE}" == "newInstall" ]; then + bash ./init.sh ${INSTALL_MODE} +fi + +if [ "${INSTALL_PATH}x" == "x" ]; then + echo + echo "请指定安装路径" + exit 0 +fi + +which java +if [ "$?" -ne 0 ]; then + echo "请先按转JDK并将其可执行目录放入环境变量PATH中。结束运行" + exit 1 +fi + +echo "initOrg=${INIT_ORG}" +java -jar bcp-install.jar --init.config=$(pwd)/initconfig.propertise --init.dir=$(pwd) --init.yes=0 --global.master=1 --install.mode=${INSTALL_MODE} --install.path=${INSTALL_PATH} diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/.gitkeep b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/cli.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/cli.yaml new file mode 100644 index 00000000..c57799bb --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/cli.yaml @@ -0,0 +1,31 @@ + +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 + #- FABRIC_LOGGING_SPEC=DEBUG + - FABRIC_LOGGING_SPEC=INFO + - CORE_PEER_ID=cli + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 + - CORE_PEER_LOCALMSPID=Org1MSP + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt + - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + command: /bin/bash + volumes: + - /var/run/:/host/var/run/ + - /opt/gopath/src/github.com/hyperledger/fabric/core:/opt/gopath/src/github.com/hyperledger/fabric/core + - ../crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ + - ../channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts + depends_on: + - peer0.org1.example.com + - peer1.org1.example.com + networks: + - byfn diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/configtx-otherorg.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/configtx-otherorg.yaml new file mode 100644 index 00000000..ccb0aad9 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/configtx-otherorg.yaml @@ -0,0 +1,31 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +--- +################################################################################ +# +# Section: Organizations +# +# - This section defines the different organizational identities which will +# be referenced later in the configuration. +# +################################################################################ +Organizations: + - &Org4 + # DefaultOrg defines the organization which is used in the sampleconfig + # of the fabric.git development environment + Name: Org4MSP + + # ID to load the MSP definition as + ID: Org4MSP + + MSPDir: crypto-config/peerOrganizations/org4.example.com/msp + + AnchorPeers: + # AnchorPeers defines the location of peers which can be used + # for cross org gossip communication. Note, this value is only + # encoded in the genesis block in the Application section context + - Host: peer0.org4.example.com + Port: 13051 diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/configtx.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/configtx.yaml new file mode 100644 index 00000000..9c40c9ef --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/configtx.yaml @@ -0,0 +1,326 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +--- +################################################################################ +# +# Section: Organizations +# +# - This section defines the different organizational identities which will +# be referenced later in the configuration. +# +################################################################################ +Organizations: + # SampleOrg defines an MSP using the sampleconfig. It should never be used + # in production but may be used as a template for other definitions + - &OrdererOrg + # DefaultOrg defines the organization which is used in the sampleconfig + # of the fabric.git development environment + Name: OrdererOrg + + # ID to load the MSP definition as + ID: OrdererMSP + + # MSPDir is the filesystem path which contains the MSP configuration + MSPDir: crypto-config/ordererOrganizations/${Domain}/msp + + # Policies defines the set of policies at this level of the config tree + # For organization policies, their canonical path is usually + # /Channel/// + Policies: + Readers: + Type: Signature + Rule: "OR('OrdererMSP.member')" + Writers: + Type: Signature + Rule: "OR('OrdererMSP.member')" + Admins: + Type: Signature + Rule: "OR('OrdererMSP.admin')" + + - &Org1 + # DefaultOrg defines the organization which is used in the sampleconfig + # of the fabric.git development environment + Name: ${OrgName} + + # ID to load the MSP definition as + ID: ${OrgMSPID} + + MSPDir: crypto-config/peerOrganizations/${OrgName}.${Domain}/msp + + # Policies defines the set of policies at this level of the config tree + # For organization policies, their canonical path is usually + # /Channel/// + Policies: + Readers: + Type: Signature + Rule: "OR('${OrgMSPID}.admin', '${OrgMSPID}.peer', '${OrgMSPID}.client')" + Writers: + Type: Signature + Rule: "OR('${OrgMSPID}.admin', '${OrgMSPID}.client')" + Admins: + Type: Signature + Rule: "OR('${OrgMSPID}.admin')" + + # leave this flag set to true. + AnchorPeers: + # AnchorPeers defines the location of peers which can be used + # for cross org gossip communication. Note, this value is only + # encoded in the genesis block in the Application section context + - Host: peer0.${OrgName}.${Domain} + Port: 7051 + +################################################################################ +# +# SECTION: Capabilities +# +# - This section defines the capabilities of fabric network. This is a new +# concept as of v1.1.0 and should not be utilized in mixed networks with +# v1.0.x peers and orderers. Capabilities define features which must be +# present in a fabric binary for that binary to safely participate in the +# fabric network. For instance, if a new MSP type is added, newer binaries +# might recognize and validate the signatures from this type, while older +# binaries without this support would be unable to validate those +# transactions. This could lead to different versions of the fabric binaries +# having different world states. Instead, defining a capability for a channel +# informs those binaries without this capability that they must cease +# processing transactions until they have been upgraded. For v1.0.x if any +# capabilities are defined (including a map with all capabilities turned off) +# then the v1.0.x peer will deliberately crash. +# +################################################################################ +Capabilities: + # Channel capabilities apply to both the orderers and the peers and must be + # supported by both. + # Set the value of the capability to true to require it. + Channel: &ChannelCapabilities + # V1.3 for Channel is a catchall flag for behavior which has been + # determined to be desired for all orderers and peers running at the v1.3.x + # level, but which would be incompatible with orderers and peers from + # prior releases. + # Prior to enabling V1.3 channel capabilities, ensure that all + # orderers and peers on a channel are at v1.3.0 or later. + V1_3: true + + # Orderer capabilities apply only to the orderers, and may be safely + # used with prior release peers. + # Set the value of the capability to true to require it. + Orderer: &OrdererCapabilities + # V1.1 for Orderer is a catchall flag for behavior which has been + # determined to be desired for all orderers running at the v1.1.x + # level, but which would be incompatible with orderers from prior releases. + # Prior to enabling V1.1 orderer capabilities, ensure that all + # orderers on a channel are at v1.1.0 or later. + V1_1: true + + # Application capabilities apply only to the peer network, and may be safely + # used with prior release orderers. + # Set the value of the capability to true to require it. + Application: &ApplicationCapabilities + # V1.3 for Application enables the new non-backwards compatible + # features and fixes of fabric v1.3. + V1_3: true + # V1.2 for Application enables the new non-backwards compatible + # features and fixes of fabric v1.2 (note, this need not be set if + # later version capabilities are set) + V1_2: false + # V1.1 for Application enables the new non-backwards compatible + # features and fixes of fabric v1.1 (note, this need not be set if + # later version capabilities are set). + V1_1: false + +################################################################################ +# +# SECTION: Application +# +# - This section defines the values to encode into a config transaction or +# genesis block for application related parameters +# +################################################################################ +Application: &ApplicationDefaults + + # Organizations is the list of orgs which are defined as participants on + # the application side of the network + Organizations: + + # Policies defines the set of policies at this level of the config tree + # For Application policies, their canonical path is + # /Channel/Application/ + Policies: + Readers: + Type: ImplicitMeta + Rule: "ANY Readers" + Writers: + Type: ImplicitMeta + Rule: "ANY Writers" + Admins: + Type: ImplicitMeta + Rule: "MAJORITY Admins" + + Capabilities: + <<: *ApplicationCapabilities +################################################################################ +# +# SECTION: Orderer +# +# - This section defines the values to encode into a config transaction or +# genesis block for orderer related parameters +# +################################################################################ +Orderer: &OrdererDefaults + + # Orderer Type: The orderer implementation to start + # Available types are "solo" and "kafka" + OrdererType: solo + + Addresses: + - orderer.${Domain}:7050 + + # Batch Timeout: The amount of time to wait before creating a batch + BatchTimeout: 2s + + # Batch Size: Controls the number of messages batched into a block + BatchSize: + + # Max Message Count: The maximum number of messages to permit in a batch + MaxMessageCount: 10 + + # Absolute Max Bytes: The absolute maximum number of bytes allowed for + # the serialized messages in a batch. + AbsoluteMaxBytes: 99 MB + + # Preferred Max Bytes: The preferred maximum number of bytes allowed for + # the serialized messages in a batch. A message larger than the preferred + # max bytes will result in a batch larger than preferred max bytes. + PreferredMaxBytes: 512 KB + + Kafka: + # Brokers: A list of Kafka brokers to which the orderer connects + # NOTE: Use IP:port notation + Brokers: + - 127.0.0.1:9092 + + # Organizations is the list of orgs which are defined as participants on + # the orderer side of the network + Organizations: + + # Policies defines the set of policies at this level of the config tree + # For Orderer policies, their canonical path is + # /Channel/Orderer/ + Policies: + Readers: + Type: ImplicitMeta + Rule: "ANY Readers" + Writers: + Type: ImplicitMeta + Rule: "ANY Writers" + Admins: + Type: ImplicitMeta + Rule: "MAJORITY Admins" + # BlockValidation specifies what signatures must be included in the block + # from the orderer for the peer to validate it. + BlockValidation: + Type: ImplicitMeta + Rule: "ANY Writers" + +################################################################################ +# +# CHANNEL +# +# This section defines the values to encode into a config transaction or +# genesis block for channel related parameters. +# +################################################################################ +Channel: &ChannelDefaults + # Policies defines the set of policies at this level of the config tree + # For Channel policies, their canonical path is + # /Channel/ + Policies: + # Who may invoke the 'Deliver' API + Readers: + Type: ImplicitMeta + Rule: "ANY Readers" + # Who may invoke the 'Broadcast' API + Writers: + Type: ImplicitMeta + Rule: ANY Writers + # By default, who may modify elements at this config level + Admins: + Type: ImplicitMeta + Rule: "MAJORITY Admins" + + # Capabilities describes the channel level capabilities, see the + # dedicated Capabilities section elsewhere in this file for a full + # description + Capabilities: + <<: *ChannelCapabilities + +################################################################################ +# +# Profile +# +# - Different configuration profiles may be encoded here to be specified +# as parameters to the configtxgen tool +# +################################################################################ +Profiles: + # 创世 + SampleMultiNodeEtcdRaft: + <<: *ChannelDefaults + Capabilities: + <<: *ChannelCapabilities + Orderer: + <<: *OrdererDefaults + OrdererType: etcdraft + EtcdRaft: + Consenters: + - Host: orderer.example.com + Port: 7050 + ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt + ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt + - Host: orderer2.example.com + Port: 7050 + ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt + ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt + - Host: orderer3.example.com + Port: 7050 + ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt + ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt + Addresses: + - orderer.example.com:7050 + - orderer2.example.com:7050 + - orderer3.example.com:7050 + Organizations: + - *OrdererOrg + Capabilities: + <<: *OrdererCapabilities + Application: + <<: *ApplicationDefaults + Organizations: + - <<: *OrdererOrg + Consortiums: + SampleConsortium: + Organizations: + - *Org1 + + PrivateChannel: + Consortium: SampleConsortium + <<: *ChannelDefaults + Application: + <<: *ApplicationDefaults + Organizations: + - *Org1 + Capabilities: + <<: *ApplicationCapabilities + + OneOrgChannel: + Consortium: SampleConsortium + <<: *ChannelDefaults + Application: + <<: *ApplicationDefaults + Organizations: + - *Org1 + Capabilities: + <<: *ApplicationCapabilities diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/create-update-pb.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/create-update-pb.sh new file mode 100644 index 00000000..a08decc1 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/create-update-pb.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# 这个脚本需要在 /var/run/ 目录下执行,因为 cli 获取通道配置文件后会复制到容器的 /host/var/run/ 下,也就是宿主机的 /var/run/ + +CHANNEL_NAME="$1" + +which jq +if [ "$?" -ne 0 ]; then + yum -y install jq +fi + +cp -r /host/var/run/config_${CHANNEL_NAME}.json ./ +cp -r /host/var/run/config_${CHANNEL_NAME}_modified.json ./ + +configtxlator proto_encode --input config_${CHANNEL_NAME}.json --type common.Config --output config_${CHANNEL_NAME}.pb + +configtxlator proto_encode --input config_${CHANNEL_NAME}_modified.json --type common.Config --output config_${CHANNEL_NAME}_modified.pb + +configtxlator compute_update --channel_id $CHANNEL_NAME --original config_${CHANNEL_NAME}.pb --updated config_${CHANNEL_NAME}_modified.pb --output config_update_${CHANNEL_NAME}.pb + +configtxlator proto_decode --input config_update_${CHANNEL_NAME}.pb --type common.ConfigUpdate | jq '.' > config_update_${CHANNEL_NAME}.json + +echo '{"payload":{"header":{"channel_header":{"channel_id":"'${CHANNEL_NAME}'","type":2}},"data":{"config_update":'$(cat config_update_${CHANNEL_NAME}.json)'}}}' | jq '.' > config_update_${CHANNEL_NAME}_in_envelope.json + +configtxlator proto_encode --input config_update_${CHANNEL_NAME}_in_envelope.json --type common.Envelope --output config_update_${CHANNEL_NAME}_in_envelope.pb + diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/crypto-config-otherorg.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/crypto-config-otherorg.yaml new file mode 100644 index 00000000..5e050c60 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/crypto-config-otherorg.yaml @@ -0,0 +1,17 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +# --------------------------------------------------------------------------- +# "PeerOrgs" - Definition of organizations managing peer nodes +# --------------------------------------------------------------------------- +PeerOrgs: + - Name: ${orgName} + Domain: ${orgMSP}.bcplatform.com + EnableNodeOUs: true + Template: + Count: ${orgTotalPeers} + Users: + Count: 1 + diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/crypto-config.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/crypto-config.yaml new file mode 100644 index 00000000..c0587bd6 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/crypto-config.yaml @@ -0,0 +1,81 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +# --------------------------------------------------------------------------- +# "OrdererOrgs" - Definition of organizations managing orderer nodes +# --------------------------------------------------------------------------- +OrdererOrgs: + # --------------------------------------------------------------------------- + # Orderer + # --------------------------------------------------------------------------- + - Name: Orderer + Domain: example.com + # --------------------------------------------------------------------------- + # "Specs" - See PeerOrgs below for complete description + # --------------------------------------------------------------------------- + Specs: + - Hostname: orderer + - Hostname: orderer2 + - Hostname: orderer3 + +# --------------------------------------------------------------------------- +# "PeerOrgs" - Definition of organizations managing peer nodes +# --------------------------------------------------------------------------- +PeerOrgs: + # --------------------------------------------------------------------------- + # Org1 + # --------------------------------------------------------------------------- + - Name: Org1 + Domain: org1.example.com + EnableNodeOUs: true + # --------------------------------------------------------------------------- + # "Specs" + # --------------------------------------------------------------------------- + # Uncomment this section to enable the explicit definition of hosts in your + # configuration. Most users will want to use Template, below + # + # Specs is an array of Spec entries. Each Spec entry consists of two fields: + # - Hostname: (Required) The desired hostname, sans the domain. + # - CommonName: (Optional) Specifies the template or explicit override for + # the CN. By default, this is the template: + # + # "{{.Hostname}}.{{.Domain}}" + # + # which obtains its values from the Spec.Hostname and + # Org.Domain, respectively. + # --------------------------------------------------------------------------- + # Specs: + # # - Hostname: foo # implicitly "foo.org1.example.com" + # # CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above + # # - Hostname: bar + # # - Hostname: baz + # --------------------------------------------------------------------------- + Specs: + - Hostname: peer + - Hostname: peer2 + - Hostname: peer3 + # "Template" + # --------------------------------------------------------------------------- + # Allows for the definition of 1 or more hosts that are created sequentially + # from a template. By default, this looks like "peer%d" from 0 to Count-1. + # You may override the number of nodes (Count), the starting index (Start) + # or the template used to construct the name (Hostname). + # + # Note: Template and Specs are not mutually exclusive. You may define both + # sections and the aggregate nodes will be created for you. Take care with + # name collisions + # --------------------------------------------------------------------------- + #Template: + #Count: 2 + # Start: 5 + # Hostname: {{.Prefix}}{{.Index}} # default + # --------------------------------------------------------------------------- + # "Users" + # --------------------------------------------------------------------------- + # Count: The number of user accounts _in addition_ to Admin + # --------------------------------------------------------------------------- + Users: + Count: 1 + diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/docker-compose-orderer.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/docker-compose-orderer.yaml new file mode 100644 index 00000000..fb3c9314 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/docker-compose-orderer.yaml @@ -0,0 +1,28 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +version: '2' + +volumes: + orderer2.example.com: + orderer3.example.com: + +networks: + byfn: +# bridge: +# external: true + +services: + orderer2.example.com: + container_name: orderer2.example.com + networks: + - byfn + volumes: + - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block + - ../crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/var/hyperledger/orderer/msp + - ../crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/:/var/hyperledger/orderer/tls + - orderer2.example.com:/var/hyperledger/production/orderer + ports: + - 8050:7050 diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/docker-compose-peer.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/docker-compose-peer.yaml new file mode 100644 index 00000000..c81e887c --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/docker-compose-peer.yaml @@ -0,0 +1,64 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +version: '2' + +volumes: + orderer.example.com: + peer0.org1.example.com: + peer1.org1.example.com: + +networks: + byfn: + +services: + orderer.example.com: + container_name: orderer.example.com + networks: + - byfn + + peer0.org1.example.com: + container_name: peer0.org1.example.com + networks: + - byfn + + peer1.org1.example.com: + container_name: peer1.org1.example.com + networks: + - byfn + + 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 + #- FABRIC_LOGGING_SPEC=DEBUG + - FABRIC_LOGGING_SPEC=INFO + - CORE_PEER_ID=cli + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 + - CORE_PEER_LOCALMSPID=Org1MSP + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/%s/peers/%s/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/%s/peers/%s/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/%s/peers/%s/tls/ca.crt + - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/%s/users/Admin@%s/msp + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + command: /bin/bash + volumes: + - /var/run/:/host/var/run/ + - /opt/gopath/src/github.com/hyperledger/fabric/core:/opt/gopath/src/github.com/hyperledger/fabric/core + - ../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 + extra_hosts: + - "" + depends_on: + - peer0.org1.example.com + - peer1.org1.example.com + networks: + - byfn diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/fetch-config.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/fetch-config.sh new file mode 100644 index 00000000..b93636e4 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/fetch-config.sh @@ -0,0 +1,16 @@ +CHANNEL_NAME="$1" +ORDERER_CA="$2" +CORE_PEER_LOCALMSPID="$3" +CORE_PEER_ADDRESS="$4" +CORE_PEER_TLS_ROOTCERT_FILE="$5" +CORE_PEER_MSPCONFIGPATH="$6" + +which jq +if [ "$?" -ne 0 ]; then + yum -y install jq +fi + +peer channel fetch config config_block_${CHANNEL_NAME}.pb -o $CORE_PEER_ADDRESS -c $CHANNEL_NAME --tls --cafile $ORDERER_CA +configtxlator proto_decode --input config_block_${CHANNEL_NAME}.pb --type common.Block | jq '.data.data[0].payload.data.config' > config_${CHANNEL_NAME}.json +cp ./config_${CHANNEL_NAME}.json /host/var/run/ + diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/fetchGenesisBlock.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/fetchGenesisBlock.sh new file mode 100644 index 00000000..cb025c78 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/fetchGenesisBlock.sh @@ -0,0 +1,13 @@ +CHANNEL_NAME="$1" +ORDERER_CA="$2" +CORE_PEER_LOCALMSPID="$3" +CORE_PEER_ADDRESS="$4" +CORE_PEER_TLS_ROOTCERT_FILE="$5" +CORE_PEER_MSPCONFIGPATH="$6" + +export CORE_PEER_LOCALMSPID=${CORE_PEER_LOCALMSPID} +export CORE_PEER_MSPCONFIGPATH=${CORE_PEER_MSPCONFIGPATH} + +peer channel fetch config channel-artifacts/genesis.block -o $CORE_PEER_ADDRESS -c $CHANNEL_NAME --tls --cafile $ORDERER_CA + +cp -r channel-artifacts/genesis.block /host/var/run/genesis.block \ No newline at end of file diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/list-channels.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/list-channels.sh new file mode 100644 index 00000000..e5143b33 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/list-channels.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +CORE_PEER_ADDRESS="$1" +CORE_PEER_TLS_ROOTCERT_FILE="$2" +CORE_PEER_TLS_CERT_FILE="$3" +CORE_PEER_TLS_KEY_FILE="$4" + +# docker exec cli scripts/script.sh $CHANNEL_NAME $CLI_DELAY $LANGUAGE $CLI_TIMEOUT $VERBOSE $NO_CHAINCODE +peer channel list diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/newPeerJoinChannel.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/newPeerJoinChannel.sh new file mode 100644 index 00000000..bf454dfb --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/newPeerJoinChannel.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +function printHelp() { + echo "用法:" + echo " start-installService-master.sh -o 0 -m newInstall -p path" + echo " -c - 指定本节点加入的链名" + echo " -o - 指定orderer" + echo " -O - 指定orderer的CA证书路径" + echo " -p - 指定peer的域名与端口" + echo " -r - 指定peer的Tls的CA证书路径" + echo " -e - 指定peer的Tls的证书路径" + echo " -k - 指定peer的Tls的私钥路径" + echo " newPeerJoinChannel.sh -h (print this message)" + echo +} + +if [ $# == 0 ]; then + printHelp + exit 0 +fi + +ORDERERADDRESS="" +CHANNEL_NAME="" +ORDERER_CA="" + +PEER_ADDRESS="" +PEER_TLS_ROOTCERT_FILE="" +PEER_TLS_CERT_FILE="" +PEER_TLS_KEY_FILE="" + +while getopts "h?c:o:O:p:r:e:k:" opt; do + case "$opt" in + h | \?) + printHelp + exit 0 + ;; + c) + CHANNEL_NAME=$OPTARG + ;; + o) + ORDERERADDRESS=$OPTARG + ;; + O) + ORDERER_CA=$OPTARG + ;; + p) + PEER_ADDRESS=$OPTARG + ;; + r) + PEER_TLS_ROOTCERT_FILE=$OPTARG + ;; + e) + PEER_TLS_CERT_FILE=$OPTARG + ;; + k) + PEER_TLS_KEY_FILE=$OPTARG + ;; + esac +done + +# docker exec cli bash scripts/script.sh $CHANNEL_NAME $CLI_DELAY $LANGUAGE $CLI_TIMEOUT $VERBOSE $NO_CHAINCODE + +export CORE_PEER_ADDRESS=${ORDERERADDRESS} +peer channel fetch 0 ${CHANNEL_NAME}.block -o ${ORDERERADDRESS} -c ${CHANNEL_NAME} --tls --cafile ${ORDERER_CA} + +export CORE_PEER_ADDRESS=${PEER_ADDRESS} +export CORE_PEER_TLS_ROOTCERT_FILE=${PEER_TLS_ROOTCERT_FILE} +export CORE_PEER_TLS_CERT_FILE=${PEER_TLS_CERT_FILE} +export CORE_PEER_TLS_KEY_FILE=${PEER_TLS_KEY_FILE} +peer channel join -b ${CHANNEL_NAME}.block diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/orderer.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/orderer.yaml new file mode 100644 index 00000000..11965705 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/orderer.yaml @@ -0,0 +1,32 @@ +orderer.example.com: + image: hyperledger/fabric-orderer:$IMAGE_TAG + environment: + - FABRIC_LOGGING_SPEC=INFO + - 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] + - ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1 + - ORDERER_KAFKA_VERBOSE=true + - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt + - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key + - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] + working_dir: /opt/gopath/src/github.com/hyperledger/fabric + command: orderer + container_name: orderer.example.com +# network_mode: "bridge" + networks: + - byfn + 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 diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/peer.yaml b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/peer.yaml new file mode 100644 index 00000000..d1f631a4 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/peer.yaml @@ -0,0 +1,45 @@ +peer0.org1.example.com: + container_name: peer0.org1.example.com + image: hyperledger/fabric-peer:$IMAGE_TAG + environment: + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=peer_${network} + - FABRIC_LOGGING_SPEC=INFO + #- FABRIC_LOGGING_SPEC=DEBUG + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + - CORE_PEER_PROFILE_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt + - CORE_PEER_ID=peer0.org1.example.com + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 + - CORE_PEER_LISTENADDRESS=0.0.0.0:7051 + - CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052 + - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:8051 # 另一节点 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 + - CORE_PEER_LOCALMSPID=Org1MSP + - CORE_OPERATIONS_LISTENADDRESS=peer0.org1.example.com:9443 + - CORE_METRICS_PROVIDER=prometheus + depends_on: + - couchdb2 + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + command: peer node start + volumes: + - /var/run/:/host/var/run/ + - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp + - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls + - peer0.org1.example.com:/var/hyperledger/production + extra_hosts: + - "" + ports: + - 7051:7051 + - 9443:9443 +# network_mode: "bridge" + networks: + - byfn diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/start-peer.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/start-peer.sh new file mode 100644 index 00000000..45daa93d --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/start-peer.sh @@ -0,0 +1,254 @@ +#!/bin/bash + +export PATH=${PWD}/../bin:${PWD}:$PATH +export FABRIC_CFG_PATH=${PWD} +export VERBOSE=false + +# if version not passed in, default to latest released version +export VERSION=1.4.2 +# current version of thirdparty images (couchdb, kafka and zookeeper) released +export THIRDPARTY_IMAGE_VERSION=0.4.15 + +# 两个 tag 变量值 +: ${FABRIC_TAG:="$VERSION"} +: ${THIRDPARTY_TAG:="$THIRDPARTY_IMAGE_VERSION"} + +# default image tag +IMAGETAG=${VERSION} + +# 检查是启动 orderer 或 peer +THIS_FILE_PATH=$0 +FILE_NAME=${THIS_FILE_PATH##*-} +PEER_TYPE=${FILE_NAME%.*} + +NEED_DOWNLOAD_IMAGES=(peer tools orderer) + +# 设置 go 相关环境 +GOPATH="/opt/gopath" +GOROOT="/usr/local/go/" + +# 需要下载的 docker image +if [ "$PEER_TYPE"x == "orderer"x ]; then + NEED_DOWNLOAD_IMAGES=(orderer tools) +else + NEED_DOWNLOAD_IMAGES=(peer tools) +fi + +function printHelp() { + echo "用法:" + echo " start-$PEER_TYPE.sh " + echo " - 必须是 'up', 'down' 两者之一" + echo " - 'up' - 启动${PEER_TYPE}节点" + echo " - 'down' - 停止${PEER_TYPE}节点" + echo " start-$PEER_TYPE.sh -h (打印帮助信息)" + echo +} + +if [ "$#" -eq 0 ]; then + printHelp + exit 0 +fi + +checkAndInstallGo() { + which go >& /dev/null + if [ $? -ne 0 ]; then + mkdir -p /tmp/golang + cd /tmp/golang + curl -L https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz > ./go1.13.5.linux-amd64.tar.gz + tar xf ./go1.13.5.linux-amd64.tar.gz + mv ./go /usr/local/go + cd - + rm -rf /tmp/golang + fi + env | grep 'GOPATH' + if [ $? -ne 0 ]; then + echo "export GOROOT=$GOROOT">>/etc/profile + echo "export GOPATH=$GOPATH">>/etc/profile + mkdir -p $GOPATH/src/github.com/hyperledger + mkdir -p $GOPATH/bin + echo "export PATH=$PATH:$GOPATH/bin:$GOROOT/bin">>/etc/profile + source /etc/profile + fi +} + +fabricCodePull() { + if [ ! -d "$GOPATH/src/github.com/hyperledger/fabric" ]; then + cd $GOPATH/src/github.com/hyperledger + git clone https://github.com/hyperledger/fabric.git + cd - + cd $GOPATH/src/github.com/hyperledger/fabric + git checkout "v${VERSION}" + make release && cp ./release/linux-amd64/bin/* $GOPATH/bin + cd - + fi +} + +dockerFabricPull() { + local FABRIC_TAG=$1 + for IMAGES in $NEED_DOWNLOAD_IMAGES; do + echo "==> FABRIC IMAGE: $IMAGES" + echo + docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG + docker tag hyperledger/fabric-$IMAGES:$FABRIC_TAG hyperledger/fabric-$IMAGES + done +} + +dockerThirdPartyImagesPull() { + if [ "$PEER_TYPE"x == "peer"x ]; then + local THIRDPARTY_TAG=$1 + IMAGES="couchdb" + echo "==> THIRDPARTY DOCKER IMAGE: $IMAGES" + echo + docker pull hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG + docker tag hyperledger/fabric-$IMAGES:$THIRDPARTY_TAG hyperledger/fabric-$IMAGES + fi +} + +dockerInstall() { + which docker >& /dev/null + NODOCKER=$? + if [ "${NODOCKER}" -ne 0 ]; then + yum install docker-ce + + which docker-compose >& /dev/null + if [ "$?" -ne 0 ]; then + curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose + chmod +x /usr/local/bin/docker-compose + fi + fi + + echo "===> Pulling fabric Images" + dockerFabricPull ${FABRIC_TAG} + echo "===> Pulling thirdparty docker images" + dockerThirdPartyImagesPull ${THIRDPARTY_TAG} + echo + echo "===> List out hyperledger docker images" + docker images | grep hyperledger* +} + +# Obtain CONTAINER_IDS and remove them +# TODO Might want to make this optional - could clear other containers +function clearContainers() { + CONTAINER_IDS=$(docker ps -a -q) + if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then + echo "---- No containers available for deletion ----" + else + docker rm -f $CONTAINER_IDS + fi +} + +# Delete any images that were generated as a part of this setup +# specifically the following images are often left behind: +# TODO list generated image naming patterns +function removeUnwantedImages() { + DOCKER_IMAGE_IDS=$(docker images | awk '($1 ~ /dev-peer.*/) {print $3}') + if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" == " " ]; then + echo "---- No images available for deletion ----" + else + docker rmi -f $DOCKER_IMAGE_IDS + fi +} + +function removeDockerRubbish() { + docker network prune -f + docker volume prune -f +} + +# Versions of fabric known not to work with this release of first-network +BLACKLISTED_VERSIONS="^1\.0\. ^1\.1\.0-preview ^1\.1\.0-alpha" + +# Do some basic sanity checking to make sure that the appropriate versions of fabric +# binaries/images are available. In the future, additional checking for the presence +# of go or other items could be added. +function checkPrereqs() { + # Note, we check configtxlator externally because it does not require a config file, and peer in the + # docker image because of FAB-8551 that makes configtxlator return 'development version' in docker + DOCKER_IMAGE_VERSION=$(docker run --rm hyperledger/fabric-tools:$IMAGETAG peer version | sed -ne 's/ Version: //p' | head -1) + + echo "DOCKER_IMAGE_VERSION=$DOCKER_IMAGE_VERSION" + + for UNSUPPORTED_VERSION in $BLACKLISTED_VERSIONS; do + echo "$DOCKER_IMAGE_VERSION" | grep -q $UNSUPPORTED_VERSION + if [ $? -eq 0 ]; then + echo "ERROR! Fabric Docker image version of $DOCKER_IMAGE_VERSION does not match this newer version of BYFN and is unsupported. Either move to a later version of Fabric or checkout an earlier version of fabric-samples." + exit 1 + fi + done +} + +function clearCli(){ + docker stop cli + docker rm cli +} + +# Generate the needed certificates, the genesis block and start the network. +function networkUp() { + checkAndInstallGo + fabricCodePull + + checkPrereqs + dockerInstall + + # check artifacts directory + if [ ! -d "../crypto-config" ]; then + echo "ERROR! crypto-config path not exist" + exit 1 + fi + + COMPOSE_FILES="-f ${COMPOSE_FILE}" + IMAGE_TAG=$IMAGETAG docker-compose ${COMPOSE_FILES} up -d 2>&1 + docker ps -a + if [ $? -ne 0 ]; then + echo "ERROR !!!! Unable to start network" + exit 1 + fi +} + +# Tear down running network +function networkDown() { + # stop org3 containers also in addition to org1 and org2, in case we were running sample to add org3 + # stop kafka and zookeeper containers in case we're running with kafka consensus-type + docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH -f $COMPOSE_FILE_KAFKA -f $COMPOSE_FILE_RAFT2 -f $COMPOSE_FILE_CA -f $COMPOSE_FILE_ORG3 down --volumes --remove-orphans + + # Don't remove the generated artifacts -- note, the ledgers are always removed + if [ "$MODE" != "restart" ]; then + # Bring down the network, deleting the volumes + # Delete any ledger backups + docker run -v $PWD:/tmp/first-network --rm hyperledger/fabric-tools:$IMAGETAG rm -Rf /tmp/first-network/ledgers-backup + #Cleanup the chaincode containers + clearContainers + #Cleanup images + removeUnwantedImages + # clear docker's network and volumns + removeDockerRubbish + fi +} + +function clearCli(){ + docker stop cli + docker rm cli +} + +# use this as the default docker-compose yaml definition +COMPOSE_FILE=docker-compose-$PEER_TYPE.yaml +# +# use golang as the default language for chaincode +LANGUAGE=golang + +# Parse commandline args +MODE=$1 + +#Create the network using docker compose +if [ "${MODE}" == "up" ]; then + networkUp +elif [ "${MODE}" == "down" ]; then ## Clear the network + networkDown +elif [ "${MODE}" == "restart" ]; then ## Restart the network + networkDown + networkUp +elif [ "${MODE}" == "startCli" ]; then + clearCli + networkUp +else + exit 1 +fi diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/stopNode.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/stopNode.sh new file mode 100644 index 00000000..57aeaaad --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/stopNode.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +NODEHOST="$1" + +docker stop $(docker ps -a | grep ${NODEHOST}* | awk '{print $1}') + +docker rm $(docker ps -a | grep ${NODEHOST}* | awk '{print $1}') + +docker rmi $(docker images | grep ${NODEHOST}* | awk '{print $1}') + +docker volume rm $(docker volume list | grep ${NODEHOST}* | awk '{print $2}') \ No newline at end of file diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/update-channel-config.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/update-channel-config.sh new file mode 100644 index 00000000..c4261479 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/update-channel-config.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# 这个文件在 cli 里执行 + +CHANNEL_NAME="$1" +ORDERER_CA="$2" +CORE_PEER_LOCALMSPID="$3" +CORE_PEER_ADDRESS="$4" +CORE_PEER_TLS_ROOTCERT_FILE="$5" +CORE_PEER_MSPCONFIGPATH="$6" + +# cp /host/var/run/config_update_${CHANNEL_NAME}_in_envelope.pb ./ + +peer channel update -f config_update_${CHANNEL_NAME}_in_envelope.pb -c $CHANNEL_NAME -o $CORE_PEER_ADDRESS --tls --cafile $ORDERER_CA + diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/updateOrdererHost.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/updateOrdererHost.sh new file mode 100644 index 00000000..b19d0cc4 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/template/updateOrdererHost.sh @@ -0,0 +1,6 @@ +#! /bin/bash + +NEWORDERERHOST="$1" +NEWORDERERIP="$2" + +echo "${NEWORDERERIP} ${NEWORDERERHOST}" >> /etc/hosts \ No newline at end of file diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/tools/linux/configtxgen b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/tools/linux/configtxgen new file mode 100644 index 00000000..af634398 Binary files /dev/null and b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/tools/linux/configtxgen differ diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/tools/linux/configtxlator b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/tools/linux/configtxlator new file mode 100644 index 00000000..f662fb7d Binary files /dev/null and b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/tools/linux/configtxlator differ diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/tools/linux/cryptogen b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/tools/linux/cryptogen new file mode 100644 index 00000000..46b73e2f Binary files /dev/null and b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/masterPackage/tools/linux/cryptogen differ diff --git a/distributed-deploy/bcp-install-main/resources/generateInstallPackage/slavePackage/start-installService-slave.sh b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/slavePackage/start-installService-slave.sh new file mode 100644 index 00000000..e132ea96 --- /dev/null +++ b/distributed-deploy/bcp-install-main/resources/generateInstallPackage/slavePackage/start-installService-slave.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +function printHelp() { + echo "用法:" + echo " start-installService-slave.sh -m http://ip:port -p path" + echo " -p - 指定安装路径" + echo " start-installService-slave.sh (打印帮助信息)" + echo +} + +if [ $# == 0 ]; then + printHelp + exit 0 +fi +INSTALL_PATH="" + +while getopts "h?p:" opt; do + case "$opt" in + h | \?) + printHelp + exit 0 + ;; + p) + INSTALL_PATH=$OPTARG + ;; + esac +done + +which java +if [ "$?" -ne 0 ]; then + echo "请先按转JDK并将其可执行目录放入环境变量PATH中。结束运行" + exit 1 +fi + +java -jar bcp-install.jar --global.master=0 --install.path=${INSTALL_PATH} --init.yes=0 diff --git a/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/MainApplication.java b/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/MainApplication.java new file mode 100644 index 00000000..aeedfb90 --- /dev/null +++ b/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/MainApplication.java @@ -0,0 +1,118 @@ +package com.cgb.bcpinstall.main; + +import com.cgb.bcpinstall.biz.InitializeBiz; +import com.cgb.bcpinstall.biz.InstallBiz; +import com.cgb.bcpinstall.common.constant.ToolsConstant; +import com.cgb.bcpinstall.common.response.BaseResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import com.cgb.bcpinstall.common.util.CacheUtil; +import com.cgb.bcpinstall.common.util.FileUtil; +import com.cgb.bcpinstall.common.util.OSinfo; +import com.cgb.bcpinstall.common.util.SpringUtil; +import com.cgb.bcpinstall.config.GlobalConfig; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.context.ApplicationContext; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.io.File; +import java.util.Scanner; + +@Slf4j +@SpringBootApplication(scanBasePackages = "com.cgb.bcpinstall", exclude = DataSourceAutoConfiguration.class) +@EnableTransactionManagement +@EnableWebMvc +@EnableAsync +@EnableScheduling +@ServletComponentScan +@EnableConfigurationProperties +@EnableSwagger2 +public class MainApplication { + public static void main(String[] args) { + ApplicationContext app = SpringApplication.run(MainApplication.class, args); + SpringUtil.setApplicationContext(app); + log.info("bcp-install 安装服务已启动..."); + GlobalConfig config = (GlobalConfig) SpringUtil.getBean("globalConfig"); + if (config.getMaster() == 1) { + log.info("本结点是主节点"); + InitializeBiz initializeBiz = (InitializeBiz) SpringUtil.getBean("initializeBiz"); + if (initializeBiz.needInit()) { + BaseResponse response = initializeBiz.initialize(); + if (!response.getCode().equals(ResponseCode.SUCCESS)) { + log.error(response.getMsg()); + } else { + log.info("初始化完成"); + } + SpringApplication.exit(app, () -> 0); + return; + } + } + InstallBiz installBiz = (InstallBiz) SpringUtil.getBean("installBiz"); + installBiz.start(); + while (true) { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + if (installBiz.isFinished()) { + SpringApplication.exit(app, () -> 0); + break; + } + } + } + + @Component + public static class Runner implements CommandLineRunner { + + @Value("${init.dir}") + private String initDir; + + @Override + public void run(String... args) { + log.info("bcp-app-install 完成资源初始化"); + initToolsFilePath(); + } + + /** + * 根据不同的操作系统初始化工具文件路径 + */ + private void initToolsFilePath() { + String dir = FileUtil.reviseDir(this.initDir); + + if (!dir.endsWith(File.separator)) { + dir = dir + File.separator; + } + String toolsPath = dir + "tools/"; + if (OSinfo.isWindows()) { + CacheUtil.putCryptogenFilePath(toolsPath + "windows" + "/" + ToolsConstant.CRYPTOGEN + ".exe"); + CacheUtil.putConfigtxgenFilePath(toolsPath + "windows" + "/" + ToolsConstant.CONFIGTXGEN + ".exe"); + CacheUtil.putConfigtxlatorFilePath(toolsPath + "windows" + "/" + ToolsConstant.CONFIGTXLATOR + ".exe"); + } + if (OSinfo.isMacOSX()) { + CacheUtil.putCryptogenFilePath(toolsPath + "mac" + "/" + ToolsConstant.CRYPTOGEN); + CacheUtil.putConfigtxgenFilePath(toolsPath + "mac" + "/" + ToolsConstant.CONFIGTXGEN); + CacheUtil.putConfigtxlatorFilePath(toolsPath + "mac" + "/" + ToolsConstant.CONFIGTXLATOR); + } + if (OSinfo.isLinux()) { + CacheUtil.putCryptogenFilePath(toolsPath + "linux" + "/" + ToolsConstant.CRYPTOGEN); + CacheUtil.putConfigtxgenFilePath(toolsPath + "linux" + "/" + ToolsConstant.CONFIGTXGEN); + CacheUtil.putConfigtxlatorFilePath(toolsPath + "linux" + "/" + ToolsConstant.CONFIGTXLATOR); + } + log.info("*** " + ToolsConstant.CRYPTOGEN + "工具本地路径为:" + CacheUtil.getCryptogenFilePath()); + log.info("*** " + ToolsConstant.CONFIGTXGEN + "工具本地路径为:" + CacheUtil.getConfigtxgenFilePath()); + log.info("*** " + ToolsConstant.CONFIGTXLATOR + "工具本地路径为:" + CacheUtil.getConfigtxlatorFilePath()); + } + } +} diff --git a/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/config/FastJson2JsonRedisSerializer.java b/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/config/FastJson2JsonRedisSerializer.java new file mode 100644 index 00000000..7b5b5704 --- /dev/null +++ b/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/config/FastJson2JsonRedisSerializer.java @@ -0,0 +1,38 @@ +package com.cgb.bcpinstall.main.config; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; + +import java.nio.charset.Charset; + +public class FastJson2JsonRedisSerializer implements RedisSerializer { + + public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); + + private Class clazz; + + public FastJson2JsonRedisSerializer(Class clazz) { + super(); + this.clazz = clazz; + } + + @Override + public byte[] serialize(T t) throws SerializationException { + if (t == null) { + return new byte[0]; + } + return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET); + } + + @Override + public T deserialize(byte[] bytes) throws SerializationException { + if (bytes == null || bytes.length <= 0) { + return null; + } + String str = new String(bytes, DEFAULT_CHARSET); + + return (T) JSON.parseObject(str, clazz); + } +} diff --git a/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/config/WebConfiguration.java b/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/config/WebConfiguration.java new file mode 100644 index 00000000..1b65eed1 --- /dev/null +++ b/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/config/WebConfiguration.java @@ -0,0 +1,58 @@ +package com.cgb.bcpinstall.main.config; + +import com.cgb.bcpinstall.main.interceptor.RefererInterceptor; +import com.cgb.bcpinstall.main.interceptor.UserInterceptor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.List; + +import static com.cgb.bcpinstall.common.fastJson.BaseFastJsonConfig.fastJsonHttpMessageConverter; + +@Slf4j +@Configuration +public class WebConfiguration implements WebMvcConfigurer { + /** + * 添加fastJsonHttpMessageConverter到converters + */ + @Override + public void configureMessageConverters(List> converters) { + log.info("configureMessageConverters........"); + converters.add(fastJsonHttpMessageConverter()); + } + + @Bean + public UserInterceptor userInterceptor() { + return new UserInterceptor(); + } + + @Bean + public RefererInterceptor refererInterceptor() { + return new RefererInterceptor(); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { +// registry.addInterceptor(userInterceptor()) +// .addPathPatterns("/v1/**") +// .excludePathPatterns("/v1/sys/login/login/**") +// .excludePathPatterns("/v1/sys/login/logout/**") +// .excludePathPatterns("/v1/install/downloadFile/**"); +// + registry.addInterceptor(refererInterceptor()).addPathPatterns("/v1/**"); + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + } +} diff --git a/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/interceptor/RefererInterceptor.java b/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/interceptor/RefererInterceptor.java new file mode 100644 index 00000000..a93165ae --- /dev/null +++ b/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/interceptor/RefererInterceptor.java @@ -0,0 +1,85 @@ +package com.cgb.bcpinstall.main.interceptor; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.cgb.bcpinstall.common.response.BaseResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +/** + * @program: RefererInterceptor + * @description: + * @author: Zhun.Xiao + * @create: 2019-11-29 18:30 + **/ +@Slf4j +public class RefererInterceptor extends HandlerInterceptorAdapter { + /** + * 白名单 + */ + @Value("${whiteList.referer}") + private String[] refererDomain = new String[]{}; + /** + * 是否开启referer校验 + */ + private Boolean check = true; + + @Override + public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception { +// if (!check) { +// return true; +// } +// String referer = req.getHeader("referer"); +// String host = req.getServerName(); +// // 验证非get请求 +// if (!"GET".equals(req.getMethod())) { +// if (referer == null) { +// // 状态置为404 +// resp.setStatus(HttpServletResponse.SC_NOT_FOUND); +// return false; +// } +// java.net.URL url = null; +// try { +// url = new java.net.URL(referer); +// } catch (MalformedURLException e) { +// // URL解析异常,也置为404 +// resp.setStatus(HttpServletResponse.SC_NOT_FOUND); +// return false; +// } +// // 首先判断请求域名和referer域名是否相同 +// if (!host.equals(url.getHost())) { +// // 如果不等,判断是否在白名单中 +// if (refererDomain != null) { +// for (String s : refererDomain) { +// if (s.equals(url.getHost())) { +// return true; +// } +// } +// } +// +// resultInfo(resp, ResponseCode.REFERER_ERROR); +// logger.error("------->>> referer校验风险 ,禁止访问"); +// return false; +// } +// } + return true; + } + + private void resultInfo(HttpServletResponse response, ResponseCode code) throws Exception { + BaseResponse resp = new BaseResponse(); + resp.setCode(code); + response.setContentType("application/json;charset=UTF-8"); + PrintWriter writer = response.getWriter(); + writer.write(JSONObject.toJSONString(resp, SerializerFeature.WriteEnumUsingToString)); + writer.flush(); + writer.close(); + } +} \ No newline at end of file diff --git a/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/interceptor/UserInterceptor.java b/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/interceptor/UserInterceptor.java new file mode 100644 index 00000000..91409b72 --- /dev/null +++ b/distributed-deploy/bcp-install-main/src/main/java/com/cgb/bcpinstall/main/interceptor/UserInterceptor.java @@ -0,0 +1,105 @@ +package com.cgb.bcpinstall.main.interceptor; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.cgb.bcpinstall.common.context.RequestContextHandler; +import com.cgb.bcpinstall.common.response.BaseResponse; +import com.cgb.bcpinstall.common.response.ResponseCode; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; +import java.util.List; + + +/** + * @program: UserInterceptor + * @description: + * @author: Zhun.Xiao + * @create: 2018-11-26 11:37 + **/ +@Slf4j +public class UserInterceptor implements HandlerInterceptor { + + /** + * 判断用户是否有访问菜单权限 + * + * @param + * @param uri + * @return + */ + public static boolean HasPermission(List menus, String uri) { + if (uri.indexOf("?") > 0) { + uri = uri.substring(0, uri.indexOf("?")); + } + final String u = uri; + if (menus == null) { + return false; + } + return menus.parallelStream().anyMatch(menu -> + menu.equals(u) + ); + + + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + return true; + // 如果不是映射到方法直接通过 +// if (!(handler instanceof HandlerMethod)) { +// return true; +// } + +// +// // 根据token获取用户 保存ThreadLocal +// String accessToken = request.getHeader(LoginConstant.ACCESS_TOKEN); +// +// if (StringUtils.isNotBlank(accessToken)) { +// accessToken = URLDecoder.decode(accessToken, "UTF-8"); +// /*SysUserDO usertemp = new SysUserDO(); +// usertemp.setUpdId((long) 0); +// usertemp.setId((long) 1); +// redisValueService.set(LoginConstant.LOGIN_TOKENS + token, usertemp, 100000);*/ +// +// System.out.println("UserInterceptor->preHandle:" + accessToken); +// //从本地缓存读取token对应用户信息 +// +// RequestContextHandler.setCurrentUserToken(accessToken); +// logger.info("--> token 校验成功"); +// return true; +// +// } else { +// logger.info("---> interceptor token is null"); +// resultInfo(response, ResponseCode.NO_TOKEN); +// return false; +// } +// + + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { + RequestContextHandler.remove(); + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { + RequestContextHandler.remove(); + + } + + private void resultInfo(HttpServletResponse response, ResponseCode code) throws Exception { + BaseResponse resp = new BaseResponse(); + resp.setCode(code); + response.setContentType("application/json;charset=UTF-8"); + PrintWriter writer = response.getWriter(); + writer.write(JSONObject.toJSONString(resp, SerializerFeature.WriteEnumUsingToString)); + writer.flush(); + writer.close(); + } + +} diff --git a/distributed-deploy/bcp-install-main/src/main/resources/application.yml b/distributed-deploy/bcp-install-main/src/main/resources/application.yml new file mode 100644 index 00000000..7c4890f6 --- /dev/null +++ b/distributed-deploy/bcp-install-main/src/main/resources/application.yml @@ -0,0 +1,62 @@ +spring: + application: + name: bcp-mgr + servlet: + multipart: + maxFileSize: 500MB + maxRequestSize: 500MB + profiles: + active: dev + +#线程池相关配置 +thread: + pool: + #核心线程数 + corePoolSize: 10 + #最大线程数 + maxPoolSize: 20 + # 队列最大长度 + queueCapacity: 50 + #线程池维护线程所允许的空闲时间 + keepAliveSeconds: 6000 + +server: + port: 8080 + tomcat: + min-spare-threads: 20 + max-threads: 200 + connection-timeout: 6000 + +httpClient: + poolSize: 30 + socketTimeout: 60000 + connectTimeout: 60000 + connectionRequestTimeout: 60000 + defaultMaxPerRoute: 10 + +whiteList: + referer: localhost,192.168.43.59 + +# 运行时参数 +global: + # 是否发起机构: 1 -- 发起机构,0 -- 其他机构 + initOrg: 1 + # 是否主节点: 1 -- 主节点,0 -- 从节点 + master: 1 + +init: + # initconfig.propertise 文件路径;默认为空,空--不创建初始化的文件; + # 传入文件路径时,则为初始化,创建完初始化文件后,自动退出 + # 测试时可以通过参数传入; + # 用脚本启动时,需要通过参数传入 + config: "" + # 产生配置文件的根目录 + dir: "" + # 是否做初始化,0 -- 否;1 -- 是 + yes: 0 + +install: + # 安装模式: newInstall, updateNetwork + mode: "newInstall" + # 安装路径 + path: "" diff --git a/distributed-deploy/bcp-install-main/src/main/resources/logback.xml b/distributed-deploy/bcp-install-main/src/main/resources/logback.xml new file mode 100644 index 00000000..6648ea44 --- /dev/null +++ b/distributed-deploy/bcp-install-main/src/main/resources/logback.xml @@ -0,0 +1,77 @@ + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss} %green([%thread]) %highlight(%-5level) %cyan(%logger{50}) - %msg%n + + UTF-8 + + + + + true + + + + + ${LOG_HOME}/info/%d{yyyy-MM-dd}.%i.log + + 10MB + + 30 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + + true + + + ERROR + ACCEPT + DENY + + + + ${LOG_HOME}/error/%d{yyyy-MM-dd}.%i.log + + 10MB + + 30 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + + + + + + + \ No newline at end of file diff --git a/distributed-deploy/bcp-install-main/src/test/java/InitTest.java b/distributed-deploy/bcp-install-main/src/test/java/InitTest.java new file mode 100644 index 00000000..25f89232 --- /dev/null +++ b/distributed-deploy/bcp-install-main/src/test/java/InitTest.java @@ -0,0 +1,59 @@ +import com.cgb.bcpinstall.biz.InitializeBiz; +import com.cgb.bcpinstall.biz.InstallBiz; +import com.cgb.bcpinstall.common.entity.init.InitConfigEntity; +import com.cgb.bcpinstall.common.util.NetUtil; +import com.cgb.bcpinstall.main.MainApplication; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@RunWith(SpringRunner.class) +@SpringBootTest(classes = MainApplication.class) +public class InitTest { + + @Autowired + private InitializeBiz initializeBiz; + + @Autowired + private InstallBiz installBiz; + + /** + * 运行前指定参数:--init.config=./resources/generateInstallPackage/masterPackage/initconfig.propertise;--init.dir=./resources/generateInstallPackage/masterPackage/;--init.yes=1 + */ + @Test + public void testInit() { + initializeBiz.initialize(); + } + + /** + * 运行前指定参数:--init.config=./resources/generateInstallPackage/masterPackage/initconfig.propertise;--init.dir=./resources/generateInstallPackage/masterPackage/;--init.yes=0 + */ + @Test + public void testGetIP() { + List ipList = NetUtil.getLocalIPList(); + + System.out.println(ipList.stream().collect(Collectors.joining(","))); + } + + @Test + public void testUpdate() { + Map diffMap = new HashMap<>(16); + diffMap.put("A-BCMP-peer2.YB02.cgb.cn", "192.168.43.206:8053"); + diffMap.put("A-BCMP-peer3.YB02.cgb.cn", "192.168.43.206:8054"); + String path = "F:\\space30\\bcp-app-install\\bcp-install-main\\resources\\generateInstallPackage\\masterPackage\\backend\\bcp-app-mgr\\resources\\networkconfigs\\network-config.json"; + InitConfigEntity configEntity = new InitConfigEntity(); + configEntity.setPeerDomain("YB02.cgb.cn"); + configEntity.setOrgMSPID("Org1MSP"); + configEntity.setOrgName("Org1"); + /*installBiz.addPeerFromNetworkConfig(path, diffMap, configEntity,null);*/ + } +} diff --git a/distributed-deploy/bcp-install-main/src/test/java/InstallTest.java b/distributed-deploy/bcp-install-main/src/test/java/InstallTest.java new file mode 100644 index 00000000..2d9b2246 --- /dev/null +++ b/distributed-deploy/bcp-install-main/src/test/java/InstallTest.java @@ -0,0 +1,116 @@ +import com.alibaba.fastjson.JSONObject; +import com.cgb.bcpinstall.biz.InstallBiz; +import com.cgb.bcpinstall.common.entity.InstallStatusEnum; +import com.cgb.bcpinstall.common.entity.OSEnum; +import com.cgb.bcpinstall.common.entity.RoleEnum; +import com.cgb.bcpinstall.common.entity.UpdateCmd; +import com.cgb.bcpinstall.common.util.FileUtil; +import com.cgb.bcpinstall.common.util.HttpClientUtil; +import com.cgb.bcpinstall.common.util.OSinfo; +import com.cgb.bcpinstall.db.CheckPointDb; +import com.cgb.bcpinstall.db.table.NodeDO; +import com.cgb.bcpinstall.main.MainApplication; +import lombok.extern.slf4j.Slf4j; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.FormBodyPart; +import org.apache.http.entity.mime.FormBodyPartBuilder; +import org.apache.http.entity.mime.content.FileBody; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import java.io.File; +import java.io.UnsupportedEncodingException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@RunWith(SpringRunner.class) +@SpringBootTest(classes = MainApplication.class) +@WebAppConfiguration +@AutoConfigureMockMvc +public class InstallTest { + @Autowired + private InstallBiz installBiz; + + @Autowired + private MockMvc mockMvc; + + @Autowired + private HttpClientUtil httpClientUtil; + + @Autowired + private CheckPointDb checkPointDb; + + /** + * 运行前指定参数:--init.config=./resources/generateInstallPackage/masterPackage/initconfig.propertise;--init.dir=./resources/generateInstallPackage/masterPackage/;--init.yes=0 + */ + @Test + public void testPackRoleFile() { + OSEnum osType; + if (OSinfo.isWindows()) { + osType = OSEnum.WINDOWS; + } else if (OSinfo.isMacOS() || OSinfo.isMacOSX()) { + osType = OSEnum.MAC; + } else { + osType = OSEnum.LINUX; + } + + List roleList = new ArrayList<>(); + roleList.add(RoleEnum.PEER); + /*String packFilePath = installBiz.packInstallFiles("172.100.10.4", roleList, osType); + System.out.println("安装包路径: " + packFilePath);*/ + } + + @Test + public void testDownloadFile() throws Exception { + MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/v1/install/getPackage/MAC")).andReturn(); + System.out.println(mvcResult.getResponse().getContentAsString()); + } + + @Test + public void testSendUpdateCmd() throws Exception { + String filePath = "/resources/generateInstallPackage/masterPackage/initconfig.propertise"; + File file = new File(filePath); + System.out.println(file.getParent()); + System.out.println(new File(file.getParent()).getName()); + + UpdateCmd cmd = new UpdateCmd(); + /*cmd.setRole(RoleEnum.WEB);*/ + + MockMultipartFile firstFile = new MockMultipartFile("file", "filename.txt", null, "some xml".getBytes()); + MockMultipartFile jsonFile = new MockMultipartFile("content", "", "application/json", JSONObject.toJSONString(cmd).getBytes()); + + MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.multipart("/v1/install/update").file(firstFile).file(jsonFile)).andReturn(); + System.out.println(mvcResult.getResponse().getContentAsString()); + } + + @Test + public void testDb() { + NodeDO nodeDO = new NodeDO(); + nodeDO.setOrgMspId("Org1MSP"); + nodeDO.setHostName("order.example.com"); + nodeDO.setRole(RoleEnum.ORDER); + nodeDO.setIp("127.0.0.1"); + nodeDO.setPort(7070); + nodeDO.setStatus(InstallStatusEnum.SUCCESS); + try { + checkPointDb.addNodeRecord(nodeDO); + + List found = checkPointDb.find(nodeDO); + System.out.println(found.size()); + } catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/distributed-deploy/bcp-install-main/target/classes/application.yml b/distributed-deploy/bcp-install-main/target/classes/application.yml new file mode 100644 index 00000000..7c4890f6 --- /dev/null +++ b/distributed-deploy/bcp-install-main/target/classes/application.yml @@ -0,0 +1,62 @@ +spring: + application: + name: bcp-mgr + servlet: + multipart: + maxFileSize: 500MB + maxRequestSize: 500MB + profiles: + active: dev + +#线程池相关配置 +thread: + pool: + #核心线程数 + corePoolSize: 10 + #最大线程数 + maxPoolSize: 20 + # 队列最大长度 + queueCapacity: 50 + #线程池维护线程所允许的空闲时间 + keepAliveSeconds: 6000 + +server: + port: 8080 + tomcat: + min-spare-threads: 20 + max-threads: 200 + connection-timeout: 6000 + +httpClient: + poolSize: 30 + socketTimeout: 60000 + connectTimeout: 60000 + connectionRequestTimeout: 60000 + defaultMaxPerRoute: 10 + +whiteList: + referer: localhost,192.168.43.59 + +# 运行时参数 +global: + # 是否发起机构: 1 -- 发起机构,0 -- 其他机构 + initOrg: 1 + # 是否主节点: 1 -- 主节点,0 -- 从节点 + master: 1 + +init: + # initconfig.propertise 文件路径;默认为空,空--不创建初始化的文件; + # 传入文件路径时,则为初始化,创建完初始化文件后,自动退出 + # 测试时可以通过参数传入; + # 用脚本启动时,需要通过参数传入 + config: "" + # 产生配置文件的根目录 + dir: "" + # 是否做初始化,0 -- 否;1 -- 是 + yes: 0 + +install: + # 安装模式: newInstall, updateNetwork + mode: "newInstall" + # 安装路径 + path: "" diff --git a/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/MainApplication$Runner.class b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/MainApplication$Runner.class new file mode 100644 index 00000000..970b5179 Binary files /dev/null and b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/MainApplication$Runner.class differ diff --git a/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/MainApplication.class b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/MainApplication.class new file mode 100644 index 00000000..0927d702 Binary files /dev/null and b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/MainApplication.class differ diff --git a/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/config/FastJson2JsonRedisSerializer.class b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/config/FastJson2JsonRedisSerializer.class new file mode 100644 index 00000000..25901af0 Binary files /dev/null and b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/config/FastJson2JsonRedisSerializer.class differ diff --git a/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/config/WebConfiguration.class b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/config/WebConfiguration.class new file mode 100644 index 00000000..0171b42b Binary files /dev/null and b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/config/WebConfiguration.class differ diff --git a/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/interceptor/RefererInterceptor.class b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/interceptor/RefererInterceptor.class new file mode 100644 index 00000000..696db66f Binary files /dev/null and b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/interceptor/RefererInterceptor.class differ diff --git a/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/interceptor/UserInterceptor.class b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/interceptor/UserInterceptor.class new file mode 100644 index 00000000..1128b684 Binary files /dev/null and b/distributed-deploy/bcp-install-main/target/classes/com/cgb/bcpinstall/main/interceptor/UserInterceptor.class differ diff --git a/distributed-deploy/bcp-install-main/target/classes/logback.xml b/distributed-deploy/bcp-install-main/target/classes/logback.xml new file mode 100644 index 00000000..6648ea44 --- /dev/null +++ b/distributed-deploy/bcp-install-main/target/classes/logback.xml @@ -0,0 +1,77 @@ + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss} %green([%thread]) %highlight(%-5level) %cyan(%logger{50}) - %msg%n + + UTF-8 + + + + + true + + + + + ${LOG_HOME}/info/%d{yyyy-MM-dd}.%i.log + + 10MB + + 30 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + + true + + + ERROR + ACCEPT + DENY + + + + ${LOG_HOME}/error/%d{yyyy-MM-dd}.%i.log + + 10MB + + 30 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + + + + + + + \ No newline at end of file diff --git a/distributed-deploy/bcp-install-main/target/test-classes/InitTest.class b/distributed-deploy/bcp-install-main/target/test-classes/InitTest.class new file mode 100644 index 00000000..5ad20575 Binary files /dev/null and b/distributed-deploy/bcp-install-main/target/test-classes/InitTest.class differ diff --git a/distributed-deploy/bcp-install-main/target/test-classes/InstallTest.class b/distributed-deploy/bcp-install-main/target/test-classes/InstallTest.class new file mode 100644 index 00000000..ff12a9a5 Binary files /dev/null and b/distributed-deploy/bcp-install-main/target/test-classes/InstallTest.class differ diff --git a/distributed-deploy/pom.xml b/distributed-deploy/pom.xml new file mode 100644 index 00000000..eefea974 --- /dev/null +++ b/distributed-deploy/pom.xml @@ -0,0 +1,178 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.0.6.RELEASE + + + com.cgb + bcp-install + 1.0.0-RELEASE + + 区块链智能安装 + pom + + + bcp-install-main + bcp-install-api + bcp-install-biz + bcp-install-common + + + 1.8 + UTF-8 + UTF-8 + 1.2.60 + 4.5.3 + 3.6 + 2.9.2 + 1.17.1 + 3.6.1 + com.cgb.bcpinstall.main.MainApplication + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.projectlombok + lombok + true + + + + + com.alibaba + fastjson + ${fastjson.version} + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + + org.apache.httpcomponents + httpmime + ${httpclient.version} + + + + org.apache.httpcomponents + httpasyncclient + 4.1 + + + + org.springframework.boot + spring-boot-starter-aop + + + + + org.apache.commons + commons-lang3 + ${commons.lang3.version} + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + + io.springfox + springfox-swagger2 + ${swagger.version} + + + + + io.springfox + springfox-swagger-ui + ${swagger.version} + + + + junit + junit + + + org.mockito + mockito-core + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + commons-beanutils + commons-beanutils + 1.9.3 + + + + + org.apache.commons + commons-pool2 + 2.6.1 + + + commons-net + commons-net + 3.6 + + + + com.google.guava + guava + 23.0 + + + + + dom4j + dom4j + 1.6.1 + + + + org.springframework.boot + spring-boot-starter-mail + + + org.yaml + snakeyaml + 1.25 + + + + com.h2database + h2 + 1.4.199 + + + + + compile + +