mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 13:10:26 +08:00 
			
		
		
		
	优化错误处理相关代码
This commit is contained in:
		@@ -5,7 +5,7 @@ package gen
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/conds/condutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
 | 
			
		||||
@@ -22,7 +22,7 @@ import (
 | 
			
		||||
func Generate() error {
 | 
			
		||||
	err := generateComponentsJSFile()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("generate 'components.src.js' failed: " + err.Error())
 | 
			
		||||
		return fmt.Errorf("generate 'components.src.js' failed: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ package nodes
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/configs"
 | 
			
		||||
	teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/events"
 | 
			
		||||
@@ -184,7 +185,7 @@ func (this *AdminNode) checkServer() error {
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			err = os.WriteFile(configFile, data, 0666)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return errors.New("create config file failed: " + err.Error())
 | 
			
		||||
				return fmt.Errorf("create config file failed: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			templateYAML := `# environment code
 | 
			
		||||
@@ -204,11 +205,11 @@ https:
 | 
			
		||||
`
 | 
			
		||||
			err = os.WriteFile(configFile, []byte(templateYAML), 0666)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return errors.New("create config file failed: " + err.Error())
 | 
			
		||||
				return fmt.Errorf("create config file failed: %w", err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		return errors.New("can not read config from 'configs/server.yaml': " + err.Error())
 | 
			
		||||
		return fmt.Errorf("can not read config from 'configs/server.yaml': %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ import (
 | 
			
		||||
	"crypto/tls"
 | 
			
		||||
	"encoding/base64"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/configs"
 | 
			
		||||
	teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/encrypt"
 | 
			
		||||
@@ -525,7 +526,7 @@ func (this *RPCClient) init() error {
 | 
			
		||||
	for _, endpoint := range this.apiConfig.RPC.Endpoints {
 | 
			
		||||
		u, err := url.Parse(endpoint)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("parse endpoint failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("parse endpoint failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var apiHost = u.Host
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ package tasks
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/events"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/goman"
 | 
			
		||||
@@ -63,7 +64,7 @@ func (this *CheckUpdatesTask) Loop() error {
 | 
			
		||||
	if len(valueJSON) > 0 {
 | 
			
		||||
		err = json.Unmarshal(valueJSON, config)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("decode config failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("decode config failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
		if !config.AutoCheck {
 | 
			
		||||
			return nil
 | 
			
		||||
@@ -90,7 +91,7 @@ func (this *CheckUpdatesTask) Loop() error {
 | 
			
		||||
	apiURL = strings.ReplaceAll(apiURL, "${version}", teaconst.Version)
 | 
			
		||||
	resp, err := http.Get(apiURL)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("read api failed: " + err.Error())
 | 
			
		||||
		return fmt.Errorf("read api failed: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	defer func() {
 | 
			
		||||
@@ -98,13 +99,13 @@ func (this *CheckUpdatesTask) Loop() error {
 | 
			
		||||
	}()
 | 
			
		||||
	data, err := io.ReadAll(resp.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("read api failed: " + err.Error())
 | 
			
		||||
		return fmt.Errorf("read api failed: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var apiResponse = &Response{}
 | 
			
		||||
	err = json.Unmarshal(data, apiResponse)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("decode version data failed: " + err.Error())
 | 
			
		||||
		return fmt.Errorf("decode version data failed: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if apiResponse.Code != 200 {
 | 
			
		||||
 
 | 
			
		||||
@@ -79,7 +79,7 @@ func (this *Upgrader) Upgrade() error {
 | 
			
		||||
	// 升级API节点
 | 
			
		||||
	err = this.upgradeAPINode(sharedClient.Context(0), rpcClient)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("upgrade api node failed: " + err.Error())
 | 
			
		||||
		return fmt.Errorf("upgrade api node failed: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
@@ -109,7 +109,7 @@ func (this *Upgrader) upgradeAPINode(ctx context.Context, rpcClient *rpc.RPCClie
 | 
			
		||||
 | 
			
		||||
	localVersion, err := lookupLocalVersion()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("lookup version failed: " + err.Error())
 | 
			
		||||
		return fmt.Errorf("lookup version failed: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 检查要升级的文件
 | 
			
		||||
@@ -251,7 +251,7 @@ func (this *Upgrader) upgradeNodes(ctx context.Context, rpcClient *rpc.RPCClient
 | 
			
		||||
		if !ok || stringutil.VersionCompare(remoteDeployFile.Version, deployFile.Version) < 0 {
 | 
			
		||||
			err = this.uploadNodeDeployFile(ctx, rpcClient, deployFile.Path)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return errors.New("upload deploy file '" + filepath.Base(deployFile.Path) + "' failed: " + err.Error())
 | 
			
		||||
				return fmt.Errorf("upload deploy file '%s' failed: %w", filepath.Base(deployFile.Path), err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -284,7 +284,7 @@ func (this *Upgrader) upgradeNSNodes(ctx context.Context, rpcClient *rpc.RPCClie
 | 
			
		||||
		if !ok || stringutil.VersionCompare(remoteDeployFile.Version, deployFile.Version) < 0 {
 | 
			
		||||
			err = this.uploadNodeDeployFile(ctx, rpcClient, deployFile.Path)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return errors.New("upload deploy file '" + filepath.Base(deployFile.Path) + "' failed: " + err.Error())
 | 
			
		||||
				return fmt.Errorf("upload deploy file '%s' failed: %w", filepath.Base(deployFile.Path), err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ package utils
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
 | 
			
		||||
	"github.com/iwind/TeaGo/Tea"
 | 
			
		||||
	"golang.org/x/sys/windows"
 | 
			
		||||
	"golang.org/x/sys/windows/svc"
 | 
			
		||||
@@ -15,7 +16,7 @@ import (
 | 
			
		||||
func (this *ServiceManager) Install(exePath string, args []string) error {
 | 
			
		||||
	m, err := mgr.Connect()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("connecting: %s please 'Run as administrator' again", err.Error())
 | 
			
		||||
		return fmt.Errorf("connecting: %w please 'Run as administrator' again", err)
 | 
			
		||||
	}
 | 
			
		||||
	defer m.Disconnect()
 | 
			
		||||
	s, err := m.OpenService(this.Name)
 | 
			
		||||
@@ -30,7 +31,7 @@ func (this *ServiceManager) Install(exePath string, args []string) error {
 | 
			
		||||
		StartType:   windows.SERVICE_AUTO_START,
 | 
			
		||||
	}, args...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("creating: %s", err.Error())
 | 
			
		||||
		return fmt.Errorf("creating: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
	defer s.Close()
 | 
			
		||||
 | 
			
		||||
@@ -46,12 +47,12 @@ func (this *ServiceManager) Start() error {
 | 
			
		||||
	defer m.Disconnect()
 | 
			
		||||
	s, err := m.OpenService(this.Name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("could not access service: %v", err)
 | 
			
		||||
		return fmt.Errorf("could not access service: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
	defer s.Close()
 | 
			
		||||
	err = s.Start("service")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("could not start service: %v", err)
 | 
			
		||||
		return fmt.Errorf("could not start service: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
@@ -61,12 +62,12 @@ func (this *ServiceManager) Start() error {
 | 
			
		||||
func (this *ServiceManager) Uninstall() error {
 | 
			
		||||
	m, err := mgr.Connect()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("connecting: %s please 'Run as administrator' again", err.Error())
 | 
			
		||||
		return fmt.Errorf("connecting: %w please 'Run as administrator' again", err)
 | 
			
		||||
	}
 | 
			
		||||
	defer m.Disconnect()
 | 
			
		||||
	s, err := m.OpenService(this.Name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("open service: %s", err.Error())
 | 
			
		||||
		return fmt.Errorf("open service: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// shutdown service
 | 
			
		||||
@@ -78,7 +79,7 @@ func (this *ServiceManager) Uninstall() error {
 | 
			
		||||
	defer s.Close()
 | 
			
		||||
	err = s.Delete()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("deleting: %s", err.Error())
 | 
			
		||||
		return fmt.Errorf("deleting: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ import (
 | 
			
		||||
	"crypto/tls"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
 | 
			
		||||
	"github.com/iwind/TeaGo/Tea"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
@@ -111,13 +112,13 @@ func (this *UpgradeManager) Start() error {
 | 
			
		||||
		url = strings.ReplaceAll(url, "${version}", teaconst.Version)
 | 
			
		||||
		req, err := http.NewRequest(http.MethodGet, url, nil)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("create url request failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("create url request failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
		req.Header.Set("User-Agent", "Edge-Admin/"+teaconst.Version)
 | 
			
		||||
 | 
			
		||||
		resp, err := this.client.Do(req)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("read latest version failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("read latest version failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		defer func() {
 | 
			
		||||
@@ -130,13 +131,13 @@ func (this *UpgradeManager) Start() error {
 | 
			
		||||
 | 
			
		||||
		data, err := io.ReadAll(resp.Body)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("read latest version failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("read latest version failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var m = maps.Map{}
 | 
			
		||||
		err = json.Unmarshal(data, &m)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("invalid response data: " + err.Error() + ", origin data: " + string(data))
 | 
			
		||||
			return fmt.Errorf("invalid response data: %w, origin data: %s", err, string(data))
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var code = m.GetInt("code")
 | 
			
		||||
@@ -172,13 +173,13 @@ func (this *UpgradeManager) Start() error {
 | 
			
		||||
	{
 | 
			
		||||
		req, err := http.NewRequest(http.MethodGet, downloadURL, nil)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("create download request failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("create download request failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
		req.Header.Set("User-Agent", "Edge-Admin/"+teaconst.Version)
 | 
			
		||||
 | 
			
		||||
		resp, err := this.client.Do(req)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("download failed: " + downloadURL + ": " + err.Error())
 | 
			
		||||
			return fmt.Errorf("download failed: '%s': %w", downloadURL, err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		defer func() {
 | 
			
		||||
@@ -201,7 +202,7 @@ func (this *UpgradeManager) Start() error {
 | 
			
		||||
 | 
			
		||||
		fp, err := os.Create(destFile)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("create file failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("create file failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		defer func() {
 | 
			
		||||
@@ -217,7 +218,7 @@ func (this *UpgradeManager) Start() error {
 | 
			
		||||
			if this.isCancelled {
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
			return errors.New("download failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("download failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		_ = fp.Close()
 | 
			
		||||
@@ -228,7 +229,7 @@ func (this *UpgradeManager) Start() error {
 | 
			
		||||
		if err == nil && stat.IsDir() {
 | 
			
		||||
			err = os.RemoveAll(unzipDir)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return errors.New("remove old dir '" + unzipDir + "' failed: " + err.Error())
 | 
			
		||||
				return fmt.Errorf("remove old dir '%s' failed: %w", unzipDir, err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		var unzipCmd = exec.Command(unzipExe, "-q", "-o", destFile, "-d", unzipDir)
 | 
			
		||||
@@ -236,18 +237,18 @@ func (this *UpgradeManager) Start() error {
 | 
			
		||||
		unzipCmd.Stderr = unzipStderr
 | 
			
		||||
		err = unzipCmd.Run()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("unzip installation file failed: " + err.Error() + ": " + unzipStderr.String())
 | 
			
		||||
			return fmt.Errorf("unzip installation file failed: %w: %s", err, unzipStderr.String())
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		installationFiles, err := filepath.Glob(unzipDir + "/edge-" + this.component + "/*")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("lookup installation files failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("lookup installation files failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// cp to target dir
 | 
			
		||||
		currentExe, err := os.Executable()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("reveal current executable file path failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("reveal current executable file path failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
		var targetDir = filepath.Dir(filepath.Dir(currentExe))
 | 
			
		||||
		if !Tea.IsTesting() {
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
		} else {
 | 
			
		||||
			err = os.Remove(targetDir)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return errors.New("clean target dir '" + targetDir + "' failed: " + err.Error())
 | 
			
		||||
				return fmt.Errorf("clean target dir '%s' failed: %w", targetDir, err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -140,7 +140,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
	{
 | 
			
		||||
		data, err := os.ReadFile("/etc/group")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("check user group failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("check user group failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
		if !bytes.Contains(data, []byte("\nmysql:")) {
 | 
			
		||||
			var cmd = utils.NewCmd(groupAddExe, "mysql")
 | 
			
		||||
@@ -157,7 +157,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
	{
 | 
			
		||||
		data, err := os.ReadFile("/etc/passwd")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("check user failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("check user failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
		if !bytes.Contains(data, []byte("\nmysql:")) {
 | 
			
		||||
			var cmd *utils.Cmd
 | 
			
		||||
@@ -182,10 +182,10 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
			if os.IsNotExist(err) {
 | 
			
		||||
				err = os.MkdirAll(parentDir, 0777)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					return errors.New("try to create dir '" + parentDir + "' failed: " + err.Error())
 | 
			
		||||
					return fmt.Errorf("try to create dir '%s' failed: %w", parentDir, err)
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				return errors.New("check dir '" + parentDir + "' failed: " + err.Error())
 | 
			
		||||
				return fmt.Errorf("check dir '%s' failed: %w", parentDir, err)
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			if !stat.IsDir() {
 | 
			
		||||
@@ -199,7 +199,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
	{
 | 
			
		||||
		stat, err := os.Stat(xzFilePath)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("could not open the installer file: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("could not open the installer file: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
		if stat.IsDir() {
 | 
			
		||||
			return errors.New("'" + xzFilePath + "' not a valid file")
 | 
			
		||||
@@ -219,12 +219,12 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			err = os.RemoveAll(tmpDir)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return errors.New("clean temporary directory '" + tmpDir + "' failed: " + err.Error())
 | 
			
		||||
				return fmt.Errorf("clean temporary directory '%s' failed: %w", tmpDir, err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		err = os.Mkdir(tmpDir, 0777)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("create temporary directory '" + tmpDir + "' failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("create temporary directory '%s' failed: %w", tmpDir, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -249,10 +249,10 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
		if os.IsNotExist(err) {
 | 
			
		||||
			err = os.Mkdir(dataDir, 0777)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return errors.New("create data dir '" + dataDir + "' failed: " + err.Error())
 | 
			
		||||
				return fmt.Errorf("create data dir '%s' failed: %w", dataDir, err)
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			return errors.New("check data dir '" + dataDir + "' failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("check data dir '%s' failed: %w", dataDir, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -262,7 +262,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
		cmd.WithStderr()
 | 
			
		||||
		err = cmd.Run()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("chown data dir '" + dataDir + "' failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("chown data dir '%s' failed: %w", dataDir, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -273,7 +273,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
		// backup it
 | 
			
		||||
		err = os.Rename(myCnfFile, "/etc/my.cnf."+timeutil.Format("YmdHis"))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("backup '/etc/my.cnf' failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("backup '/etc/my.cnf' failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -281,7 +281,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
	var myCnfTemplate = this.createMyCnf(baseDir, dataDir)
 | 
			
		||||
	err = os.WriteFile(myCnfFile, []byte(myCnfTemplate), 0666)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("write '" + myCnfFile + "' failed: " + err.Error())
 | 
			
		||||
		return fmt.Errorf("write '%s' failed: %w", myCnfFile, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// initialize
 | 
			
		||||
@@ -312,7 +312,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
		var passwordFile = baseDir + "/generated-password.txt"
 | 
			
		||||
		err = os.WriteFile(passwordFile, []byte(generatedPassword), 0666)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.New("write password failed: " + err.Error())
 | 
			
		||||
			return fmt.Errorf("write password failed: %w", err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -320,7 +320,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
	this.log("moving files to target dir ...")
 | 
			
		||||
	err = os.Rename(baseDir, targetDir)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("move '" + baseDir + "' to '" + targetDir + "' failed: " + err.Error())
 | 
			
		||||
		return fmt.Errorf("move '%s' to '%s' failed: %w", baseDir, targetDir, err)
 | 
			
		||||
	}
 | 
			
		||||
	baseDir = targetDir
 | 
			
		||||
 | 
			
		||||
@@ -328,7 +328,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
	myCnfTemplate = this.createMyCnf(baseDir, baseDir+"/data")
 | 
			
		||||
	err = os.WriteFile(myCnfFile, []byte(myCnfTemplate), 0666)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("create new '" + myCnfFile + "' failed: " + err.Error())
 | 
			
		||||
		return fmt.Errorf("create new '%s' failed: %w", myCnfFile, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// start mysql
 | 
			
		||||
@@ -356,7 +356,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
	// change password
 | 
			
		||||
	newPassword, err := this.generatePassword()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("generate new password failed: " + err.Error())
 | 
			
		||||
		return fmt.Errorf("generate new password failed: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.log("changing mysql password ...")
 | 
			
		||||
@@ -373,7 +373,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string)
 | 
			
		||||
	var passwordFile = baseDir + "/generated-password.txt"
 | 
			
		||||
	err = os.WriteFile(passwordFile, []byte(this.password), 0666)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("write generated file failed: " + err.Error())
 | 
			
		||||
		return fmt.Errorf("write generated file failed: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// remove temporary directory
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user