mirror of https://github.com/jetkvm/kvm.git
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package ota
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
const (
|
|
appUpdatePath = "/userdata/jetkvm/jetkvm_app.update"
|
|
)
|
|
|
|
func (s *State) componentUpdateError(prefix string, err error, l *zerolog.Logger) error {
|
|
if l == nil {
|
|
l = s.l
|
|
}
|
|
l.Error().Err(err).Msg(prefix)
|
|
s.error = fmt.Sprintf("%s: %v", prefix, err)
|
|
return err
|
|
}
|
|
|
|
func (s *State) updateApp(ctx context.Context, appUpdate *componentUpdateStatus) error {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
|
|
l := s.l.With().Str("path", appUpdatePath).Logger()
|
|
|
|
if err := s.downloadFile(ctx, appUpdatePath, appUpdate.url, &appUpdate.downloadProgress); err != nil {
|
|
return s.componentUpdateError("Error downloading app update", err, &l)
|
|
}
|
|
|
|
downloadFinished := time.Now()
|
|
appUpdate.downloadFinishedAt = downloadFinished
|
|
appUpdate.downloadProgress = 1
|
|
s.onProgressUpdate()
|
|
|
|
if err := s.verifyFile(
|
|
appUpdatePath,
|
|
appUpdate.hash,
|
|
&appUpdate.verificationProgress,
|
|
); err != nil {
|
|
return s.componentUpdateError("Error verifying app update hash", err, &l)
|
|
}
|
|
verifyFinished := time.Now()
|
|
appUpdate.verifiedAt = verifyFinished
|
|
appUpdate.verificationProgress = 1
|
|
appUpdate.updatedAt = verifyFinished
|
|
appUpdate.updateProgress = 1
|
|
s.onProgressUpdate()
|
|
|
|
l.Info().Msg("App update downloaded")
|
|
|
|
s.rebootNeeded = true
|
|
|
|
return nil
|
|
}
|