Skip to content

Commit e3ba599

Browse files
committed
Revert "feat(agent): enhance updater service integration and management"
This reverts commit dcda957.
1 parent 4a05c36 commit e3ba599

File tree

12 files changed

+28
-234
lines changed

12 files changed

+28
-234
lines changed

agent/config/const.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ type ProtoPort struct {
1313
TCP string
1414
}
1515

16-
const (
17-
SERVICE_UPDATER_NAME = "UTMStackUpdater"
18-
)
19-
2016
var (
2117
REPLACE_KEY string
2218

agent/config/linux_amd64.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
package config
55

66
var (
7+
UpdaterSelf = "utmstack_updater_self%s"
78
ServiceFile = "utmstack_agent_service%s"
8-
UpdaterFile = "utmstack_updater_service%s"
99
DependFiles = []string{"utmstack_agent_dependencies_linux.zip"}
1010
)

agent/config/linux_arm64.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
package config
55

66
var (
7+
UpdaterSelf = "utmstack_updater_self_arm64%s"
78
ServiceFile = "utmstack_agent_service_arm64%s"
8-
UpdaterFile = "utmstack_updater_service%s"
99
DependFiles = []string{"utmstack_agent_dependencies_linux_arm64.zip"}
1010
)

agent/config/macos.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
package config
55

66
var (
7+
UpdaterSelf = "utmstack_updater_self%s"
78
ServiceFile = "utmstack_agent_service%s"
8-
UpdaterFile = "utmstack_updater_service%s"
99
DependFiles = []string{}
1010
)

agent/config/windows_amd64.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
package config
55

66
var (
7+
UpdaterSelf = "utmstack_updater_self%s.exe"
78
ServiceFile = "utmstack_agent_service%s.exe"
8-
UpdaterFile = "utmstack_updater_service%s"
99
DependFiles = []string{"utmstack_agent_dependencies_windows.zip"}
1010
)

agent/config/windows_arm64.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
package config
55

66
var (
7+
UpdaterSelf = "utmstack_updater_self_arm64%s.exe"
78
ServiceFile = "utmstack_agent_service_arm64%s.exe"
8-
UpdaterFile = "utmstack_updater_service%s"
99
DependFiles = []string{"utmstack_agent_dependencies_windows_arm64.zip"}
1010
)

agent/models/version.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package models
22

33
type Version struct {
4-
Version string `json:"version"`
5-
UpdaterVersion string `json:"updater_version"`
4+
Version string `json:"version"`
65
}

agent/serv/service.go

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@ package serv
22

33
import (
44
"context"
5-
"fmt"
65
"os"
76
"os/signal"
8-
"path/filepath"
9-
"runtime"
107
"strconv"
118
"syscall"
129

@@ -49,8 +46,6 @@ func (p *program) run() {
4946
utils.Logger.ErrorF("error migrating logs table: %v", err)
5047
}
5148

52-
ensureUpdaterServiceInstalled()
53-
5449
ctx, cancel := context.WithCancel(context.Background())
5550
defer cancel()
5651
ctx = metadata.AppendToOutgoingContext(ctx, "key", cnf.AgentKey)
@@ -73,52 +68,3 @@ func (p *program) run() {
7368
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
7469
<-signals
7570
}
76-
77-
func ensureUpdaterServiceInstalled() {
78-
isInstalled, err := utils.CheckIfServiceIsInstalled("UTMStackUpdater")
79-
if err != nil {
80-
utils.Logger.ErrorF("error checking if updater service is installed: %v", err)
81-
return
82-
}
83-
84-
if isInstalled {
85-
utils.Logger.Info("updater service is already installed")
86-
return
87-
}
88-
89-
utils.Logger.Info("updater service not found, installing...")
90-
91-
updaterPath := filepath.Join(utils.GetMyPath(), fmt.Sprintf(config.UpdaterFile, ""))
92-
93-
if !utils.CheckIfPathExist(updaterPath) {
94-
95-
cnf, err := config.GetCurrentConfig()
96-
if err != nil {
97-
utils.Logger.ErrorF("error getting config to download updater: %v", err)
98-
return
99-
}
100-
101-
updaterBinary := fmt.Sprintf(config.UpdaterFile, "")
102-
if err := utils.DownloadFile(fmt.Sprintf(config.DependUrl, cnf.Server, config.DependenciesPort, updaterBinary), map[string]string{}, updaterBinary, utils.GetMyPath(), cnf.SkipCertValidation); err != nil {
103-
utils.Logger.ErrorF("error downloading updater binary: %v", err)
104-
return
105-
}
106-
107-
if runtime.GOOS == "linux" || runtime.GOOS == "darwin" {
108-
if err := utils.Execute("chmod", utils.GetMyPath(), "755", updaterBinary); err != nil {
109-
utils.Logger.ErrorF("error setting permissions on updater: %v", err)
110-
return
111-
}
112-
}
113-
114-
utils.Logger.Info("updater binary downloaded successfully")
115-
}
116-
117-
err = utils.Execute(updaterPath, utils.GetMyPath(), "install")
118-
if err != nil {
119-
utils.Logger.ErrorF("error installing updater service: %v", err)
120-
return
121-
}
122-
123-
utils.Logger.Info("updater service installed successfully")
124-
}

agent/updates/dependencies.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,6 @@ func DownloadFirstDependencies(address string, insecure bool) error {
1616
return fmt.Errorf("error downloading version.json : %v", err)
1717
}
1818

19-
updaterBinary := fmt.Sprintf(config.UpdaterFile, "")
20-
if err := utils.DownloadFile(fmt.Sprintf(config.DependUrl, address, config.DependenciesPort, updaterBinary), map[string]string{}, updaterBinary, utils.GetMyPath(), insecure); err != nil {
21-
return fmt.Errorf("error downloading updater binary %s: %v", updaterBinary, err)
22-
}
23-
24-
if runtime.GOOS == "linux" || runtime.GOOS == "darwin" {
25-
if err := utils.Execute("chmod", utils.GetMyPath(), "755", updaterBinary); err != nil {
26-
return fmt.Errorf("error setting permissions on updater: %v", err)
27-
}
28-
}
29-
3019
dependFiles := config.DependFiles
3120
for _, file := range dependFiles {
3221
if err := utils.DownloadFile(fmt.Sprintf(config.DependUrl, address, config.DependenciesPort, file), map[string]string{}, file, utils.GetMyPath(), insecure); err != nil {
@@ -49,6 +38,12 @@ func handleDependenciesPostDownload(dependencies []string) error {
4938
return fmt.Errorf("error unzipping dependencies: %v", err)
5039
}
5140

41+
if runtime.GOOS == "linux" || runtime.GOOS == "darwin" {
42+
if err := utils.Execute("chmod", utils.GetMyPath(), "-R", "755", fmt.Sprintf(config.UpdaterSelf, "")); err != nil {
43+
return fmt.Errorf("error executing chmod on %s: %v", fmt.Sprintf(config.UpdaterSelf, ""), err)
44+
}
45+
}
46+
5247
if err := os.Remove(filepath.Join(utils.GetMyPath(), file)); err != nil {
5348
return fmt.Errorf("error removing file %s: %v", file, err)
5449
}

agent/updates/update.go

Lines changed: 15 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -40,115 +40,32 @@ func UpdateDependencies(cnf *config.Config) {
4040
continue
4141
}
4242

43-
if newVersion.UpdaterVersion != currentVersion.UpdaterVersion {
44-
utils.Logger.Info("New version of updater found: %s", newVersion.UpdaterVersion)
45-
if err := utils.DownloadFile(fmt.Sprintf(config.DependUrl, cnf.Server, config.DependenciesPort, fmt.Sprintf(config.UpdaterFile, "")), map[string]string{}, fmt.Sprintf(config.UpdaterFile, "_new"), utils.GetMyPath(), cnf.SkipCertValidation); err != nil {
46-
utils.Logger.ErrorF("error downloading updater: %v", err)
43+
if newVersion.Version != currentVersion.Version {
44+
utils.Logger.Info("New version of agent found: %s", newVersion.Version)
45+
if err := utils.DownloadFile(fmt.Sprintf(config.DependUrl, cnf.Server, config.DependenciesPort, fmt.Sprintf(config.ServiceFile, "")), map[string]string{}, fmt.Sprintf(config.ServiceFile, "_new"), utils.GetMyPath(), cnf.SkipCertValidation); err != nil {
46+
utils.Logger.ErrorF("error downloading agent: %v", err)
47+
continue
48+
}
49+
50+
currentVersion = newVersion
51+
err = utils.WriteJSON(config.VersionPath, &currentVersion)
52+
if err != nil {
53+
utils.Logger.ErrorF("error writing version file: %v", err)
4754
continue
4855
}
4956

5057
if runtime.GOOS == "linux" || runtime.GOOS == "darwin" {
51-
if err = utils.Execute("chmod", utils.GetMyPath(), "-R", "755", filepath.Join(utils.GetMyPath(), fmt.Sprintf(config.UpdaterFile, "_new"))); err != nil {
58+
if err = utils.Execute("chmod", utils.GetMyPath(), "-R", "755", filepath.Join(utils.GetMyPath(), fmt.Sprintf(config.ServiceFile, "_new"))); err != nil {
5259
utils.Logger.ErrorF("error executing chmod: %v", err)
5360
}
5461
}
5562

56-
utils.Logger.Info("Starting updater update process...")
57-
err = runUpdateProcess()
63+
err = utils.Execute(filepath.Join(utils.GetMyPath(), fmt.Sprintf(config.UpdaterSelf, "")), utils.GetMyPath())
5864
if err != nil {
59-
utils.Logger.ErrorF("error updating updater: %v", err)
60-
os.Remove(filepath.Join(utils.GetMyPath(), "version_new.json"))
61-
os.Remove(filepath.Join(utils.GetMyPath(), fmt.Sprintf(config.UpdaterFile, "_new")))
62-
} else {
63-
utils.Logger.Info("Updater update completed successfully")
64-
if utils.CheckIfPathExist(config.VersionPath) {
65-
err := utils.ReadJson(config.VersionPath, &currentVersion)
66-
if err != nil {
67-
utils.Logger.ErrorF("error reading updated version file: %v", err)
68-
}
69-
}
65+
utils.Logger.ErrorF("error executing updater: %v", err)
7066
}
71-
} else {
72-
os.Remove(filepath.Join(utils.GetMyPath(), "version_new.json"))
73-
}
74-
}
75-
}
76-
77-
func runUpdateProcess() error {
78-
path := utils.GetMyPath()
79-
80-
newBin := fmt.Sprintf(config.UpdaterFile, "_new")
81-
oldBin := fmt.Sprintf(config.UpdaterFile, "")
82-
backupBin := fmt.Sprintf(config.UpdaterFile, ".old")
83-
84-
updaterNew := filepath.Join(path, newBin)
85-
if _, err := os.Stat(updaterNew); err != nil {
86-
return fmt.Errorf("no _new binary found to update")
87-
}
88-
89-
if err := utils.StopService(config.SERVICE_UPDATER_NAME); err != nil {
90-
return fmt.Errorf("error stopping updater: %v", err)
91-
}
92-
93-
time.Sleep(10 * time.Second)
94-
95-
backupPath := filepath.Join(path, backupBin)
96-
if utils.CheckIfPathExist(backupPath) {
97-
utils.Logger.Info("Removing previous backup: %s", backupPath)
98-
if err := os.Remove(backupPath); err != nil {
99-
utils.Logger.ErrorF("could not remove old backup: %v", err)
10067
}
101-
}
10268

103-
if err := os.Rename(filepath.Join(path, oldBin), backupPath); err != nil {
104-
return fmt.Errorf("error backing up old binary: %v", err)
69+
os.Remove(filepath.Join(utils.GetMyPath(), "version_new.json"))
10570
}
106-
107-
if err := os.Rename(filepath.Join(path, newBin), filepath.Join(path, oldBin)); err != nil {
108-
os.Rename(backupPath, filepath.Join(path, oldBin))
109-
return fmt.Errorf("error renaming new binary: %v", err)
110-
}
111-
112-
if err := utils.StartService(config.SERVICE_UPDATER_NAME); err != nil {
113-
rollbackUpdater(oldBin, backupBin, path)
114-
return fmt.Errorf("error starting updater: %v", err)
115-
}
116-
117-
time.Sleep(30 * time.Second)
118-
119-
isHealthy, err := utils.CheckIfServiceIsActive(config.SERVICE_UPDATER_NAME)
120-
if err != nil || !isHealthy {
121-
utils.Logger.Info("New version failed health check, rolling back...")
122-
rollbackUpdater(oldBin, backupBin, path)
123-
return fmt.Errorf("rollback completed: new version failed health check")
124-
}
125-
126-
utils.Logger.Info("Health check passed for updater")
127-
128-
versionNewPath := filepath.Join(path, "version_new.json")
129-
versionPath := filepath.Join(path, "version.json")
130-
if utils.CheckIfPathExist(versionNewPath) {
131-
if err := os.Rename(versionNewPath, versionPath); err != nil {
132-
utils.Logger.ErrorF("error updating version file: %v", err)
133-
} else {
134-
utils.Logger.Info("Version file updated successfully")
135-
}
136-
}
137-
138-
return nil
139-
}
140-
141-
func rollbackUpdater(currentBin, backupBin, path string) {
142-
utils.Logger.Info("Rolling back updater to previous version...")
143-
144-
utils.StopService(config.SERVICE_UPDATER_NAME)
145-
time.Sleep(5 * time.Second)
146-
147-
os.Remove(filepath.Join(path, currentBin))
148-
os.Rename(filepath.Join(path, backupBin), filepath.Join(path, currentBin))
149-
150-
utils.StartService(config.SERVICE_UPDATER_NAME)
151-
os.Remove(filepath.Join(path, "version_new.json"))
152-
153-
utils.Logger.Info("Rollback completed for updater")
15471
}

0 commit comments

Comments
 (0)