github.com/opencontainers/runc@v1.2.0-rc.1.0.20240520010911-492dc558cdd6/features.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 7 "github.com/opencontainers/runc/libcontainer/capabilities" 8 "github.com/opencontainers/runc/libcontainer/configs" 9 "github.com/opencontainers/runc/libcontainer/seccomp" 10 "github.com/opencontainers/runc/libcontainer/specconv" 11 runcfeatures "github.com/opencontainers/runc/types/features" 12 "github.com/opencontainers/runtime-spec/specs-go" 13 "github.com/opencontainers/runtime-spec/specs-go/features" 14 "github.com/urfave/cli" 15 ) 16 17 var featuresCommand = cli.Command{ 18 Name: "features", 19 Usage: "show the enabled features", 20 ArgsUsage: "", 21 Description: `Show the enabled features. 22 The result is parsable as a JSON. 23 See https://github.com/opencontainers/runtime-spec/blob/main/features.md for the type definition. 24 `, 25 Action: func(context *cli.Context) error { 26 if err := checkArgs(context, 0, exactArgs); err != nil { 27 return err 28 } 29 30 tru := true 31 32 feat := features.Features{ 33 OCIVersionMin: "1.0.0", 34 OCIVersionMax: specs.Version, 35 Annotations: map[string]string{ 36 runcfeatures.AnnotationRuncVersion: version, 37 runcfeatures.AnnotationRuncCommit: gitCommit, 38 runcfeatures.AnnotationRuncCheckpointEnabled: "true", 39 }, 40 Hooks: configs.KnownHookNames(), 41 MountOptions: specconv.KnownMountOptions(), 42 Linux: &features.Linux{ 43 Namespaces: specconv.KnownNamespaces(), 44 Capabilities: capabilities.KnownCapabilities(), 45 Cgroup: &features.Cgroup{ 46 V1: &tru, 47 V2: &tru, 48 Systemd: &tru, 49 SystemdUser: &tru, 50 Rdma: &tru, 51 }, 52 Apparmor: &features.Apparmor{ 53 Enabled: &tru, 54 }, 55 Selinux: &features.Selinux{ 56 Enabled: &tru, 57 }, 58 IntelRdt: &features.IntelRdt{ 59 Enabled: &tru, 60 }, 61 MountExtensions: &features.MountExtensions{ 62 IDMap: &features.IDMap{ 63 Enabled: &tru, 64 }, 65 }, 66 }, 67 PotentiallyUnsafeConfigAnnotations: []string{ 68 "bundle", 69 "org.systemd.property.", // prefix form 70 "org.criu.config", 71 "org.opencontainers.runc.exec.isolated-cpu-affinity-transition", 72 }, 73 } 74 75 if seccomp.Enabled { 76 feat.Linux.Seccomp = &features.Seccomp{ 77 Enabled: &tru, 78 Actions: seccomp.KnownActions(), 79 Operators: seccomp.KnownOperators(), 80 Archs: seccomp.KnownArchs(), 81 KnownFlags: seccomp.KnownFlags(), 82 SupportedFlags: seccomp.SupportedFlags(), 83 } 84 major, minor, patch := seccomp.Version() 85 feat.Annotations[runcfeatures.AnnotationLibseccompVersion] = fmt.Sprintf("%d.%d.%d", major, minor, patch) 86 } 87 88 enc := json.NewEncoder(context.App.Writer) 89 enc.SetIndent("", " ") 90 return enc.Encode(feat) 91 }, 92 }