biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / servers / teleport / generic.nix
blobe47845ea56c6ff3deac09b67e48fa1d1e1b94ec3
1 { lib
2 , buildGoModule
3 , rustPlatform
4 , fetchFromGitHub
5 , fetchYarnDeps
6 , makeWrapper
7 , CoreFoundation
8 , AppKit
9 , binaryen
10 , cargo
11 , libfido2
12 , nodejs
13 , openssl
14 , pkg-config
15 , rustc
16 , Security
17 , stdenv
18 , xdg-utils
19 , yarn
20 , wasm-bindgen-cli
21 , wasm-pack
22 , fixup-yarn-lock
23 , nixosTests
25 , withRdpClient ? true
27 , version
28 , hash
29 , vendorHash
30 , extPatches ? null
31 , cargoHash ? null
32 , cargoLock ? null
33 , yarnHash
35 let
36   # This repo has a private submodule "e" which fetchgit cannot handle without failing.
37   src = fetchFromGitHub {
38     owner = "gravitational";
39     repo = "teleport";
40     rev = "v${version}";
41     inherit hash;
42   };
43   inherit version;
45   rdpClient = rustPlatform.buildRustPackage rec {
46     pname = "teleport-rdpclient";
47     inherit cargoHash cargoLock;
48     inherit version src;
50     buildAndTestSubdir = "lib/srv/desktop/rdp/rdpclient";
52     buildInputs = [ openssl ]
53       ++ lib.optionals stdenv.isDarwin [ CoreFoundation Security ];
54     nativeBuildInputs = [ pkg-config ];
56     # https://github.com/NixOS/nixpkgs/issues/161570 ,
57     # buildRustPackage sets strictDeps = true;
58     nativeCheckInputs = buildInputs;
60     OPENSSL_NO_VENDOR = "1";
62     postInstall = ''
63       mkdir -p $out/include
64       cp ${buildAndTestSubdir}/librdprs.h $out/include/
65     '';
66   };
68   yarnOfflineCache = fetchYarnDeps {
69     yarnLock = "${src}/yarn.lock";
70     hash = yarnHash;
71   };
73   webassets = stdenv.mkDerivation {
74     pname = "teleport-webassets";
75     inherit src version;
77     cargoDeps = rustPlatform.importCargoLock cargoLock;
79     RUSTFLAGS = builtins.concatStringsSep " " [
80       "-C linker=lld"
81     ];
83     nativeBuildInputs = [ nodejs yarn fixup-yarn-lock ] ++
84       lib.optional (lib.versionAtLeast version "15") [
85         binaryen
86         cargo
87         rustc
88         rustc.llvmPackages.lld
89         rustPlatform.cargoSetupHook
90         wasm-bindgen-cli
91         wasm-pack
92       ];
94     configurePhase = ''
95       export HOME=$(mktemp -d)
96     '';
98     buildPhase = ''
99       yarn config --offline set yarn-offline-mirror ${yarnOfflineCache}
100       fixup-yarn-lock yarn.lock
102       yarn install --offline \
103         --frozen-lockfile \
104         --ignore-engines --ignore-scripts
105       patchShebangs .
107       ${if lib.versionAtLeast version "15"
108       then ''
109         PATH=$PATH:$PWD/node_modules/.bin
110         pushd web/packages/teleport
111         # https://github.com/gravitational/teleport/blob/6b91fe5bbb9e87db4c63d19f94ed4f7d0f9eba43/web/packages/teleport/README.md?plain=1#L18-L20
112         RUST_MIN_STACK=16777216 wasm-pack build ./src/ironrdp --target web --mode no-install
113         vite build
114         popd
115       ''
116       else "yarn build-ui-oss"}
117     '';
119     installPhase = ''
120       mkdir -p $out
121       cp -R webassets/. $out
122     '';
123   };
125 buildGoModule rec {
126   pname = "teleport";
128   inherit src version;
129   inherit vendorHash;
130   proxyVendor = true;
132   subPackages = [ "tool/tbot" "tool/tctl" "tool/teleport" "tool/tsh" ];
133   tags = [ "libfido2" "webassets_embed" ]
134     ++ lib.optional withRdpClient "desktop_access_rdp";
136   buildInputs = [ openssl libfido2 ]
137     ++ lib.optionals (stdenv.isDarwin && withRdpClient) [ CoreFoundation Security AppKit ];
138   nativeBuildInputs = [ makeWrapper pkg-config ];
140   patches = extPatches ++ [
141     ./0001-fix-add-nix-path-to-exec-env.patch
142     ./rdpclient.patch
143   ];
145   # Reduce closure size for client machines
146   outputs = [ "out" "client" ];
148   preBuild = ''
149     cp -r ${webassets} webassets
150   '' + lib.optionalString withRdpClient ''
151     ln -s ${rdpClient}/lib/* lib/
152     ln -s ${rdpClient}/include/* lib/srv/desktop/rdp/rdpclient/
153   '';
155   # Multiple tests fail in the build sandbox
156   # due to trying to spawn nixbld's shell (/noshell), etc.
157   doCheck = false;
159   postInstall = ''
160     mkdir -p $client/bin
161     mv {$out,$client}/bin/tsh
162     # make xdg-open overrideable at runtime
163     wrapProgram $client/bin/tsh --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
164     ln -s {$client,$out}/bin/tsh
165   '';
167   doInstallCheck = true;
169   installCheckPhase = ''
170     $out/bin/tsh version | grep ${version} > /dev/null
171     $client/bin/tsh version | grep ${version} > /dev/null
172     $out/bin/tbot version | grep ${version} > /dev/null
173     $out/bin/tctl version | grep ${version} > /dev/null
174     $out/bin/teleport version | grep ${version} > /dev/null
175   '';
177   passthru.tests = nixosTests.teleport;
179   meta = with lib; {
180     description = "Certificate authority and access plane for SSH, Kubernetes, web applications, and databases";
181     homepage = "https://goteleport.com/";
182     license = if lib.versionAtLeast version "15" then licenses.agpl3Plus else licenses.asl20;
183     maintainers = with maintainers; [ arianvp justinas sigma tomberek freezeboy techknowlogick ];
184     platforms = platforms.unix;
185     # go-libfido2 is broken on platforms with less than 64-bit because it defines an array
186     # which occupies more than 31 bits of address space.
187     broken = stdenv.hostPlatform.parsed.cpu.bits < 64;
188   };