aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/generic.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/networking/remote/citrix-workspace/generic.nix')
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/citrix-workspace/generic.nix203
1 files changed, 203 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/generic.nix b/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/generic.nix
new file mode 100644
index 00000000000..c19cb585952
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/generic.nix
@@ -0,0 +1,203 @@
+{ stdenv, requireFile, makeWrapper, autoPatchelfHook, wrapGAppsHook, which, more
+, file, atk, alsaLib, cairo, fontconfig, gdk-pixbuf, glib, gnome3, gtk2-x11, gtk3
+, heimdal, krb5, libsoup, libvorbis, speex, openssl, zlib, xorg, pango, gtk2
+, gnome2, nss, nspr, gtk_engines, freetype, dconf, libpng12, libxml2
+, libjpeg, libredirect, tzdata, cacert, systemd, libcxxabi, libcxx, e2fsprogs, symlinkJoin
+
+, homepage, version, prefix, hash
+
+, extraCerts ? []
+}:
+
+let
+ inherit (stdenv) lib;
+
+ openssl' = symlinkJoin {
+ name = "openssl-backwards-compat";
+ nativeBuildInputs = [ makeWrapper ];
+ paths = [ openssl.out ];
+ postBuild = ''
+ ln -sf $out/lib/libcrypto.so $out/lib/libcrypto.so.1.0.0
+ ln -sf $out/lib/libssl.so $out/lib/libssl.so.1.0.0
+ '';
+ };
+in
+
+stdenv.mkDerivation rec {
+ pname = "citrix-workspace";
+ inherit version;
+
+ src = requireFile rec {
+ name = "${prefix}-${version}.tar.gz";
+ sha256 = hash;
+
+ message = ''
+ In order to use Citrix Workspace, you need to comply with the Citrix EULA and download
+ the ${if stdenv.is64bit then "64-bit" else "32-bit"} binaries, .tar.gz from:
+
+ ${homepage}
+
+ (if you do not find version ${version} there, try at
+ https://www.citrix.com/downloads/workspace-app/
+
+ Once you have downloaded the file, please use the following command and re-run the
+ installation:
+
+ nix-prefetch-url file://\$PWD/${name}
+ '';
+ };
+
+ dontBuild = true;
+ dontConfigure = true;
+ sourceRoot = ".";
+ preferLocalBuild = true;
+ passthru.icaroot = "${placeholder "out"}/opt/citrix-icaclient";
+
+ nativeBuildInputs = [
+ autoPatchelfHook
+ file
+ makeWrapper
+ more
+ which
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ alsaLib
+ atk
+ cairo
+ dconf
+ fontconfig
+ freetype
+ gdk-pixbuf
+ gnome2.gtkglext
+ gnome3.webkitgtk
+ gtk2
+ gtk2-x11
+ gtk3
+ gtk_engines
+ heimdal
+ krb5
+ libcxx
+ libcxxabi
+ libjpeg
+ libpng12
+ libsoup
+ libvorbis
+ libxml2
+ nspr
+ nss
+ openssl'
+ pango
+ speex
+ (lib.getLib systemd)
+ stdenv.cc.cc
+ xorg.libXaw
+ xorg.libXmu
+ xorg.libXScrnSaver
+ xorg.libXtst
+ zlib
+ ] ++ lib.optional (lib.versionOlder version "20.04") e2fsprogs;
+
+ runtimeDependencies = [
+ glib
+
+ xorg.libX11
+ xorg.libXScrnSaver
+ xorg.libXext
+ xorg.libXfixes
+ xorg.libXinerama
+ xorg.libXmu
+ xorg.libXrender
+ xorg.libXtst
+ xorg.libxcb
+ ];
+
+ installPhase = let
+ icaFlag = program:
+ if (builtins.match "selfservice(.*)" program) != null then "--icaroot"
+ else "-icaroot";
+ wrap = program: ''
+ wrapProgram $out/opt/citrix-icaclient/${program} \
+ --add-flags "${icaFlag program} $ICAInstDir" \
+ --set ICAROOT "$ICAInstDir" \
+ --prefix LD_LIBRARY_PATH : "$ICAInstDir:$ICAInstDir/lib" \
+ --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \
+ --set NIX_REDIRECTS "/usr/share/zoneinfo=${tzdata}/share/zoneinfo:/etc/zoneinfo=${tzdata}/share/zoneinfo:/etc/timezone=$ICAInstDir/timezone"
+ '';
+ wrapLink = program: ''
+ ${wrap program}
+ ln -sf $out/opt/citrix-icaclient/${program} $out/bin/${baseNameOf program}
+ '';
+
+ copyCert = path: ''
+ cp -v ${path} $out/opt/citrix-icaclient/keystore/cacerts/${baseNameOf path}
+ '';
+
+ mkWrappers = lib.concatMapStringsSep "\n";
+
+ toWrap = [ "wfica" "selfservice" "util/configmgr" "util/conncenter" "util/ctx_rehash" ]
+ ++ lib.optional (lib.versionOlder version "20.06") "selfservice_old";
+ in ''
+ runHook preInstall
+
+ mkdir -p $out/{bin,share/applications}
+ export ICAInstDir="$out/opt/citrix-icaclient"
+ export HOME=$(mktemp -d)
+
+ # Run upstream installer in the store-path.
+ sed -i -e 's,^ANSWER="",ANSWER="$INSTALLER_YES",g' -e 's,/bin/true,true,g' ./linuxx64/hinst
+ ${stdenv.shell} linuxx64/hinst CDROM "$(pwd)"
+
+ ${mkWrappers wrapLink toWrap}
+ ${mkWrappers wrap [ "PrimaryAuthManager" "ServiceRecord" "AuthManagerDaemon" "util/ctxwebhelper" ]}
+
+ ln -sf $ICAInstDir/util/storebrowse $out/bin/storebrowse
+
+ # As explained in https://wiki.archlinux.org/index.php/Citrix#Security_Certificates
+ echo "Expanding certificates..."
+ pushd "$ICAInstDir/keystore/cacerts"
+ awk 'BEGIN {c=0;} /BEGIN CERT/{c++} { print > "cert." c ".pem"}' \
+ < ${cacert}/etc/ssl/certs/ca-bundle.crt
+ popd
+
+ ${mkWrappers copyCert extraCerts}
+
+ # See https://developer-docs.citrix.com/projects/workspace-app-for-linux-oem-guide/en/latest/reference-information/#library-files
+ # Those files are fallbacks to support older libwekit.so and libjpeg.so
+ rm $out/opt/citrix-icaclient/lib/ctxjpeg_fb_8.so
+ rm $out/opt/citrix-icaclient/lib/UIDialogLibWebKit.so
+
+ # We support only Gstreamer 1.0
+ rm $ICAInstDir/util/{gst_aud_{play,read},gst_*0.10,libgstflatstm0.10.so}
+ ln -sf $ICAInstDir/util/gst_play1.0 $ICAInstDir/util/gst_play
+ ln -sf $ICAInstDir/util/gst_read1.0 $ICAInstDir/util/gst_read
+
+ echo "We arbitrarily set the timezone to UTC. No known consequences at this point."
+ echo UTC > "$ICAInstDir/timezone"
+
+ echo "Copy .desktop files."
+ cp $out/opt/citrix-icaclient/desktop/* $out/share/applications/
+
+ # We introduce a dependency on the source file so that it need not be redownloaded everytime
+ echo $src >> "$out/share/workspace_dependencies.pin"
+
+ runHook postInstall
+ '';
+
+ # Make sure that `autoPatchelfHook` is executed before
+ # running `ctx_rehash`.
+ dontAutoPatchelf = true;
+ postFixup = ''
+ autoPatchelf -- "$out"
+ $out/opt/citrix-icaclient/util/ctx_rehash
+ '';
+
+ meta = with lib; {
+ license = licenses.unfree;
+ description = "Citrix Workspace";
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ ma27 ];
+ inherit homepage;
+ };
+}