mirror of
				https://github.com/containers/podman.git
				synced 2025-11-04 08:56:05 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			940 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			940 B
		
	
	
	
		
			Go
		
	
	
	
	
	
//go:build linux
 | 
						|
 | 
						|
package criu
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
 | 
						|
	"github.com/checkpoint-restore/go-criu/v7"
 | 
						|
	"github.com/checkpoint-restore/go-criu/v7/rpc"
 | 
						|
 | 
						|
	"google.golang.org/protobuf/proto"
 | 
						|
)
 | 
						|
 | 
						|
// CheckForCriu uses CRIU's go bindings to check if the CRIU
 | 
						|
// binary exists and if it at least the version Podman needs.
 | 
						|
func CheckForCriu(version int) error {
 | 
						|
	c := criu.MakeCriu()
 | 
						|
	criuVersion, err := c.GetCriuVersion()
 | 
						|
	if err != nil {
 | 
						|
		return fmt.Errorf("failed to check for criu version: %w", err)
 | 
						|
	}
 | 
						|
 | 
						|
	if criuVersion >= version {
 | 
						|
		return nil
 | 
						|
	}
 | 
						|
	return fmt.Errorf("checkpoint/restore requires at least CRIU %d, current version is %d", version, criuVersion)
 | 
						|
}
 | 
						|
 | 
						|
func MemTrack() bool {
 | 
						|
	features, err := criu.MakeCriu().FeatureCheck(
 | 
						|
		&rpc.CriuFeatures{
 | 
						|
			MemTrack: proto.Bool(true),
 | 
						|
		},
 | 
						|
	)
 | 
						|
	if err != nil {
 | 
						|
		return false
 | 
						|
	}
 | 
						|
 | 
						|
	return features.GetMemTrack()
 | 
						|
}
 | 
						|
 | 
						|
func GetCriuVersion() (int, error) {
 | 
						|
	c := criu.MakeCriu()
 | 
						|
	return c.GetCriuVersion()
 | 
						|
}
 |