talos

Форк
0
/
post.go 
78 строк · 2.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 imager
6

7
import (
8
	"fmt"
9
	"os"
10
	"path/filepath"
11

12
	"github.com/siderolabs/go-cmd/pkg/cmd"
13

14
	"github.com/siderolabs/talos/pkg/reporter"
15
)
16

17
func (i *Imager) postProcessTar(filename string, report *reporter.Reporter) (string, error) {
18
	report.Report(reporter.Update{Message: "processing .tar.gz", Status: reporter.StatusRunning})
19

20
	dir := filepath.Dir(filename)
21
	src := "disk.raw"
22

23
	if err := os.Rename(filename, filepath.Join(dir, src)); err != nil {
24
		return "", err
25
	}
26

27
	outPath := filename + ".tar.gz"
28

29
	if _, err := cmd.Run("tar", "-cvf", outPath, "-C", dir, "--sparse", "--use-compress-program=pigz -6", src); err != nil {
30
		return "", err
31
	}
32

33
	if err := os.Remove(filepath.Join(dir, src)); err != nil {
34
		return "", err
35
	}
36

37
	report.Report(reporter.Update{Message: fmt.Sprintf("archive is ready: %s", outPath), Status: reporter.StatusSucceeded})
38

39
	return outPath, nil
40
}
41

42
func (i *Imager) postProcessGz(filename string, report *reporter.Reporter) (string, error) {
43
	report.Report(reporter.Update{Message: "compressing .gz", Status: reporter.StatusRunning})
44

45
	if _, err := cmd.Run("pigz", "-6", "-f", filename); err != nil {
46
		return "", err
47
	}
48

49
	report.Report(reporter.Update{Message: fmt.Sprintf("compression done: %s.gz", filename), Status: reporter.StatusSucceeded})
50

51
	return filename + ".gz", nil
52
}
53

54
func (i *Imager) postProcessXz(filename string, report *reporter.Reporter) (string, error) {
55
	report.Report(reporter.Update{Message: "compressing .xz", Status: reporter.StatusRunning})
56

57
	if _, err := cmd.Run("xz", "-0", "-f", "-T", "0", filename); err != nil {
58
		return "", err
59
	}
60

61
	report.Report(reporter.Update{Message: fmt.Sprintf("compression done: %s.xz", filename), Status: reporter.StatusSucceeded})
62

63
	return filename + ".xz", nil
64
}
65

66
func (i *Imager) postProcessZstd(filename string, report *reporter.Reporter) (string, error) {
67
	report.Report(reporter.Update{Message: "compressing .zst", Status: reporter.StatusRunning})
68

69
	out := filename + ".zst"
70

71
	if _, err := cmd.Run("zstd", "-T0", "--rm", "-18", "--quiet", "--force", "-o", out, filename); err != nil {
72
		return "", err
73
	}
74

75
	report.Report(reporter.Update{Message: fmt.Sprintf("compression done: %s", out), Status: reporter.StatusSucceeded})
76

77
	return filename + ".zst", nil
78
}
79

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

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

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

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