| | |
| | | package service |
| | | |
| | | import ( |
| | | "basic.com/dbapi.git" |
| | | //"basic.com/dbapi.git" |
| | | "basic.com/valib/logger.git" |
| | | "encoding/json" |
| | | "errors" |
| | | "io/ioutil" |
| | | "os" |
| | | "path" |
| | | "path/filepath" |
| | | "webserver/extend/config" |
| | | "webserver/extend/util" |
| | | ) |
| | |
| | | return false,errors.New("获取安装包md5失败") |
| | | } |
| | | if strMd5 == identifier { |
| | | if !installSdk(identifier, ext) { |
| | | return false,errors.New("执行安装过程异常,请确定上传的安装包是tar.gz格式") |
| | | if _,insE := installSdk(identifier, ext); insE != nil { |
| | | return false, insE |
| | | } |
| | | return true,nil |
| | | |
| | |
| | | } |
| | | |
| | | //安装sdk |
| | | func installSdk(identifier string, ext string) bool { |
| | | func installSdk(identifier string, ext string) (bool, error) { |
| | | configPatchPath := "" |
| | | if config.Server.PatchPath != "" { |
| | | configPatchPath = config.Server.PatchPath |
| | |
| | | //此版本已经更新过 |
| | | rmErr := os.RemoveAll(unPackPath) |
| | | if rmErr !=nil { |
| | | return false |
| | | return false,rmErr |
| | | } |
| | | } |
| | | if !util.CreateDirectory(unPackPath) { |
| | | return false |
| | | return false, errors.New("创建压缩文件夹失败") |
| | | } |
| | | |
| | | unPackFilePath := configPatchPath+"/"+identifier+ext |
| | | err := util.UnTarGz(unPackFilePath, unPackPath) |
| | | logger.Debug("unPackFilePath:", unPackFilePath, "unPackPath:", unPackPath) |
| | | _,err := util.UnTarGzByCmd(unPackFilePath, unPackPath) |
| | | if err !=nil { |
| | | logger.Debug("UnPack err:",err,"unPackFile:",unPackFilePath) |
| | | return false |
| | | return false, err |
| | | } |
| | | targetFileName := "" |
| | | err = filepath.Walk(unPackPath, func(path string, f os.FileInfo, err error) error { |
| | | if f == nil { |
| | | return err |
| | | } |
| | | if f.IsDir() { |
| | | targetFileName = f.Name() |
| | | } |
| | | return nil |
| | | }) |
| | | if err != nil { |
| | | return false, err |
| | | } |
| | | unPackPath = unPackPath + targetFileName +"/" |
| | | //解压完成,获取安装包中的文件,开始安装 |
| | | //1.解析安装说明ins.inc |
| | | incPath := unPackPath+"ins.inc" |
| | | ret := false |
| | | if util.Exists(incPath) { |
| | | if incB, err := ioutil.ReadFile(incPath);err == nil { |
| | | var ins InsInc |
| | | if err = json.Unmarshal(incB, &ins); err == nil { |
| | | //处理授权信息 |
| | | curMc := "" |
| | | if ins.MachineCode != curMc { |
| | | |
| | | } |
| | | //2.解析sdk.def,将so和zconf复制到/opt/vasystem/libs/文件夹下 |
| | | defPath := unPackPath + "sdk.def" |
| | | if util.Exists(defPath) { |
| | |
| | | soM := make(map[string]SdkDef) |
| | | var skDefArr []SdkDef |
| | | if err = json.Unmarshal(defB, &skDefArr);err == nil { |
| | | var sdkApi dbapi.SdkApi |
| | | //注册算法信息和算法参数到dbserver |
| | | //var sdkApi dbapi.SdkApi |
| | | for _,skd := range skDefArr { |
| | | if _,ok := soM[skd.Def.SdkType];!ok { |
| | | soM[skd.Def.SdkType] = skd |
| | |
| | | srv.Args = append(srv.Args, sra) |
| | | } |
| | | paramBody := util.Struct2Map(srv) |
| | | sdkApi.Register(paramBody) //将算法注册到数据库中 |
| | | logger.Debug("sdkApi.Register paramBody:", paramBody) |
| | | //sdkApi.Register(paramBody) //将算法注册到数据库中 |
| | | } |
| | | |
| | | zconfPath := "/opt/vasystem/bin/zconf/" |
| | | libPath := "/opt/vasystem/libs/" |
| | | zconfPath := "/opt/vasystem/bin/zconft/" |
| | | libPath := "/opt/vasystem/libst/" |
| | | if !util.DirExists(zconfPath) { |
| | | os.MkdirAll(zconfPath, 0777) |
| | | } |
| | |
| | | os.MkdirAll(libPath, 0777) |
| | | } |
| | | for sdkType,_ := range soM { |
| | | //复制json启动文件 |
| | | util.CopyFile(unPackPath+sdkType+"/"+sdkType+".json", zconfPath) |
| | | util.CopyDir(unPackPath+sdkType+"/"+sdkType, libPath) |
| | | if util.DirExists(unPackPath+sdkType+"models") { |
| | | util.CopyDir(unPackPath+sdkType+"models", "/opt/vasystem/bin/") |
| | | //先解压SdkType.tar.gz文件 |
| | | if unTarGzE := util.UnTarGz(unPackPath+sdkType+".tar.gz", unPackPath);unTarGzE == nil { |
| | | //复制json启动文件 |
| | | if util.Exists(unPackPath+sdkType+"/zconf/"+sdkType+".json") { |
| | | util.CopyFile(unPackPath+sdkType+"/zconf/"+sdkType+".json", zconfPath) |
| | | } |
| | | if util.DirExists(unPackPath+sdkType+"/"+sdkType) { |
| | | if _,cE := util.CopyDirByCmd(unPackPath+sdkType+"/"+sdkType, libPath);cE != nil { |
| | | return false, cE |
| | | } |
| | | } |
| | | if util.DirExists(unPackPath+sdkType+"/models") { |
| | | if _,cE := util.CopyDirByCmd(unPackPath+sdkType+"/models", "/opt/vasystem/bin/zconft"); cE != nil { |
| | | return false, cE |
| | | } |
| | | } |
| | | } else { |
| | | logger.Debug("unTarGzE sdkType.tar.gz err:", unTarGzE) |
| | | } |
| | | } |
| | | ret = true |
| | | |
| | | } else { |
| | | return false, errors.New("反序列化算法定义信息失败") |
| | | } |
| | | } else { |
| | | return false, errors.New("读取算法定义信息失败") |
| | | } |
| | | } else { |
| | | return false, errors.New("算法定义信息丢失") |
| | | } |
| | | } else { |
| | | return false, errors.New("反序列化授权信息失败") |
| | | } |
| | | } else { |
| | | return false, errors.New("读取授权文件失败") |
| | | } |
| | | } else { |
| | | return false, errors.New("授权文件不存在") |
| | | } |
| | | |
| | | return ret |
| | | return true, nil |
| | | } |
| | | |
| | | |