183 lines
4.1 KiB
Go
183 lines
4.1 KiB
Go
/*
|
|
* @Author: LinkLeong link@icewhale.org
|
|
* @Date: 2022-08-24 17:36:00
|
|
* @LastEditors: LinkLeong
|
|
* @LastEditTime: 2022-09-05 11:24:27
|
|
* @FilePath: /CasaOS/cmd/migration-tool/migration-034-035.go
|
|
* @Description:
|
|
* @Website: https://www.casaos.io
|
|
* Copyright (c) 2022 by icewhale, All Rights Reserved.
|
|
*/
|
|
package main
|
|
|
|
import (
|
|
"io"
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
|
|
interfaces "github.com/IceWhaleTech/CasaOS-Common"
|
|
"github.com/IceWhaleTech/CasaOS-Common/utils/version"
|
|
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/command"
|
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/file"
|
|
"github.com/IceWhaleTech/CasaOS/service"
|
|
)
|
|
|
|
type migrationTool struct{}
|
|
|
|
func (u *migrationTool) IsMigrationNeeded() (bool, error) {
|
|
|
|
majorVersion, minorVersion, patchVersion, err := version.DetectLegacyVersion()
|
|
if err != nil {
|
|
if err == version.ErrLegacyVersionNotFound {
|
|
return false, nil
|
|
}
|
|
|
|
return false, err
|
|
}
|
|
|
|
if majorVersion > 0 {
|
|
return false, nil
|
|
}
|
|
|
|
if minorVersion > 3 {
|
|
return false, nil
|
|
}
|
|
|
|
if minorVersion == 3 && patchVersion > 5 {
|
|
return false, nil
|
|
}
|
|
|
|
_logger.Info("Migration is needed for a CasaOS version 0.3.5 and older...")
|
|
return true, nil
|
|
|
|
}
|
|
|
|
func (u *migrationTool) PreMigrate() error {
|
|
|
|
return nil
|
|
}
|
|
|
|
func (u *migrationTool) Migrate() error {
|
|
|
|
if service.MyService.System().GetSysInfo().KernelArch == "aarch64" && config.ServerInfo.USBAutoMount != "True" && strings.Contains(service.MyService.System().GetDeviceTree(), "Raspberry Pi") {
|
|
service.MyService.System().UpdateUSBAutoMount("False")
|
|
service.MyService.System().ExecUSBAutoMountShell("False")
|
|
}
|
|
newAPIUrl := "https://api.casaos.io/casaos-api"
|
|
if config.ServerInfo.ServerApi == "https://api.casaos.zimaboard.com" {
|
|
config.ServerInfo.ServerApi = newAPIUrl
|
|
config.Cfg.Section("server").Key("ServerApi").SetValue(newAPIUrl)
|
|
config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
|
|
}
|
|
command.OnlyExec("curl -fsSL https://raw.githubusercontent.com/IceWhaleTech/get/main/assist.sh | bash")
|
|
if !file.CheckNotExist("/casaOS") {
|
|
command.OnlyExec("source /casaOS/server/shell/update.sh ;")
|
|
command.OnlyExec("source " + config.AppInfo.ShellPath + "/delete-old-service.sh ;")
|
|
}
|
|
|
|
service.MyService.App().ImportApplications(true)
|
|
|
|
src := "/casaOS/server/conf/conf.ini"
|
|
if file.Exists(src) {
|
|
dst := "/etc/casaos/casaos.conf"
|
|
source, err := os.Open(src)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer source.Close()
|
|
|
|
destination, err := os.Create(dst)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer destination.Close()
|
|
_, err = io.Copy(destination, source)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
}
|
|
|
|
if file.Exists("/casaOS/server/db") {
|
|
var fds []os.FileInfo
|
|
var err error
|
|
to := "/var/lib/casaos/db"
|
|
file.IsNotExistMkDir(to)
|
|
from := "/casaOS/server/db"
|
|
if fds, err = ioutil.ReadDir(from); err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, fd := range fds {
|
|
srcfp := path.Join(from, fd.Name())
|
|
dstfp := path.Join(to, fd.Name())
|
|
source, err := os.Open(srcfp)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer source.Close()
|
|
|
|
destination, err := os.Create(dstfp)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer destination.Close()
|
|
_, err = io.Copy(destination, source)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if file.Exists("/casaOS/server/conf") {
|
|
var fds []os.FileInfo
|
|
var err error
|
|
to := "/var/lib/casaos/conf"
|
|
file.IsNotExistMkDir(to)
|
|
from := "/casaOS/server/conf"
|
|
if fds, err = ioutil.ReadDir(from); err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, fd := range fds {
|
|
fExt := path.Ext(fd.Name())
|
|
if fExt != ".json" {
|
|
continue
|
|
}
|
|
srcfp := path.Join(from, fd.Name())
|
|
dstfp := path.Join(to, fd.Name())
|
|
source, err := os.Open(srcfp)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer source.Close()
|
|
|
|
destination, err := os.Create(dstfp)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer destination.Close()
|
|
_, err = io.Copy(destination, source)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
_logger.Info("update done")
|
|
return nil
|
|
}
|
|
|
|
func (u *migrationTool) PostMigrate() error {
|
|
return nil
|
|
}
|
|
|
|
func NewMigrationToolFor_035() interfaces.MigrationTool {
|
|
return &migrationTool{}
|
|
}
|