mirror of
https://github.com/IceWhaleTech/CasaOS.git
synced 2025-06-16 05:55:33 +00:00
wip
This commit is contained in:
parent
dd66f73157
commit
0f3d3e82f5
@ -60,8 +60,6 @@ BUILD_PATH=$(dirname "${BASH_SOURCE[0]}")/../../..
|
|||||||
SOURCE_ROOT=${BUILD_PATH}/sysroot
|
SOURCE_ROOT=${BUILD_PATH}/sysroot
|
||||||
|
|
||||||
APP_NAME="casaos"
|
APP_NAME="casaos"
|
||||||
APP_NAME_FORMAL="CasaOS"
|
|
||||||
#APP_NAME_FORMAL="casaos-alpha"
|
|
||||||
|
|
||||||
# check if migration is needed
|
# check if migration is needed
|
||||||
SOURCE_BIN_PATH=${SOURCE_ROOT}/usr/bin
|
SOURCE_BIN_PATH=${SOURCE_ROOT}/usr/bin
|
||||||
@ -85,45 +83,6 @@ if [ "${NEED_MIGRATION}" = "false" ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MIGRATION_SERVICE_DIR=${1}
|
|
||||||
|
|
||||||
if [ -z "${MIGRATION_SERVICE_DIR}" ]; then
|
|
||||||
MIGRATION_SERVICE_DIR=${BUILD_PATH}/scripts/migration/service.d/${APP_NAME}
|
|
||||||
fi
|
|
||||||
MIGRATION_LIST_FILE=${MIGRATION_SERVICE_DIR}/migration.list
|
|
||||||
MIGRATION_PATH=()
|
|
||||||
|
|
||||||
CURRENT_VERSION_FOUND="false"
|
|
||||||
|
|
||||||
# a VERSION_PAIR looks like "v0.3.5 v0.3.6-alpha2"
|
|
||||||
#
|
|
||||||
# - "v0.3.5" is the current version installed on this host
|
|
||||||
# - "v0.3.6-alpha2" is the version of the migration tool from GitHub
|
|
||||||
while read -r VERSION_PAIR; do
|
|
||||||
if [ -z "${VERSION_PAIR}" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# obtain "v0.3.5" from "v0.3.5 v0.3.6-alpha2"
|
|
||||||
VER1=$(echo "${VERSION_PAIR}" | cut -d' ' -f1)
|
|
||||||
|
|
||||||
# obtain "v0.3.6-alpha2" from "v0.3.5 v0.3.6-alpha2"
|
|
||||||
VER2=$(echo "${VERSION_PAIR}" | cut -d' ' -f2)
|
|
||||||
|
|
||||||
if [ "${CURRENT_VERSION}" = "${VER1// /}" ] || [ "${CURRENT_VERSION}" = "LEGACY_WITHOUT_VERSION" ]; then
|
|
||||||
CURRENT_VERSION_FOUND="true"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${CURRENT_VERSION_FOUND}" = "true" ]; then
|
|
||||||
MIGRATION_PATH+=("${VER2// /}")
|
|
||||||
fi
|
|
||||||
done < "${MIGRATION_LIST_FILE}"
|
|
||||||
|
|
||||||
if [ ${#MIGRATION_PATH[@]} -eq 0 ]; then
|
|
||||||
__warning "No migration path found from ${CURRENT_VERSION} to ${SOURCE_VERSION}"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
ARCH="unknown"
|
ARCH="unknown"
|
||||||
|
|
||||||
case $(uname -m) in
|
case $(uname -m) in
|
||||||
@ -141,22 +100,59 @@ case $(uname -m) in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
__info "ARCH: ${ARCH}"
|
||||||
|
|
||||||
|
MIGRATION_SERVICE_DIR=${1}
|
||||||
|
|
||||||
|
if [ -z "${MIGRATION_SERVICE_DIR}" ]; then
|
||||||
|
MIGRATION_SERVICE_DIR=${BUILD_PATH}/scripts/migration/service.d/${APP_NAME}
|
||||||
|
fi
|
||||||
|
MIGRATION_LIST_FILE=${MIGRATION_SERVICE_DIR}/migration.list
|
||||||
|
MIGRATION_PATH=()
|
||||||
|
|
||||||
|
CURRENT_VERSION_FOUND="false"
|
||||||
|
|
||||||
|
# a VERSION_PAIR looks like "v0.3.5 <url>"
|
||||||
|
#
|
||||||
|
# - "v0.3.5" is the current version installed on this host
|
||||||
|
# - "<url>" is the url of the migration tool
|
||||||
|
while read -r VERSION_PAIR; do
|
||||||
|
if [ -z "${VERSION_PAIR}" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# obtain "v0.3.5" from "v0.3.5 v0.3.6-alpha2"
|
||||||
|
VER1=$(echo "${VERSION_PAIR}" | cut -d' ' -f1)
|
||||||
|
|
||||||
|
# obtain "<url>" from "v0.3.5 <url>"
|
||||||
|
URL=$(eval echo "${VERSION_PAIR}" | cut -d' ' -f2)
|
||||||
|
|
||||||
|
if [ "${CURRENT_VERSION}" = "${VER1// /}" ] || [ "${CURRENT_VERSION}" = "LEGACY_WITHOUT_VERSION" ]; then
|
||||||
|
CURRENT_VERSION_FOUND="true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${CURRENT_VERSION_FOUND}" = "true" ]; then
|
||||||
|
MIGRATION_PATH+=("${URL// /}")
|
||||||
|
fi
|
||||||
|
done < "${MIGRATION_LIST_FILE}"
|
||||||
|
|
||||||
|
if [ ${#MIGRATION_PATH[@]} -eq 0 ]; then
|
||||||
|
__warning "No migration path found from ${CURRENT_VERSION} to ${SOURCE_VERSION}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
pushd "${MIGRATION_SERVICE_DIR}"
|
pushd "${MIGRATION_SERVICE_DIR}"
|
||||||
|
|
||||||
{ for VER2 in "${MIGRATION_PATH[@]}"; do
|
{ for URL in "${MIGRATION_PATH[@]}"; do
|
||||||
|
MIGRATION_TOOL_FILE=$(basename "${URL}")
|
||||||
|
|
||||||
MIGRATION_TOOL_FILE=linux-"${ARCH}"-"${APP_NAME}"-migration-tool-"${VER2}".tar.gz
|
|
||||||
|
|
||||||
if [ -f "${MIGRATION_TOOL_FILE}" ]; then
|
if [ -f "${MIGRATION_TOOL_FILE}" ]; then
|
||||||
__info "Migration tool ${MIGRATION_TOOL_FILE} exists. Skip downloading."
|
__info "Migration tool ${MIGRATION_TOOL_FILE} exists. Skip downloading."
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# MIGRATION_TOOL_URL=http://192.168.2.197:8000/v1/package/migration?type=release&name="${APP_NAME_FORMAL}"&version=${VER2}&arch=${ARCH}
|
__info "Dowloading ${URL}..."
|
||||||
MIGRATION_TOOL_URL=https://github.com/IceWhaleTech/"${APP_NAME_FORMAL}"/releases/download/"${VER2}"/linux-"${ARCH}"-"${APP_NAME}"-migration-tool-"${VER2}".tar.gz
|
curl -fsSL -o "${MIGRATION_TOOL_FILE}" -O "${URL}"
|
||||||
echo "Dowloading ${MIGRATION_TOOL_URL}..."
|
|
||||||
curl -sL -O "${MIGRATION_TOOL_URL}"
|
|
||||||
done
|
done
|
||||||
} || {
|
} || {
|
||||||
popd
|
popd
|
||||||
@ -164,8 +160,8 @@ pushd "${MIGRATION_SERVICE_DIR}"
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
for VER2 in "${MIGRATION_PATH[@]}"; do
|
for URL in "${MIGRATION_PATH[@]}"; do
|
||||||
MIGRATION_TOOL_FILE=linux-"${ARCH}"-"${APP_NAME}"-migration-tool-"${VER2}".tar.gz
|
MIGRATION_TOOL_FILE=$(basename "${URL}")
|
||||||
__info "Extracting ${MIGRATION_TOOL_FILE}..."
|
__info "Extracting ${MIGRATION_TOOL_FILE}..."
|
||||||
tar zxvf "${MIGRATION_TOOL_FILE}" || __error "Failed to extract ${MIGRATION_TOOL_FILE}"
|
tar zxvf "${MIGRATION_TOOL_FILE}" || __error "Failed to extract ${MIGRATION_TOOL_FILE}"
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
LEGACY_WITHOUT_VERSION v0.3.6
|
LEGACY_WITHOUT_VERSION https://github.com/IceWhaleTech/CasaOS/releases/download/v0.3.6/linux-${ARCH}-casaos-migration-tool-v0.3.6.tar.gz
|
||||||
v0.3.5 v0.3.6
|
v0.3.5 https://github.com/IceWhaleTech/CasaOS/releases/download/v0.3.6/linux-${ARCH}-casaos-migration-tool-v0.3.6.tar.gz
|
||||||
v0.3.5.1 v0.3.6
|
v0.3.5.1 https://github.com/IceWhaleTech/CasaOS/releases/download/v0.3.6/linux-${ARCH}-casaos-migration-tool-v0.3.6.tar.gz
|
||||||
v0.3.6 v0.3.7
|
|
||||||
|
@ -83,8 +83,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
migrationTools := []interfaces.MigrationTool{
|
migrationTools := []interfaces.MigrationTool{
|
||||||
NewMigrationToolFor_035(),
|
// nothing to migrate from last version
|
||||||
NewMigrationToolFor_036(),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var selectedMigrationTool interfaces.MigrationTool
|
var selectedMigrationTool interfaces.MigrationTool
|
||||||
@ -115,8 +114,7 @@ func main() {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedMigrationTool.PostMigrate()
|
if err := selectedMigrationTool.PostMigrate(); err != nil {
|
||||||
_logger.Info("casaos migration ok")
|
_logger.Error("Migration succeeded, but post-migration failed: %s", err)
|
||||||
// panic(err)
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,182 +0,0 @@
|
|||||||
/*
|
|
||||||
* @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 migrationTool036 struct{}
|
|
||||||
|
|
||||||
func (u *migrationTool036) 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 *migrationTool036) PreMigrate() error {
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *migrationTool036) 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 *migrationTool036) PostMigrate() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewMigrationToolFor_035() interfaces.MigrationTool {
|
|
||||||
return &migrationTool{}
|
|
||||||
}
|
|
@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
* @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 (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
interfaces "github.com/IceWhaleTech/CasaOS-Common"
|
|
||||||
"github.com/IceWhaleTech/CasaOS-Common/utils/version"
|
|
||||||
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
|
||||||
"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")
|
|
||||||
}
|
|
||||||
|
|
||||||
_logger.Info("update done")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *migrationTool) PostMigrate() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewMigrationToolFor_036() interfaces.MigrationTool {
|
|
||||||
return &migrationTool{}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user