blob: 4c4026691d998e9a292d1e4ffa71a386f8702b52 [file] [log] [blame]
#
# Copyright 2022 Google LLC
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# version 2 as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
EAPI=7
inherit systemd toolchain-funcs
DESCRIPTION="Kubernetes package for node"
HOMEPAGE="https://k8s.io"
SRC_URI="https://github.com/kubernetes/kubernetes/archive/v${PV}.tar.gz -> ${P}.tar.gz"
# Including BSD here forces the license tools to scan the source for licenses.
# The k8s source includes all third-party licenses in the LICENSES directory, so
# the source scan catches everything. K8s itself is Apache-2.0 licensed.
# K8s has a ton of vendored third-party dependencies; making this ebuild value
# accurate isn't worth it given that the source gets scanned for licenses, and
# those licenses are included in about_os_credits.html.
LICENSE="
Apache-2.0
BSD
"
SLOT="0"
KEYWORDS="*"
IUSE="platform_gcp kubeadm"
BDEPEND="
dev-lang/go
"
RDEPEND="
app-arch/gzip
>=net-misc/socat-1.7.3.0
app-admin/logrotate
"
src_prepare() {
default
export BUILD_GO="$(tc-getBUILD_GO)"
go() {
echo "${BUILD_GO} $*" 1>&2
"${BUILD_GO}" "$@"
}
export -f go
hack/update-codegen.sh
unset -f go
unset BUILD_GO
}
src_configure() {
PROGRAMS=(
"kubelet"
"kubectl"
$(usex kubeadm kubeadm "")
)
}
PATCHES=(
"${FILESDIR}/runc-1.1.7-fix-CVE-2024-21626.patch"
)
src_compile() {
export GO="$(tc-getGO)"
go() {
echo "${GO} $*" 1>&2
"${GO}" "$@"
}
export -f go
# On arm64, cgo insists on using the gold linker
# (https://github.com/golang/go/blob/38607c553878da21b5042e63997ecb3b7201e684/src/cmd/link/internal/ld/lib.go#L1478).
# We don't have an arm64 gold linker. Use lld instead.
#
# A side effect of setting GOLDFLAGS is that debug symbols are included in
# the result executable. Installation strips those and includes them in
# /usr/lib/debug.
emake -j1 \
KUBE_VERBOSE=3 \
GOLDFLAGS=-extldflags=-fuse-ld=lld \
KUBE_BUILD_PLATFORMS="linux/${ARCH}" \
KUBE_CGO_OVERRIDES="${PROGRAMS[*]}" \
"KUBE_LINUX_${ARCH^^}_CC=${CC}" \
"${PROGRAMS[@]}"
unset -f go
unset GO
}
src_install() {
for prog in "${PROGRAMS[@]}"; do
if [[ "${prog}" == "" ]]; then
continue
fi
dobin "_output/local/bin/linux/${ARCH}/${prog}"
done
systemd_dounit "${FILESDIR}"/kubelet.service
insinto /etc/default
newins "${FILESDIR}"/default kubelet
insinto /etc/kubernetes
if use platform_gcp; then
newins "${FILESDIR}"/kubelet-config-gcp.yaml kubelet-config.yaml
else
newins "${FILESDIR}"/kubelet-config.yaml kubelet-config.yaml
fi
newins "${FILESDIR}"/cni-template.yaml cni.template
}