Skip to content

Commit

Permalink
Display buildkit and runc version in nerdctl
Browse files Browse the repository at this point in the history
Fixes#1082

Signed-off-by: Manu Gupta <manugupt1@gmail.com>
  • Loading branch information
manugupt1 committed Jul 12, 2022
1 parent a8ab5cd commit 61ea7f7
Showing 1 changed file with 63 additions and 1 deletion.
64 changes: 63 additions & 1 deletion pkg/infoutil/infoutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"context"
"fmt"
"os"
"os/exec"
"runtime"
"strings"
"time"
Expand All @@ -28,10 +29,12 @@ import (
"github.com/containerd/containerd"
ptypes "github.com/containerd/containerd/protobuf/types"
"github.com/containerd/containerd/services/introspection"
"github.com/containerd/nerdctl/pkg/buildkitutil"
"github.com/containerd/nerdctl/pkg/inspecttypes/dockercompat"
"github.com/containerd/nerdctl/pkg/inspecttypes/native"
"github.com/containerd/nerdctl/pkg/logging"
"github.com/containerd/nerdctl/pkg/version"
"github.com/sirupsen/logrus"
)

func NativeDaemonInfo(ctx context.Context, client *containerd.Client) (*native.DaemonInfo, error) {
Expand Down Expand Up @@ -133,8 +136,9 @@ func ServerVersion(ctx context.Context, client *containerd.Client) (*dockercompa
Version: daemonVersion.Version,
Details: map[string]string{"GitCommit": daemonVersion.Revision},
},
buildctlVersion(),
runcVersion(),
},
// TODO: add runc version
}
return v, nil
}
Expand All @@ -151,6 +155,64 @@ func ServerSemVer(ctx context.Context, client *containerd.Client) (*semver.Versi
return sv, nil
}

func buildctlVersion() dockercompat.ComponentVersion {
buildctlBinary, err := buildkitutil.BuildctlBinary()
if err != nil {
logrus.Warnf("unable to determine buildkit version: %s", err.Error())
return dockercompat.ComponentVersion{Name: "buildkit"}
}

stdout, err := exec.Command(buildctlBinary, "--version").Output()
if err != nil {
logrus.Warnf("unable to determine buildkit version: %s", err.Error())
return dockercompat.ComponentVersion{Name: "buildkit"}
}

versionStr := strings.Fields(strings.TrimSpace(string(stdout)))
if len(versionStr) != 4 {
logrus.Errorf("unable to determine buildkit version got: %s", versionStr)
return dockercompat.ComponentVersion{Name: "buildkit"}
}

return dockercompat.ComponentVersion{
Name: "buildctl",
Version: versionStr[2],
Details: map[string]string{"GitCommit": versionStr[3]},
}
}

func runcVersion() dockercompat.ComponentVersion {
stdout, err := exec.Command("runc", "--version").Output()
if err != nil {
logrus.Warnf("unable to determine runc version: %s", err.Error())
return dockercompat.ComponentVersion{Name: "runc"}
}

var versionList = strings.Split(strings.TrimSpace(string(stdout)), "\n")
firstLine := strings.Fields(versionList[0])
if len(firstLine) != 3 {
logrus.Errorf("unable to determine runc version, got: %s", firstLine)
return dockercompat.ComponentVersion{Name: "runc"}
}
version := firstLine[2]

details := map[string]string{}
for _, detailsLine := range versionList[1:] {
detail := strings.Split(detailsLine, ": ")
if len(detail) != 2 {
logrus.Warnf("unable to determine one of runc details, got: %s, %d", detail, len(detail))
continue
}
details[detail[0]] = detail[1]
}

return dockercompat.ComponentVersion{
Name: "runc",
Version: version,
Details: details,
}
}

//BlockIOWeight return whether Block IO weight is supported or not
func BlockIOWeight(cgroupManager string) bool {
var info *dockercompat.Info
Expand Down

0 comments on commit 61ea7f7

Please sign in to comment.