@@ -25,15 +25,48 @@ import (
2525 "github.com/1Panel-dev/1Panel/core/utils/xpack"
2626)
2727
28- var (
29- svcBasePath , _ = controller .GetServicePath ("" )
30- svcCoreName , _ = controller .LoadServiceName ("1panel-core" )
31- selCoreName , _ = controller .SelectInitScript ("1panel-core" )
32- scriptCoreName , _ = controller .GetScriptName ("1panel-core" )
33- svcAgentName , _ = controller .LoadServiceName ("1panel-agent" )
34- selAgentName , _ = controller .SelectInitScript ("1panel-agent" )
35- scriptAgentName , _ = controller .GetScriptName ("1panel-agent" )
36- )
28+ type serviceInfo struct {
29+ basePath string
30+ coreName string
31+ agentName string
32+ selCoreName string
33+ selAgentName string
34+ }
35+
36+ func loadServiceInfo () (serviceInfo , error ) {
37+ basePath , err := controller .GetServicePath ("" )
38+ if err != nil {
39+ global .LOG .Errorf ("get service path failed: %v" , err )
40+ return serviceInfo {}, err
41+ }
42+ coreName , err := controller .LoadServiceName ("1panel-core" )
43+ if err != nil {
44+ global .LOG .Errorf ("load core service name failed: %v" , err )
45+ return serviceInfo {}, err
46+ }
47+ agentName , err := controller .LoadServiceName ("1panel-agent" )
48+ if err != nil {
49+ global .LOG .Errorf ("load agent service name failed: %v" , err )
50+ return serviceInfo {}, err
51+ }
52+ selCoreName , err := controller .SelectInitScript ("1panel-core" )
53+ if err != nil {
54+ global .LOG .Errorf ("select core init script failed: %v" , err )
55+ return serviceInfo {}, err
56+ }
57+ selAgentName , err := controller .SelectInitScript ("1panel-agent" )
58+ if err != nil {
59+ global .LOG .Errorf ("select agent init script failed: %v" , err )
60+ return serviceInfo {}, err
61+ }
62+ return serviceInfo {
63+ basePath : basePath ,
64+ coreName : coreName ,
65+ agentName : agentName ,
66+ selCoreName : selCoreName ,
67+ selAgentName : selAgentName ,
68+ }, nil
69+ }
3770
3871type UpgradeService struct {}
3972
@@ -120,6 +153,10 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error {
120153 if err != nil {
121154 return err
122155 }
156+ svcInfo , err := loadServiceInfo ()
157+ if err != nil {
158+ return err
159+ }
123160
124161 mode := global .CONF .Base .Mode
125162 if strings .Contains (req .Version , "beta" ) {
@@ -146,7 +183,7 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error {
146183 }
147184 tmpDir := downloadDir + "/" + strings .ReplaceAll (fileName , ".tar.gz" , "" )
148185
149- if err := u .handleBackup (originalDir ); err != nil {
186+ if err := u .handleBackup (originalDir , svcInfo ); err != nil {
150187 global .LOG .Errorf ("handle backup original file failed, err: %v" , err )
151188 _ = settingRepo .Update ("SystemStatus" , "Free" )
152189 return
@@ -159,56 +196,56 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error {
159196 if err := files .CopyFileWithRename (path .Join (tmpDir , "1panel-core" ), "/usr/local/bin/1panel-core" ); err != nil {
160197 global .LOG .Errorf ("upgrade 1panel-core failed, err: %v" , err )
161198 _ = settingRepo .Update ("SystemStatus" , "Free" )
162- u .handleRollback (originalDir , 1 )
199+ u .handleRollback (originalDir , 1 , svcInfo )
163200 return
164201 }
165202 if err := files .CopyFileWithRename (path .Join (tmpDir , "1panel-agent" ), "/usr/local/bin/1panel-agent" ); err != nil {
166203 global .LOG .Errorf ("upgrade 1panel-agent failed, err: %v" , err )
167204 _ = settingRepo .Update ("SystemStatus" , "Free" )
168- u .handleRollback (originalDir , 1 )
205+ u .handleRollback (originalDir , 1 , svcInfo )
169206 return
170207 }
171208
172209 if err := files .CopyItem (false , true , path .Join (tmpDir , "1pctl" ), "/usr/local/bin" ); err != nil {
173210 global .LOG .Errorf ("upgrade 1pctl failed, err: %v" , err )
174211 _ = settingRepo .Update ("SystemStatus" , "Free" )
175- u .handleRollback (originalDir , 2 )
212+ u .handleRollback (originalDir , 2 , svcInfo )
176213 return
177214 }
178215 if _ , err := cmd .RunDefaultWithStdoutBashCf ("sed -i -e 's#BASE_DIR=.*#BASE_DIR=%s#g' /usr/local/bin/1pctl" , global .CONF .Base .InstallDir ); err != nil {
179216 global .LOG .Errorf ("upgrade basedir in 1pctl failed, err: %v" , err )
180- u .handleRollback (originalDir , 2 )
217+ u .handleRollback (originalDir , 2 , svcInfo )
181218 return
182219 }
183220 if _ , err := cmd .RunDefaultWithStdoutBashCf ("sed -i -e 's#LANGUAGE=.*#LANGUAGE=%s#g' /usr/local/bin/1pctl" , oldLang ); err != nil {
184221 global .LOG .Errorf ("upgrade basedir in 1pctl failed, err: %v" , err )
185- u .handleRollback (originalDir , 2 )
222+ u .handleRollback (originalDir , 2 , svcInfo )
186223 return
187224 }
188225 initScriptPath := path .Join (tmpDir , "initscript" )
189226
190- if err := files .CopyItem (false , true , path .Join (initScriptPath , selCoreName ), svcBasePath ); err != nil {
191- global .LOG .Errorf ("upgrade %s failed, err: %v" , svcCoreName , err )
227+ if err := files .CopyItem (false , true , path .Join (initScriptPath , svcInfo . selCoreName ), svcInfo . basePath ); err != nil {
228+ global .LOG .Errorf ("upgrade %s failed, err: %v" , svcInfo . coreName , err )
192229 _ = settingRepo .Update ("SystemStatus" , "Free" )
193- u .handleRollback (originalDir , 3 )
230+ u .handleRollback (originalDir , 3 , svcInfo )
194231 return
195232 }
196- if err := files .CopyItem (false , true , path .Join (initScriptPath , selAgentName ), svcBasePath ); err != nil {
197- global .LOG .Errorf ("upgrade %s failed, err: %v" , svcAgentName , err )
233+ if err := files .CopyItem (false , true , path .Join (initScriptPath , svcInfo . selAgentName ), svcInfo . basePath ); err != nil {
234+ global .LOG .Errorf ("upgrade %s failed, err: %v" , svcInfo . agentName , err )
198235 _ = settingRepo .Update ("SystemStatus" , "Free" )
199- u .handleRollback (originalDir , 3 )
236+ u .handleRollback (originalDir , 3 , svcInfo )
200237 return
201238 }
202239
203240 if err := files .CopyItem (true , true , path .Join (tmpDir , "lang" ), "/usr/local/bin" ); err != nil {
204241 global .LOG .Errorf ("Update language files failed: %v" , err )
205242 _ = settingRepo .Update ("SystemStatus" , "Free" )
206- u .handleRollback (originalDir , 4 )
243+ u .handleRollback (originalDir , 4 , svcInfo )
207244 }
208245 if err := files .CopyItem (false , true , path .Join (tmpDir , "GeoIP.mmdb" ), path .Join (global .CONF .Base .InstallDir , "1panel/geo" )); err != nil {
209246 global .LOG .Warnf ("Update GeoIP database failed: %v" , err )
210247 _ = settingRepo .Update ("SystemStatus" , "Free" )
211- u .handleRollback (originalDir , 4 )
248+ u .handleRollback (originalDir , 4 , svcInfo )
212249 }
213250
214251 global .LOG .Info ("upgrade successful!" )
@@ -231,7 +268,11 @@ func (u *UpgradeService) Rollback(req dto.OperateByID) error {
231268 if log .ID == 0 {
232269 return buserr .New ("ErrRecordNotFound" )
233270 }
234- u .handleRollback (log .BackupFile , 3 )
271+ svcInfo , err := loadServiceInfo ()
272+ if err != nil {
273+ return err
274+ }
275+ u .handleRollback (log .BackupFile , 3 , svcInfo )
235276 return nil
236277}
237278
@@ -295,7 +336,7 @@ func analyzeDoc(version, content string) dto.ReleasesNotes {
295336 return item
296337}
297338
298- func (u * UpgradeService ) handleBackup (originalDir string ) error {
339+ func (u * UpgradeService ) handleBackup (originalDir string , svcInfo serviceInfo ) error {
299340 if err := files .CopyItem (false , true , "/usr/local/bin/1panel-core" , originalDir ); err != nil {
300341 return err
301342 }
@@ -308,10 +349,10 @@ func (u *UpgradeService) handleBackup(originalDir string) error {
308349 if err := files .CopyItem (true , true , "/usr/local/bin/lang" , originalDir ); err != nil {
309350 return err
310351 }
311- if err := files .CopyItem (false , true , path .Join (svcBasePath , svcCoreName ), originalDir ); err != nil {
352+ if err := files .CopyItem (false , true , path .Join (svcInfo . basePath , svcInfo . coreName ), originalDir ); err != nil {
312353 return err
313354 }
314- if err := files .CopyItem (false , true , path .Join (svcBasePath , svcAgentName ), originalDir ); err != nil {
355+ if err := files .CopyItem (false , true , path .Join (svcInfo . basePath , svcInfo . agentName ), originalDir ); err != nil {
315356 return err
316357 }
317358 if err := files .CopyItem (true , true , path .Join (global .CONF .Base .InstallDir , "1panel/db" ), originalDir ); err != nil {
@@ -323,7 +364,7 @@ func (u *UpgradeService) handleBackup(originalDir string) error {
323364 return nil
324365}
325366
326- func (u * UpgradeService ) handleRollback (originalDir string , errStep int ) {
367+ func (u * UpgradeService ) handleRollback (originalDir string , errStep int , svcInfo serviceInfo ) {
327368 _ = settingRepo .Update ("SystemStatus" , "Free" )
328369 dbPath := path .Join (global .CONF .Base .InstallDir , "1panel" )
329370 if _ , err := os .Stat (path .Join (originalDir , "db" )); err == nil {
@@ -346,11 +387,11 @@ func (u *UpgradeService) handleRollback(originalDir string, errStep int) {
346387 if errStep == 2 {
347388 return
348389 }
349- if err := files .CopyItem (false , true , path .Join (originalDir , svcCoreName ), svcBasePath ); err != nil {
350- global .LOG .Errorf ("rollback %s failed, err: %v" , svcCoreName , err )
390+ if err := files .CopyItem (false , true , path .Join (originalDir , svcInfo . coreName ), svcInfo . basePath ); err != nil {
391+ global .LOG .Errorf ("rollback %s failed, err: %v" , svcInfo . coreName , err )
351392 }
352- if err := files .CopyItem (false , true , path .Join (originalDir , svcAgentName ), svcBasePath ); err != nil {
353- global .LOG .Errorf ("rollback %s failed, err: %v" , svcAgentName , err )
393+ if err := files .CopyItem (false , true , path .Join (originalDir , svcInfo . agentName ), svcInfo . basePath ); err != nil {
394+ global .LOG .Errorf ("rollback %s failed, err: %v" , svcInfo . agentName , err )
354395 }
355396 if errStep == 3 {
356397 return
0 commit comments