diff --git a/pkgs/applications/networking/cluster/kubernetes/default.nix b/pkgs/applications/networking/cluster/kubernetes/default.nix index 75083409ba7b..860ecd1d0784 100644 --- a/pkgs/applications/networking/cluster/kubernetes/default.nix +++ b/pkgs/applications/networking/cluster/kubernetes/default.nix @@ -1,55 +1,69 @@ -{ stdenv, fetchFromGitHub, which, go, makeWrapper, iptables, rsync, utillinux, coreutils, e2fsprogs, procps-ng }: +{ stdenv, lib, fetchFromGitHub, which, go, go-bindata, makeWrapper, rsync +, iptables, coreutils +, components ? [ + "cmd/kubectl" + "cmd/kubelet" + "cmd/kube-apiserver" + "cmd/kube-controller-manager" + "cmd/kube-proxy" + "plugin/cmd/kube-scheduler" + "cmd/kube-dns" + "federation/cmd/federation-apiserver" + "federation/cmd/federation-controller-manager" + ] +}: + +with lib; stdenv.mkDerivation rec { name = "kubernetes-${version}"; - version = "1.2.4"; + version = "1.4.0"; src = fetchFromGitHub { owner = "kubernetes"; repo = "kubernetes"; rev = "v${version}"; - sha256 = "1a3y0f1l008ywkwwygg9vn2rb722c54i3pbgqks38gw1yyvgbiih"; + sha256 = "0q7xwdjsmfrz7pnmylkbkr2yxsl2gzzy17aapfznl2hb1ms81kys"; }; - buildInputs = [ makeWrapper which go iptables rsync ]; + buildInputs = [ makeWrapper which go rsync go-bindata ]; - buildPhase = '' - GOPATH=$(pwd):$(pwd)/Godeps/_workspace - mkdir -p $(pwd)/Godeps/_workspace/src/k8s.io - ln -s $(pwd) $(pwd)/Godeps/_workspace/src/k8s.io/kubernetes + outputs = ["out" "man""pause"]; + postPatch = '' substituteInPlace "hack/lib/golang.sh" --replace "_cgo" "" patchShebangs ./hack - hack/build-go.sh --use_go_build - - (cd cluster/addons/dns/kube2sky && go build ./kube2sky.go) ''; + WHAT="--use_go_build ${concatStringsSep " " components}"; + + postBuild = "(cd build/pause && gcc pause.c -o pause)"; + installPhase = '' - mkdir -p "$out/bin" "$out"/libexec/kubernetes/cluster - cp _output/local/go/bin/{kube*,hyperkube} "$out/bin/" - cp cluster/addons/dns/kube2sky/kube2sky "$out/bin/" - cp cluster/saltbase/salt/helpers/safe_format_and_mount "$out/libexec/kubernetes" - cp -R hack "$out/libexec/kubernetes" - cp cluster/update-storage-objects.sh "$out/libexec/kubernetes/cluster" - makeWrapper "$out"/libexec/kubernetes/cluster/update-storage-objects.sh "$out"/bin/kube-update-storage-objects \ - --prefix KUBE_BIN : "$out/bin" + mkdir -p "$out/bin" "$man/share/man" "$pause/bin" + + cp _output/local/go/bin/* "$out/bin/" + cp build/pause/pause "$pause/bin/pause" + cp -R docs/man/man1 "$man/share/man" ''; preFixup = '' wrapProgram "$out/bin/kube-proxy" --prefix PATH : "${iptables}/bin" - wrapProgram "$out/bin/kubelet" --prefix PATH : "${stdenv.lib.makeBinPath [ utillinux procps-ng ]}" - chmod +x "$out/libexec/kubernetes/safe_format_and_mount" - wrapProgram "$out/libexec/kubernetes/safe_format_and_mount" --prefix PATH : "${stdenv.lib.makeBinPath [ e2fsprogs utillinux ]}" - substituteInPlace "$out"/libexec/kubernetes/cluster/update-storage-objects.sh \ - --replace KUBE_OUTPUT_HOSTBIN KUBE_BIN + wrapProgram "$out/bin/kubelet" --prefix PATH : "${coreutils}/bin" + + # Remove references to go compiler + while read file; do + cat $file | sed "s,${go},$(echo "${go}" | sed "s,$NIX_STORE/[^-]*,$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,"),g" > $file.tmp + mv $file.tmp $file + chmod +x $file + done < <(find $out/bin $pause/bin -type f 2>/dev/null) ''; - meta = with stdenv.lib; { + meta = { description = "Production-Grade Container Scheduling and Management"; license = licenses.asl20; homepage = http://kubernetes.io; maintainers = with maintainers; [offline]; - platforms = [ "x86_64-linux" ]; + platforms = platforms.linux; }; }