Skip to content

Commit 0d222f4

Browse files
committed
fix(agent): Improve tunnel preservation when upgrading agent over tunnel
Removed call to stop shellhub-agent service at start of installation and instead restarts service at last possible moment at end of installation. Enabling shellhub-agent service no longer starts service.
1 parent 50f40b7 commit 0d222f4

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

agent/installer.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,9 @@ func agentInstall(cfg installerConfig) error {
117117
return fmt.Errorf("systemd is not available on this system")
118118
}
119119

120-
// Stop existing service before overwriting files (re-install / upgrade).
121-
// Ignore error — service may not exist yet.
122-
exec.Command("systemctl", "disable", "--now", agentServiceName).Run() //nolint:errcheck
120+
// Best practice would be to disable service here before install/upgrade
121+
// If upgrade performed over tunnel, ssh session disconnect, binary gets sighup.
122+
// Service will restart at end of install/upgrade
123123

124124
exe, err := os.Executable()
125125
if err != nil {
@@ -147,10 +147,16 @@ func agentInstall(cfg installerConfig) error {
147147
return fmt.Errorf("failed to reload systemd daemon: %w", err)
148148
}
149149

150-
if err := exec.Command("systemctl", "enable", "--now", agentServiceName).Run(); err != nil {
150+
// For upgrade over tunnel support, just enable service, service reboot later
151+
if err := exec.Command("systemctl", "enable", agentServiceName).Run(); err != nil {
151152
return fmt.Errorf("failed to enable service: %w", err)
152153
}
153154

155+
// Restarts service to upgraded binary, session dies but tunnel remains active.
156+
if err := exec.Command("systemctl", "restart", agentServiceName).Run(); err != nil {
157+
return fmt.Errorf("failed to restart service: %w", err)
158+
}
159+
154160
return nil
155161
}
156162

0 commit comments

Comments
 (0)