diff options
author | obadz <obadz-git@obadz.com> | 2017-10-23 17:53:11 +0100 |
---|---|---|
committer | obadz <obadz-git@obadz.com> | 2017-10-23 18:02:20 +0100 |
commit | 26122b368a446ca54144faa6ff0ff4d2c5559658 (patch) | |
tree | 53041a339d12587a8ab537c816cf680fc102d0cc /pkgs/applications/networking/remote | |
parent | 32866a3b0b0377a30ba29ff26bd630cf204fc664 (diff) | |
download | nixlib-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.nix | 339 |
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) |