Merge pull request #238857 from andrevmatos/pritunl
pritunl-client: refactor, add service and electron app
This commit is contained in:
commit
0cbf2bc9ad
1 changed files with 120 additions and 12 deletions
|
@ -1,9 +1,22 @@
|
|||
{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "pritunl-client";
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, runtimeShell
|
||||
, runCommand
|
||||
, makeWrapper
|
||||
, installShellFiles
|
||||
, buildGoModule
|
||||
, coreutils
|
||||
, which
|
||||
, gnugrep
|
||||
, gnused
|
||||
, openresolv
|
||||
, systemd
|
||||
, iproute2
|
||||
, openvpn
|
||||
, electron
|
||||
}: let
|
||||
version = "1.3.3584.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "pritunl";
|
||||
repo = "pritunl-client-electron";
|
||||
|
@ -11,25 +24,120 @@ buildGoModule rec {
|
|||
sha256 = "sha256-wWpP2u+oQSESjkRvAn5by7efvssYtKBYg2E+FZ/+tg0=";
|
||||
};
|
||||
|
||||
cli = buildGoModule {
|
||||
pname = "pritunl-cli";
|
||||
inherit version src;
|
||||
|
||||
modRoot = "cli";
|
||||
vendorHash = "sha256-miwGLWpoaavg/xcw/0pNBYCdovBnvjP5kdaaGPcRuWk=";
|
||||
|
||||
postInstall = ''
|
||||
mv $out/bin/cli $out/bin/pritunl-client
|
||||
'';
|
||||
};
|
||||
|
||||
service = buildGoModule {
|
||||
pname = "pritunl-client-service";
|
||||
inherit version src;
|
||||
|
||||
modRoot = "service";
|
||||
vendorHash = "sha256-9Fv8m3eWlxv4WWDSdI0VMavgy+0OSIVZ98dkDBwm4Gc=";
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
postPatch = ''
|
||||
sed -Ei service/profile/scripts.go \
|
||||
-e 's|#!\s*(/usr)?/bin/(env )?bash\b|#! ${runtimeShell}|g'
|
||||
'' + lib.optionalString stdenv.isLinux ''
|
||||
sed -Ei service/profile/scripts.go \
|
||||
-e 's|(/usr)?/s?bin/busctl\b|busctl|g' \
|
||||
-e 's|(/usr)?/s?bin/resolvectl\b|resolvectl|g' \
|
||||
-e 's|(/usr)?/s?bin/ip\b|ip|g'
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
mv $out/bin/service $out/bin/pritunl-client-service
|
||||
'' + lib.optionalString stdenv.isLinux ''
|
||||
mkdir -p $out/lib/systemd/system/
|
||||
cp $src/resources_linux/pritunl-client.service $out/lib/systemd/system/
|
||||
substituteInPlace $out/lib/systemd/system/pritunl-client.service \
|
||||
--replace "/usr" "$out"
|
||||
'';
|
||||
|
||||
postFixup = let
|
||||
hookScriptsDeps = [
|
||||
coreutils
|
||||
which
|
||||
gnused
|
||||
gnugrep
|
||||
] ++ lib.optionals stdenv.isLinux [
|
||||
openresolv
|
||||
systemd
|
||||
iproute2
|
||||
];
|
||||
openvpn-wrapped = runCommand "openvpn-wrapped" {
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
} ''
|
||||
mkdir -p $out/bin
|
||||
makeWrapper ${openvpn}/bin/openvpn $out/bin/openvpn \
|
||||
--prefix PATH : ${lib.makeBinPath hookScriptsDeps} \
|
||||
--add-flags "--setenv PATH \$PATH"
|
||||
'';
|
||||
in lib.optionalString stdenv.isLinux ''
|
||||
wrapProgram $out/bin/pritunl-client-service \
|
||||
--prefix PATH : "${lib.makeBinPath ([ openvpn-wrapped ])}"
|
||||
'';
|
||||
};
|
||||
in stdenv.mkDerivation {
|
||||
pname = "pritunl-client";
|
||||
inherit version src;
|
||||
|
||||
dontBuild = true;
|
||||
dontConfigure = true;
|
||||
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
installShellFiles
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
mv $out/bin/cli $out/bin/pritunl-client
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/bin/
|
||||
ln -s ${cli}/bin/pritunl-client $out/bin/
|
||||
ln -s ${service}/bin/pritunl-client-service $out/bin/
|
||||
|
||||
mkdir -p $out/lib/
|
||||
cp -r client $out/lib/pritunl_client_electron
|
||||
|
||||
makeWrapper ${electron}/bin/electron $out/bin/pritunl-client-electron \
|
||||
--add-flags $out/lib/pritunl_client_electron
|
||||
|
||||
'' + lib.optionalString stdenv.isLinux ''
|
||||
mkdir -p $out/lib/systemd/system/
|
||||
ln -s ${service}/lib/systemd/system/pritunl-client.service $out/lib/systemd/system/
|
||||
|
||||
mkdir -p $out/share/icons/
|
||||
cp -r resources_linux/icons $out/share/icons/hicolor
|
||||
|
||||
mkdir -p $out/share/applications/
|
||||
cp resources_linux/pritunl-client-electron.desktop $out/share/applications/
|
||||
substituteInPlace $out/share/applications/pritunl-client-electron.desktop \
|
||||
--replace "/usr/lib/pritunl_client_electron/Pritunl" "$out/bin/pritunl-client-electron"
|
||||
'' + ''
|
||||
# install shell completions for pritunl-client
|
||||
installShellCompletion --cmd pritunl-client \
|
||||
--bash <($out/bin/pritunl-client completion bash) \
|
||||
--fish <($out/bin/pritunl-client completion fish) \
|
||||
--zsh <($out/bin/pritunl-client completion zsh)
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Pritunl OpenVPN client CLI";
|
||||
homepage = "https://github.com/pritunl/pritunl-client-electron/tree/master/cli";
|
||||
description = "Pritunl OpenVPN client";
|
||||
homepage = "https://client.pritunl.com/";
|
||||
license = licenses.unfree;
|
||||
maintainers = with maintainers; [ minizilla ];
|
||||
maintainers = with maintainers; [ minizilla andrevmatos ];
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue