summary refs log tree commit diff
path: root/pkgs/applications/networking/remote
diff options
context:
space:
mode:
authorobadz <obadz-git@obadz.com>2017-10-23 17:53:11 +0100
committerobadz <obadz-git@obadz.com>2017-10-23 18:02:20 +0100
commit26122b368a446ca54144faa6ff0ff4d2c5559658 (patch)
tree53041a339d12587a8ab537c816cf680fc102d0cc /pkgs/applications/networking/remote
parent32866a3b0b0377a30ba29ff26bd630cf204fc664 (diff)
downloadnixlib-26122b368a446ca54144faa6ff0ff4d2c5559658.tar
nixlib-26122b368a446ca54144faa6ff0ff4d2c5559658.tar.gz
nixlib-26122b368a446ca54144faa6ff0ff4d2c5559658.tar.bz2
nixlib-26122b368a446ca54144faa6ff0ff4d2c5559658.tar.lz
nixlib-26122b368a446ca54144faa6ff0ff4d2c5559658.tar.xz
nixlib-26122b368a446ca54144faa6ff0ff4d2c5559658.tar.zst
nixlib-26122b368a446ca54144faa6ff0ff4d2c5559658.zip
citrix_receiver: refactor so older versions can still be installed
Version 13.4.0 is the latest version that doesn't suffer from the bug
described at
https://discussions.citrix.com/topic/385459-ssl-error-with-135-works-with-134/page-2#entry1977735

As a result, upgrades to 13.5.0, 13.6.0 and 13.7.0 were postponed.
However some users aren't affected by this big. This enables everyone to
download the version that suits their needs.

Related to: #23975, #27664, #30029
Diffstat (limited to 'pkgs/applications/networking/remote')
-rw-r--r--pkgs/applications/networking/remote/citrix-receiver/default.nix339
1 files changed, 192 insertions, 147 deletions
diff --git a/pkgs/applications/networking/remote/citrix-receiver/default.nix b/pkgs/applications/networking/remote/citrix-receiver/default.nix
index 0645e9cb6061..f6be80e4a1d4 100644
--- a/pkgs/applications/networking/remote/citrix-receiver/default.nix
+++ b/pkgs/applications/networking/remote/citrix-receiver/default.nix
@@ -1,4 +1,5 @@
 { stdenv
+, lib
 , requireFile
 , makeWrapper
 , libredirect
@@ -22,154 +23,198 @@
 , alsaLib
 , libidn
 , zlib
+, version ? null
 }:
 
