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