From d66dfc1ac11d74fb988bc04138ee5dfb2b79e2de Mon Sep 17 00:00:00 2001 From: Ciprian Hacman Date: Wed, 27 Nov 2019 17:12:38 +0200 Subject: [PATCH] Automatically install dependencies with local packages --- nodeup/pkg/model/docker.go | 8 ++++---- upup/pkg/fi/nodeup/nodetasks/package.go | 24 +++++++++++++++++++++--- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/nodeup/pkg/model/docker.go b/nodeup/pkg/model/docker.go index 044d42f4e7..cac777daa0 100644 --- a/nodeup/pkg/model/docker.go +++ b/nodeup/pkg/model/docker.go @@ -878,7 +878,7 @@ var dockerVersions = []dockerVersion{ Hash: "7de4211fa0dfd240d8827b93763e1eb5f0d56411", }, }, - Dependencies: []string{"libtool-ltdl", "libseccomp", "libcgroup", "policycoreutils-python"}, + Dependencies: []string{"libtool-ltdl"}, }, // 18.09.9 - CentOS / Rhel8 @@ -902,7 +902,7 @@ var dockerVersions = []dockerVersion{ Hash: "f6447e84479df3a58ce04a3da87ccc384663493b", }, }, - Dependencies: []string{"container-selinux", "libtool-ltdl", "libseccomp", "libcgroup", "policycoreutils-python-utils", "python3-policycoreutils"}, + Dependencies: []string{"libtool-ltdl"}, }, // 19.03.4 - k8s 1.17 - https://github.com/kubernetes/kubernetes/pull/84476 @@ -1005,7 +1005,7 @@ var dockerVersions = []dockerVersion{ Hash: "7de4211fa0dfd240d8827b93763e1eb5f0d56411", }, }, - Dependencies: []string{"libtool-ltdl", "libseccomp", "libcgroup", "policycoreutils-python"}, + Dependencies: []string{"libtool-ltdl"}, }, // 19.03.4 - CentOS / Rhel8 @@ -1029,7 +1029,7 @@ var dockerVersions = []dockerVersion{ Hash: "f6447e84479df3a58ce04a3da87ccc384663493b", }, }, - Dependencies: []string{"container-selinux", "libtool-ltdl", "libseccomp", "libcgroup", "policycoreutils-python-utils", "python3-policycoreutils"}, + Dependencies: []string{"libtool-ltdl"}, }, // TIP: When adding the next version, copy the previous diff --git a/upup/pkg/fi/nodeup/nodetasks/package.go b/upup/pkg/fi/nodeup/nodetasks/package.go index 82c210de29..5f09cd976b 100644 --- a/upup/pkg/fi/nodeup/nodetasks/package.go +++ b/upup/pkg/fi/nodeup/nodetasks/package.go @@ -273,10 +273,18 @@ func (_ *Package) RenderLocal(t *local.LocalTarget, a, e, changes *Package) erro return fmt.Errorf("error creating directories %q: %v", localPackageDir, err) } + // Append file extension for local files + var ext string + if t.HasTag(tags.TagOSFamilyDebian) { + ext = ".deb" + } else { + ext = ".rpm" + } + // Download all the debs/rpms. localPkgs := make([]string, 1+len(e.Deps)) for i, pkg := range append([]*Package{e}, e.Deps...) { - local := path.Join(localPackageDir, pkg.Name) + local := path.Join(localPackageDir, pkg.Name+ext) localPkgs[i] = local var hash *hashing.Hash if fi.StringValue(pkg.Hash) != "" { @@ -293,16 +301,26 @@ func (_ *Package) RenderLocal(t *local.LocalTarget, a, e, changes *Package) erro } var args []string + env := os.Environ() if t.HasTag(tags.TagOSFamilyDebian) { - args = []string{"dpkg", "-i"} + // Only Debian releases newer than Jessie can install .deb via apt-get + // TODO: Refactor this function when Jessie support is dropped (duplicated code) + if t.HasTag("_jessie") { + args = []string{"dpkg", "-i"} + } else { + args = []string{"apt-get", "install", "--yes"} + env = append(env, "DEBIAN_FRONTEND=noninteractive") + } } else if t.HasTag(tags.TagOSFamilyRHEL) { - args = []string{"/usr/bin/rpm", "-i"} + args = []string{"/usr/bin/yum", "install", "-y"} } else { return fmt.Errorf("unsupported package system") } args = append(args, localPkgs...) + klog.Infof("running command %s", args) cmd := exec.Command(args[0], args[1:]...) + cmd.Env = env output, err := cmd.CombinedOutput() if err != nil { return fmt.Errorf("error installing package %q: %v: %s", e.Name, err, string(output))