main.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /*
  2. * @Author: LinkLeong link@icewhale.org
  3. * @Date: 2022-08-23 18:09:11
  4. * @LastEditors: LinkLeong
  5. * @LastEditTime: 2022-08-31 14:17:51
  6. * @FilePath: /CasaOS/cmd/migration-tool/main.go
  7. * @Description:
  8. * @Website: https://www.casaos.io
  9. * Copyright (c) 2022 by icewhale, All Rights Reserved.
  10. */
  11. package main
  12. import (
  13. "flag"
  14. "fmt"
  15. "os"
  16. interfaces "github.com/IceWhaleTech/CasaOS-Common"
  17. "github.com/IceWhaleTech/CasaOS-Common/utils/systemctl"
  18. "github.com/IceWhaleTech/CasaOS/common"
  19. "github.com/IceWhaleTech/CasaOS/pkg/config"
  20. "github.com/IceWhaleTech/CasaOS/pkg/sqlite"
  21. "github.com/IceWhaleTech/CasaOS/service"
  22. "gorm.io/gorm"
  23. )
  24. const (
  25. casaosServiceName = "casaos.service"
  26. )
  27. var (
  28. commit = "private build"
  29. date = "private build"
  30. _logger *Logger
  31. sqliteDB *gorm.DB
  32. configFlag = ""
  33. dbFlag = ""
  34. )
  35. func init() {
  36. versionFlag := flag.Bool("v", false, "version")
  37. debugFlag := flag.Bool("d", true, "debug")
  38. forceFlag := flag.Bool("f", true, "force")
  39. flag.Parse()
  40. if *versionFlag {
  41. fmt.Println("v" + common.VERSION)
  42. os.Exit(0)
  43. }
  44. println("git commit:", commit)
  45. println("build date:", date)
  46. _logger = NewLogger()
  47. if os.Getuid() != 0 {
  48. _logger.Info("Root privileges are required to run this program.")
  49. os.Exit(1)
  50. }
  51. if *debugFlag {
  52. _logger.DebugMode = true
  53. }
  54. if !*forceFlag {
  55. serviceEnabled, err := systemctl.IsServiceEnabled(casaosServiceName)
  56. if err != nil {
  57. panic(err)
  58. }
  59. if serviceEnabled {
  60. _logger.Info("%s is already enabled. If migration is still needed, try with -f.", casaosServiceName)
  61. os.Exit(1)
  62. }
  63. }
  64. config.InitSetup(configFlag, "")
  65. if len(dbFlag) == 0 {
  66. dbFlag = config.AppInfo.DBPath + "/db"
  67. }
  68. sqliteDB = sqlite.GetDb(dbFlag)
  69. // gredis.GetRedisConn(config.RedisInfo),
  70. service.MyService = service.NewService(sqliteDB, "")
  71. }
  72. func main() {
  73. migrationTools := []interfaces.MigrationTool{
  74. // nothing to migrate from last version
  75. }
  76. var selectedMigrationTool interfaces.MigrationTool
  77. // look for the right migration tool matching current version
  78. for _, tool := range migrationTools {
  79. migrationNeeded, err := tool.IsMigrationNeeded()
  80. if err != nil {
  81. panic(err)
  82. }
  83. if migrationNeeded {
  84. selectedMigrationTool = tool
  85. break
  86. }
  87. }
  88. if selectedMigrationTool == nil {
  89. _logger.Error("selectedMigrationTool is null")
  90. return
  91. }
  92. if err := selectedMigrationTool.PreMigrate(); err != nil {
  93. panic(err)
  94. }
  95. if err := selectedMigrationTool.Migrate(); err != nil {
  96. panic(err)
  97. }
  98. if err := selectedMigrationTool.PostMigrate(); err != nil {
  99. _logger.Error("Migration succeeded, but post-migration failed: %s", err)
  100. }
  101. }