Skip to content

Commit c04a4b9

Browse files
skupper init fixes for rootful podman (#1469)
When a skupper site (podman) is initialized, the Skupper CLI checks whether user is root before it creates a systemd service as user level only. Fixes #1465
1 parent 0b23610 commit c04a4b9

File tree

2 files changed

+63
-8
lines changed

2 files changed

+63
-8
lines changed

pkg/config/local.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ func GetPlatform() types.Platform {
142142
}
143143

144144
func GetDataHome() string {
145+
if os.Getuid() == 0 {
146+
return "/usr/local/bin"
147+
}
145148
dataHome, ok := os.LookupEnv("XDG_DATA_HOME")
146149
if !ok {
147150
homeDir, _ := os.UserHomeDir()

pkg/config/systemd.go

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,21 @@ func (s *systemdServiceInfo) Create() error {
6060
}
6161

6262
// Enabling systemd user service
63-
cmd := exec.Command("systemctl", "--user", "enable", serviceName)
63+
cmd := GetCmdEnableSystemdService(serviceName)
6464
err = cmd.Run()
6565
if err != nil {
6666
return fmt.Errorf("Unable to enable user service: %w", err)
6767
}
6868

6969
// Reloading systemd user daemon
70-
cmd = exec.Command("systemctl", "--user", "daemon-reload")
70+
cmd = GetCmdReloadSystemdDaemon()
7171
err = cmd.Run()
7272
if err != nil {
7373
return fmt.Errorf("Unable to user service daemon-reload: %w", err)
7474
}
7575

7676
// Starting systemd user service
77-
cmd = exec.Command("systemctl", "--user", "start", serviceName)
77+
cmd = GetCmdStartSystemdService(serviceName)
7878
err = cmd.Run()
7979
if err != nil {
8080
return fmt.Errorf("Unable to start user service: %w", err)
@@ -84,6 +84,9 @@ func (s *systemdServiceInfo) Create() error {
8484
}
8585

8686
func (s *systemdServiceInfo) getServiceFile() string {
87+
if os.Getuid() == 0 {
88+
return path.Join("/etc/systemd/system", s.getServiceName())
89+
}
8790
return path.Join(GetConfigHome(), "systemd/user", s.getServiceName())
8891
}
8992

@@ -98,29 +101,78 @@ func (s *systemdServiceInfo) Remove() error {
98101

99102
// Stopping systemd user service
100103
serviceName := "skupper-" + string(s.Platform) + ".service"
101-
cmd := exec.Command("systemctl", "--user", "stop", serviceName)
104+
cmd := GetCmdStopSystemdService(serviceName)
102105
_ = cmd.Run()
103106

104107
// Disabling systemd user service
105-
cmd = exec.Command("systemctl", "--user", "disable", serviceName)
108+
cmd = GetCmdDisableSystemdService(serviceName)
106109
_ = cmd.Run()
107110

108111
// Removing the .service file
109112
_ = os.Remove(s.getServiceFile())
110113

111114
// Reloading systemd user daemon
112-
cmd = exec.Command("systemctl", "--user", "daemon-reload")
115+
cmd = GetCmdReloadSystemdDaemon()
113116
_ = cmd.Run()
114117

115118
// Resetting failed status
116-
cmd = exec.Command("systemctl", "--user", "reset-failed", serviceName)
119+
cmd = GetCmdResetFailedSystemService(serviceName)
117120
_ = cmd.Run()
118121

119122
return nil
120123
}
121124

125+
func GetCmdEnableSystemdService(serviceName string) *exec.Cmd {
126+
if os.Getuid() == 0 {
127+
return exec.Command("systemctl", "enable", serviceName)
128+
}
129+
return exec.Command("systemctl", "--user", "enable", serviceName)
130+
}
131+
132+
func GetCmdDisableSystemdService(serviceName string) *exec.Cmd {
133+
if os.Getuid() == 0 {
134+
return exec.Command("systemctl", "disable", serviceName)
135+
}
136+
return exec.Command("systemctl", "--user", "disable", serviceName)
137+
}
138+
139+
func GetCmdReloadSystemdDaemon() *exec.Cmd {
140+
if os.Getuid() == 0 {
141+
return exec.Command("systemctl", "daemon-reload")
142+
}
143+
return exec.Command("systemctl", "--user", "daemon-reload")
144+
}
145+
146+
func GetCmdStartSystemdService(serviceName string) *exec.Cmd {
147+
if os.Getuid() == 0 {
148+
return exec.Command("systemctl", "start", serviceName)
149+
}
150+
return exec.Command("systemctl", "--user", "start", serviceName)
151+
}
152+
153+
func GetCmdStopSystemdService(serviceName string) *exec.Cmd {
154+
if os.Getuid() == 0 {
155+
return exec.Command("systemctl", "stop", serviceName)
156+
}
157+
return exec.Command("systemctl", "--user", "stop", serviceName)
158+
}
159+
160+
func GetCmdResetFailedSystemService(serviceName string) *exec.Cmd {
161+
if os.Getuid() == 0 {
162+
return exec.Command("systemctl", "reset-failed", serviceName)
163+
}
164+
return exec.Command("systemctl", "--user", "reset-failed", serviceName)
165+
}
166+
167+
func GetCmdIsSystemdEnabled() *exec.Cmd {
168+
if os.Getuid() == 0 {
169+
return exec.Command("systemctl", []string{"list-units", "--no-pager"}...)
170+
}
171+
return exec.Command("systemctl", []string{"--user", "list-units", "--no-pager"}...)
172+
}
173+
122174
func IsSystemdUserEnabled() bool {
123-
cmd := exec.Command("systemctl", []string{"--user", "list-units", "--no-pager"}...)
175+
cmd := GetCmdIsSystemdEnabled()
124176
if err := cmd.Run(); err != nil {
125177
return false
126178
}

0 commit comments

Comments
 (0)