teleport: migrate to new buildTeleport

This facilitates using different Go and wasm-bindgen-cli versions more
easily, which will be needed for the new teleport_18 version.

Changed files
+240 -213
pkgs
+215
pkgs/build-support/teleport/default.nix
···
+
{
+
lib,
+
rustPlatform,
+
fetchFromGitHub,
+
fetchpatch,
+
makeWrapper,
+
binaryen,
+
cargo,
+
libfido2,
+
nodejs,
+
openssl,
+
pkg-config,
+
pnpm_10,
+
rustc,
+
stdenv,
+
xdg-utils,
+
wasm-pack,
+
nixosTests,
+
}:
+
+
{
+
version,
+
hash,
+
cargoHash,
+
pnpmHash,
+
vendorHash,
+
wasm-bindgen-cli,
+
buildGoModule,
+
+
withRdpClient ? true,
+
extPatches ? [ ],
+
}:
+
let
+
+
# This repo has a private submodule "e" which fetchgit cannot handle without failing.
+
src = fetchFromGitHub {
+
owner = "gravitational";
+
repo = "teleport";
+
tag = "v${version}";
+
inherit hash;
+
};
+
pname = "teleport";
+
inherit version;
+
+
rdpClient = rustPlatform.buildRustPackage (finalAttrs: {
+
pname = "teleport-rdpclient";
+
inherit cargoHash;
+
inherit version src;
+
+
buildAndTestSubdir = "lib/srv/desktop/rdp/rdpclient";
+
+
buildInputs = [ openssl ];
+
nativeBuildInputs = [ pkg-config ];
+
+
# https://github.com/NixOS/nixpkgs/issues/161570 ,
+
# buildRustPackage sets strictDeps = true;
+
nativeCheckInputs = finalAttrs.buildInputs;
+
+
OPENSSL_NO_VENDOR = "1";
+
+
postInstall = ''
+
mkdir -p $out/include
+
cp ${finalAttrs.buildAndTestSubdir}/librdprs.h $out/include/
+
'';
+
});
+
+
webassets = stdenv.mkDerivation {
+
pname = "teleport-webassets";
+
inherit src version;
+
+
cargoDeps = rustPlatform.fetchCargoVendor {
+
inherit src;
+
hash = cargoHash;
+
};
+
+
pnpmDeps = pnpm_10.fetchDeps {
+
inherit src pname version;
+
fetcherVersion = 1;
+
hash = pnpmHash;
+
};
+
+
nativeBuildInputs = [
+
binaryen
+
cargo
+
nodejs
+
pnpm_10.configHook
+
rustc
+
rustc.llvmPackages.lld
+
rustPlatform.cargoSetupHook
+
wasm-bindgen-cli
+
wasm-pack
+
];
+
+
patches = [
+
./disable-wasm-opt-for-ironrdp.patch
+
];
+
+
configurePhase = ''
+
runHook preConfigure
+
+
export HOME=$(mktemp -d)
+
+
runHook postConfigure
+
'';
+
+
buildPhase = ''
+
PATH=$PATH:$PWD/node_modules/.bin
+
+
pushd web/packages
+
pushd shared
+
# https://github.com/gravitational/teleport/blob/6b91fe5bbb9e87db4c63d19f94ed4f7d0f9eba43/web/packages/teleport/README.md?plain=1#L18-L20
+
RUST_MIN_STACK=16777216 wasm-pack build ./libs/ironrdp --target web --mode no-install
+
popd
+
pushd teleport
+
vite build
+
popd
+
popd
+
'';
+
+
installPhase = ''
+
mkdir -p $out
+
cp -R webassets/. $out
+
'';
+
};
+
in
+
buildGoModule (finalAttrs: {
+
inherit pname src version;
+
inherit vendorHash;
+
proxyVendor = true;
+
+
subPackages = [
+
"tool/tbot"
+
"tool/tctl"
+
"tool/teleport"
+
"tool/tsh"
+
];
+
tags = [
+
"libfido2"
+
"webassets_embed"
+
]
+
++ lib.optional withRdpClient "desktop_access_rdp";
+
+
buildInputs = [
+
openssl
+
libfido2
+
];
+
nativeBuildInputs = [
+
makeWrapper
+
pkg-config
+
];
+
+
patches = extPatches ++ [
+
./0001-fix-add-nix-path-to-exec-env.patch
+
./rdpclient.patch
+
./tsh.patch
+
];
+
+
# Reduce closure size for client machines
+
outputs = [
+
"out"
+
"client"
+
];
+
+
preBuild = ''
+
cp -r ${webassets} webassets
+
''
+
+ lib.optionalString withRdpClient ''
+
ln -s ${rdpClient}/lib/* lib/
+
ln -s ${rdpClient}/include/* lib/srv/desktop/rdp/rdpclient/
+
'';
+
+
# Multiple tests fail in the build sandbox
+
# due to trying to spawn nixbld's shell (/noshell), etc.
+
doCheck = false;
+
+
postInstall = ''
+
mkdir -p $client/bin
+
mv {$out,$client}/bin/tsh
+
# make xdg-open overrideable at runtime
+
wrapProgram $client/bin/tsh --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
+
ln -s {$client,$out}/bin/tsh
+
'';
+
+
doInstallCheck = true;
+
+
installCheckPhase = ''
+
export HOME=$(mktemp -d)
+
$out/bin/tsh version | grep ${version} > /dev/null
+
$client/bin/tsh version | grep ${version} > /dev/null
+
$out/bin/tbot version | grep ${version} > /dev/null
+
$out/bin/tctl version | grep ${version} > /dev/null
+
$out/bin/teleport version | grep ${version} > /dev/null
+
'';
+
+
passthru.tests = nixosTests.teleport;
+
+
meta = {
+
description = "Certificate authority and access plane for SSH, Kubernetes, web applications, and databases";
+
homepage = "https://goteleport.com/";
+
license = lib.licenses.agpl3Plus;
+
maintainers = with lib.maintainers; [
+
arianvp
+
justinas
+
sigma
+
tomberek
+
freezeboy
+
techknowlogick
+
juliusfreudenberger
+
];
+
platforms = lib.platforms.unix;
+
# go-libfido2 is broken on platforms with less than 64-bit because it defines an array
+
# which occupies more than 31 bits of address space.
+
broken = stdenv.hostPlatform.parsed.cpu.bits < 64;
+
};
+
})
pkgs/by-name/te/teleport/0001-fix-add-nix-path-to-exec-env.patch pkgs/build-support/teleport/0001-fix-add-nix-path-to-exec-env.patch
pkgs/by-name/te/teleport/disable-wasm-opt-for-ironrdp.patch pkgs/build-support/teleport/disable-wasm-opt-for-ironrdp.patch
+2 -209
pkgs/by-name/te/teleport/package.nix
···
{
-
lib,
-
buildGo123Module,
-
rustPlatform,
-
fetchFromGitHub,
-
fetchpatch,
-
makeWrapper,
-
binaryen,
-
cargo,
-
libfido2,
-
nodejs,
-
openssl,
-
pkg-config,
-
pnpm_10,
-
rustc,
-
stdenv,
-
xdg-utils,
-
wasm-bindgen-cli_0_2_95,
-
wasm-pack,
-
nixosTests,
-
-
withRdpClient ? true,
-
-
version ? "17.5.4",
-
hash ? "sha256-ojRIyPTrSG3/xuqdaUNrN4s5HP3E8pvzjG8h+qFEYrc=",
-
vendorHash ? "sha256-IHXwCp1MdcEKJhIs9DNf77Vd93Ai2as7ROlh6AJT9+Q=",
-
extPatches ? [ ],
-
cargoHash ? "sha256-qz8gkooQTuBlPWC4lHtvBQpKkd+nEZ0Hl7AVg9JkPqs=",
-
pnpmHash ? "sha256-YwftGEQTEI8NvFTFLMJHhYkvaIIP9+bskCQCp5xuEtY=",
+
teleport_17,
}:
-
let
-
# This repo has a private submodule "e" which fetchgit cannot handle without failing.
-
src = fetchFromGitHub {
-
owner = "gravitational";
-
repo = "teleport";
-
rev = "v${version}";
-
inherit hash;
-
};
-
pname = "teleport";
-
inherit version;
-
rdpClient = rustPlatform.buildRustPackage (finalAttrs: {
-
pname = "teleport-rdpclient";
-
-
inherit cargoHash;
-
inherit version src;
-
-
buildAndTestSubdir = "lib/srv/desktop/rdp/rdpclient";
-
-
buildInputs = [ openssl ];
-
nativeBuildInputs = [ pkg-config ];
-
-
# https://github.com/NixOS/nixpkgs/issues/161570 ,
-
# buildRustPackage sets strictDeps = true;
-
nativeCheckInputs = finalAttrs.buildInputs;
-
-
OPENSSL_NO_VENDOR = "1";
-
-
postInstall = ''
-
mkdir -p $out/include
-
cp ${finalAttrs.buildAndTestSubdir}/librdprs.h $out/include/
-
'';
-
});
-
-
webassets = stdenv.mkDerivation {
-
pname = "teleport-webassets";
-
inherit src version;
-
-
cargoDeps = rustPlatform.fetchCargoVendor {
-
inherit src;
-
hash = cargoHash;
-
};
-
-
pnpmDeps = pnpm_10.fetchDeps {
-
inherit src pname version;
-
fetcherVersion = 1;
-
hash = pnpmHash;
-
};
-
-
nativeBuildInputs = [
-
binaryen
-
cargo
-
nodejs
-
pnpm_10.configHook
-
rustc
-
rustc.llvmPackages.lld
-
rustPlatform.cargoSetupHook
-
wasm-bindgen-cli_0_2_95
-
wasm-pack
-
];
-
-
patches = [
-
./disable-wasm-opt-for-ironrdp.patch
-
];
-
-
configurePhase = ''
-
runHook preConfigure
-
-
export HOME=$(mktemp -d)
-
-
runHook postConfigure
-
'';
-
-
buildPhase = ''
-
PATH=$PATH:$PWD/node_modules/.bin
-
-
pushd web/packages
-
pushd shared
-
# https://github.com/gravitational/teleport/blob/6b91fe5bbb9e87db4c63d19f94ed4f7d0f9eba43/web/packages/teleport/README.md?plain=1#L18-L20
-
RUST_MIN_STACK=16777216 wasm-pack build ./libs/ironrdp --target web --mode no-install
-
popd
-
pushd teleport
-
vite build
-
popd
-
popd
-
'';
-
-
installPhase = ''
-
mkdir -p $out
-
cp -R webassets/. $out
-
'';
-
};
-
in
-
buildGo123Module (finalAttrs: {
-
inherit pname src version;
-
inherit vendorHash;
-
proxyVendor = true;
-
-
subPackages = [
-
"tool/tbot"
-
"tool/tctl"
-
"tool/teleport"
-
"tool/tsh"
-
];
-
tags = [
-
"libfido2"
-
"webassets_embed"
-
]
-
++ lib.optional withRdpClient "desktop_access_rdp";
-
-
buildInputs = [
-
openssl
-
libfido2
-
];
-
nativeBuildInputs = [
-
makeWrapper
-
pkg-config
-
];
-
-
patches = extPatches ++ [
-
./0001-fix-add-nix-path-to-exec-env.patch
-
./rdpclient.patch
-
./tsh.patch
-
];
-
-
# Reduce closure size for client machines
-
outputs = [
-
"out"
-
"client"
-
];
-
-
preBuild = ''
-
cp -r ${webassets} webassets
-
''
-
+ lib.optionalString withRdpClient ''
-
ln -s ${rdpClient}/lib/* lib/
-
ln -s ${rdpClient}/include/* lib/srv/desktop/rdp/rdpclient/
-
'';
-
-
# Multiple tests fail in the build sandbox
-
# due to trying to spawn nixbld's shell (/noshell), etc.
-
doCheck = false;
-
-
postInstall = ''
-
mkdir -p $client/bin
-
mv {$out,$client}/bin/tsh
-
# make xdg-open overrideable at runtime
-
wrapProgram $client/bin/tsh --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
-
ln -s {$client,$out}/bin/tsh
-
'';
-
-
doInstallCheck = true;
-
-
installCheckPhase = ''
-
$out/bin/tsh version | grep ${version} > /dev/null
-
$client/bin/tsh version | grep ${version} > /dev/null
-
$out/bin/tbot version | grep ${version} > /dev/null
-
$out/bin/tctl version | grep ${version} > /dev/null
-
$out/bin/teleport version | grep ${version} > /dev/null
-
'';
-
-
passthru.tests = nixosTests.teleport;
-
-
meta = {
-
description = "Certificate authority and access plane for SSH, Kubernetes, web applications, and databases";
-
homepage = "https://goteleport.com/";
-
license = lib.licenses.agpl3Plus;
-
maintainers = with lib.maintainers; [
-
arianvp
-
justinas
-
sigma
-
tomberek
-
freezeboy
-
techknowlogick
-
juliusfreudenberger
-
];
-
platforms = lib.platforms.unix;
-
# go-libfido2 is broken on platforms with less than 64-bit because it defines an array
-
# which occupies more than 31 bits of address space.
-
broken = stdenv.hostPlatform.parsed.cpu.bits < 64;
-
};
-
})
+
teleport_17
pkgs/by-name/te/teleport/rdpclient.patch pkgs/build-support/teleport/rdpclient.patch
pkgs/by-name/te/teleport/tsh.patch pkgs/build-support/teleport/tsh.patch
+7 -2
pkgs/by-name/te/teleport_16/package.nix
···
{
-
teleport,
+
buildTeleport,
+
buildGo123Module,
+
wasm-bindgen-cli_0_2_95,
}:
-
teleport.override {
+
buildTeleport rec {
version = "16.5.13";
hash = "sha256-X9Ujgvp+2dFCoku0tjGW4W05X8QrnExFE+H1kMhf91A=";
vendorHash = "sha256-0+7xbIONnZs7dPpfpHPmep+k4XxQE8TS/eKz4F5a3V0=";
pnpmHash = "sha256-waBzmNs20wbuoBDObVFnJjEYs3NJ/bzQksVz7ltMD7M=";
cargoHash = "sha256-04zykCcVTptEPGy35MIWG+tROKFzEepLBmn04mSbt7I=";
+
+
wasm-bindgen-cli = wasm-bindgen-cli_0_2_95;
+
buildGoModule = buildGo123Module;
}
+14 -2
pkgs/by-name/te/teleport_17/package.nix
···
{
-
teleport,
+
buildTeleport,
+
buildGo123Module,
+
wasm-bindgen-cli_0_2_95,
}:
-
teleport
+
+
buildTeleport rec {
+
version = "17.5.4";
+
hash = "sha256-ojRIyPTrSG3/xuqdaUNrN4s5HP3E8pvzjG8h+qFEYrc=";
+
vendorHash = "sha256-IHXwCp1MdcEKJhIs9DNf77Vd93Ai2as7ROlh6AJT9+Q=";
+
cargoHash = "sha256-qz8gkooQTuBlPWC4lHtvBQpKkd+nEZ0Hl7AVg9JkPqs=";
+
pnpmHash = "sha256-YwftGEQTEI8NvFTFLMJHhYkvaIIP9+bskCQCp5xuEtY=";
+
+
wasm-bindgen-cli = wasm-bindgen-cli_0_2_95;
+
buildGoModule = buildGo123Module;
+
}
+2
pkgs/top-level/all-packages.nix
···
teamviewer = libsForQt5.callPackage ../applications/networking/remote/teamviewer { };
+
buildTeleport = callPackage ../build-support/teleport { };
+
telepresence = callPackage ../tools/networking/telepresence {
pythonPackages = python3Packages;
};