-let versionRec = { major = "13"; minor = "7"; patch = "0"; };
-in stdenv.mkDerivation rec {
-  name = "citrix-receiver-${version}";
-  version = with versionRec; "${major}.${minor}.${patch}";
-  homepage = https://www.citrix.com/downloads/citrix-receiver/linux/receiver-for-linux-latest.html;
-
-  prefixWithBitness = if stdenv.is64bit then "linuxx64" else "linuxx86";
-
-  src = with versionRec; requireFile rec {
-    name =
-      if stdenv.is64bit
-      then "${prefixWithBitness}-${version}.10276927.tar.gz"
-      else "${prefixWithBitness}-${version}.10276925.tar.gz";
-    sha256 =
-      if stdenv.is64bit
-      then "18fb374b9fb8e249b79178500dddca7a1f275411c6537e7695da5dcf19c5ba91"
-      else "4c68723b0327cf6f12da824056fce2b7853c38e6163a48c9d222b93dd8da75b6";
-    message = ''
-      In order to use Citrix Receiver, 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/citrix-receiver/legacy-receiver-for-linux/receiver-for-linux-latest-${major}-${minor}.html
-      or at https://www.citrix.com/downloads/citrix-receiver/ under "Earlier Versions of Receiver for Linux")
-
-      Once you have downloaded the file, please use the following command and re-run the
-      installation:
-
-      nix-prefetch-url file://\$PWD/${name}
-    '';
+let
+  versionInfo = {
+    "13.4.0" = rec {
+      major     = "13";
+      minor     = "4";
+      patch     = "0";
+      x64hash   = "133brs0sq6d0mgr19rc6ig1n9ahm3ryi23v5nrgqfh0hgxqcrrjb";
+      x86hash   = "0r7jfl5yqv1s2npy8l9gsn0gbb82f6raa092ppkc8xy5pni5sh7l";
+      x64suffix = "10109380";
+      x86suffix = x64suffix;
+      homepage  = https://www.citrix.com/downloads/citrix-receiver/legacy-receiver-for-linux/receiver-for-linux-latest-13-4.html;
+    };
+
+    "13.5.0" = rec {
+      major     = "13";
+      minor     = "5";
+      patch     = "0";
+      x64hash   = "1r24mhkpcc0z95n597p07fz92pd1b8qqzp2z6w07rmb9wb8mpd4x";
+      x86hash   = "0pwxshlryzhkl86cj9ryybm54alhzjx0gpp67fnvdn5r64wy1nd1";
+      x64suffix = "10185126";
+      x86suffix = x64suffix;
+      homepage  = https://www.citrix.com/downloads/citrix-receiver/legacy-receiver-for-linux/receiver-for-linux-latest-13-5.html;
+    };
+
+    "13.6.0" = rec {
+      major     = "13";
+      minor     = "6";
+      patch     = "0";
+      x64hash   = "6e423be41d5bb8186bcca3fbb4ede54dc3f00b8d2aeb216ae4aabffef9310d34";
+      x86hash   = "0ba3eba208b37844904d540b3011075ed5cecf429a0ab6c6cd52f2d0fd841ad2";
+      x64suffix = "10243651";
+      x86suffix = x64suffix;
+      homepage  = https://www.citrix.com/downloads/citrix-receiver/legacy-receiver-for-linux/receiver-for-linux-136.html;
+    };
+
+    "13.7.0" = {
+      major     = "13";
+      minor     = "7";
+      patch     = "0";
+      x64hash   = "18fb374b9fb8e249b79178500dddca7a1f275411c6537e7695da5dcf19c5ba91";
+      x86hash   = "4c68723b0327cf6f12da824056fce2b7853c38e6163a48c9d222b93dd8da75b6";
+      homepage  = https://www.citrix.com/downloads/citrix-receiver/linux/receiver-for-linux-latest.html; # Fix when updating version
+      x64suffix = "10276927";
+      x86suffix = "10276925";
+    };
   };
 
-  phases = [ "unpackPhase" "installPhase" ];
-
-  sourceRoot = ".";
-
-  buildInputs = [
-    makeWrapper
-    busybox
-    file
-    gtk2
-    gdk_pixbuf
-  ];
-
-  libPath = stdenv.lib.makeLibraryPath [
-    glib
-    gtk2
-    atk
-    gdk_pixbuf
-    cairo
-    pango
-    gnome3.dconf
-    xlibs.libX11
-    xlibs.libXext
-    xlibs.libXrender
-    xlibs.libXinerama
-    xlibs.libXfixes
-    libpng12
-    libidn
-    zlib
-    gtk_engines
-    freetype
-    fontconfig
-    alsaLib
-    stdenv.cc.cc # Fixes: Can not load [..]/opt/citrix-icaclient/lib/ctxh264_fb.so:(null)
-  ];
-
-  desktopItem = makeDesktopItem {
-    name = "wfica";
-    desktopName = "Citrix Receiver";
-    genericName = "Citrix Receiver";
-    exec = "wfica";
-    icon = "wfica";
-    comment = "Connect to remote Citrix server";
-    categories = "GTK;GNOME;X-GNOME-NetworkSettings;Network;";
-    mimeType = "application/x-ica";
-  };
-
-  installPhase = ''
-    export ICAInstDir="$out/opt/citrix-icaclient"
-
-    sed -i \
-      -e 's,^main_install_menu$,install_ICA_client,g' \
-      -e 's,^integrate_ICA_client(),alias integrate_ICA_client=true\nintegrate_ICA_client_old(),g' \
-      -e 's,^ANSWER=""$,ANSWER="$INSTALLER_YES",' \
-      -e 's,/bin/true,true,g' \
-      ./${prefixWithBitness}/hinst
-
-    # Run the installer...
-    ./${prefixWithBitness}/hinst CDROM "`pwd`"
-
-    echo "Deleting broken links..."
-    for link in `find $ICAInstDir -type l `
-    do
-      [ -f "$link" ] || rm -v "$link"
-    done
-
-    echo "Expanding certificates..."
-    # As explained in https://wiki.archlinux.org/index.php/Citrix#Security_Certificates
-    pushd "$ICAInstDir/keystore/cacerts"
-    awk 'BEGIN {c=0;} /BEGIN CERT/{c++} { print > "cert." c ".pem"}' < ${cacert}/etc/ssl/certs/ca-bundle.crt
-    popd
-
-    echo "Patching executables..."
-    find $ICAInstDir -type f -exec file {} \; |
-      grep 'ELF.*executable' |
-      cut -f 1 -d : |
-      while read f
-      do
-        echo "Patching ELF intrepreter and rpath for $f"
-        chmod u+w "$f"
-        patchelf \
-          --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
-          --set-rpath "$ICAInstDir:$libPath" "$f"
-      done
-
-    echo "Wrapping wfica..."
-    mkdir "$out/bin"
-
-    makeWrapper "$ICAInstDir/wfica" "$out/bin/wfica" \
-      --add-flags "-icaroot $ICAInstDir" \
-      --set ICAROOT "$ICAInstDir" \
-      --set GTK_PATH "${gtk2.out}/lib/gtk-2.0:${gnome3.gnome_themes_standard}/lib/gtk-2.0" \
-      --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \
-      --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \
-      --set LD_LIBRARY_PATH "$libPath" \
-      --set NIX_REDIRECTS "/usr/share/zoneinfo=${tzdata}/share/zoneinfo:/etc/zoneinfo=${tzdata}/share/zoneinfo:/etc/timezone=$ICAInstDir/timezone"
-
-    echo "We arbitrarily set the timezone to UTC. No known consequences at this point."
-    echo UTC > "$ICAInstDir/timezone"
-
-    echo "Installing desktop item..."
-    mkdir -p $out/share/applications
-    cp ${desktopItem}/share/applications/* $out/share/applications
-
-    # We introduce a dependency on the source file so that it need not be redownloaded everytime
-    echo $src >> "$out/share/nix_dependencies.pin"
-  '';
-
-  meta = with stdenv.lib; {
-    license = stdenv.lib.licenses.unfree;
-    homepage = homepage;
-    description = "Citrix Receiver";
-    maintainers = with maintainers; [ obadz a1russell ];
-    platforms = platforms.linux;
-  };
-}
+  citrixReceiverForVersion = { major, minor, patch, x86hash, x64hash, x86suffix, x64suffix, homepage }:
+    stdenv.mkDerivation rec {
+      name     = "citrix-receiver-${version}";
+      version  = "${major}.${minor}.${patch}";
+      inherit homepage;
+
+      prefixWithBitness = if stdenv.is64bit then "linuxx64" else "linuxx86";
+
+      src = requireFile rec {
+        name    = if stdenv.is64bit then "${prefixWithBitness}-${version}.${x64suffix}.tar.gz" else "${prefixWithBitness}-${version}.${x86suffix}.tar.gz";
+        sha256  = if stdenv.is64bit then x64hash else x86hash;
+        message = ''
+          In order to use Citrix Receiver, 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/citrix-receiver/legacy-receiver-for-linux/
+          or at https://www.citrix.com/downloads/citrix-receiver/ under "Earlier Versions of Receiver for Linux")
+
+          Once you have downloaded the file, please use the following command and re-run the
+          installation:
+
+          nix-prefetch-url file://\$PWD/${name}
+        '';
+      };
+
+      phases = [ "unpackPhase" "installPhase" ];
+
+      sourceRoot = ".";
+
+      buildInputs = [
+        makeWrapper
+        busybox
+        file
+        gtk2
+        gdk_pixbuf
+      ];
+
+      libPath = stdenv.lib.makeLibraryPath [
+        glib
+        gtk2
+        atk
+        gdk_pixbuf
+        cairo
+        pango
+        gnome3.dconf
+        xlibs.libX11
+        xlibs.libXext
+        xlibs.libXrender
+        xlibs.libXinerama
+        xlibs.libXfixes
+        libpng12
+        libidn
+        zlib
+        gtk_engines
+        freetype
+        fontconfig
+        alsaLib
+        stdenv.cc.cc # Fixes: Can not load [..]/opt/citrix-icaclient/lib/ctxh264_fb.so:(null)
+      ];
+
+      desktopItem = makeDesktopItem {
+        name        = "wfica";
+        desktopName = "Citrix Receiver";
+        genericName = "Citrix Receiver";
+        exec        = "wfica";
+        icon        = "wfica";
+        comment     = "Connect to remote Citrix server";
+        categories  = "GTK;GNOME;X-GNOME-NetworkSettings;Network;";
+        mimeType    = "application/x-ica";
+      };
+
+      installPhase = ''
+        export ICAInstDir="$out/opt/citrix-icaclient"
+
+        sed -i \
+          -e 's,^main_install_menu$,install_ICA_client,g' \
+          -e 's,^integrate_ICA_client(),alias integrate_ICA_client=true\nintegrate_ICA_client_old(),g' \
+          -e 's,^ANSWER=""$,ANSWER="$INSTALLER_YES",' \
+          -e 's,/bin/true,true,g' \
+          ./${prefixWithBitness}/hinst
+
+        # Run the installer...
+        ./${prefixWithBitness}/hinst CDROM "`pwd`"
+
+        echo "Deleting broken links..."
+        for link in `find $ICAInstDir -type l `
+        do
+          [ -f "$link" ] || rm -v "$link"
+        done
+
+        echo "Expanding certificates..."
+        # As explained in https://wiki.archlinux.org/index.php/Citrix#Security_Certificates
+        pushd "$ICAInstDir/keystore/cacerts"
+        awk 'BEGIN {c=0;} /BEGIN CERT/{c++} { print > "cert." c ".pem"}' < ${cacert}/etc/ssl/certs/ca-bundle.crt
+        popd
+
+        echo "Patching executables..."
+        find $ICAInstDir -type f -exec file {} \; |
+          grep 'ELF.*executable' |
+          cut -f 1 -d : |
+          while read f
+          do
+            echo "Patching ELF intrepreter and rpath for $f"
+            chmod u+w "$f"
+            patchelf \
+              --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+              --set-rpath "$ICAInstDir:$libPath" "$f"
+          done
+
+        echo "Wrapping wfica..."
+        mkdir "$out/bin"
+
+        makeWrapper "$ICAInstDir/wfica" "$out/bin/wfica" \
+          --add-flags "-icaroot $ICAInstDir" \
+          --set ICAROOT "$ICAInstDir" \
+          --set GTK_PATH "${gtk2.out}/lib/gtk-2.0:${gnome3.gnome_themes_standard}/lib/gtk-2.0" \
+          --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \
+          --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \
+          --set LD_LIBRARY_PATH "$libPath" \
+          --set NIX_REDIRECTS "/usr/share/zoneinfo=${tzdata}/share/zoneinfo:/etc/zoneinfo=${tzdata}/share/zoneinfo:/etc/timezone=$ICAInstDir/timezone"
+
+        echo "We arbitrarily set the timezone to UTC. No known consequences at this point."
+        echo UTC > "$ICAInstDir/timezone"
+
+        echo "Installing desktop item..."
+        mkdir -p $out/share/applications
+        cp ${desktopItem}/share/applications/* $out/share/applications
+
+        # We introduce a dependency on the source file so that it need not be redownloaded everytime
+        echo $src >> "$out/share/nix_dependencies.pin"
+      '';
+
+      meta = with stdenv.lib; {
+        license     = stdenv.lib.licenses.unfree;
+        inherit homepage;
+        description = "Citrix Receiver";
+        maintainers = with maintainers; [ obadz a1russell ];
+        platforms   = platforms.linux;
+      };
+    };
+
+in citrixReceiverForVersion (lib.getAttr version versionInfo)