mirror of
https://github.com/safing/portmaster
synced 2025-09-02 10:39:22 +00:00
73 lines
2 KiB
Go
73 lines
2 KiB
Go
package cmdbase
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/safing/portmaster/base/log"
|
|
"github.com/safing/portmaster/base/notifications"
|
|
"github.com/safing/portmaster/service"
|
|
"github.com/safing/portmaster/service/updates"
|
|
)
|
|
|
|
var UpdateCmd = &cobra.Command{
|
|
Use: "update",
|
|
Short: "Force an update of all components.",
|
|
RunE: update,
|
|
}
|
|
|
|
func update(cmd *cobra.Command, args []string) error {
|
|
// Finalize config.
|
|
err := SvcConfig.Init()
|
|
if err != nil {
|
|
return fmt.Errorf("internal configuration error: %w", err)
|
|
}
|
|
// Force logging to stdout.
|
|
SvcConfig.LogToStdout = true
|
|
|
|
// Start logging.
|
|
_ = log.Start(SvcConfig.LogLevel, SvcConfig.LogToStdout, SvcConfig.LogDir)
|
|
defer log.Shutdown()
|
|
|
|
// Create updaters.
|
|
instance := &updateDummyInstance{}
|
|
binaryUpdateConfig, intelUpdateConfig, err := service.MakeUpdateConfigs(SvcConfig)
|
|
if err != nil {
|
|
return fmt.Errorf("init updater config: %w", err)
|
|
}
|
|
binaryUpdates, err := updates.New(instance, "Binary Updater", *binaryUpdateConfig)
|
|
if err != nil {
|
|
return fmt.Errorf("configure binary updates: %w", err)
|
|
}
|
|
intelUpdates, err := updates.New(instance, "Intel Updater", *intelUpdateConfig)
|
|
if err != nil {
|
|
return fmt.Errorf("configure intel updates: %w", err)
|
|
}
|
|
|
|
// Force update all.
|
|
binErr := binaryUpdates.ForceUpdate()
|
|
if binErr != nil {
|
|
slog.Error("binary update failed", "err", binErr)
|
|
}
|
|
intelErr := intelUpdates.ForceUpdate()
|
|
if intelErr != nil {
|
|
slog.Error("intel update failed", "err", intelErr)
|
|
}
|
|
|
|
// Return error.
|
|
if binErr != nil {
|
|
return fmt.Errorf("binary update failed: %w", binErr)
|
|
}
|
|
if intelErr != nil {
|
|
return fmt.Errorf("intel update failed: %w", intelErr)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type updateDummyInstance struct{}
|
|
|
|
func (udi *updateDummyInstance) Restart() {}
|
|
func (udi *updateDummyInstance) Shutdown() {}
|
|
func (udi *updateDummyInstance) Notifications() *notifications.Notifications { return nil }
|