liuxiaolong
2019-12-20 17bd0564775dd89a9e7f9dafb44624b05866714d
upgrade use tar.gz
2个文件已修改
80 ■■■■ 已修改文件
extend/util/util.go 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/SysService.go 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
extend/util/util.go
@@ -1,8 +1,11 @@
package util
import (
    "archive/tar"
    "archive/zip"
    "basic.com/valib/logger.git"
    "bytes"
    "compress/gzip"
    "crypto/md5"
    "encoding/hex"
    "encoding/json"
@@ -300,6 +303,61 @@
    return nil
}
func TarGzCheck(filePath string) bool {
    f, err := os.Open(filePath)
    if err != nil {
        return false
    }
    defer f.Close()
    buf := make([]byte, 4)
    if n, err := f.Read(buf); err != nil || n < 4 {
        return false
    }
    fType := hex.EncodeToString(buf)
    logger.Debug("file type :",fType)
    return  fType == "8b1f"
}
//解压 tar.gz
func DeCompress(tarFile, dest string) error {
    srcFile, err := os.Open(tarFile)
    if err != nil {
        return err
    }
    defer srcFile.Close()
    gr, err := gzip.NewReader(srcFile)
    if err != nil {
        return err
    }
    defer gr.Close()
    tr := tar.NewReader(gr)
    for {
        hdr, err := tr.Next()
        if err != nil {
            if err == io.EOF {
                break
            } else {
                return err
            }
        }
        filename := dest + hdr.Name
        file, err := createFile(filename)
        if err != nil {
            return err
        }
        io.Copy(file, tr)
    }
    return nil
}
func createFile(name string) (*os.File, error) {
    err := os.MkdirAll(string([]rune(name)[0:strings.LastIndex(name, "/")]), 0755)
    if err != nil {
        return nil, err
    }
    return os.Create(name)
}
func FormatNum(oNum int,n int) string {
    m := 0
    for {
service/SysService.go
@@ -177,7 +177,7 @@
            return false,errors.New("获取升级压缩包md5失败")
        }
        if strMd5 == identifier {
            if util.ZipCheck(zipFilePath) {
            if util.TarGzCheck(zipFilePath) {
                if !updatePatch(identifier, ext) {
                    return false,errors.New("执行升级过程异常")
                }
@@ -228,28 +228,28 @@
        configPatchPath = "/opt/vasystem/patch"
    }
    //1.解压缩更新包
    unZipPath := configPatchPath+"/"+identifier+"_basic/"
    if util.Exists(unZipPath) {
    unPackPath := configPatchPath+"/"+identifier+"_basic/"
    if util.Exists(unPackPath) {
        //此版本已经更新过
        rmErr := os.RemoveAll(unZipPath)
        rmErr := os.RemoveAll(unPackPath)
        if rmErr !=nil {
            return false
        }
    }
    if !util.CreateDirectory(unZipPath) {
    if !util.CreateDirectory(unPackPath) {
        return false
    }
    zipFilePath := configPatchPath+"/"+identifier+ext
    err := util.UnZip(zipFilePath, unZipPath)
    err := util.DeCompress(zipFilePath, unPackPath)
    if err !=nil {
        logger.Debug("UnZip err:",err,"zipFile:",zipFilePath)
        return false
    }
    //如果通用脚本有更新,则更新通用脚本
    if util.Exists(unZipPath+"updatePatch.sh") {
        cpStr := fmt.Sprintf("cp %s /opt/vasystem/bin",unZipPath+"updatePatch.sh")
    if util.Exists(unPackPath+"updatePatch.sh") {
        cpStr := fmt.Sprintf("cp %s /opt/vasystem/bin",unPackPath+"updatePatch.sh")
        b, err := ExecCmd(cpStr)
        if err != nil {
            logger.Debug("cp updatePatch.sh to bin err:",err,"result:",string(b))
@@ -258,9 +258,9 @@
    }
    //判断更新包里是否有补丁脚本,如果有则执行,否则执行updatePatch.sh
    updateCmd := fmt.Sprintf("./updatePatch.sh %s %s %s &",unZipPath,zipFilePath,configPatchPath+"/"+identifier)
    if util.Exists(unZipPath+"upgrade.sh") {
        updateCmd = fmt.Sprintf("%supgrade.sh %s %s %s",unZipPath,unZipPath,zipFilePath,configPatchPath+"/"+identifier)
    updateCmd := fmt.Sprintf("./updatePatch.sh %s %s %s &",unPackPath,zipFilePath,configPatchPath+"/"+identifier)
    if util.Exists(unPackPath+"upgrade.sh") {
        updateCmd = fmt.Sprintf("%supgrade.sh %s %s %s",unPackPath,unPackPath,zipFilePath,configPatchPath+"/"+identifier)
    }
    //2.更新系统
    b,err := ExecCmd(updateCmd)