podman
1//go:build linux
2
3package criu
4
5import (
6"fmt"
7
8"github.com/checkpoint-restore/go-criu/v7"
9"github.com/checkpoint-restore/go-criu/v7/rpc"
10
11"google.golang.org/protobuf/proto"
12)
13
14// CheckForCriu uses CRIU's go bindings to check if the CRIU
15// binary exists and if it at least the version Podman needs.
16func CheckForCriu(version int) error {
17c := criu.MakeCriu()
18criuVersion, err := c.GetCriuVersion()
19if err != nil {
20return fmt.Errorf("failed to check for criu version: %w", err)
21}
22
23if criuVersion >= version {
24return nil
25}
26return fmt.Errorf("checkpoint/restore requires at least CRIU %d, current version is %d", version, criuVersion)
27}
28
29func MemTrack() bool {
30features, err := criu.MakeCriu().FeatureCheck(
31&rpc.CriuFeatures{
32MemTrack: proto.Bool(true),
33},
34)
35if err != nil {
36return false
37}
38
39return features.GetMemTrack()
40}
41
42func GetCriuVersion() (int, error) {
43c := criu.MakeCriu()
44return c.GetCriuVersion()
45}
46