mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-10-06 08:00:22 +00:00
fix: Fix service name loading failure in some scenarios (#11800)
Refs #11789
This commit is contained in:
+73
-32
@@ -25,15 +25,48 @@ import (
|
||||
"github.com/1Panel-dev/1Panel/core/utils/xpack"
|
||||
)
|
||||
|
||||
var (
|
||||
svcBasePath, _ = controller.GetServicePath("")
|
||||
svcCoreName, _ = controller.LoadServiceName("1panel-core")
|
||||
selCoreName, _ = controller.SelectInitScript("1panel-core")
|
||||
scriptCoreName, _ = controller.GetScriptName("1panel-core")
|
||||
svcAgentName, _ = controller.LoadServiceName("1panel-agent")
|
||||
selAgentName, _ = controller.SelectInitScript("1panel-agent")
|
||||
scriptAgentName, _ = controller.GetScriptName("1panel-agent")
|
||||
)
|
||||
type serviceInfo struct {
|
||||
basePath string
|
||||
coreName string
|
||||
agentName string
|
||||
selCoreName string
|
||||
selAgentName string
|
||||
}
|
||||
|
||||
func loadServiceInfo() (serviceInfo, error) {
|
||||
basePath, err := controller.GetServicePath("")
|
||||
if err != nil {
|
||||
global.LOG.Errorf("get service path failed: %v", err)
|
||||
return serviceInfo{}, err
|
||||
}
|
||||
coreName, err := controller.LoadServiceName("1panel-core")
|
||||
if err != nil {
|
||||
global.LOG.Errorf("load core service name failed: %v", err)
|
||||
return serviceInfo{}, err
|
||||
}
|
||||
agentName, err := controller.LoadServiceName("1panel-agent")
|
||||
if err != nil {
|
||||
global.LOG.Errorf("load agent service name failed: %v", err)
|
||||
return serviceInfo{}, err
|
||||
}
|
||||
selCoreName, err := controller.SelectInitScript("1panel-core")
|
||||
if err != nil {
|
||||
global.LOG.Errorf("select core init script failed: %v", err)
|
||||
return serviceInfo{}, err
|
||||
}
|
||||
selAgentName, err := controller.SelectInitScript("1panel-agent")
|
||||
if err != nil {
|
||||
global.LOG.Errorf("select agent init script failed: %v", err)
|
||||
return serviceInfo{}, err
|
||||
}
|
||||
return serviceInfo{
|
||||
basePath: basePath,
|
||||
coreName: coreName,
|
||||
agentName: agentName,
|
||||
selCoreName: selCoreName,
|
||||
selAgentName: selAgentName,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type UpgradeService struct{}
|
||||
|
||||
@@ -120,6 +153,10 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
svcInfo, err := loadServiceInfo()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mode := global.CONF.Base.Mode
|
||||
if strings.Contains(req.Version, "beta") {
|
||||
@@ -146,7 +183,7 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error {
|
||||
}
|
||||
tmpDir := downloadDir + "/" + strings.ReplaceAll(fileName, ".tar.gz", "")
|
||||
|
||||
if err := u.handleBackup(originalDir); err != nil {
|
||||
if err := u.handleBackup(originalDir, svcInfo); err != nil {
|
||||
global.LOG.Errorf("handle backup original file failed, err: %v", err)
|
||||
_ = settingRepo.Update("SystemStatus", "Free")
|
||||
return
|
||||
@@ -159,56 +196,56 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error {
|
||||
if err := files.CopyFileWithRename(path.Join(tmpDir, "1panel-core"), "/usr/local/bin/1panel-core"); err != nil {
|
||||
global.LOG.Errorf("upgrade 1panel-core failed, err: %v", err)
|
||||
_ = settingRepo.Update("SystemStatus", "Free")
|
||||
u.handleRollback(originalDir, 1)
|
||||
u.handleRollback(originalDir, 1, svcInfo)
|
||||
return
|
||||
}
|
||||
if err := files.CopyFileWithRename(path.Join(tmpDir, "1panel-agent"), "/usr/local/bin/1panel-agent"); err != nil {
|
||||
global.LOG.Errorf("upgrade 1panel-agent failed, err: %v", err)
|
||||
_ = settingRepo.Update("SystemStatus", "Free")
|
||||
u.handleRollback(originalDir, 1)
|
||||
u.handleRollback(originalDir, 1, svcInfo)
|
||||
return
|
||||
}
|
||||
|
||||
if err := files.CopyItem(false, true, path.Join(tmpDir, "1pctl"), "/usr/local/bin"); err != nil {
|
||||
global.LOG.Errorf("upgrade 1pctl failed, err: %v", err)
|
||||
_ = settingRepo.Update("SystemStatus", "Free")
|
||||
u.handleRollback(originalDir, 2)
|
||||
u.handleRollback(originalDir, 2, svcInfo)
|
||||
return
|
||||
}
|
||||
if _, err := cmd.RunDefaultWithStdoutBashCf("sed -i -e 's#BASE_DIR=.*#BASE_DIR=%s#g' /usr/local/bin/1pctl", global.CONF.Base.InstallDir); err != nil {
|
||||
global.LOG.Errorf("upgrade basedir in 1pctl failed, err: %v", err)
|
||||
u.handleRollback(originalDir, 2)
|
||||
u.handleRollback(originalDir, 2, svcInfo)
|
||||
return
|
||||
}
|
||||
if _, err := cmd.RunDefaultWithStdoutBashCf("sed -i -e 's#LANGUAGE=.*#LANGUAGE=%s#g' /usr/local/bin/1pctl", oldLang); err != nil {
|
||||
global.LOG.Errorf("upgrade basedir in 1pctl failed, err: %v", err)
|
||||
u.handleRollback(originalDir, 2)
|
||||
u.handleRollback(originalDir, 2, svcInfo)
|
||||
return
|
||||
}
|
||||
initScriptPath := path.Join(tmpDir, "initscript")
|
||||
|
||||
if err := files.CopyItem(false, true, path.Join(initScriptPath, selCoreName), svcBasePath); err != nil {
|
||||
global.LOG.Errorf("upgrade %s failed, err: %v", svcCoreName, err)
|
||||
if err := files.CopyItem(false, true, path.Join(initScriptPath, svcInfo.selCoreName), svcInfo.basePath); err != nil {
|
||||
global.LOG.Errorf("upgrade %s failed, err: %v", svcInfo.coreName, err)
|
||||
_ = settingRepo.Update("SystemStatus", "Free")
|
||||
u.handleRollback(originalDir, 3)
|
||||
u.handleRollback(originalDir, 3, svcInfo)
|
||||
return
|
||||
}
|
||||
if err := files.CopyItem(false, true, path.Join(initScriptPath, selAgentName), svcBasePath); err != nil {
|
||||
global.LOG.Errorf("upgrade %s failed, err: %v", svcAgentName, err)
|
||||
if err := files.CopyItem(false, true, path.Join(initScriptPath, svcInfo.selAgentName), svcInfo.basePath); err != nil {
|
||||
global.LOG.Errorf("upgrade %s failed, err: %v", svcInfo.agentName, err)
|
||||
_ = settingRepo.Update("SystemStatus", "Free")
|
||||
u.handleRollback(originalDir, 3)
|
||||
u.handleRollback(originalDir, 3, svcInfo)
|
||||
return
|
||||
}
|
||||
|
||||
if err := files.CopyItem(true, true, path.Join(tmpDir, "lang"), "/usr/local/bin"); err != nil {
|
||||
global.LOG.Errorf("Update language files failed: %v", err)
|
||||
_ = settingRepo.Update("SystemStatus", "Free")
|
||||
u.handleRollback(originalDir, 4)
|
||||
u.handleRollback(originalDir, 4, svcInfo)
|
||||
}
|
||||
if err := files.CopyItem(false, true, path.Join(tmpDir, "GeoIP.mmdb"), path.Join(global.CONF.Base.InstallDir, "1panel/geo")); err != nil {
|
||||
global.LOG.Warnf("Update GeoIP database failed: %v", err)
|
||||
_ = settingRepo.Update("SystemStatus", "Free")
|
||||
u.handleRollback(originalDir, 4)
|
||||
u.handleRollback(originalDir, 4, svcInfo)
|
||||
}
|
||||
|
||||
global.LOG.Info("upgrade successful!")
|
||||
@@ -231,7 +268,11 @@ func (u *UpgradeService) Rollback(req dto.OperateByID) error {
|
||||
if log.ID == 0 {
|
||||
return buserr.New("ErrRecordNotFound")
|
||||
}
|
||||
u.handleRollback(log.BackupFile, 3)
|
||||
svcInfo, err := loadServiceInfo()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
u.handleRollback(log.BackupFile, 3, svcInfo)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -295,7 +336,7 @@ func analyzeDoc(version, content string) dto.ReleasesNotes {
|
||||
return item
|
||||
}
|
||||
|
||||
func (u *UpgradeService) handleBackup(originalDir string) error {
|
||||
func (u *UpgradeService) handleBackup(originalDir string, svcInfo serviceInfo) error {
|
||||
if err := files.CopyItem(false, true, "/usr/local/bin/1panel-core", originalDir); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -308,10 +349,10 @@ func (u *UpgradeService) handleBackup(originalDir string) error {
|
||||
if err := files.CopyItem(true, true, "/usr/local/bin/lang", originalDir); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := files.CopyItem(false, true, path.Join(svcBasePath, svcCoreName), originalDir); err != nil {
|
||||
if err := files.CopyItem(false, true, path.Join(svcInfo.basePath, svcInfo.coreName), originalDir); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := files.CopyItem(false, true, path.Join(svcBasePath, svcAgentName), originalDir); err != nil {
|
||||
if err := files.CopyItem(false, true, path.Join(svcInfo.basePath, svcInfo.agentName), originalDir); err != nil {
|
||||
return err
|
||||
}
|
||||
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 {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u *UpgradeService) handleRollback(originalDir string, errStep int) {
|
||||
func (u *UpgradeService) handleRollback(originalDir string, errStep int, svcInfo serviceInfo) {
|
||||
_ = settingRepo.Update("SystemStatus", "Free")
|
||||
dbPath := path.Join(global.CONF.Base.InstallDir, "1panel")
|
||||
if _, err := os.Stat(path.Join(originalDir, "db")); err == nil {
|
||||
@@ -346,11 +387,11 @@ func (u *UpgradeService) handleRollback(originalDir string, errStep int) {
|
||||
if errStep == 2 {
|
||||
return
|
||||
}
|
||||
if err := files.CopyItem(false, true, path.Join(originalDir, svcCoreName), svcBasePath); err != nil {
|
||||
global.LOG.Errorf("rollback %s failed, err: %v", svcCoreName, err)
|
||||
if err := files.CopyItem(false, true, path.Join(originalDir, svcInfo.coreName), svcInfo.basePath); err != nil {
|
||||
global.LOG.Errorf("rollback %s failed, err: %v", svcInfo.coreName, err)
|
||||
}
|
||||
if err := files.CopyItem(false, true, path.Join(originalDir, svcAgentName), svcBasePath); err != nil {
|
||||
global.LOG.Errorf("rollback %s failed, err: %v", svcAgentName, err)
|
||||
if err := files.CopyItem(false, true, path.Join(originalDir, svcInfo.agentName), svcInfo.basePath); err != nil {
|
||||
global.LOG.Errorf("rollback %s failed, err: %v", svcInfo.agentName, err)
|
||||
}
|
||||
if errStep == 3 {
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user