@@ -2,11 +2,57 @@ package utils
2
2
3
3
import (
4
4
"fmt"
5
+ "os"
5
6
"os/exec"
7
+ "path/filepath"
6
8
"runtime"
7
9
"strings"
8
10
)
9
11
12
+ const DarwinRunL1NodeTemplate = `<?xml version="1.0" encoding="UTF-8"?>
13
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
14
+ <plist version="1.0">
15
+ <dict>
16
+ <key>Label</key>
17
+ <string>com.initia.daemon</string>
18
+
19
+ <key>ProgramArguments</key>
20
+ <array>
21
+ <string>%[1]s/initiad</string>
22
+ <string>start</string>
23
+ <string>--home=%[3]s</string>
24
+ </array>
25
+
26
+ <key>RunAtLoad</key>
27
+ <true/>
28
+
29
+ <key>KeepAlive</key>
30
+ <true/>
31
+
32
+ <!-- Adding the environment variable -->
33
+ <key>EnvironmentVariables</key>
34
+ <dict>
35
+ <key>HOME</key>
36
+ <string>%[2]s</string>
37
+ <key>DYLD_LIBRARY_PATH</key>
38
+ <string>%[1]s</string>
39
+ </dict>
40
+
41
+ <key>StandardOutPath</key>
42
+ <string>/tmp/initia.stdout.log</string>
43
+
44
+ <key>StandardErrorPath</key>
45
+ <string>/tmp/initia.stderr.log</string>
46
+
47
+ <key>HardResourceLimits</key>
48
+ <dict>
49
+ <key>NumberOfFiles</key>
50
+ <integer>65535</integer>
51
+ </dict>
52
+ </dict>
53
+ </plist>
54
+ `
55
+
10
56
func CreateService (serviceName , serviceContent string ) error {
11
57
switch runtime .GOOS {
12
58
case "linux" :
@@ -48,8 +94,8 @@ func EnableService(serviceName string) error {
48
94
}
49
95
50
96
func LoadService (serviceName string ) error {
51
- cmd := exec .Command ("sudo" , "launchctl" , "load" , fmt .Sprintf ("/Library/LaunchDaemons/%s.plist" , serviceName ))
52
- if err := cmd .Run (); err != nil {
97
+ loadCmd := exec .Command ("sudo" , "launchctl" , "load" , fmt .Sprintf ("/Library/LaunchDaemons/%s.plist" , serviceName ))
98
+ if err := loadCmd .Run (); err != nil {
53
99
return fmt .Errorf ("failed to load service: %v" , err )
54
100
}
55
101
return nil
@@ -64,10 +110,16 @@ func StartService(serviceName string) error {
64
110
}
65
111
return nil
66
112
case "darwin" :
67
- cmd := exec .Command ("sudo" , "launchctl" , "load" , fmt .Sprintf ("/Library/LaunchDaemons/%s.plist" , serviceName ))
68
- if err := cmd .Run (); err != nil {
113
+ loadCmd := exec .Command ("sudo" , "launchctl" , "load" , fmt .Sprintf ("/Library/LaunchDaemons/%s.plist" , serviceName ))
114
+ if err := loadCmd .Run (); err != nil {
115
+ return fmt .Errorf ("failed to load service: %v" , err )
116
+ }
117
+
118
+ startCmd := exec .Command ("sudo" , "launchctl" , "start" , serviceName )
119
+ if err := startCmd .Run (); err != nil {
69
120
return fmt .Errorf ("failed to start service: %v" , err )
70
121
}
122
+
71
123
return nil
72
124
default :
73
125
return fmt .Errorf ("unsupported operating system: %s" , runtime .GOOS )
@@ -92,3 +144,32 @@ func StopService(serviceName string) error {
92
144
return fmt .Errorf ("unsupported operating system: %s" , runtime .GOOS )
93
145
}
94
146
}
147
+
148
+ func GetRunL1NodeServiceName () string {
149
+ switch runtime .GOOS {
150
+ case "linux" :
151
+ return RunL1NodeLinuxServiceName
152
+ case "darwin" :
153
+ return RunL1NodeDarwinServiceName
154
+ default :
155
+ panic (fmt .Errorf ("unsupported operating system: %s" , runtime .GOOS ))
156
+ }
157
+ }
158
+
159
+ func GetDarwinRunL1NodePlist (version string ) string {
160
+ userHome , err := os .UserHomeDir ()
161
+ if err != nil {
162
+ panic (fmt .Errorf ("failed to get user home directory: %v" , err ))
163
+ }
164
+ weaveDataPath := filepath .Join (userHome , WeaveDataDirectory )
165
+ binaryPath := filepath .Join (weaveDataPath , "initia@" + version )
166
+ initiaHome := filepath .Join (userHome , InitiaDirectory )
167
+ if err = os .Setenv ("DYLD_LIBRARY_PATH" , binaryPath ); err != nil {
168
+ panic (fmt .Errorf ("failed to set DYLD_LIBRARY_PATH: %v" , err ))
169
+ }
170
+ if err = os .Setenv ("HOME" , userHome ); err != nil {
171
+ panic (fmt .Errorf ("failed to set HOME: %v" , err ))
172
+ }
173
+
174
+ return fmt .Sprintf (DarwinRunL1NodeTemplate , binaryPath , userHome , initiaHome )
175
+ }
0 commit comments