talm

Форк
0
69 строк · 1.4 Кб
1
// This Source Code Form is subject to the terms of the Mozilla Public
2
// License, v. 2.0. If a copy of the MPL was not distributed with this
3
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4

5
package main
6

7
import (
8
	"context"
9
	"log"
10
	"os"
11

12
	"github.com/aenix-io/talm/internal/app/machined/pkg/runtime/v1alpha1/bootloader"
13
	"github.com/aenix-io/talm/internal/pkg/meta"
14
)
15

16
func revertBootloader(ctx context.Context) {
17
	if err := revertBootloadInternal(ctx); err != nil {
18
		log.Printf("failed to revert bootloader: %s", err)
19
	}
20
}
21

22
func revertBootloadInternal(ctx context.Context) error {
23
	metaState, err := meta.New(ctx, nil)
24
	if err != nil {
25
		if os.IsNotExist(err) {
26
			// no META, no way to revert
27
			return nil
28
		}
29

30
		return err
31
	}
32

33
	label, ok := metaState.ReadTag(meta.Upgrade)
34
	if !ok {
35
		return nil
36
	}
37

38
	if label == "" {
39
		if _, err = metaState.DeleteTag(ctx, meta.Upgrade); err != nil {
40
			return err
41
		}
42

43
		return metaState.Flush()
44
	}
45

46
	log.Printf("reverting failed upgrade, switching to %q", label)
47

48
	if err = func() error {
49
		config, probeErr := bootloader.Probe(ctx, "")
50
		if probeErr != nil {
51
			if os.IsNotExist(probeErr) {
52
				// no bootloader found, nothing to do
53
				return nil
54
			}
55

56
			return probeErr
57
		}
58

59
		return config.Revert(ctx)
60
	}(); err != nil {
61
		return err
62
	}
63

64
	if _, err = metaState.DeleteTag(ctx, meta.Upgrade); err != nil {
65
		return err
66
	}
67

68
	return metaState.Flush()
69
}
70

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.