From 5c550399bcf62efa1570ebd9fa2275ae443cc52a Mon Sep 17 00:00:00 2001 From: Kbayero Date: Tue, 2 Jan 2024 20:17:06 +0200 Subject: [PATCH] Fix agent service is not starting automatically after being stopped --- agent/installer/main.go | 21 +++++++++++++- agent/installer/utils/files.go | 13 +++++++++ agent/installer/utils/lock.go | 29 +++++++++++++++++++ agent/redline/protector/protector.go | 1 - agent/redline/serv/service.go | 21 +++++++------- agent/versions.json | 2 +- .../guide-winlogbeat.component.ts | 2 +- 7 files changed, 74 insertions(+), 15 deletions(-) create mode 100644 agent/installer/utils/lock.go diff --git a/agent/installer/main.go b/agent/installer/main.go index bad19cdda..bf745fda9 100644 --- a/agent/installer/main.go +++ b/agent/installer/main.go @@ -63,6 +63,18 @@ func main() { h.FatalError("Error installing the UTMStack Agent: one or more of the requiered ports are closed. Please open ports 9000 and 50051.") } + err := utils.CreatePathIfNotExist(filepath.Join(path, "locks")) + if err != nil { + fmt.Printf("error creating locks path: %v", err) + h.FatalError("error creating locks path: %v", err) + } + + err = utils.SetLock(filepath.Join(path, "locks", "setup.lock")) + if err != nil { + fmt.Printf("error setting setup.lock: %v", err) + h.FatalError("error setting setup.lock: %v", err) + } + err = checkversion.CleanOldVersions(h) if err != nil { fmt.Printf("error cleaning old versions: %v", err) @@ -70,7 +82,7 @@ func main() { } // Download dependencies - err := depend.DownloadDependencies(servBins, ip, skip) + err = depend.DownloadDependencies(servBins, ip, skip) if err != nil { fmt.Printf("error downloading dependencies: %v", err) h.FatalError("error downloading dependencies: %v", err) @@ -85,6 +97,13 @@ func main() { h.Info("UTMStack Agent services installed correctly.") fmt.Println("UTMStack Agent services installed correctly.") + + err = utils.RemoveLock(filepath.Join(path, "locks", "setup.lock")) + if err != nil { + fmt.Printf("error removing setup.lock: %v", err) + h.FatalError("error removing setup.lock: %v", err) + } + time.Sleep(5 * time.Second) os.Exit(0) diff --git a/agent/installer/utils/files.go b/agent/installer/utils/files.go index 900a8efb4..70597446f 100644 --- a/agent/installer/utils/files.go +++ b/agent/installer/utils/files.go @@ -2,6 +2,7 @@ package utils import ( "encoding/json" + "fmt" "os" "path/filepath" @@ -81,3 +82,15 @@ func WriteJSON(path string, data interface{}) error { return nil } + +// CreatePathIfNotExist creates a specific path if not exist +func CreatePathIfNotExist(path string) error { + if _, err := os.Stat(path); os.IsNotExist(err) { + if err := os.Mkdir(path, 0755); err != nil { + return fmt.Errorf("error creating path: %v", err) + } + } else if err != nil { + return fmt.Errorf("error checking path: %v", err) + } + return nil +} diff --git a/agent/installer/utils/lock.go b/agent/installer/utils/lock.go new file mode 100644 index 000000000..1f7e8ce54 --- /dev/null +++ b/agent/installer/utils/lock.go @@ -0,0 +1,29 @@ +package utils + +import ( + "fmt" + "os" +) + +func SetLock(lockdir string) error { + if !CheckIfPathExist(lockdir) { + file, err := os.OpenFile(lockdir, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.ModePerm) + if err != nil { + return err + } + defer file.Close() + } + return nil +} + +func RemoveLock(lockdir string) error { + if CheckIfPathExist(lockdir) { + err := os.Remove(lockdir) + if err != nil { + return err + } + } else { + return fmt.Errorf("lock file %s not exists", lockdir) + } + return nil +} diff --git a/agent/redline/protector/protector.go b/agent/redline/protector/protector.go index 1148b2db1..784991d4d 100644 --- a/agent/redline/protector/protector.go +++ b/agent/redline/protector/protector.go @@ -62,6 +62,5 @@ func ProtectService(servName, lockName string, h *holmes.Logger) { time.Sleep(time.Second * 5) continue } - } } diff --git a/agent/redline/serv/service.go b/agent/redline/serv/service.go index 1aba53290..3f699df2d 100644 --- a/agent/redline/serv/service.go +++ b/agent/redline/serv/service.go @@ -3,6 +3,7 @@ package serv import ( "os" "os/signal" + "path/filepath" "syscall" "time" @@ -27,21 +28,19 @@ func (p *program) Stop(s service.Service) error { } func (p *program) run() { -checkall: + path, err := utils.GetMyPath() + if err != nil { + h.FatalError("Failed to get current path: %v", err) + } + for { - for servName := range constants.GetServicesLock() { - isActive, err := utils.CheckIfServiceIsActive(servName) - if err != nil { - time.Sleep(time.Second * 5) - h.Error("error checking if %s service is active: %v", servName, err) - continue checkall - } else if !isActive { - time.Sleep(time.Second * 5) - continue checkall - } + if utils.CheckIfPathExist(filepath.Join(path, "locks", "setup.lock")) { + time.Sleep(time.Second * 5) + continue } break } + h.Info("UTMStackRedline started correctly") for servName, lockName := range constants.GetServicesLock() { go protector.ProtectService(servName, lockName, h) diff --git a/agent/versions.json b/agent/versions.json index f09b479c7..ccaa3b488 100644 --- a/agent/versions.json +++ b/agent/versions.json @@ -10,7 +10,7 @@ "master_version": "10.2.0", "agent_version": "10.2.0", "updater_version": "10.1.2", - "redline_version": "10.1.1" + "redline_version": "10.2.0" } ] } diff --git a/frontend/src/app/app-module/guides/guide-winlogbeat/guide-winlogbeat.component.ts b/frontend/src/app/app-module/guides/guide-winlogbeat/guide-winlogbeat.component.ts index 77bee3ac2..8301c5a86 100644 --- a/frontend/src/app/app-module/guides/guide-winlogbeat/guide-winlogbeat.component.ts +++ b/frontend/src/app/app-module/guides/guide-winlogbeat/guide-winlogbeat.component.ts @@ -34,7 +34,7 @@ export class GuideWinlogbeatComponent implements OnInit { getCommand(): string { const ip = window.location.host.includes(':') ? window.location.host.split(':')[0] : window.location.host; return `New-Item -ItemType Directory -Force -Path "C:\\Program Files\\UTMStack\\UTMStack Agent"; ` + - `Invoke-WebRequest -Uri "https://cdn.utmstack.com/agent_updates/release/installer/v10.1.2/utmstack_agent_installer.exe" ` + + `Invoke-WebRequest -Uri "https://cdn.utmstack.com/agent_updates/release/installer/v10.2.0/utmstack_agent_installer.exe" ` + `-OutFile "C:\\Program Files\\UTMStack\\UTMStack Agent\\utmstack_agent_installer.exe"; ` + `Start-Process "C:\\Program Files\\UTMStack\\UTMStack Agent\\utmstack_agent_installer.exe" ` + `-ArgumentList 'install', '` + ip + `', '` + this.token + `', 'yes' -NoNewWindow -Wait`;