From d100f9f4914d54fee91c63ed0c8956e50f85fdbd Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Tue, 24 Sep 2019 08:30:54 -0400 Subject: [PATCH 01/11] debs: Remove usage of distro variants There is a fair amount of symlinking and reference to Debian/Ubuntu versions, which is not required (and probably hasn't been for a while). When building and publishing debs, we publish them to a single apt repo (https://packages.cloud.google.com/apt/dists/kubernetes-xenial) which makes no distinction between the packages within. This commit moves the deb package definitions to `packages/latest` and removes all symlinks. The deb build program is also slightly refactored here to reference the true distribution types (stable, testing, unstable). Future commits will divide the package definitions so we can modify the structure and dependencies of packages for specific versions of Kubernetes without affecting previous versions. Signed-off-by: Stephen Augustus --- .../bionic/kubeadm/debian/kubeadm.install | 2 - build/debs/build.go | 170 ++++++++---------- build/debs/jessie | 1 - .../latest}/cri-tools/debian/changelog | 2 +- .../latest}/cri-tools/debian/compat | 0 .../latest}/cri-tools/debian/control | 0 .../latest}/cri-tools/debian/copyright | 0 .../cri-tools/debian/cri-tools.install | 0 .../latest}/cri-tools/debian/rules | 0 .../post-1.10/10-kubeadm.conf | 0 .../post-1.8/10-kubeadm.conf | 0 .../kubelet.service.d/pre-1.8/10-kubeadm.conf | 0 .../post-1.10/10-kubeadm.conf | 0 .../post-1.8/10-kubeadm.conf | 0 .../kubelet.service.d/pre-1.8/10-kubeadm.conf | 0 .../post-1.10/10-kubeadm.conf | 0 .../post-1.8/10-kubeadm.conf | 0 .../kubelet.service.d/pre-1.8/10-kubeadm.conf | 0 .../latest}/kubeadm/debian/changelog | 2 +- .../latest}/kubeadm/debian/compat | 0 .../latest}/kubeadm/debian/control | 0 .../latest}/kubeadm/debian/copyright | 0 .../latest/kubeadm/debian/kubeadm.install | 2 + .../latest}/kubeadm/debian/postinst | 0 .../latest}/kubeadm/debian/rules | 0 .../latest}/kubeadm/debian/source/format | 0 .../latest/kubectl}/debian/changelog | 2 +- .../latest}/kubectl/debian/compat | 0 .../latest}/kubectl/debian/control | 0 .../latest}/kubectl/debian/copyright | 0 .../latest}/kubectl/debian/kubectl.install | 0 .../latest}/kubectl/debian/postinst | 0 .../latest}/kubectl/debian/rules | 0 .../latest}/kubectl/debian/source/format | 0 .../latest/kubelet}/debian/changelog | 2 +- .../latest}/kubelet/debian/compat | 0 .../latest}/kubelet/debian/control | 0 .../latest}/kubelet/debian/copyright | 0 .../latest}/kubelet/debian/kubelet.install | 0 .../latest}/kubelet/debian/postinst | 0 .../latest}/kubelet/debian/rules | 0 .../latest}/kubelet/debian/source/format | 0 .../lib/systemd/system/kubelet.service | 0 .../latest}/kubernetes-cni/.gitignore | 0 .../latest}/kubernetes-cni/debian/changelog | 2 +- .../latest}/kubernetes-cni/debian/compat | 0 .../latest}/kubernetes-cni/debian/control | 0 .../latest}/kubernetes-cni/debian/copyright | 0 .../debian/kubernetes-cni.install | 0 .../latest}/kubernetes-cni/debian/rules | 0 build/debs/sid | 1 - build/debs/stretch | 1 - build/debs/trusty | 1 - build/debs/xenial | 1 - 54 files changed, 86 insertions(+), 103 deletions(-) delete mode 100644 build/debs/bionic/kubeadm/debian/kubeadm.install delete mode 120000 build/debs/jessie rename build/debs/{bionic => packages/latest}/cri-tools/debian/changelog (61%) rename build/debs/{bionic => packages/latest}/cri-tools/debian/compat (100%) rename build/debs/{bionic => packages/latest}/cri-tools/debian/control (100%) rename build/debs/{bionic => packages/latest}/cri-tools/debian/copyright (100%) rename build/debs/{bionic => packages/latest}/cri-tools/debian/cri-tools.install (100%) rename build/debs/{bionic => packages/latest}/cri-tools/debian/rules (100%) rename build/debs/{bionic => packages/latest}/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf (100%) rename build/debs/{bionic => packages/latest}/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf (100%) rename build/debs/{bionic => packages/latest}/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf (100%) rename build/debs/{bionic => packages/latest}/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf (100%) rename build/debs/{bionic => packages/latest}/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf (100%) rename build/debs/{bionic => packages/latest}/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf (100%) rename build/debs/{bionic => packages/latest}/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf (100%) rename build/debs/{bionic => packages/latest}/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf (100%) rename build/debs/{bionic => packages/latest}/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf (100%) rename build/debs/{bionic => packages/latest}/kubeadm/debian/changelog (61%) rename build/debs/{bionic => packages/latest}/kubeadm/debian/compat (100%) rename build/debs/{bionic => packages/latest}/kubeadm/debian/control (100%) rename build/debs/{bionic => packages/latest}/kubeadm/debian/copyright (100%) create mode 100644 build/debs/packages/latest/kubeadm/debian/kubeadm.install rename build/debs/{bionic => packages/latest}/kubeadm/debian/postinst (100%) rename build/debs/{bionic => packages/latest}/kubeadm/debian/rules (100%) rename build/debs/{bionic => packages/latest}/kubeadm/debian/source/format (100%) rename build/debs/{bionic/kubelet => packages/latest/kubectl}/debian/changelog (61%) rename build/debs/{bionic => packages/latest}/kubectl/debian/compat (100%) rename build/debs/{bionic => packages/latest}/kubectl/debian/control (100%) rename build/debs/{bionic => packages/latest}/kubectl/debian/copyright (100%) rename build/debs/{bionic => packages/latest}/kubectl/debian/kubectl.install (100%) rename build/debs/{bionic => packages/latest}/kubectl/debian/postinst (100%) rename build/debs/{bionic => packages/latest}/kubectl/debian/rules (100%) rename build/debs/{bionic => packages/latest}/kubectl/debian/source/format (100%) rename build/debs/{bionic/kubectl => packages/latest/kubelet}/debian/changelog (61%) rename build/debs/{bionic => packages/latest}/kubelet/debian/compat (100%) rename build/debs/{bionic => packages/latest}/kubelet/debian/control (100%) rename build/debs/{bionic => packages/latest}/kubelet/debian/copyright (100%) rename build/debs/{bionic => packages/latest}/kubelet/debian/kubelet.install (100%) rename build/debs/{bionic => packages/latest}/kubelet/debian/postinst (100%) rename build/debs/{bionic => packages/latest}/kubelet/debian/rules (100%) rename build/debs/{bionic => packages/latest}/kubelet/debian/source/format (100%) rename build/debs/{bionic => packages/latest}/kubelet/lib/systemd/system/kubelet.service (100%) rename build/debs/{bionic => packages/latest}/kubernetes-cni/.gitignore (100%) rename build/debs/{bionic => packages/latest}/kubernetes-cni/debian/changelog (59%) rename build/debs/{bionic => packages/latest}/kubernetes-cni/debian/compat (100%) rename build/debs/{bionic => packages/latest}/kubernetes-cni/debian/control (100%) rename build/debs/{bionic => packages/latest}/kubernetes-cni/debian/copyright (100%) rename build/debs/{bionic => packages/latest}/kubernetes-cni/debian/kubernetes-cni.install (100%) rename build/debs/{bionic => packages/latest}/kubernetes-cni/debian/rules (100%) delete mode 120000 build/debs/sid delete mode 120000 build/debs/stretch delete mode 120000 build/debs/trusty delete mode 120000 build/debs/xenial diff --git a/build/debs/bionic/kubeadm/debian/kubeadm.install b/build/debs/bionic/kubeadm/debian/kubeadm.install deleted file mode 100644 index 3356ff6ef6e..00000000000 --- a/build/debs/bionic/kubeadm/debian/kubeadm.install +++ /dev/null @@ -1,2 +0,0 @@ -usr/bin/kubeadm usr/bin/ -channel/{{ .Channel }}/etc/systemd/system/kubelet.service.d/{{ .KubeadmKubeletConfigFile }} etc/systemd/system/kubelet.service.d/ diff --git a/build/debs/build.go b/build/debs/build.go index 58b51c88aff..7b955546747 100644 --- a/build/debs/build.go +++ b/build/debs/build.go @@ -16,20 +16,24 @@ import ( "github.com/blang/semver" ) -type ChannelType string +type DistributionType string const ( - ChannelStable ChannelType = "stable" - ChannelUnstable ChannelType = "unstable" - ChannelNightly ChannelType = "nightly" + DistributionStable DistributionType = "stable" + DistributionUnstable DistributionType = "unstable" + DistributionTesting DistributionType = "testing" cniVersion = "0.7.5" criToolsVersion = "1.13.0" pre180kubeadmconf = "pre-1.8/10-kubeadm.conf" pre1110kubeadmconf = "post-1.8/10-kubeadm.conf" latestkubeadmconf = "post-1.10/10-kubeadm.conf" + + packagesRootDir = "packages" ) +var latestPackagesDir = fmt.Sprintf("%s/%s", packagesRootDir, "latest") + type work struct { src, dst string t *template.Template @@ -38,13 +42,12 @@ type work struct { type build struct { Package string - Distros []string Versions []version } type version struct { Version, Revision, DownloadLinkBase string - Channel ChannelType + Distribution DistributionType GetVersion func() (string, error) GetDownloadLinkBase func(v version) (string, error) KubeadmKubeletConfigFile string @@ -53,7 +56,10 @@ type version struct { type cfg struct { version - DistroName, Arch, DebArch, Package, Dependencies string + Arch string + DebArch string + Package string + Dependencies string } type stringList []string @@ -67,12 +73,7 @@ func (ss *stringList) Set(v string) error { } var ( - architectures = stringList{"amd64", "arm", "arm64", "ppc64le", "s390x"} - // distros describes the Debian and Ubuntu versions that binaries will be built for. - // Each distro build definition is currently symlinked to the most recent ubuntu build definition in the repo. - // Build definitions should be kept up to date across release cycles, removing Debian/Ubuntu versions - // that are no longer supported from the perspective of the OS distribution maintainers. - distros = stringList{"bionic", "xenial", "trusty", "stretch", "jessie", "sid"} + architectures = stringList{"amd64", "arm", "arm64", "ppc64le", "s390x"} kubeVersion = "" revision = "00" releaseDownloadLinkBase = "https://dl.k8s.io" @@ -87,11 +88,10 @@ var ( ) func init() { - flag.Var(&architectures, "arch", "Architectures to build for.") - flag.Var(&distros, "distros", "Distros to build for.") - flag.StringVar(&kubeVersion, "kube-version", "", "Distros to build for.") - flag.StringVar(&revision, "revision", "00", "Deb package revision.") - flag.StringVar(&releaseDownloadLinkBase, "release-download-link-base", "https://dl.k8s.io", "Release download link base.") + flag.Var(&architectures, "arch", "architectures to build for") + flag.StringVar(&kubeVersion, "kube-version", "", "Kubernetes versions to build") + flag.StringVar(&revision, "revision", "00", "deb package revision.") + flag.StringVar(&releaseDownloadLinkBase, "release-download-link-base", "https://dl.k8s.io", "release download link base.") } func runCommand(pwd string, command string, cmdArgs ...string) error { @@ -111,7 +111,8 @@ func (c cfg) run() error { log.Printf("!!!!!!!!! doing: %#v", c) var w []work - srcdir := filepath.Join(c.DistroName, c.Package) + // TODO: Get package directory for any version once package definitions are broken out + srcdir := filepath.Join(latestPackagesDir, c.Package) dstdir, err := ioutil.TempDir(os.TempDir(), "debs") if err != nil { return err @@ -185,7 +186,7 @@ func (c cfg) run() error { return err } - dstParts := []string{"bin", string(c.Channel), c.DistroName} + dstParts := []string{"bin", string(c.Distribution)} dstPath := filepath.Join(dstParts...) os.MkdirAll(dstPath, 0777) @@ -199,33 +200,31 @@ func (c cfg) run() error { return nil } -func walkBuilds(builds []build, f func(pkg, distro, arch string, v version) error) error { +func walkBuilds(builds []build, f func(pkg, arch string, v version) error) error { for _, a := range architectures { for _, b := range builds { - for _, d := range b.Distros { - for _, v := range b.Versions { - // Populate the version if it doesn't exist - if len(v.Version) == 0 && v.GetVersion != nil { - var err error - v.Version, err = v.GetVersion() - if err != nil { - return err - } - } - - // Populate the version if it doesn't exist - if len(v.DownloadLinkBase) == 0 && v.GetDownloadLinkBase != nil { - var err error - v.DownloadLinkBase, err = v.GetDownloadLinkBase(v) - if err != nil { - return err - } + for _, v := range b.Versions { + // Populate the version if it doesn't exist + if len(v.Version) == 0 && v.GetVersion != nil { + var err error + v.Version, err = v.GetVersion() + if err != nil { + return err } + } - if err := f(b.Package, d, a, v); err != nil { + // Populate the version if it doesn't exist + if len(v.DownloadLinkBase) == 0 && v.GetDownloadLinkBase != nil { + var err error + v.DownloadLinkBase, err = v.GetDownloadLinkBase(v) + if err != nil { return err } } + + if err := f(b.Package, a, v); err != nil { + return err + } } } } @@ -393,115 +392,110 @@ func main() { builds := []build{ { Package: "kubectl", - Distros: distros, Versions: []version{ { GetVersion: getStableKubeVersion, Revision: revision, - Channel: ChannelStable, + Distribution: DistributionStable, GetDownloadLinkBase: getReleaseDownloadLinkBase, }, { GetVersion: getLatestKubeVersion, Revision: revision, - Channel: ChannelUnstable, + Distribution: DistributionUnstable, GetDownloadLinkBase: getReleaseDownloadLinkBase, }, { GetVersion: getLatestCIVersion, Revision: revision, - Channel: ChannelNightly, + Distribution: DistributionTesting, GetDownloadLinkBase: getCIBuildsDownloadLinkBase, }, }, }, { Package: "kubelet", - Distros: distros, Versions: []version{ { GetVersion: getStableKubeVersion, Revision: revision, - Channel: ChannelStable, + Distribution: DistributionStable, GetDownloadLinkBase: getReleaseDownloadLinkBase, }, { GetVersion: getLatestKubeVersion, Revision: revision, - Channel: ChannelUnstable, + Distribution: DistributionUnstable, GetDownloadLinkBase: getReleaseDownloadLinkBase, }, { GetVersion: getLatestCIVersion, Revision: revision, - Channel: ChannelNightly, + Distribution: DistributionTesting, GetDownloadLinkBase: getCIBuildsDownloadLinkBase, }, }, }, { Package: "kubernetes-cni", - Distros: distros, Versions: []version{ { - Version: cniVersion, - Revision: revision, - Channel: ChannelStable, + Version: cniVersion, + Revision: revision, + Distribution: DistributionStable, }, { - Version: cniVersion, - Revision: revision, - Channel: ChannelUnstable, + Version: cniVersion, + Revision: revision, + Distribution: DistributionUnstable, }, { - Version: cniVersion, - Revision: revision, - Channel: ChannelNightly, + Version: cniVersion, + Revision: revision, + Distribution: DistributionTesting, }, }, }, { Package: "kubeadm", - Distros: distros, Versions: []version{ { GetVersion: getStableKubeVersion, Revision: revision, - Channel: ChannelStable, + Distribution: DistributionStable, GetDownloadLinkBase: getReleaseDownloadLinkBase, }, { GetVersion: getLatestKubeVersion, Revision: revision, - Channel: ChannelUnstable, + Distribution: DistributionUnstable, GetDownloadLinkBase: getReleaseDownloadLinkBase, }, { GetVersion: getLatestCIVersion, Revision: revision, - Channel: ChannelNightly, + Distribution: DistributionTesting, GetDownloadLinkBase: getCIBuildsDownloadLinkBase, }, }, }, { Package: "cri-tools", - Distros: distros, Versions: []version{ { - GetVersion: getCRIToolsLatestVersion, - Revision: revision, - Channel: ChannelStable, + GetVersion: getCRIToolsLatestVersion, + Revision: revision, + Distribution: DistributionStable, }, { - GetVersion: getCRIToolsLatestVersion, - Revision: revision, - Channel: ChannelUnstable, + GetVersion: getCRIToolsLatestVersion, + Revision: revision, + Distribution: DistributionUnstable, }, { - GetVersion: getCRIToolsLatestVersion, - Revision: revision, - Channel: ChannelNightly, + GetVersion: getCRIToolsLatestVersion, + Revision: revision, + Distribution: DistributionTesting, }, }, }, @@ -514,71 +508,65 @@ func main() { builds = []build{ { Package: "kubectl", - Distros: distros, Versions: []version{ { GetVersion: getSpecifiedVersion, Revision: revision, - Channel: ChannelStable, + Distribution: DistributionStable, GetDownloadLinkBase: getReleaseDownloadLinkBase, }, }, }, { Package: "kubelet", - Distros: distros, Versions: []version{ { GetVersion: getSpecifiedVersion, Revision: revision, - Channel: ChannelStable, + Distribution: DistributionStable, GetDownloadLinkBase: getReleaseDownloadLinkBase, }, }, }, { Package: "kubernetes-cni", - Distros: distros, Versions: []version{ { - Version: cniVersion, - Revision: revision, - Channel: ChannelStable, + Version: cniVersion, + Revision: revision, + Distribution: DistributionStable, }, }, }, { Package: "kubeadm", - Distros: distros, Versions: []version{ { GetVersion: getSpecifiedVersion, Revision: revision, - Channel: ChannelStable, + Distribution: DistributionStable, GetDownloadLinkBase: getReleaseDownloadLinkBase, }, }, }, { Package: "cri-tools", - Distros: distros, Versions: []version{ { - GetVersion: getCRIToolsLatestVersion, - Revision: revision, - Channel: ChannelStable, + GetVersion: getCRIToolsLatestVersion, + Revision: revision, + Distribution: DistributionStable, }, }, }, } } - if err := walkBuilds(builds, func(pkg, distro, arch string, v version) error { + if err := walkBuilds(builds, func(pkg, arch string, v version) error { c := cfg{ - Package: pkg, - version: v, - DistroName: distro, - Arch: arch, + Package: pkg, + version: v, + Arch: arch, } if c.Arch == "arm" { c.DebArch = "armhf" diff --git a/build/debs/jessie b/build/debs/jessie deleted file mode 120000 index 01285abbd6f..00000000000 --- a/build/debs/jessie +++ /dev/null @@ -1 +0,0 @@ -bionic \ No newline at end of file diff --git a/build/debs/bionic/cri-tools/debian/changelog b/build/debs/packages/latest/cri-tools/debian/changelog similarity index 61% rename from build/debs/bionic/cri-tools/debian/changelog rename to build/debs/packages/latest/cri-tools/debian/changelog index 63f31f0add0..a581fede55c 100644 --- a/build/debs/bionic/cri-tools/debian/changelog +++ b/build/debs/packages/latest/cri-tools/debian/changelog @@ -1,4 +1,4 @@ -cri-tools ({{ .Version }}-{{ .Revision }}) {{ .DistroName }} {{ .Arch }}; urgency=optional +cri-tools ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium * https://github.com/kubernetes-sigs/cri-tools/blob/master/CHANGELOG.md diff --git a/build/debs/bionic/cri-tools/debian/compat b/build/debs/packages/latest/cri-tools/debian/compat similarity index 100% rename from build/debs/bionic/cri-tools/debian/compat rename to build/debs/packages/latest/cri-tools/debian/compat diff --git a/build/debs/bionic/cri-tools/debian/control b/build/debs/packages/latest/cri-tools/debian/control similarity index 100% rename from build/debs/bionic/cri-tools/debian/control rename to build/debs/packages/latest/cri-tools/debian/control diff --git a/build/debs/bionic/cri-tools/debian/copyright b/build/debs/packages/latest/cri-tools/debian/copyright similarity index 100% rename from build/debs/bionic/cri-tools/debian/copyright rename to build/debs/packages/latest/cri-tools/debian/copyright diff --git a/build/debs/bionic/cri-tools/debian/cri-tools.install b/build/debs/packages/latest/cri-tools/debian/cri-tools.install similarity index 100% rename from build/debs/bionic/cri-tools/debian/cri-tools.install rename to build/debs/packages/latest/cri-tools/debian/cri-tools.install diff --git a/build/debs/bionic/cri-tools/debian/rules b/build/debs/packages/latest/cri-tools/debian/rules similarity index 100% rename from build/debs/bionic/cri-tools/debian/rules rename to build/debs/packages/latest/cri-tools/debian/rules diff --git a/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf similarity index 100% rename from build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf rename to build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf diff --git a/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf similarity index 100% rename from build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf rename to build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf diff --git a/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf similarity index 100% rename from build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf rename to build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf diff --git a/build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf similarity index 100% rename from build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf rename to build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf diff --git a/build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf similarity index 100% rename from build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf rename to build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf diff --git a/build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf similarity index 100% rename from build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf rename to build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf diff --git a/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf similarity index 100% rename from build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf rename to build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf diff --git a/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf similarity index 100% rename from build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf rename to build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf diff --git a/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf similarity index 100% rename from build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf rename to build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf diff --git a/build/debs/bionic/kubeadm/debian/changelog b/build/debs/packages/latest/kubeadm/debian/changelog similarity index 61% rename from build/debs/bionic/kubeadm/debian/changelog rename to build/debs/packages/latest/kubeadm/debian/changelog index 512a293ead1..d8a1944deb2 100644 --- a/build/debs/bionic/kubeadm/debian/changelog +++ b/build/debs/packages/latest/kubeadm/debian/changelog @@ -1,4 +1,4 @@ -kubeadm ({{ .Version }}-{{ .Revision }}) {{ .DistroName }} {{ .Arch }}; urgency=optional +kubeadm ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md diff --git a/build/debs/bionic/kubeadm/debian/compat b/build/debs/packages/latest/kubeadm/debian/compat similarity index 100% rename from build/debs/bionic/kubeadm/debian/compat rename to build/debs/packages/latest/kubeadm/debian/compat diff --git a/build/debs/bionic/kubeadm/debian/control b/build/debs/packages/latest/kubeadm/debian/control similarity index 100% rename from build/debs/bionic/kubeadm/debian/control rename to build/debs/packages/latest/kubeadm/debian/control diff --git a/build/debs/bionic/kubeadm/debian/copyright b/build/debs/packages/latest/kubeadm/debian/copyright similarity index 100% rename from build/debs/bionic/kubeadm/debian/copyright rename to build/debs/packages/latest/kubeadm/debian/copyright diff --git a/build/debs/packages/latest/kubeadm/debian/kubeadm.install b/build/debs/packages/latest/kubeadm/debian/kubeadm.install new file mode 100644 index 00000000000..c96124b107b --- /dev/null +++ b/build/debs/packages/latest/kubeadm/debian/kubeadm.install @@ -0,0 +1,2 @@ +usr/bin/kubeadm usr/bin/ +channel/{{ .Distribution }}/etc/systemd/system/kubelet.service.d/{{ .KubeadmKubeletConfigFile }} etc/systemd/system/kubelet.service.d/ diff --git a/build/debs/bionic/kubeadm/debian/postinst b/build/debs/packages/latest/kubeadm/debian/postinst similarity index 100% rename from build/debs/bionic/kubeadm/debian/postinst rename to build/debs/packages/latest/kubeadm/debian/postinst diff --git a/build/debs/bionic/kubeadm/debian/rules b/build/debs/packages/latest/kubeadm/debian/rules similarity index 100% rename from build/debs/bionic/kubeadm/debian/rules rename to build/debs/packages/latest/kubeadm/debian/rules diff --git a/build/debs/bionic/kubeadm/debian/source/format b/build/debs/packages/latest/kubeadm/debian/source/format similarity index 100% rename from build/debs/bionic/kubeadm/debian/source/format rename to build/debs/packages/latest/kubeadm/debian/source/format diff --git a/build/debs/bionic/kubelet/debian/changelog b/build/debs/packages/latest/kubectl/debian/changelog similarity index 61% rename from build/debs/bionic/kubelet/debian/changelog rename to build/debs/packages/latest/kubectl/debian/changelog index 9fb2813f441..e8d45907a17 100644 --- a/build/debs/bionic/kubelet/debian/changelog +++ b/build/debs/packages/latest/kubectl/debian/changelog @@ -1,4 +1,4 @@ -kubelet ({{ .Version }}-{{ .Revision }}) {{ .DistroName }} {{ .Arch }}; urgency=optional +kubectl ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md diff --git a/build/debs/bionic/kubectl/debian/compat b/build/debs/packages/latest/kubectl/debian/compat similarity index 100% rename from build/debs/bionic/kubectl/debian/compat rename to build/debs/packages/latest/kubectl/debian/compat diff --git a/build/debs/bionic/kubectl/debian/control b/build/debs/packages/latest/kubectl/debian/control similarity index 100% rename from build/debs/bionic/kubectl/debian/control rename to build/debs/packages/latest/kubectl/debian/control diff --git a/build/debs/bionic/kubectl/debian/copyright b/build/debs/packages/latest/kubectl/debian/copyright similarity index 100% rename from build/debs/bionic/kubectl/debian/copyright rename to build/debs/packages/latest/kubectl/debian/copyright diff --git a/build/debs/bionic/kubectl/debian/kubectl.install b/build/debs/packages/latest/kubectl/debian/kubectl.install similarity index 100% rename from build/debs/bionic/kubectl/debian/kubectl.install rename to build/debs/packages/latest/kubectl/debian/kubectl.install diff --git a/build/debs/bionic/kubectl/debian/postinst b/build/debs/packages/latest/kubectl/debian/postinst similarity index 100% rename from build/debs/bionic/kubectl/debian/postinst rename to build/debs/packages/latest/kubectl/debian/postinst diff --git a/build/debs/bionic/kubectl/debian/rules b/build/debs/packages/latest/kubectl/debian/rules similarity index 100% rename from build/debs/bionic/kubectl/debian/rules rename to build/debs/packages/latest/kubectl/debian/rules diff --git a/build/debs/bionic/kubectl/debian/source/format b/build/debs/packages/latest/kubectl/debian/source/format similarity index 100% rename from build/debs/bionic/kubectl/debian/source/format rename to build/debs/packages/latest/kubectl/debian/source/format diff --git a/build/debs/bionic/kubectl/debian/changelog b/build/debs/packages/latest/kubelet/debian/changelog similarity index 61% rename from build/debs/bionic/kubectl/debian/changelog rename to build/debs/packages/latest/kubelet/debian/changelog index 24089c97f4a..7f2a4c558e0 100644 --- a/build/debs/bionic/kubectl/debian/changelog +++ b/build/debs/packages/latest/kubelet/debian/changelog @@ -1,4 +1,4 @@ -kubectl ({{ .Version }}-{{ .Revision }}) {{ .DistroName }} {{ .Arch }}; urgency=optional +kubelet ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md diff --git a/build/debs/bionic/kubelet/debian/compat b/build/debs/packages/latest/kubelet/debian/compat similarity index 100% rename from build/debs/bionic/kubelet/debian/compat rename to build/debs/packages/latest/kubelet/debian/compat diff --git a/build/debs/bionic/kubelet/debian/control b/build/debs/packages/latest/kubelet/debian/control similarity index 100% rename from build/debs/bionic/kubelet/debian/control rename to build/debs/packages/latest/kubelet/debian/control diff --git a/build/debs/bionic/kubelet/debian/copyright b/build/debs/packages/latest/kubelet/debian/copyright similarity index 100% rename from build/debs/bionic/kubelet/debian/copyright rename to build/debs/packages/latest/kubelet/debian/copyright diff --git a/build/debs/bionic/kubelet/debian/kubelet.install b/build/debs/packages/latest/kubelet/debian/kubelet.install similarity index 100% rename from build/debs/bionic/kubelet/debian/kubelet.install rename to build/debs/packages/latest/kubelet/debian/kubelet.install diff --git a/build/debs/bionic/kubelet/debian/postinst b/build/debs/packages/latest/kubelet/debian/postinst similarity index 100% rename from build/debs/bionic/kubelet/debian/postinst rename to build/debs/packages/latest/kubelet/debian/postinst diff --git a/build/debs/bionic/kubelet/debian/rules b/build/debs/packages/latest/kubelet/debian/rules similarity index 100% rename from build/debs/bionic/kubelet/debian/rules rename to build/debs/packages/latest/kubelet/debian/rules diff --git a/build/debs/bionic/kubelet/debian/source/format b/build/debs/packages/latest/kubelet/debian/source/format similarity index 100% rename from build/debs/bionic/kubelet/debian/source/format rename to build/debs/packages/latest/kubelet/debian/source/format diff --git a/build/debs/bionic/kubelet/lib/systemd/system/kubelet.service b/build/debs/packages/latest/kubelet/lib/systemd/system/kubelet.service similarity index 100% rename from build/debs/bionic/kubelet/lib/systemd/system/kubelet.service rename to build/debs/packages/latest/kubelet/lib/systemd/system/kubelet.service diff --git a/build/debs/bionic/kubernetes-cni/.gitignore b/build/debs/packages/latest/kubernetes-cni/.gitignore similarity index 100% rename from build/debs/bionic/kubernetes-cni/.gitignore rename to build/debs/packages/latest/kubernetes-cni/.gitignore diff --git a/build/debs/bionic/kubernetes-cni/debian/changelog b/build/debs/packages/latest/kubernetes-cni/debian/changelog similarity index 59% rename from build/debs/bionic/kubernetes-cni/debian/changelog rename to build/debs/packages/latest/kubernetes-cni/debian/changelog index 58f7eab85a7..80e12019dd0 100644 --- a/build/debs/bionic/kubernetes-cni/debian/changelog +++ b/build/debs/packages/latest/kubernetes-cni/debian/changelog @@ -1,4 +1,4 @@ -kubernetes-cni ({{ .Version }}-{{ .Revision }}) {{ .DistroName }} {{ .Arch }}; urgency=optional +kubernetes-cni ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md diff --git a/build/debs/bionic/kubernetes-cni/debian/compat b/build/debs/packages/latest/kubernetes-cni/debian/compat similarity index 100% rename from build/debs/bionic/kubernetes-cni/debian/compat rename to build/debs/packages/latest/kubernetes-cni/debian/compat diff --git a/build/debs/bionic/kubernetes-cni/debian/control b/build/debs/packages/latest/kubernetes-cni/debian/control similarity index 100% rename from build/debs/bionic/kubernetes-cni/debian/control rename to build/debs/packages/latest/kubernetes-cni/debian/control diff --git a/build/debs/bionic/kubernetes-cni/debian/copyright b/build/debs/packages/latest/kubernetes-cni/debian/copyright similarity index 100% rename from build/debs/bionic/kubernetes-cni/debian/copyright rename to build/debs/packages/latest/kubernetes-cni/debian/copyright diff --git a/build/debs/bionic/kubernetes-cni/debian/kubernetes-cni.install b/build/debs/packages/latest/kubernetes-cni/debian/kubernetes-cni.install similarity index 100% rename from build/debs/bionic/kubernetes-cni/debian/kubernetes-cni.install rename to build/debs/packages/latest/kubernetes-cni/debian/kubernetes-cni.install diff --git a/build/debs/bionic/kubernetes-cni/debian/rules b/build/debs/packages/latest/kubernetes-cni/debian/rules similarity index 100% rename from build/debs/bionic/kubernetes-cni/debian/rules rename to build/debs/packages/latest/kubernetes-cni/debian/rules diff --git a/build/debs/sid b/build/debs/sid deleted file mode 120000 index 01285abbd6f..00000000000 --- a/build/debs/sid +++ /dev/null @@ -1 +0,0 @@ -bionic \ No newline at end of file diff --git a/build/debs/stretch b/build/debs/stretch deleted file mode 120000 index 01285abbd6f..00000000000 --- a/build/debs/stretch +++ /dev/null @@ -1 +0,0 @@ -bionic \ No newline at end of file diff --git a/build/debs/trusty b/build/debs/trusty deleted file mode 120000 index 01285abbd6f..00000000000 --- a/build/debs/trusty +++ /dev/null @@ -1 +0,0 @@ -bionic \ No newline at end of file diff --git a/build/debs/xenial b/build/debs/xenial deleted file mode 120000 index 01285abbd6f..00000000000 --- a/build/debs/xenial +++ /dev/null @@ -1 +0,0 @@ -bionic \ No newline at end of file From 2e3cefbb7f9eb15bc9882c726ca301b8c436c6ca Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Tue, 24 Sep 2019 08:59:22 -0400 Subject: [PATCH 02/11] debs: Simplify file structure for kubeadm package We've created an artificial directory structure for arbitrary files that get copied into the kubeadm package. This is unnecessary as kubeadm.install handles the file locations correctly. This commit also removes the symlinks to separate channels, which were unused. Signed-off-by: Stephen Augustus --- build/debs/build.go | 42 +++---------------- .../post-1.10 => }/10-kubeadm.conf | 0 .../post-1.10/10-kubeadm.conf | 1 - .../post-1.8/10-kubeadm.conf | 1 - .../kubelet.service.d/pre-1.8/10-kubeadm.conf | 1 - .../post-1.8/10-kubeadm.conf | 10 ----- .../kubelet.service.d/pre-1.8/10-kubeadm.conf | 9 ---- .../post-1.10/10-kubeadm.conf | 1 - .../post-1.8/10-kubeadm.conf | 1 - .../kubelet.service.d/pre-1.8/10-kubeadm.conf | 1 - .../latest/kubeadm/debian/kubeadm.install | 2 +- 11 files changed, 7 insertions(+), 62 deletions(-) rename build/debs/packages/latest/kubeadm/{channel/stable/etc/systemd/system/kubelet.service.d/post-1.10 => }/10-kubeadm.conf (100%) delete mode 120000 build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf delete mode 120000 build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf delete mode 120000 build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf delete mode 100644 build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf delete mode 100644 build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf delete mode 120000 build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf delete mode 120000 build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf delete mode 120000 build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf diff --git a/build/debs/build.go b/build/debs/build.go index 7b955546747..b0be6a6e05e 100644 --- a/build/debs/build.go +++ b/build/debs/build.go @@ -23,13 +23,12 @@ const ( DistributionUnstable DistributionType = "unstable" DistributionTesting DistributionType = "testing" - cniVersion = "0.7.5" - criToolsVersion = "1.13.0" - pre180kubeadmconf = "pre-1.8/10-kubeadm.conf" - pre1110kubeadmconf = "post-1.8/10-kubeadm.conf" - latestkubeadmconf = "post-1.10/10-kubeadm.conf" + cniVersion = "0.7.5" + criToolsVersion = "1.13.0" packagesRootDir = "packages" + + kubeadmConf = "10-kubeadm.conf" ) var latestPackagesDir = fmt.Sprintf("%s/%s", packagesRootDir, "latest") @@ -319,32 +318,6 @@ func getKubeadmDependencies(v version) (string, error) { return strings.Join(deps, ", "), nil } -// The version of this file to use changed in 1.8 and 1.11 so use the target build -// version to figure out which copy of it to include in the deb. -func getKubeadmKubeletConfigFile(v version) (string, error) { - sv, err := semver.Make(v.Version) - if err != nil { - return "", err - } - - v180, err := semver.Make("1.8.0-alpha.0") - if err != nil { - return "", err - } - v1110, err := semver.Make("1.11.0-alpha.0") - if err != nil { - return "", err - } - - if sv.LT(v1110) { - if sv.LT(v180) { - return pre180kubeadmconf, nil - } - return pre1110kubeadmconf, nil - } - return latestkubeadmconf, nil -} - // CNI get bumped in 1.9, which is incompatible for kubelet<1.9. // So we need to restrict the CNI version when install kubelet. func getKubeletCNIVersion(v version) (string, error) { @@ -576,12 +549,9 @@ func main() { c.DebArch = c.Arch } - var err error - c.KubeadmKubeletConfigFile, err = getKubeadmKubeletConfigFile(v) - if err != nil { - log.Fatalf("error getting kubeadm config: %v", err) - } + c.KubeadmKubeletConfigFile = kubeadmConf + var err error c.Dependencies, err = getKubeadmDependencies(v) if err != nil { log.Fatalf("error getting kubeadm dependencies: %v", err) diff --git a/build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/10-kubeadm.conf similarity index 100% rename from build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf rename to build/debs/packages/latest/kubeadm/10-kubeadm.conf diff --git a/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf deleted file mode 120000 index 63ab75bfcda..00000000000 --- a/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf deleted file mode 120000 index 21aa672ba29..00000000000 --- a/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf deleted file mode 120000 index 8bf2c840060..00000000000 --- a/build/debs/packages/latest/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf deleted file mode 100644 index 24b24c4c441..00000000000 --- a/build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf +++ /dev/null @@ -1,10 +0,0 @@ -[Service] -Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf" -Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true" -Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin" -Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local" -Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt" -Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0" -Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki" -ExecStart= -ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS diff --git a/build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf deleted file mode 100644 index 674a7425628..00000000000 --- a/build/debs/packages/latest/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf +++ /dev/null @@ -1,9 +0,0 @@ -[Service] -Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true" -Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true" -Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin" -Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local" -Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt" -Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0" -ExecStart= -ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_EXTRA_ARGS diff --git a/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf deleted file mode 120000 index 63ab75bfcda..00000000000 --- a/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf deleted file mode 120000 index 21aa672ba29..00000000000 --- a/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf deleted file mode 120000 index 8bf2c840060..00000000000 --- a/build/debs/packages/latest/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/packages/latest/kubeadm/debian/kubeadm.install b/build/debs/packages/latest/kubeadm/debian/kubeadm.install index c96124b107b..fcf2ffe70fc 100644 --- a/build/debs/packages/latest/kubeadm/debian/kubeadm.install +++ b/build/debs/packages/latest/kubeadm/debian/kubeadm.install @@ -1,2 +1,2 @@ usr/bin/kubeadm usr/bin/ -channel/{{ .Distribution }}/etc/systemd/system/kubelet.service.d/{{ .KubeadmKubeletConfigFile }} etc/systemd/system/kubelet.service.d/ +{{ .KubeadmKubeletConfigFile }} etc/systemd/system/kubelet.service.d/ From 73c8a6ae5214f36af3d8f86b0947c9fa28f308b6 Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Tue, 24 Sep 2019 13:55:09 -0400 Subject: [PATCH 03/11] debs: Ensure debian/rules files are executable dpkg-buildpackage throws the following warning for cri-tools when run: "dpkg-buildpackage: warning: debian/rules is not executable; fixing that" Signed-off-by: Stephen Augustus --- build/debs/packages/latest/cri-tools/debian/rules | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 build/debs/packages/latest/cri-tools/debian/rules diff --git a/build/debs/packages/latest/cri-tools/debian/rules b/build/debs/packages/latest/cri-tools/debian/rules old mode 100644 new mode 100755 From 5c4bbbe52358832a4fb44c239adcab555b944c5a Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Wed, 25 Sep 2019 12:48:29 -0400 Subject: [PATCH 04/11] debs: Improve build logic - Set explicit dependency versions of CRI tools and CNI plugins - Allow building cri-tools and kubernetes-cni packages which correspond to Kubernetes versions - Set default package revision to "0" - Rename "version" struct to "packageDefinition", which is more indicative of the values it contains - Add cni-version flag to allow building arbitrary versions of kubernetes-cni - Remove logic for symlinking package definition directories - Add CNIDownloadLink to handle changes in CNI plugin download links between 0.7.x and 0.8.x Signed-off-by: Stephen Augustus --- build/debs/build.go | 458 ++++++++++-------- build/debs/go.mod | 2 +- build/debs/go.sum | 4 +- .../packages/latest/cri-tools/debian/rules | 4 +- .../packages/latest/kubeadm/debian/control | 2 +- .../packages/latest/kubelet/debian/control | 2 +- .../latest/kubernetes-cni/debian/rules | 3 +- 7 files changed, 270 insertions(+), 205 deletions(-) diff --git a/build/debs/build.go b/build/debs/build.go index b0be6a6e05e..cd6212ea303 100644 --- a/build/debs/build.go +++ b/build/debs/build.go @@ -9,6 +9,7 @@ import ( "os" "os/exec" "path/filepath" + "strconv" "strings" "text/template" "time" @@ -20,41 +21,54 @@ type DistributionType string const ( DistributionStable DistributionType = "stable" - DistributionUnstable DistributionType = "unstable" DistributionTesting DistributionType = "testing" + DistributionUnstable DistributionType = "unstable" + + minimumKubernetesVersion = "1.13.0" + minimumCNIVersion = "0.7.5" + pre117CNIVersion = "0.7.5" - cniVersion = "0.7.5" - criToolsVersion = "1.13.0" + defaultRevision = "0" packagesRootDir = "packages" kubeadmConf = "10-kubeadm.conf" ) -var latestPackagesDir = fmt.Sprintf("%s/%s", packagesRootDir, "latest") +var ( + minimumCRIToolsVersion = minimumKubernetesVersion + latestPackagesDir = fmt.Sprintf("%s/%s", packagesRootDir, "latest") +) type work struct { - src, dst string - t *template.Template - info os.FileInfo + src string + dst string + t *template.Template + info os.FileInfo } type build struct { - Package string - Versions []version + Package string + Definitions []packageDefinition } -type version struct { - Version, Revision, DownloadLinkBase string - Distribution DistributionType - GetVersion func() (string, error) - GetDownloadLinkBase func(v version) (string, error) - KubeadmKubeletConfigFile string - KubeletCNIVersion string +type packageDefinition struct { + Name string + Version string + Revision string + + KubernetesVersion string + KubeletCNIVersion string + + DownloadLinkBase string + Distribution DistributionType + KubeadmKubeletConfigFile string + + CNIDownloadLink string } type cfg struct { - version + *packageDefinition Arch string DebArch string Package string @@ -72,9 +86,11 @@ func (ss *stringList) Set(v string) error { } var ( + revision string + kubeVersion string + cniVersion string + architectures = stringList{"amd64", "arm", "arm64", "ppc64le", "s390x"} - kubeVersion = "" - revision = "00" releaseDownloadLinkBase = "https://dl.k8s.io" builtins = map[string]interface{}{ @@ -87,9 +103,11 @@ var ( ) func init() { + // TODO: Add flag support to build stable, testing, or unstable versions flag.Var(&architectures, "arch", "architectures to build for") - flag.StringVar(&kubeVersion, "kube-version", "", "Kubernetes versions to build") - flag.StringVar(&revision, "revision", "00", "deb package revision.") + flag.StringVar(&kubeVersion, "kube-version", "", "Kubernetes version to build") + flag.StringVar(&revision, "revision", defaultRevision, "deb package revision.") + flag.StringVar(&cniVersion, "cni-version", "", "CNI version to build") flag.StringVar(&releaseDownloadLinkBase, "release-download-link-base", "https://dl.k8s.io", "release download link base.") } @@ -120,18 +138,11 @@ func (c cfg) run() error { defer os.RemoveAll(dstdir) } - // allow base package dir to by a symlink so we can reuse packages - // that don't change between distros - realSrcdir, err := filepath.EvalSymlinks(srcdir) - if err != nil { - return err - } - - if err := filepath.Walk(realSrcdir, func(srcfile string, f os.FileInfo, err error) error { + if err := filepath.Walk(srcdir, func(srcfile string, f os.FileInfo, err error) error { if err != nil { return err } - dstfile := filepath.Join(dstdir, srcfile[len(realSrcdir):]) + dstfile := filepath.Join(dstdir, srcfile[len(srcdir):]) if dstfile == dstdir { return nil } @@ -199,29 +210,11 @@ func (c cfg) run() error { return nil } -func walkBuilds(builds []build, f func(pkg, arch string, v version) error) error { +func walkBuilds(builds []build, f func(pkg, arch string, packageDef packageDefinition) error) error { for _, a := range architectures { for _, b := range builds { - for _, v := range b.Versions { - // Populate the version if it doesn't exist - if len(v.Version) == 0 && v.GetVersion != nil { - var err error - v.Version, err = v.GetVersion() - if err != nil { - return err - } - } - - // Populate the version if it doesn't exist - if len(v.DownloadLinkBase) == 0 && v.GetDownloadLinkBase != nil { - var err error - v.DownloadLinkBase, err = v.GetDownloadLinkBase(v) - if err != nil { - return err - } - } - - if err := f(b.Package, a, v); err != nil { + for _, packageDef := range b.Definitions { + if err := f(b.Package, a, packageDef); err != nil { return err } } @@ -241,177 +234,214 @@ func fetchVersion(url string) (string, error) { if err != nil { return "", err } + // Remove a newline and the v prefix from the string return strings.Replace(strings.Replace(string(versionBytes), "v", "", 1), "\n", "", 1), nil } +func getPackageVersion(packageDef packageDefinition) (string, error) { + log.Printf("package name is %s", packageDef.Name) + switch packageDef.Name { + case "kubernetes-cni": + return getCNIVersion(packageDef) + case "cri-tools": + return getCRIToolsVersion(packageDef) + } + + log.Printf("using Kubernetes version") + return packageDef.KubernetesVersion, nil +} + +func getKubernetesVersion(packageDef packageDefinition) (string, error) { + if packageDef.KubernetesVersion != "" { + return packageDef.KubernetesVersion, nil + } + switch packageDef.Distribution { + case DistributionTesting: + return getTestingKubeVersion() + case DistributionUnstable: + return getUnstableKubeVersion() + } + + return getStableKubeVersion() +} + func getStableKubeVersion() (string, error) { return fetchVersion("https://dl.k8s.io/release/stable.txt") } -func getLatestKubeVersion() (string, error) { +func getTestingKubeVersion() (string, error) { return fetchVersion("https://dl.k8s.io/release/latest.txt") } -func getLatestCIVersion() (string, error) { - latestVersion, err := getLatestKubeCIBuild() +func getUnstableKubeVersion() (string, error) { + latestCIVersion, err := getLatestKubeCIBuild() if err != nil { return "", err } - // Replace the "+" with a "-" to make it semver-compliant - return strings.Replace(latestVersion, "+", "-", 1), nil -} - -func getCRIToolsLatestVersion() (string, error) { - return criToolsVersion, nil + return latestCIVersion, nil } func getLatestKubeCIBuild() (string, error) { return fetchVersion("https://dl.k8s.io/ci/k8s-master.txt") } -func getCIBuildsDownloadLinkBase(_ version) (string, error) { - latestCiVersion, err := getLatestKubeCIBuild() - if err != nil { - return "", err +func getDownloadLinkBase(packageDef packageDefinition) (string, error) { + switch packageDef.Distribution { + case DistributionUnstable: + return getCIBuildsDownloadLinkBase(packageDef) } - return fmt.Sprintf("https://dl.k8s.io/ci/v%s", latestCiVersion), nil + return getReleaseDownloadLinkBase(packageDef) } -func getReleaseDownloadLinkBase(v version) (string, error) { - return fmt.Sprintf("%s/v%s", releaseDownloadLinkBase, v.Version), nil +func getCIBuildsDownloadLinkBase(packageDef packageDefinition) (string, error) { + ciVersion := packageDef.KubernetesVersion + if ciVersion == "" { + var err error + ciVersion, err = getLatestKubeCIBuild() + if err != nil { + return "", err + } + } + + return fmt.Sprintf("https://dl.k8s.io/ci/v%s", ciVersion), nil } -func getKubeadmDependencies(v version) (string, error) { - cniVersion, err := getKubeletCNIVersion(v) - if err != nil { - return "", err - } +func getReleaseDownloadLinkBase(packageDef packageDefinition) (string, error) { + return fmt.Sprintf("%s/v%s", releaseDownloadLinkBase, packageDef.KubernetesVersion), nil +} +func getKubeadmDependencies(packageDef packageDefinition) (string, error) { deps := []string{ - "kubelet (>= 1.13.0)", - "kubectl (>= 1.13.0)", - fmt.Sprintf("kubernetes-cni (%s)", cniVersion), + fmt.Sprintf("kubelet (>= %s)", minimumKubernetesVersion), + fmt.Sprintf("kubectl (>= %s)", minimumKubernetesVersion), + fmt.Sprintf("kubernetes-cni (>= %s)", minimumCNIVersion), + fmt.Sprintf("cri-tools (>= %s)", minimumCRIToolsVersion), "${misc:Depends}", } - sv, err := semver.Make(v.Version) + + return strings.Join(deps, ", "), nil +} + +func getCNIVersion(packageDef packageDefinition) (string, error) { + log.Printf("using CNI version") + + kubeSemver, err := semver.Make(packageDef.KubernetesVersion) if err != nil { return "", err } - v1110, err := semver.Make("1.11.0-alpha.0") + v117, err := semver.Make("1.17.0-alpha.0") if err != nil { return "", err } - if sv.GTE(v1110) { - criToolsVersion, err := getCRIToolsVersion(v) - if err != nil { - return "", err + log.Printf("checking kube version (%s) against %s", kubeSemver.String(), v117.String()) + if packageDef.Version != "" { + if kubeSemver.LT(v117) { + return pre117CNIVersion, nil } - - deps = append(deps, fmt.Sprintf("cri-tools (>= %s)", criToolsVersion)) - return strings.Join(deps, ", "), nil + return packageDef.Version, nil } - return strings.Join(deps, ", "), nil + + return minimumCNIVersion, nil } -// CNI get bumped in 1.9, which is incompatible for kubelet<1.9. -// So we need to restrict the CNI version when install kubelet. -func getKubeletCNIVersion(v version) (string, error) { - sv, err := semver.Make(v.Version) +func getCRIToolsVersion(packageDef packageDefinition) (string, error) { + log.Printf("CRI tools function") + kubeSemver, err := semver.Parse(packageDef.KubernetesVersion) if err != nil { return "", err } - v190, err := semver.Make("1.9.0-alpha.0") - if err != nil { - return "", err - } + log.Printf("using CRI version") + kubeVersionString := kubeSemver.String() + kubeVersionParts := strings.Split(kubeVersionString, ".") + + criToolsMajor := kubeVersionParts[0] + criToolsMinor := kubeVersionParts[1] + + log.Printf("%v, len: %s", kubeVersionParts, len(kubeVersionParts)) + // v1.17.0-alpha.0.1809+ff8716f4cf6180 + if len(kubeVersionParts) >= 4 { + criToolsMinorInt, err := strconv.Atoi(criToolsMinor) + if err != nil { + return "", err + } - if sv.GTE(v190) { - return fmt.Sprintf(">= %s", cniVersion), nil + log.Printf("CRI minor is %s", criToolsMinor) + criToolsMinorInt-- + criToolsMinor = strconv.Itoa(criToolsMinorInt) + log.Printf("CRI minor is %s", criToolsMinor) } - return fmt.Sprint("= 0.5.1"), nil + + return fmt.Sprintf("%s.%s.0", criToolsMajor, criToolsMinor), nil } -// getCRIToolsVersion assumes v coming in is >= 1.11.0-alpha.0 -func getCRIToolsVersion(v version) (string, error) { - sv, err := semver.Make(v.Version) +func getCNIDownloadLink(packageDef packageDefinition, arch string) (string, error) { + sv, err := semver.Parse(packageDef.Version) if err != nil { return "", err } - v1110, err := semver.Make("1.11.0-alpha.0") - if err != nil { - return "", err - } - v1121, err := semver.Make("1.12.1-alpha.0") + v075, err := semver.Make(pre117CNIVersion) if err != nil { return "", err } - if sv.GTE(v1110) && sv.LT(v1121) { - return "1.11.1", nil + if sv.LTE(v075) { + return fmt.Sprintf("https://github.com/containernetworking/plugins/releases/download/v%s/cni-plugins-%s-v%s.tgz", packageDef.Version, arch, packageDef.Version), nil } - return criToolsVersion, nil + + return fmt.Sprintf("https://github.com/containernetworking/plugins/releases/download/v%s/cni-plugins-linux-%s-v%s.tgz", packageDef.Version, arch, packageDef.Version), nil } func main() { flag.Parse() + // Replace the "+" with a "-" to make it semver-compliant + kubeVersion = strings.TrimPrefix(kubeVersion, "v") + builds := []build{ { Package: "kubectl", - Versions: []version{ + Definitions: []packageDefinition{ { - GetVersion: getStableKubeVersion, - Revision: revision, - Distribution: DistributionStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, + Revision: revision, + Distribution: DistributionStable, }, { - GetVersion: getLatestKubeVersion, - Revision: revision, - Distribution: DistributionUnstable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, + Revision: revision, + Distribution: DistributionTesting, }, { - GetVersion: getLatestCIVersion, - Revision: revision, - Distribution: DistributionTesting, - GetDownloadLinkBase: getCIBuildsDownloadLinkBase, + Revision: revision, + Distribution: DistributionUnstable, }, }, }, { Package: "kubelet", - Versions: []version{ + Definitions: []packageDefinition{ { - GetVersion: getStableKubeVersion, - Revision: revision, - Distribution: DistributionStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, + Revision: revision, + Distribution: DistributionStable, }, { - GetVersion: getLatestKubeVersion, - Revision: revision, - Distribution: DistributionUnstable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, + Revision: revision, + Distribution: DistributionTesting, }, { - GetVersion: getLatestCIVersion, - Revision: revision, - Distribution: DistributionTesting, - GetDownloadLinkBase: getCIBuildsDownloadLinkBase, + Revision: revision, + Distribution: DistributionUnstable, }, }, }, { Package: "kubernetes-cni", - Versions: []version{ + Definitions: []packageDefinition{ { Version: cniVersion, Revision: revision, @@ -420,127 +450,173 @@ func main() { { Version: cniVersion, Revision: revision, - Distribution: DistributionUnstable, + Distribution: DistributionTesting, }, { Version: cniVersion, Revision: revision, - Distribution: DistributionTesting, + Distribution: DistributionUnstable, }, }, }, { Package: "kubeadm", - Versions: []version{ + Definitions: []packageDefinition{ { - GetVersion: getStableKubeVersion, - Revision: revision, - Distribution: DistributionStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, + Revision: revision, + Distribution: DistributionStable, }, { - GetVersion: getLatestKubeVersion, - Revision: revision, - Distribution: DistributionUnstable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, + Revision: revision, + Distribution: DistributionTesting, }, { - GetVersion: getLatestCIVersion, - Revision: revision, - Distribution: DistributionTesting, - GetDownloadLinkBase: getCIBuildsDownloadLinkBase, + Revision: revision, + Distribution: DistributionUnstable, }, }, }, { Package: "cri-tools", - Versions: []version{ + Definitions: []packageDefinition{ { - GetVersion: getCRIToolsLatestVersion, Revision: revision, Distribution: DistributionStable, }, { - GetVersion: getCRIToolsLatestVersion, Revision: revision, - Distribution: DistributionUnstable, + Distribution: DistributionTesting, }, { - GetVersion: getCRIToolsLatestVersion, Revision: revision, - Distribution: DistributionTesting, + Distribution: DistributionUnstable, }, }, }, } if kubeVersion != "" { - getSpecifiedVersion := func() (string, error) { - return kubeVersion, nil - } builds = []build{ { Package: "kubectl", - Versions: []version{ + Definitions: []packageDefinition{ { - GetVersion: getSpecifiedVersion, - Revision: revision, - Distribution: DistributionStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, + KubernetesVersion: kubeVersion, + Revision: revision, + Distribution: DistributionStable, }, }, }, { Package: "kubelet", - Versions: []version{ + Definitions: []packageDefinition{ { - GetVersion: getSpecifiedVersion, - Revision: revision, - Distribution: DistributionStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, + KubernetesVersion: kubeVersion, + Revision: revision, + Distribution: DistributionStable, }, }, }, { Package: "kubernetes-cni", - Versions: []version{ + Definitions: []packageDefinition{ { - Version: cniVersion, - Revision: revision, - Distribution: DistributionStable, + Version: cniVersion, + Revision: revision, + KubernetesVersion: kubeVersion, + Distribution: DistributionStable, }, }, }, { Package: "kubeadm", - Versions: []version{ + Definitions: []packageDefinition{ { - GetVersion: getSpecifiedVersion, - Revision: revision, - Distribution: DistributionStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, + KubernetesVersion: kubeVersion, + Revision: revision, + Distribution: DistributionStable, }, }, }, { Package: "cri-tools", - Versions: []version{ + Definitions: []packageDefinition{ { - GetVersion: getCRIToolsLatestVersion, - Revision: revision, - Distribution: DistributionStable, + KubernetesVersion: kubeVersion, + Revision: revision, + Distribution: DistributionStable, }, }, }, } } - if err := walkBuilds(builds, func(pkg, arch string, v version) error { + if err := walkBuilds(builds, func(pkg, arch string, packageDef packageDefinition) error { c := cfg{ - Package: pkg, - version: v, - Arch: arch, + packageDefinition: &packageDef, + Package: pkg, + Arch: arch, } + + c.Name = pkg + + var err error + + // TODO: Allow building packages for a specific distro type + + if c.KubernetesVersion != "" { + log.Printf("checking k8s semver") + kubeSemver, err := semver.Parse(c.KubernetesVersion) + if err != nil { + log.Fatalf("could not parse k8s semver: %v", err) + } + + kubeVersionString := kubeSemver.String() + kubeVersionParts := strings.Split(kubeVersionString, ".") + + log.Printf("%v, len: %s", kubeVersionParts, len(kubeVersionParts)) + switch { + case len(kubeVersionParts) > 4: + c.Distribution = DistributionUnstable + case len(kubeVersionParts) == 4: + c.Distribution = DistributionTesting + default: + c.Distribution = DistributionStable + } + } + + c.KubernetesVersion, err = getKubernetesVersion(packageDef) + if err != nil { + log.Fatalf("error getting Kubernetes version: %v", err) + } + + log.Printf("download link base is %s", c.DownloadLinkBase) + c.DownloadLinkBase, err = getDownloadLinkBase(packageDef) + if err != nil { + log.Fatalf("error getting Kubernetes download link base: %v", err) + } + + log.Printf("download link base is %s", c.DownloadLinkBase) + + // TODO: Add note about this + c.KubernetesVersion = strings.Replace(c.KubernetesVersion, "+", "-", 1) + + c.Version, err = getPackageVersion(packageDef) + if err != nil { + log.Fatalf("error getting package version: %v", err) + } + + log.Printf("package version is %s", c.Version) + + c.KubeletCNIVersion = minimumCNIVersion + + c.Dependencies, err = getKubeadmDependencies(packageDef) + if err != nil { + log.Fatalf("error getting kubeadm dependencies: %v", err) + } + + c.KubeadmKubeletConfigFile = kubeadmConf + if c.Arch == "arm" { c.DebArch = "armhf" } else if c.Arch == "ppc64le" { @@ -549,17 +625,9 @@ func main() { c.DebArch = c.Arch } - c.KubeadmKubeletConfigFile = kubeadmConf - - var err error - c.Dependencies, err = getKubeadmDependencies(v) - if err != nil { - log.Fatalf("error getting kubeadm dependencies: %v", err) - } - - c.KubeletCNIVersion, err = getKubeletCNIVersion(v) + c.CNIDownloadLink, err = getCNIDownloadLink(packageDef, c.Arch) if err != nil { - log.Fatalf("error getting kubelet CNI Version: %v", err) + log.Fatalf("error getting CNI download link: %v", err) } return c.run() diff --git a/build/debs/go.mod b/build/debs/go.mod index 869e61151d7..13b85d28959 100644 --- a/build/debs/go.mod +++ b/build/debs/go.mod @@ -2,4 +2,4 @@ module k8s.io/release/build/deb-builder go 1.12 -require github.com/blang/semver v3.5.1+incompatible +require github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906 diff --git a/build/debs/go.sum b/build/debs/go.sum index e55390a18c4..d884b223d76 100644 --- a/build/debs/go.sum +++ b/build/debs/go.sum @@ -1,2 +1,2 @@ -github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906 h1:KGe2go3VELJLcQfKBUlviUzERqg79dO6VYzCvQxF01w= +github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= diff --git a/build/debs/packages/latest/cri-tools/debian/rules b/build/debs/packages/latest/cri-tools/debian/rules index 56606ad9f02..bc2d722a983 100755 --- a/build/debs/packages/latest/cri-tools/debian/rules +++ b/build/debs/packages/latest/cri-tools/debian/rules @@ -1,15 +1,13 @@ #!/usr/bin/make -f # -*- makefile -*- -CRI_TOOLS_VERSION = {{ .Version }} - build: echo noop binary: mkdir -p ./bin curl -sSL --fail --retry 5 \ - "https://github.com/kubernetes-sigs/cri-tools/releases/download/v$(CRI_TOOLS_VERSION)/crictl-v$(CRI_TOOLS_VERSION)-linux-{{ .Arch }}.tar.gz" \ + "https://github.com/kubernetes-sigs/cri-tools/releases/download/v{{ .Version }}/crictl-v{{ .Version }}-linux-{{ .Arch }}.tar.gz" \ | tar -C ./bin -xz dh_testroot dh_auto_install diff --git a/build/debs/packages/latest/kubeadm/debian/control b/build/debs/packages/latest/kubeadm/debian/control index 0ffa1eff196..a3c42f597ba 100644 --- a/build/debs/packages/latest/kubeadm/debian/control +++ b/build/debs/packages/latest/kubeadm/debian/control @@ -10,6 +10,6 @@ Vcs-Browser: https://github.com/kubernetes/kubernetes Package: kubeadm Architecture: {{ .DebArch }} -Depends: {{.Dependencies}} +Depends: {{ .Dependencies }} Description: Kubernetes Cluster Bootstrapping Tool The Kubernetes command line tool for bootstrapping a Kubernetes cluster. diff --git a/build/debs/packages/latest/kubelet/debian/control b/build/debs/packages/latest/kubelet/debian/control index 8f945f62d40..14863ca8930 100644 --- a/build/debs/packages/latest/kubelet/debian/control +++ b/build/debs/packages/latest/kubelet/debian/control @@ -10,6 +10,6 @@ Vcs-Browser: https://github.com/kubernetes/kubernetes Package: kubelet Architecture: {{ .DebArch }} -Depends: iptables (>= 1.4.21), kubernetes-cni ({{ .KubeletCNIVersion }}), iproute2, socat, util-linux, mount, ebtables, ethtool, conntrack, ${misc:Depends} +Depends: iptables (>= 1.4.21), kubernetes-cni (>= {{ .KubeletCNIVersion }}), iproute2, socat, util-linux, mount, ebtables, ethtool, conntrack, ${misc:Depends} Description: Kubernetes Node Agent The node agent of Kubernetes, the container cluster manager diff --git a/build/debs/packages/latest/kubernetes-cni/debian/rules b/build/debs/packages/latest/kubernetes-cni/debian/rules index 2cea3341bf4..26d9c78064d 100755 --- a/build/debs/packages/latest/kubernetes-cni/debian/rules +++ b/build/debs/packages/latest/kubernetes-cni/debian/rules @@ -2,7 +2,6 @@ # -*- makefile -*- #export DH_VERBOSE=1 -CNI_VERSION = v0.7.5 build: echo noop @@ -10,7 +9,7 @@ build: binary: mkdir -p ./bin curl -sSL --fail --retry 5 \ - "https://dl.k8s.io/network-plugins/cni-plugins-{{ .Arch }}-$(CNI_VERSION).tgz" \ + "{{ .CNIDownloadLink }}" \ | tar -C ./bin -xz dh_testroot dh_auto_install From 3a75bdcb42c9c7d6a11c061fced51aaebad5dc8f Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Thu, 26 Sep 2019 09:12:44 -0400 Subject: [PATCH 05/11] debs: Reorganize build code No code changes; just moving functions around to improve readability. Signed-off-by: Stephen Augustus --- build/debs/build.go | 608 ++++++++++++++++++++++---------------------- 1 file changed, 304 insertions(+), 304 deletions(-) diff --git a/build/debs/build.go b/build/debs/build.go index cd6212ea303..7912bb4b53f 100644 --- a/build/debs/build.go +++ b/build/debs/build.go @@ -111,15 +111,253 @@ func init() { flag.StringVar(&releaseDownloadLinkBase, "release-download-link-base", "https://dl.k8s.io", "release download link base.") } -func runCommand(pwd string, command string, cmdArgs ...string) error { - cmd := exec.Command(command, cmdArgs...) - if len(pwd) != 0 { - cmd.Dir = pwd +func main() { + flag.Parse() + + // Replace the "+" with a "-" to make it semver-compliant + kubeVersion = strings.TrimPrefix(kubeVersion, "v") + + builds := []build{ + { + Package: "kubectl", + Definitions: []packageDefinition{ + { + Revision: revision, + Distribution: DistributionStable, + }, + { + Revision: revision, + Distribution: DistributionTesting, + }, + { + Revision: revision, + Distribution: DistributionUnstable, + }, + }, + }, + { + Package: "kubelet", + Definitions: []packageDefinition{ + { + Revision: revision, + Distribution: DistributionStable, + }, + { + Revision: revision, + Distribution: DistributionTesting, + }, + { + Revision: revision, + Distribution: DistributionUnstable, + }, + }, + }, + { + Package: "kubernetes-cni", + Definitions: []packageDefinition{ + { + Version: cniVersion, + Revision: revision, + Distribution: DistributionStable, + }, + { + Version: cniVersion, + Revision: revision, + Distribution: DistributionTesting, + }, + { + Version: cniVersion, + Revision: revision, + Distribution: DistributionUnstable, + }, + }, + }, + { + Package: "kubeadm", + Definitions: []packageDefinition{ + { + Revision: revision, + Distribution: DistributionStable, + }, + { + Revision: revision, + Distribution: DistributionTesting, + }, + { + Revision: revision, + Distribution: DistributionUnstable, + }, + }, + }, + { + Package: "cri-tools", + Definitions: []packageDefinition{ + { + Revision: revision, + Distribution: DistributionStable, + }, + { + Revision: revision, + Distribution: DistributionTesting, + }, + { + Revision: revision, + Distribution: DistributionUnstable, + }, + }, + }, } - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - return err + + if kubeVersion != "" { + builds = []build{ + { + Package: "kubectl", + Definitions: []packageDefinition{ + { + KubernetesVersion: kubeVersion, + Revision: revision, + Distribution: DistributionStable, + }, + }, + }, + { + Package: "kubelet", + Definitions: []packageDefinition{ + { + KubernetesVersion: kubeVersion, + Revision: revision, + Distribution: DistributionStable, + }, + }, + }, + { + Package: "kubernetes-cni", + Definitions: []packageDefinition{ + { + Version: cniVersion, + Revision: revision, + KubernetesVersion: kubeVersion, + Distribution: DistributionStable, + }, + }, + }, + { + Package: "kubeadm", + Definitions: []packageDefinition{ + { + KubernetesVersion: kubeVersion, + Revision: revision, + Distribution: DistributionStable, + }, + }, + }, + { + Package: "cri-tools", + Definitions: []packageDefinition{ + { + KubernetesVersion: kubeVersion, + Revision: revision, + Distribution: DistributionStable, + }, + }, + }, + } + } + + if err := walkBuilds(builds, func(pkg, arch string, packageDef packageDefinition) error { + c := cfg{ + packageDefinition: &packageDef, + Package: pkg, + Arch: arch, + } + + c.Name = pkg + + var err error + + // TODO: Allow building packages for a specific distro type + + if c.KubernetesVersion != "" { + log.Printf("checking k8s semver") + kubeSemver, err := semver.Parse(c.KubernetesVersion) + if err != nil { + log.Fatalf("could not parse k8s semver: %v", err) + } + + kubeVersionString := kubeSemver.String() + kubeVersionParts := strings.Split(kubeVersionString, ".") + + log.Printf("%v, len: %s", kubeVersionParts, len(kubeVersionParts)) + switch { + case len(kubeVersionParts) > 4: + c.Distribution = DistributionUnstable + case len(kubeVersionParts) == 4: + c.Distribution = DistributionTesting + default: + c.Distribution = DistributionStable + } + } + + c.KubernetesVersion, err = getKubernetesVersion(packageDef) + if err != nil { + log.Fatalf("error getting Kubernetes version: %v", err) + } + + log.Printf("download link base is %s", c.DownloadLinkBase) + c.DownloadLinkBase, err = getDownloadLinkBase(packageDef) + if err != nil { + log.Fatalf("error getting Kubernetes download link base: %v", err) + } + + log.Printf("download link base is %s", c.DownloadLinkBase) + + // TODO: Add note about this + c.KubernetesVersion = strings.Replace(c.KubernetesVersion, "+", "-", 1) + + c.Version, err = getPackageVersion(packageDef) + if err != nil { + log.Fatalf("error getting package version: %v", err) + } + + log.Printf("package version is %s", c.Version) + + c.KubeletCNIVersion = minimumCNIVersion + + c.Dependencies, err = getKubeadmDependencies(packageDef) + if err != nil { + log.Fatalf("error getting kubeadm dependencies: %v", err) + } + + c.KubeadmKubeletConfigFile = kubeadmConf + + if c.Arch == "arm" { + c.DebArch = "armhf" + } else if c.Arch == "ppc64le" { + c.DebArch = "ppc64el" + } else { + c.DebArch = c.Arch + } + + c.CNIDownloadLink, err = getCNIDownloadLink(packageDef, c.Arch) + if err != nil { + log.Fatalf("error getting CNI download link: %v", err) + } + + return c.run() + }); err != nil { + log.Fatalf("err: %v", err) + } +} + +func walkBuilds(builds []build, f func(pkg, arch string, packageDef packageDefinition) error) error { + for _, a := range architectures { + for _, b := range builds { + for _, packageDef := range b.Definitions { + if err := f(b.Package, a, packageDef); err != nil { + return err + } + } + } } return nil } @@ -210,33 +448,17 @@ func (c cfg) run() error { return nil } -func walkBuilds(builds []build, f func(pkg, arch string, packageDef packageDefinition) error) error { - for _, a := range architectures { - for _, b := range builds { - for _, packageDef := range b.Definitions { - if err := f(b.Package, a, packageDef); err != nil { - return err - } - } - } - } - return nil -} - -func fetchVersion(url string) (string, error) { - res, err := http.Get(url) - if err != nil { - return "", err +func runCommand(pwd string, command string, cmdArgs ...string) error { + cmd := exec.Command(command, cmdArgs...) + if len(pwd) != 0 { + cmd.Dir = pwd } - - versionBytes, err := ioutil.ReadAll(res.Body) - res.Body.Close() - if err != nil { - return "", err + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + return err } - - // Remove a newline and the v prefix from the string - return strings.Replace(strings.Replace(string(versionBytes), "v", "", 1), "\n", "", 1), nil + return nil } func getPackageVersion(packageDef packageDefinition) (string, error) { @@ -287,42 +509,20 @@ func getLatestKubeCIBuild() (string, error) { return fetchVersion("https://dl.k8s.io/ci/k8s-master.txt") } -func getDownloadLinkBase(packageDef packageDefinition) (string, error) { - switch packageDef.Distribution { - case DistributionUnstable: - return getCIBuildsDownloadLinkBase(packageDef) - } - - return getReleaseDownloadLinkBase(packageDef) -} - -func getCIBuildsDownloadLinkBase(packageDef packageDefinition) (string, error) { - ciVersion := packageDef.KubernetesVersion - if ciVersion == "" { - var err error - ciVersion, err = getLatestKubeCIBuild() - if err != nil { - return "", err - } +func fetchVersion(url string) (string, error) { + res, err := http.Get(url) + if err != nil { + return "", err } - return fmt.Sprintf("https://dl.k8s.io/ci/v%s", ciVersion), nil -} - -func getReleaseDownloadLinkBase(packageDef packageDefinition) (string, error) { - return fmt.Sprintf("%s/v%s", releaseDownloadLinkBase, packageDef.KubernetesVersion), nil -} - -func getKubeadmDependencies(packageDef packageDefinition) (string, error) { - deps := []string{ - fmt.Sprintf("kubelet (>= %s)", minimumKubernetesVersion), - fmt.Sprintf("kubectl (>= %s)", minimumKubernetesVersion), - fmt.Sprintf("kubernetes-cni (>= %s)", minimumCNIVersion), - fmt.Sprintf("cri-tools (>= %s)", minimumCRIToolsVersion), - "${misc:Depends}", + versionBytes, err := ioutil.ReadAll(res.Body) + res.Body.Close() + if err != nil { + return "", err } - return strings.Join(deps, ", "), nil + // Remove a newline and the v prefix from the string + return strings.Replace(strings.Replace(string(versionBytes), "v", "", 1), "\n", "", 1), nil } func getCNIVersion(packageDef packageDefinition) (string, error) { @@ -363,7 +563,7 @@ func getCRIToolsVersion(packageDef packageDefinition) (string, error) { criToolsMajor := kubeVersionParts[0] criToolsMinor := kubeVersionParts[1] - log.Printf("%v, len: %s", kubeVersionParts, len(kubeVersionParts)) + log.Printf("%v, len: %v", kubeVersionParts, len(kubeVersionParts)) // v1.17.0-alpha.0.1809+ff8716f4cf6180 if len(kubeVersionParts) >= 4 { criToolsMinorInt, err := strconv.Atoi(criToolsMinor) @@ -380,6 +580,44 @@ func getCRIToolsVersion(packageDef packageDefinition) (string, error) { return fmt.Sprintf("%s.%s.0", criToolsMajor, criToolsMinor), nil } +func getDownloadLinkBase(packageDef packageDefinition) (string, error) { + switch packageDef.Distribution { + case DistributionUnstable: + return getCIBuildsDownloadLinkBase(packageDef) + } + + return getReleaseDownloadLinkBase(packageDef) +} + +func getCIBuildsDownloadLinkBase(packageDef packageDefinition) (string, error) { + ciVersion := packageDef.KubernetesVersion + if ciVersion == "" { + var err error + ciVersion, err = getLatestKubeCIBuild() + if err != nil { + return "", err + } + } + + return fmt.Sprintf("https://dl.k8s.io/ci/v%s", ciVersion), nil +} + +func getReleaseDownloadLinkBase(packageDef packageDefinition) (string, error) { + return fmt.Sprintf("%s/v%s", releaseDownloadLinkBase, packageDef.KubernetesVersion), nil +} + +func getKubeadmDependencies(packageDef packageDefinition) (string, error) { + deps := []string{ + fmt.Sprintf("kubelet (>= %s)", minimumKubernetesVersion), + fmt.Sprintf("kubectl (>= %s)", minimumKubernetesVersion), + fmt.Sprintf("kubernetes-cni (>= %s)", minimumCNIVersion), + fmt.Sprintf("cri-tools (>= %s)", minimumCRIToolsVersion), + "${misc:Depends}", + } + + return strings.Join(deps, ", "), nil +} + func getCNIDownloadLink(packageDef packageDefinition, arch string) (string, error) { sv, err := semver.Parse(packageDef.Version) if err != nil { @@ -397,241 +635,3 @@ func getCNIDownloadLink(packageDef packageDefinition, arch string) (string, erro return fmt.Sprintf("https://github.com/containernetworking/plugins/releases/download/v%s/cni-plugins-linux-%s-v%s.tgz", packageDef.Version, arch, packageDef.Version), nil } - -func main() { - flag.Parse() - - // Replace the "+" with a "-" to make it semver-compliant - kubeVersion = strings.TrimPrefix(kubeVersion, "v") - - builds := []build{ - { - Package: "kubectl", - Definitions: []packageDefinition{ - { - Revision: revision, - Distribution: DistributionStable, - }, - { - Revision: revision, - Distribution: DistributionTesting, - }, - { - Revision: revision, - Distribution: DistributionUnstable, - }, - }, - }, - { - Package: "kubelet", - Definitions: []packageDefinition{ - { - Revision: revision, - Distribution: DistributionStable, - }, - { - Revision: revision, - Distribution: DistributionTesting, - }, - { - Revision: revision, - Distribution: DistributionUnstable, - }, - }, - }, - { - Package: "kubernetes-cni", - Definitions: []packageDefinition{ - { - Version: cniVersion, - Revision: revision, - Distribution: DistributionStable, - }, - { - Version: cniVersion, - Revision: revision, - Distribution: DistributionTesting, - }, - { - Version: cniVersion, - Revision: revision, - Distribution: DistributionUnstable, - }, - }, - }, - { - Package: "kubeadm", - Definitions: []packageDefinition{ - { - Revision: revision, - Distribution: DistributionStable, - }, - { - Revision: revision, - Distribution: DistributionTesting, - }, - { - Revision: revision, - Distribution: DistributionUnstable, - }, - }, - }, - { - Package: "cri-tools", - Definitions: []packageDefinition{ - { - Revision: revision, - Distribution: DistributionStable, - }, - { - Revision: revision, - Distribution: DistributionTesting, - }, - { - Revision: revision, - Distribution: DistributionUnstable, - }, - }, - }, - } - - if kubeVersion != "" { - builds = []build{ - { - Package: "kubectl", - Definitions: []packageDefinition{ - { - KubernetesVersion: kubeVersion, - Revision: revision, - Distribution: DistributionStable, - }, - }, - }, - { - Package: "kubelet", - Definitions: []packageDefinition{ - { - KubernetesVersion: kubeVersion, - Revision: revision, - Distribution: DistributionStable, - }, - }, - }, - { - Package: "kubernetes-cni", - Definitions: []packageDefinition{ - { - Version: cniVersion, - Revision: revision, - KubernetesVersion: kubeVersion, - Distribution: DistributionStable, - }, - }, - }, - { - Package: "kubeadm", - Definitions: []packageDefinition{ - { - KubernetesVersion: kubeVersion, - Revision: revision, - Distribution: DistributionStable, - }, - }, - }, - { - Package: "cri-tools", - Definitions: []packageDefinition{ - { - KubernetesVersion: kubeVersion, - Revision: revision, - Distribution: DistributionStable, - }, - }, - }, - } - } - - if err := walkBuilds(builds, func(pkg, arch string, packageDef packageDefinition) error { - c := cfg{ - packageDefinition: &packageDef, - Package: pkg, - Arch: arch, - } - - c.Name = pkg - - var err error - - // TODO: Allow building packages for a specific distro type - - if c.KubernetesVersion != "" { - log.Printf("checking k8s semver") - kubeSemver, err := semver.Parse(c.KubernetesVersion) - if err != nil { - log.Fatalf("could not parse k8s semver: %v", err) - } - - kubeVersionString := kubeSemver.String() - kubeVersionParts := strings.Split(kubeVersionString, ".") - - log.Printf("%v, len: %s", kubeVersionParts, len(kubeVersionParts)) - switch { - case len(kubeVersionParts) > 4: - c.Distribution = DistributionUnstable - case len(kubeVersionParts) == 4: - c.Distribution = DistributionTesting - default: - c.Distribution = DistributionStable - } - } - - c.KubernetesVersion, err = getKubernetesVersion(packageDef) - if err != nil { - log.Fatalf("error getting Kubernetes version: %v", err) - } - - log.Printf("download link base is %s", c.DownloadLinkBase) - c.DownloadLinkBase, err = getDownloadLinkBase(packageDef) - if err != nil { - log.Fatalf("error getting Kubernetes download link base: %v", err) - } - - log.Printf("download link base is %s", c.DownloadLinkBase) - - // TODO: Add note about this - c.KubernetesVersion = strings.Replace(c.KubernetesVersion, "+", "-", 1) - - c.Version, err = getPackageVersion(packageDef) - if err != nil { - log.Fatalf("error getting package version: %v", err) - } - - log.Printf("package version is %s", c.Version) - - c.KubeletCNIVersion = minimumCNIVersion - - c.Dependencies, err = getKubeadmDependencies(packageDef) - if err != nil { - log.Fatalf("error getting kubeadm dependencies: %v", err) - } - - c.KubeadmKubeletConfigFile = kubeadmConf - - if c.Arch == "arm" { - c.DebArch = "armhf" - } else if c.Arch == "ppc64le" { - c.DebArch = "ppc64el" - } else { - c.DebArch = c.Arch - } - - c.CNIDownloadLink, err = getCNIDownloadLink(packageDef, c.Arch) - if err != nil { - log.Fatalf("error getting CNI download link: %v", err) - } - - return c.run() - }); err != nil { - log.Fatalf("err: %v", err) - } -} From bd653c9ac9e0a166828f729fe2f38c3ef74c6457 Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Thu, 26 Sep 2019 09:46:19 -0400 Subject: [PATCH 06/11] debs: Move package build anonymous function into its' own function Signed-off-by: Stephen Augustus --- build/debs/build.go | 163 ++++++++++++++++++++++++-------------------- 1 file changed, 90 insertions(+), 73 deletions(-) diff --git a/build/debs/build.go b/build/debs/build.go index 7912bb4b53f..16ce0bc772b 100644 --- a/build/debs/build.go +++ b/build/debs/build.go @@ -1,3 +1,18 @@ +/* +Copyright 2019 The Kubernetes Authors. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package main import ( @@ -264,102 +279,104 @@ func main() { } } - if err := walkBuilds(builds, func(pkg, arch string, packageDef packageDefinition) error { - c := cfg{ - packageDefinition: &packageDef, - Package: pkg, - Arch: arch, - } + if err := walkBuilds(builds); err != nil { + log.Fatalf("err: %v", err) + } +} - c.Name = pkg +func walkBuilds(builds []build) error { + for _, arch := range architectures { + for _, build := range builds { + for _, packageDef := range build.Definitions { + if err := buildPackage(build.Package, arch, packageDef); err != nil { + return err + } + } + } + } + return nil +} - var err error +func buildPackage(pkg, arch string, packageDef packageDefinition) error { + c := cfg{ + packageDefinition: &packageDef, + Package: pkg, + Arch: arch, + } - // TODO: Allow building packages for a specific distro type + c.Name = pkg - if c.KubernetesVersion != "" { - log.Printf("checking k8s semver") - kubeSemver, err := semver.Parse(c.KubernetesVersion) - if err != nil { - log.Fatalf("could not parse k8s semver: %v", err) - } + var err error - kubeVersionString := kubeSemver.String() - kubeVersionParts := strings.Split(kubeVersionString, ".") - - log.Printf("%v, len: %s", kubeVersionParts, len(kubeVersionParts)) - switch { - case len(kubeVersionParts) > 4: - c.Distribution = DistributionUnstable - case len(kubeVersionParts) == 4: - c.Distribution = DistributionTesting - default: - c.Distribution = DistributionStable - } - } + // TODO: Allow building packages for a specific distro type - c.KubernetesVersion, err = getKubernetesVersion(packageDef) + if c.KubernetesVersion != "" { + log.Printf("checking k8s semver") + kubeSemver, err := semver.Parse(c.KubernetesVersion) if err != nil { - log.Fatalf("error getting Kubernetes version: %v", err) + log.Fatalf("could not parse k8s semver: %v", err) } - log.Printf("download link base is %s", c.DownloadLinkBase) - c.DownloadLinkBase, err = getDownloadLinkBase(packageDef) - if err != nil { - log.Fatalf("error getting Kubernetes download link base: %v", err) + kubeVersionString := kubeSemver.String() + kubeVersionParts := strings.Split(kubeVersionString, ".") + + log.Printf("%v, len: %s", kubeVersionParts, len(kubeVersionParts)) + switch { + case len(kubeVersionParts) > 4: + c.Distribution = DistributionUnstable + case len(kubeVersionParts) == 4: + c.Distribution = DistributionTesting + default: + c.Distribution = DistributionStable } + } - log.Printf("download link base is %s", c.DownloadLinkBase) + c.KubernetesVersion, err = getKubernetesVersion(packageDef) + if err != nil { + log.Fatalf("error getting Kubernetes version: %v", err) + } - // TODO: Add note about this - c.KubernetesVersion = strings.Replace(c.KubernetesVersion, "+", "-", 1) + log.Printf("download link base is %s", c.DownloadLinkBase) + c.DownloadLinkBase, err = getDownloadLinkBase(packageDef) + if err != nil { + log.Fatalf("error getting Kubernetes download link base: %v", err) + } - c.Version, err = getPackageVersion(packageDef) - if err != nil { - log.Fatalf("error getting package version: %v", err) - } + log.Printf("download link base is %s", c.DownloadLinkBase) - log.Printf("package version is %s", c.Version) + // TODO: Add note about this + c.KubernetesVersion = strings.Replace(c.KubernetesVersion, "+", "-", 1) - c.KubeletCNIVersion = minimumCNIVersion + c.Version, err = getPackageVersion(packageDef) + if err != nil { + log.Fatalf("error getting package version: %v", err) + } - c.Dependencies, err = getKubeadmDependencies(packageDef) - if err != nil { - log.Fatalf("error getting kubeadm dependencies: %v", err) - } + log.Printf("package version is %s", c.Version) - c.KubeadmKubeletConfigFile = kubeadmConf + c.KubeletCNIVersion = minimumCNIVersion - if c.Arch == "arm" { - c.DebArch = "armhf" - } else if c.Arch == "ppc64le" { - c.DebArch = "ppc64el" - } else { - c.DebArch = c.Arch - } + c.Dependencies, err = getKubeadmDependencies(packageDef) + if err != nil { + log.Fatalf("error getting kubeadm dependencies: %v", err) + } - c.CNIDownloadLink, err = getCNIDownloadLink(packageDef, c.Arch) - if err != nil { - log.Fatalf("error getting CNI download link: %v", err) - } + c.KubeadmKubeletConfigFile = kubeadmConf - return c.run() - }); err != nil { - log.Fatalf("err: %v", err) + if c.Arch == "arm" { + c.DebArch = "armhf" + } else if c.Arch == "ppc64le" { + c.DebArch = "ppc64el" + } else { + c.DebArch = c.Arch } -} -func walkBuilds(builds []build, f func(pkg, arch string, packageDef packageDefinition) error) error { - for _, a := range architectures { - for _, b := range builds { - for _, packageDef := range b.Definitions { - if err := f(b.Package, a, packageDef); err != nil { - return err - } - } - } + c.CNIDownloadLink, err = getCNIDownloadLink(packageDef, c.Arch) + if err != nil { + log.Fatalf("error getting CNI download link: %v", err) } - return nil + + return c.run() } func (c cfg) run() error { From 9151fb8a0bf93e12fe0898085699b1805a5049d4 Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Fri, 27 Sep 2019 06:56:15 -0400 Subject: [PATCH 07/11] debs: Update package definition locations in Dockerfile Signed-off-by: Stephen Augustus --- build/debs/Dockerfile | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/build/debs/Dockerfile b/build/debs/Dockerfile index eb623605400..7eac2f534ba 100644 --- a/build/debs/Dockerfile +++ b/build/debs/Dockerfile @@ -37,12 +37,7 @@ WORKDIR /home/builder/workspace RUN mkdir ./bin -COPY --chown=builder:builder bionic ./bionic -COPY --chown=builder:builder jessie ./jessie -COPY --chown=builder:builder sid ./sid -COPY --chown=builder:builder stretch ./stretch -COPY --chown=builder:builder trusty ./trusty -COPY --chown=builder:builder xenial ./xenial +COPY --chown=builder:builder packages ./packages COPY --from=builder --chown=builder:builder /workspace/deb-builder . From 96f3f2ade5c759c74d6b066603e56fa30afe01c1 Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Fri, 27 Sep 2019 10:27:25 -0400 Subject: [PATCH 08/11] debs: Enable building arbitrary packages, distributions, versions Here we collapse the builds structs in main() into a function (constructBuilds) as well as provide additional cli flags for package and disribution. This allows us to build arbitrary combinations of packages instead of the entire package set for all distributions. Signed-off-by: Stephen Augustus --- build/debs/build.go | 188 +++++++++----------------------------------- 1 file changed, 39 insertions(+), 149 deletions(-) diff --git a/build/debs/build.go b/build/debs/build.go index 16ce0bc772b..7ddcc9a6a74 100644 --- a/build/debs/build.go +++ b/build/debs/build.go @@ -105,7 +105,10 @@ var ( kubeVersion string cniVersion string - architectures = stringList{"amd64", "arm", "arm64", "ppc64le", "s390x"} + packages = stringList{"kubelet", "kubectl", "kubeadm", "kubernetes-cni", "cri-tools"} + distributions = stringList{"stable", "testing", "unstable"} + architectures = stringList{"amd64", "arm", "arm64", "ppc64le", "s390x"} + releaseDownloadLinkBase = "https://dl.k8s.io" builtins = map[string]interface{}{ @@ -118,7 +121,8 @@ var ( ) func init() { - // TODO: Add flag support to build stable, testing, or unstable versions + flag.Var(&packages, "packages", "packages to build") + flag.Var(&distributions, "distributions", "distributions to build for") flag.Var(&architectures, "arch", "architectures to build for") flag.StringVar(&kubeVersion, "kube-version", "", "Kubernetes version to build") flag.StringVar(&revision, "revision", defaultRevision, "deb package revision.") @@ -132,151 +136,9 @@ func main() { // Replace the "+" with a "-" to make it semver-compliant kubeVersion = strings.TrimPrefix(kubeVersion, "v") - builds := []build{ - { - Package: "kubectl", - Definitions: []packageDefinition{ - { - Revision: revision, - Distribution: DistributionStable, - }, - { - Revision: revision, - Distribution: DistributionTesting, - }, - { - Revision: revision, - Distribution: DistributionUnstable, - }, - }, - }, - { - Package: "kubelet", - Definitions: []packageDefinition{ - { - Revision: revision, - Distribution: DistributionStable, - }, - { - Revision: revision, - Distribution: DistributionTesting, - }, - { - Revision: revision, - Distribution: DistributionUnstable, - }, - }, - }, - { - Package: "kubernetes-cni", - Definitions: []packageDefinition{ - { - Version: cniVersion, - Revision: revision, - Distribution: DistributionStable, - }, - { - Version: cniVersion, - Revision: revision, - Distribution: DistributionTesting, - }, - { - Version: cniVersion, - Revision: revision, - Distribution: DistributionUnstable, - }, - }, - }, - { - Package: "kubeadm", - Definitions: []packageDefinition{ - { - Revision: revision, - Distribution: DistributionStable, - }, - { - Revision: revision, - Distribution: DistributionTesting, - }, - { - Revision: revision, - Distribution: DistributionUnstable, - }, - }, - }, - { - Package: "cri-tools", - Definitions: []packageDefinition{ - { - Revision: revision, - Distribution: DistributionStable, - }, - { - Revision: revision, - Distribution: DistributionTesting, - }, - { - Revision: revision, - Distribution: DistributionUnstable, - }, - }, - }, - } - - if kubeVersion != "" { - builds = []build{ - { - Package: "kubectl", - Definitions: []packageDefinition{ - { - KubernetesVersion: kubeVersion, - Revision: revision, - Distribution: DistributionStable, - }, - }, - }, - { - Package: "kubelet", - Definitions: []packageDefinition{ - { - KubernetesVersion: kubeVersion, - Revision: revision, - Distribution: DistributionStable, - }, - }, - }, - { - Package: "kubernetes-cni", - Definitions: []packageDefinition{ - { - Version: cniVersion, - Revision: revision, - KubernetesVersion: kubeVersion, - Distribution: DistributionStable, - }, - }, - }, - { - Package: "kubeadm", - Definitions: []packageDefinition{ - { - KubernetesVersion: kubeVersion, - Revision: revision, - Distribution: DistributionStable, - }, - }, - }, - { - Package: "cri-tools", - Definitions: []packageDefinition{ - { - KubernetesVersion: kubeVersion, - Revision: revision, - Distribution: DistributionStable, - }, - }, - }, - } + builds, err := constructBuilds(packages, distributions, kubeVersion, revision, cniVersion) + if err != nil { + log.Fatalf("err: %v", err) } if err := walkBuilds(builds); err != nil { @@ -284,6 +146,36 @@ func main() { } } +func constructBuilds(packages, distributions []string, kubeVersion, revision, cniVersion string) ([]build, error) { + var builds []build + + for _, pkg := range packages { + b := &build{ + Package: pkg, + } + + for _, distribution := range distributions { + packageDef := &packageDefinition{ + Revision: revision, + Distribution: DistributionType(distribution), + } + + packageDef.KubernetesVersion = kubeVersion + + switch b.Package { + case "kubernetes-cni": + packageDef.Version = cniVersion + } + + b.Definitions = append(b.Definitions, *packageDef) + } + + builds = append(builds, *b) + } + + return builds, nil +} + func walkBuilds(builds []build) error { for _, arch := range architectures { for _, build := range builds { @@ -308,8 +200,6 @@ func buildPackage(pkg, arch string, packageDef packageDefinition) error { var err error - // TODO: Allow building packages for a specific distro type - if c.KubernetesVersion != "" { log.Printf("checking k8s semver") kubeSemver, err := semver.Parse(c.KubernetesVersion) From 680292552a3ed1029d8ec45fb827a176e74d7913 Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Fri, 27 Sep 2019 16:18:45 -0400 Subject: [PATCH 09/11] debs: Add support for specifying CRI tools version Additionally, when the CRI tools version is not specified, we will try to build the latest patch version of CRI tools that corresponds with the Kubernetes version. Examples (current as of this original commit time): - Kubernetes version (1.16.0) --> CRI tools version (1.16.1) - Kubernetes version (1.15.4) --> CRI tools version (1.15.0) Signed-off-by: Stephen Augustus --- build/debs/build.go | 78 +++++++++++++++++++++++++++++++++++++++++---- build/debs/go.mod | 5 ++- build/debs/go.sum | 13 ++++++++ go.mod | 1 + go.sum | 2 ++ 5 files changed, 92 insertions(+), 7 deletions(-) diff --git a/build/debs/build.go b/build/debs/build.go index 7ddcc9a6a74..c7d2bac512d 100644 --- a/build/debs/build.go +++ b/build/debs/build.go @@ -16,6 +16,7 @@ limitations under the License. package main import ( + "context" "flag" "fmt" "io/ioutil" @@ -30,6 +31,7 @@ import ( "time" "github.com/blang/semver" + "github.com/google/go-github/v28/github" ) type DistributionType string @@ -101,9 +103,10 @@ func (ss *stringList) Set(v string) error { } var ( - revision string - kubeVersion string - cniVersion string + revision string + kubeVersion string + cniVersion string + criToolsVersion string packages = stringList{"kubelet", "kubectl", "kubeadm", "kubernetes-cni", "cri-tools"} distributions = stringList{"stable", "testing", "unstable"} @@ -127,6 +130,7 @@ func init() { flag.StringVar(&kubeVersion, "kube-version", "", "Kubernetes version to build") flag.StringVar(&revision, "revision", defaultRevision, "deb package revision.") flag.StringVar(&cniVersion, "cni-version", "", "CNI version to build") + flag.StringVar(&criToolsVersion, "cri-tools-version", "", "CRI tools version to build") flag.StringVar(&releaseDownloadLinkBase, "release-download-link-base", "https://dl.k8s.io", "release download link base.") } @@ -165,6 +169,8 @@ func constructBuilds(packages, distributions []string, kubeVersion, revision, cn switch b.Package { case "kubernetes-cni": packageDef.Version = cniVersion + case "cri-tools": + packageDef.Version = criToolsVersion } b.Definitions = append(b.Definitions, *packageDef) @@ -210,7 +216,7 @@ func buildPackage(pkg, arch string, packageDef packageDefinition) error { kubeVersionString := kubeSemver.String() kubeVersionParts := strings.Split(kubeVersionString, ".") - log.Printf("%v, len: %s", kubeVersionParts, len(kubeVersionParts)) + log.Printf("%v, len: %d", kubeVersionParts, len(kubeVersionParts)) switch { case len(kubeVersionParts) > 4: c.Distribution = DistributionUnstable @@ -457,7 +463,10 @@ func getCNIVersion(packageDef packageDefinition) (string, error) { } func getCRIToolsVersion(packageDef packageDefinition) (string, error) { - log.Printf("CRI tools function") + if packageDef.Version != "" { + return packageDef.Version, nil + } + kubeSemver, err := semver.Parse(packageDef.KubernetesVersion) if err != nil { return "", err @@ -484,7 +493,64 @@ func getCRIToolsVersion(packageDef packageDefinition) (string, error) { log.Printf("CRI minor is %s", criToolsMinor) } - return fmt.Sprintf("%s.%s.0", criToolsMajor, criToolsMinor), nil + criToolsVersion := fmt.Sprintf("%s.%s.0", criToolsMajor, criToolsMinor) + + releases, err := fetchReleases("kubernetes-sigs", "cri-tools", false) + if err != nil { + log.Fatalf("err: %v", err) + } + + var tags []string + for _, release := range releases { + criToolsReleaseTag := strings.Trim(*release.TagName, "v") + criToolsReleaseVersionParts := strings.Split(criToolsReleaseTag, ".") + criToolsReleaseMinor := criToolsReleaseVersionParts[1] + + if criToolsReleaseMinor == criToolsMinor { + tags = append(tags, criToolsReleaseTag) + } + } + + for _, tag := range tags { + tagSemver, err := semver.Parse(tag) + if err != nil { + log.Fatalf("could not parse tag semver: %v", err) + } + + criToolsSemver, err := semver.Parse(criToolsVersion) + if err != nil { + log.Fatalf("could not parse CRI tools semver: %v", err) + } + + if tagSemver.GTE(criToolsSemver) { + criToolsVersion = tag + } + } + + log.Printf("CRI tools version is %s", criToolsVersion) + return criToolsVersion, nil +} + +func fetchReleases(owner, repo string, includePrereleases bool) ([]*github.RepositoryRelease, error) { + ghClient := github.NewClient(nil) + + allReleases, _, err := ghClient.Repositories.ListReleases(context.Background(), owner, repo, nil) + if err != nil { + return nil, err + } + + var releases []*github.RepositoryRelease + for _, release := range allReleases { + if *release.Prerelease { + if includePrereleases { + releases = append(releases, release) + } + } else { + releases = append(releases, release) + } + } + + return releases, nil } func getDownloadLinkBase(packageDef packageDefinition) (string, error) { diff --git a/build/debs/go.mod b/build/debs/go.mod index 13b85d28959..7963c42e578 100644 --- a/build/debs/go.mod +++ b/build/debs/go.mod @@ -2,4 +2,7 @@ module k8s.io/release/build/deb-builder go 1.12 -require github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906 +require ( + github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906 + github.com/google/go-github/v28 v28.1.1 +) diff --git a/build/debs/go.sum b/build/debs/go.sum index d884b223d76..22eb1c1586d 100644 --- a/build/debs/go.sum +++ b/build/debs/go.sum @@ -1,2 +1,15 @@ github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906 h1:KGe2go3VELJLcQfKBUlviUzERqg79dO6VYzCvQxF01w= github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/go-github/v28 v28.1.1 h1:kORf5ekX5qwXO2mGzXXOjMe/g6ap8ahVe0sBEulhSxo= +github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= diff --git a/go.mod b/go.mod index 5f3bd981a6b..710a8bd381e 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.12 require ( github.com/go-kit/kit v0.9.0 github.com/google/go-github/v27 v27.0.6 + github.com/google/go-github/v28 v28.1.1 // indirect github.com/kolide/kit v0.0.0-20190123023048-c155a91098e3 github.com/pkg/errors v0.8.1 github.com/psampaz/go-mod-outdated v0.4.0 diff --git a/go.sum b/go.sum index fd333352b4d..7f58a568cc4 100644 --- a/go.sum +++ b/go.sum @@ -127,6 +127,8 @@ github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4r github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-github/v27 v27.0.6 h1:oiOZuBmGHvrGM1X9uNUAUlLgp5r1UUO/M/KnbHnLRlQ= github.com/google/go-github/v27 v27.0.6/go.mod h1:/0Gr8pJ55COkmv+S/yPKCczSkUPIM/LnFyubufRNIS0= +github.com/google/go-github/v28 v28.1.1 h1:kORf5ekX5qwXO2mGzXXOjMe/g6ap8ahVe0sBEulhSxo= +github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= From 6fba599a164b5b515da1839d0ffcb4ab54dc8ace Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Sat, 28 Sep 2019 01:18:03 -0400 Subject: [PATCH 10/11] debs: Use "channel" as package stream descriptor After discussing with tpepper, we're going to use "channel" instead of "distribution" to describe a package stream. The following channel names will be used: - "release": stable versions of Kubernetes (x.y.z) - "testing": pre-release versions of Kubernetes (x.y.z-{alpha,beta,rc}.m) - "nightly": build versions of Kubernetes (x.y.z-{alpha,beta,rc}.m.nnnn+SHA) Signed-off-by: Stephen Augustus --- build/debs/build.go | 67 ++++++++-------- build/debs/build_test.go | 77 +++++++------------ .../latest/cri-tools/debian/changelog | 2 +- .../packages/latest/kubeadm/debian/changelog | 2 +- .../packages/latest/kubectl/debian/changelog | 2 +- .../packages/latest/kubelet/debian/changelog | 2 +- .../latest/kubernetes-cni/debian/changelog | 2 +- 7 files changed, 63 insertions(+), 91 deletions(-) diff --git a/build/debs/build.go b/build/debs/build.go index c7d2bac512d..6a13e4f18b1 100644 --- a/build/debs/build.go +++ b/build/debs/build.go @@ -34,12 +34,12 @@ import ( "github.com/google/go-github/v28/github" ) -type DistributionType string +type ChannelType string const ( - DistributionStable DistributionType = "stable" - DistributionTesting DistributionType = "testing" - DistributionUnstable DistributionType = "unstable" + ChannelRelease ChannelType = "release" + ChannelTesting ChannelType = "testing" + ChannelNightly ChannelType = "nightly" minimumKubernetesVersion = "1.13.0" minimumCNIVersion = "0.7.5" @@ -74,11 +74,11 @@ type packageDefinition struct { Version string Revision string + Channel ChannelType KubernetesVersion string KubeletCNIVersion string DownloadLinkBase string - Distribution DistributionType KubeadmKubeletConfigFile string CNIDownloadLink string @@ -109,7 +109,7 @@ var ( criToolsVersion string packages = stringList{"kubelet", "kubectl", "kubeadm", "kubernetes-cni", "cri-tools"} - distributions = stringList{"stable", "testing", "unstable"} + channels = stringList{"release", "testing", "nightly"} architectures = stringList{"amd64", "arm", "arm64", "ppc64le", "s390x"} releaseDownloadLinkBase = "https://dl.k8s.io" @@ -125,7 +125,7 @@ var ( func init() { flag.Var(&packages, "packages", "packages to build") - flag.Var(&distributions, "distributions", "distributions to build for") + flag.Var(&channels, "channels", "channels to build for") flag.Var(&architectures, "arch", "architectures to build for") flag.StringVar(&kubeVersion, "kube-version", "", "Kubernetes version to build") flag.StringVar(&revision, "revision", defaultRevision, "deb package revision.") @@ -140,7 +140,7 @@ func main() { // Replace the "+" with a "-" to make it semver-compliant kubeVersion = strings.TrimPrefix(kubeVersion, "v") - builds, err := constructBuilds(packages, distributions, kubeVersion, revision, cniVersion) + builds, err := constructBuilds(packages, channels, kubeVersion, revision, cniVersion) if err != nil { log.Fatalf("err: %v", err) } @@ -150,7 +150,7 @@ func main() { } } -func constructBuilds(packages, distributions []string, kubeVersion, revision, cniVersion string) ([]build, error) { +func constructBuilds(packages, channels []string, kubeVersion, revision, cniVersion string) ([]build, error) { var builds []build for _, pkg := range packages { @@ -158,10 +158,10 @@ func constructBuilds(packages, distributions []string, kubeVersion, revision, cn Package: pkg, } - for _, distribution := range distributions { + for _, channel := range channels { packageDef := &packageDefinition{ - Revision: revision, - Distribution: DistributionType(distribution), + Revision: revision, + Channel: ChannelType(channel), } packageDef.KubernetesVersion = kubeVersion @@ -219,11 +219,11 @@ func buildPackage(pkg, arch string, packageDef packageDefinition) error { log.Printf("%v, len: %d", kubeVersionParts, len(kubeVersionParts)) switch { case len(kubeVersionParts) > 4: - c.Distribution = DistributionUnstable + c.Channel = ChannelNightly case len(kubeVersionParts) == 4: - c.Distribution = DistributionTesting + c.Channel = ChannelTesting default: - c.Distribution = DistributionStable + c.Channel = ChannelRelease } } @@ -347,7 +347,7 @@ func (c cfg) run() error { return err } - dstParts := []string{"bin", string(c.Distribution)} + dstParts := []string{"bin", string(c.Channel)} dstPath := filepath.Join(dstParts...) os.MkdirAll(dstPath, 0777) @@ -375,7 +375,7 @@ func runCommand(pwd string, command string, cmdArgs ...string) error { } func getPackageVersion(packageDef packageDefinition) (string, error) { - log.Printf("package name is %s", packageDef.Name) + log.Printf("Setting version for %s package...", packageDef.Name) switch packageDef.Name { case "kubernetes-cni": return getCNIVersion(packageDef) @@ -389,36 +389,31 @@ func getPackageVersion(packageDef packageDefinition) (string, error) { func getKubernetesVersion(packageDef packageDefinition) (string, error) { if packageDef.KubernetesVersion != "" { + log.Printf("Using Kubernetes version (%s) for %s package...", packageDef.KubernetesVersion, packageDef.Name) return packageDef.KubernetesVersion, nil } - switch packageDef.Distribution { - case DistributionTesting: + switch packageDef.Channel { + case ChannelTesting: return getTestingKubeVersion() - case DistributionUnstable: - return getUnstableKubeVersion() + case ChannelNightly: + return getNightlyKubeVersion() } - return getStableKubeVersion() + return getReleaseKubeVersion() } -func getStableKubeVersion() (string, error) { +func getReleaseKubeVersion() (string, error) { + log.Print("Retrieving Kubernetes release version...") return fetchVersion("https://dl.k8s.io/release/stable.txt") } func getTestingKubeVersion() (string, error) { + log.Print("Retrieving Kubernetes testing version...") return fetchVersion("https://dl.k8s.io/release/latest.txt") } -func getUnstableKubeVersion() (string, error) { - latestCIVersion, err := getLatestKubeCIBuild() - if err != nil { - return "", err - } - - return latestCIVersion, nil -} - -func getLatestKubeCIBuild() (string, error) { +func getNightlyKubeVersion() (string, error) { + log.Print("Retrieving Kubernetes nightly version...") return fetchVersion("https://dl.k8s.io/ci/k8s-master.txt") } @@ -554,8 +549,8 @@ func fetchReleases(owner, repo string, includePrereleases bool) ([]*github.Repos } func getDownloadLinkBase(packageDef packageDefinition) (string, error) { - switch packageDef.Distribution { - case DistributionUnstable: + switch packageDef.Channel { + case ChannelNightly: return getCIBuildsDownloadLinkBase(packageDef) } @@ -566,7 +561,7 @@ func getCIBuildsDownloadLinkBase(packageDef packageDefinition) (string, error) { ciVersion := packageDef.KubernetesVersion if ciVersion == "" { var err error - ciVersion, err = getLatestKubeCIBuild() + ciVersion, err = getNightlyKubeVersion() if err != nil { return "", err } diff --git a/build/debs/build_test.go b/build/debs/build_test.go index 4afe44def50..a154318a3ed 100644 --- a/build/debs/build_test.go +++ b/build/debs/build_test.go @@ -6,52 +6,6 @@ import ( "testing" ) -func TestGetKubeadmConfig(t *testing.T) { - testcases := []struct { - version string - expectConfig string - expectErr bool - }{ - { - "not-a-real-version", - "", - true, - }, - { - "1.12.0", - "post-1.10/10-kubeadm.conf", - false, - }, - { - "1.13.0", - "post-1.10/10-kubeadm.conf", - false, - }, - { - "1.15.0", - "post-1.10/10-kubeadm.conf", - false, - }, - } - - for _, tc := range testcases { - v := version{ - Version: tc.version, - } - kubeadmConfig, err := getKubeadmKubeletConfigFile(v) - - if err != nil { - if !tc.expectErr { - t.Errorf("getKubeadmConfig(%s) returned unwanted error: %v", tc.version, err) - } - } else { - if kubeadmConfig != tc.expectConfig { - t.Errorf("getKubeadmConfig(%s) got %q, wanted %q", tc.version, kubeadmConfig, tc.expectConfig) - } - } - } -} - func TestGetKubeadmDependencies(t *testing.T) { testcases := []struct { name string @@ -65,26 +19,49 @@ func TestGetKubeadmDependencies(t *testing.T) { "kubelet (>= 1.13.0)", "kubectl (>= 1.13.0)", "kubernetes-cni (>= 0.7.5)", - "${misc:Depends}", "cri-tools (>= 1.13.0)", + "${misc:Depends}", }, }, { name: "latest stable minor kubernetes", - version: "1.15.0", + version: "1.16.0", + deps: []string{ + "kubelet (>= 1.13.0)", + "kubectl (>= 1.13.0)", + "kubernetes-cni (>= 0.7.5)", + "cri-tools (>= 1.13.0)", + "${misc:Depends}", + }, + }, + { + name: "latest alpha kubernetes", + version: "1.17.0-alpha.0", deps: []string{ "kubelet (>= 1.13.0)", "kubectl (>= 1.13.0)", "kubernetes-cni (>= 0.7.5)", + "cri-tools (>= 1.13.0)", "${misc:Depends}", + }, + }, + { + name: "next stable minor kubernetes", + version: "1.17.0", + deps: []string{ + "kubelet (>= 1.13.0)", + "kubectl (>= 1.13.0)", + "kubernetes-cni (>= 0.7.5)", "cri-tools (>= 1.13.0)", + "${misc:Depends}", }, }, } + for _, tc := range testcases { t.Run(tc.name, func(t *testing.T) { - v := version{Version: tc.version} - deps, err := getKubeadmDependencies(v) + packageDef := packageDefinition{Version: tc.version} + deps, err := getKubeadmDependencies(packageDef) if err != nil { t.Fatalf("did not expect an error: %v", err) } diff --git a/build/debs/packages/latest/cri-tools/debian/changelog b/build/debs/packages/latest/cri-tools/debian/changelog index a581fede55c..4649e4027fd 100644 --- a/build/debs/packages/latest/cri-tools/debian/changelog +++ b/build/debs/packages/latest/cri-tools/debian/changelog @@ -1,4 +1,4 @@ -cri-tools ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium +cri-tools ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium * https://github.com/kubernetes-sigs/cri-tools/blob/master/CHANGELOG.md diff --git a/build/debs/packages/latest/kubeadm/debian/changelog b/build/debs/packages/latest/kubeadm/debian/changelog index d8a1944deb2..095985e7f75 100644 --- a/build/debs/packages/latest/kubeadm/debian/changelog +++ b/build/debs/packages/latest/kubeadm/debian/changelog @@ -1,4 +1,4 @@ -kubeadm ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium +kubeadm ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md diff --git a/build/debs/packages/latest/kubectl/debian/changelog b/build/debs/packages/latest/kubectl/debian/changelog index e8d45907a17..ec106f97ca7 100644 --- a/build/debs/packages/latest/kubectl/debian/changelog +++ b/build/debs/packages/latest/kubectl/debian/changelog @@ -1,4 +1,4 @@ -kubectl ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium +kubectl ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md diff --git a/build/debs/packages/latest/kubelet/debian/changelog b/build/debs/packages/latest/kubelet/debian/changelog index 7f2a4c558e0..dc1a7aab0b9 100644 --- a/build/debs/packages/latest/kubelet/debian/changelog +++ b/build/debs/packages/latest/kubelet/debian/changelog @@ -1,4 +1,4 @@ -kubelet ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium +kubelet ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md diff --git a/build/debs/packages/latest/kubernetes-cni/debian/changelog b/build/debs/packages/latest/kubernetes-cni/debian/changelog index 80e12019dd0..ab26993cda8 100644 --- a/build/debs/packages/latest/kubernetes-cni/debian/changelog +++ b/build/debs/packages/latest/kubernetes-cni/debian/changelog @@ -1,4 +1,4 @@ -kubernetes-cni ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium +kubernetes-cni ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md From bea0fad75de40690dcc1a947f872503ed5d0599f Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Tue, 8 Oct 2019 20:15:33 -0400 Subject: [PATCH 11/11] debs: Fix kubectl and kubelet rules Signed-off-by: Stephen Augustus --- build/debs/packages/latest/kubectl/debian/rules | 2 +- build/debs/packages/latest/kubelet/debian/rules | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/debs/packages/latest/kubectl/debian/rules b/build/debs/packages/latest/kubectl/debian/rules index 03e6ee0ab1a..a507f75948d 100755 --- a/build/debs/packages/latest/kubectl/debian/rules +++ b/build/debs/packages/latest/kubectl/debian/rules @@ -10,7 +10,7 @@ build: binary: mkdir -p usr/bin ifeq ($(KUBE_USE_LOCAL_ARTIFACTS),y) - cp $(shell go env GOPATH)/src/k8s.io/kubernetes/_output/dockerized/bin/linux/{{ .Arch }}/kubeadm usr/bin/kubectl + cp $(shell go env GOPATH)/src/k8s.io/kubernetes/_output/dockerized/bin/linux/{{ .Arch }}/kubectl usr/bin/kubectl else curl --fail -sSL --retry 5 \ -o usr/bin/kubectl \ diff --git a/build/debs/packages/latest/kubelet/debian/rules b/build/debs/packages/latest/kubelet/debian/rules index 143fcc103b3..94ae3759867 100755 --- a/build/debs/packages/latest/kubelet/debian/rules +++ b/build/debs/packages/latest/kubelet/debian/rules @@ -10,7 +10,7 @@ build: binary: mkdir -p usr/bin ifeq ($(KUBE_USE_LOCAL_ARTIFACTS),y) - cp $(shell go env GOPATH)/src/k8s.io/kubernetes/_output/dockerized/bin/linux/{{ .Arch }}/kubeadm usr/bin/kubelet + cp $(shell go env GOPATH)/src/k8s.io/kubernetes/_output/dockerized/bin/linux/{{ .Arch }}/kubelet usr/bin/kubelet else curl --fail -sSL --retry 5 \ -o usr/bin/kubelet \