From 506966d15658d8a411f364f47bbc0f3f9366dba3 Mon Sep 17 00:00:00 2001 From: Raymond Gauthier Date: Thu, 30 Sep 2021 15:19:50 -0400 Subject: [PATCH 1/7] teamviewer: fix issue #96633 Fix teamviewer's breakage post 15.5.3 -> 15.15.5. Teamviewer client was no longer able to connect to its backing server as it now uses dbus to do so. Following changes were required: - add missing dbus and polkit service/policy files to package. - add missing dbus lib to `LD_LIBRARY_PATH`. Changes to the nixos module as a separate changeset. --- .../networking/remote/teamviewer/default.nix | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/networking/remote/teamviewer/default.nix b/pkgs/applications/networking/remote/teamviewer/default.nix index 1b564e8daf4b..f1da4c912748 100644 --- a/pkgs/applications/networking/remote/teamviewer/default.nix +++ b/pkgs/applications/networking/remote/teamviewer/default.nix @@ -38,6 +38,27 @@ mkDerivation rec { ln -s /var/log/teamviewer $out/share/teamviewer/logfiles ln -s ${xdg-utils}/bin $out/share/teamviewer/tv_bin/xdg-utils + declare in_script_dir="./opt/teamviewer/tv_bin/script" + + install -d "$out/share/dbus-1/services" + install -m 644 "$in_script_dir/com.teamviewer.TeamViewer.service" "$out/share/dbus-1/services" + substituteInPlace "$out/share/dbus-1/services/com.teamviewer.TeamViewer.service" \ + --replace '/opt/teamviewer/tv_bin/TeamViewer' \ + "$out/share/teamviewer/tv_bin/TeamViewer" + install -m 644 "$in_script_dir/com.teamviewer.TeamViewer.Desktop.service" "$out/share/dbus-1/services" + substituteInPlace "$out/share/dbus-1/services/com.teamviewer.TeamViewer.Desktop.service" \ + --replace '/opt/teamviewer/tv_bin/TeamViewer_Desktop' \ + "$out/share/teamviewer/tv_bin/TeamViewer_Desktop" + + install -d "$out/share/dbus-1/system.d" + install -m 644 "$in_script_dir/com.teamviewer.TeamViewer.Daemon.conf" "$out/share/dbus-1/system.d" + + install -d "$out/share/polkit-1/actions" + install -m 644 "$in_script_dir/com.teamviewer.TeamViewer.policy" "$out/share/polkit-1/actions" + substituteInPlace "$out/share/polkit-1/actions/com.teamviewer.TeamViewer.policy" \ + --replace '/opt/teamviewer/tv_bin/script/execscript' \ + "$out/share/teamviewer/tv_bin/script/execscript" + for i in 16 20 24 32 48 256; do size=$i"x"$i @@ -52,16 +73,17 @@ mkDerivation rec { substituteInPlace $out/share/teamviewer/tv_bin/script/tvw_config \ --replace '/var/run/' '/run/' - wrapProgram $out/share/teamviewer/tv_bin/script/teamviewer --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 ]}" - wrapProgram $out/share/teamviewer/tv_bin/teamviewerd --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 ]}" - wrapProgram $out/share/teamviewer/tv_bin/TeamViewer --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 ]}" - wrapProgram $out/share/teamviewer/tv_bin/TeamViewer_Desktop --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [libXrandr libX11 libXext libXdamage libXtst libSM libXfixes ]}" + wrapProgram $out/share/teamviewer/tv_bin/script/teamviewer --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" + wrapProgram $out/share/teamviewer/tv_bin/teamviewerd --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" + wrapProgram $out/share/teamviewer/tv_bin/TeamViewer --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" + wrapProgram $out/share/teamviewer/tv_bin/TeamViewer_Desktop --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [libXrandr libX11 libXext libXdamage libXtst libSM libXfixes dbus ]}" wrapQtApp $out/share/teamviewer/tv_bin/script/teamviewer wrapQtApp $out/bin/teamviewer ''; dontStrip = true; + dontWrapQtApps = true; preferLocalBuild = true; meta = with lib; { @@ -69,6 +91,6 @@ mkDerivation rec { license = licenses.unfree; description = "Desktop sharing application, providing remote support and online meetings"; platforms = [ "x86_64-linux" ]; - maintainers = with maintainers; [ jagajaga dasuxullebt ]; + maintainers = with maintainers; [ jagajaga dasuxullebt jraygauthier ]; }; } From 200e959995fa8088b5722bc8255109c03f2a4f78 Mon Sep 17 00:00:00 2001 From: Raymond Gauthier Date: Thu, 30 Sep 2021 15:27:15 -0400 Subject: [PATCH 2/7] nixos/teamviewer: fix issue #96633 Add teamviewer package as a dbus package now that the client / server communication depends on dbus. --- nixos/modules/services/monitoring/teamviewer.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/modules/services/monitoring/teamviewer.nix b/nixos/modules/services/monitoring/teamviewer.nix index ce9e57a187cd..4e2ef3cbc0b7 100644 --- a/nixos/modules/services/monitoring/teamviewer.nix +++ b/nixos/modules/services/monitoring/teamviewer.nix @@ -24,6 +24,8 @@ in environment.systemPackages = [ pkgs.teamviewer ]; + services.dbus.packages = [ pkgs.teamviewer ]; + systemd.services.teamviewerd = { description = "TeamViewer remote control daemon"; From 953bbc0d7373102cf89625dc3bb7ab8e91134069 Mon Sep 17 00:00:00 2001 From: Raymond Gauthier Date: Thu, 30 Sep 2021 19:27:06 -0400 Subject: [PATCH 3/7] nixos/teamviewer: fix issue #44307 Move to a forefront launch of the daemon. Doing so allowed us to move the service from forking to simple to avoid the missing pid error log. Also: - Make the dbus dependency explicit. --- nixos/modules/services/monitoring/teamviewer.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/nixos/modules/services/monitoring/teamviewer.nix b/nixos/modules/services/monitoring/teamviewer.nix index 4e2ef3cbc0b7..e2271e571c40 100644 --- a/nixos/modules/services/monitoring/teamviewer.nix +++ b/nixos/modules/services/monitoring/teamviewer.nix @@ -30,14 +30,15 @@ in description = "TeamViewer remote control daemon"; wantedBy = [ "multi-user.target" ]; - after = [ "NetworkManager-wait-online.service" "network.target" ]; + after = [ "NetworkManager-wait-online.service" "network.target" "dbus.service" ]; + requires = [ "dbus.service" ]; preStart = "mkdir -pv /var/lib/teamviewer /var/log/teamviewer"; startLimitIntervalSec = 60; startLimitBurst = 10; serviceConfig = { - Type = "forking"; - ExecStart = "${pkgs.teamviewer}/bin/teamviewerd -d"; + Type = "simple"; + ExecStart = "${pkgs.teamviewer}/bin/teamviewerd -f"; PIDFile = "/run/teamviewerd.pid"; ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; Restart = "on-abort"; From db889eb9137a859eedfc5b402de84271c0659662 Mon Sep 17 00:00:00 2001 From: Raymond Gauthier Date: Thu, 30 Sep 2021 19:30:10 -0400 Subject: [PATCH 4/7] teamviewer: 15.15.5 -> 15.18.5 Upgrading to the last version still using qt5.14. Later version will be using qt5.15 which is not in 21.05 stable branch. This fixes us the crash observed in 15.15.5 when stopping the service. --- .../networking/remote/teamviewer/default.nix | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/pkgs/applications/networking/remote/teamviewer/default.nix b/pkgs/applications/networking/remote/teamviewer/default.nix index f1da4c912748..17e7bdaf1a91 100644 --- a/pkgs/applications/networking/remote/teamviewer/default.nix +++ b/pkgs/applications/networking/remote/teamviewer/default.nix @@ -1,16 +1,16 @@ { mkDerivation, lib, fetchurl, autoPatchelfHook, makeWrapper, xdg-utils, dbus -, qtbase, qtwebkit, qtx11extras, qtquickcontrols, glibc +, qtbase, qtwebkit, qtwebengine, qtx11extras, qtquickcontrols, getconf, glibc , libXrandr, libX11, libXext, libXdamage, libXtst, libSM, libXfixes , wrapQtAppsHook }: mkDerivation rec { pname = "teamviewer"; - version = "15.15.5"; + version = "15.18.5"; src = fetchurl { url = "https://dl.tvcdn.de/download/linux/version_15x/teamviewer_${version}_amd64.deb"; - sha256 = "sha256-H/CSc2RcjI+Fm8awYcXm3ioAJpbSNEMwGVrTozMux3A="; + sha256 = "03m8k6qr3mgylik1gqi8qlm0dngb3vf4p6gdwd5hyvz7gh5mdm2r"; }; unpackPhase = '' @@ -19,7 +19,7 @@ mkDerivation rec { ''; nativeBuildInputs = [ autoPatchelfHook makeWrapper wrapQtAppsHook ]; - buildInputs = [ dbus qtbase qtwebkit qtx11extras libX11 ]; + buildInputs = [ dbus getconf qtbase qtwebkit qtwebengine qtx11extras libX11 ]; propagatedBuildInputs = [ qtquickcontrols ]; installPhase = '' @@ -73,10 +73,15 @@ mkDerivation rec { substituteInPlace $out/share/teamviewer/tv_bin/script/tvw_config \ --replace '/var/run/' '/run/' - wrapProgram $out/share/teamviewer/tv_bin/script/teamviewer --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" - wrapProgram $out/share/teamviewer/tv_bin/teamviewerd --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" - wrapProgram $out/share/teamviewer/tv_bin/TeamViewer --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" - wrapProgram $out/share/teamviewer/tv_bin/TeamViewer_Desktop --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [libXrandr libX11 libXext libXdamage libXtst libSM libXfixes dbus ]}" + wrapProgram $out/share/teamviewer/tv_bin/script/teamviewer \ + --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" + wrapProgram $out/share/teamviewer/tv_bin/teamviewerd \ + --prefix PATH : "${lib.makeBinPath [ getconf ]}" \ + --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" + wrapProgram $out/share/teamviewer/tv_bin/TeamViewer \ + --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" + wrapProgram $out/share/teamviewer/tv_bin/TeamViewer_Desktop \ + --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [libXrandr libX11 libXext libXdamage libXtst libSM libXfixes dbus ]}" wrapQtApp $out/share/teamviewer/tv_bin/script/teamviewer wrapQtApp $out/bin/teamviewer From c55bc5bfd3377d54f5b6153d09c033cceadfcc05 Mon Sep 17 00:00:00 2001 From: Raymond Gauthier Date: Tue, 12 Oct 2021 10:35:35 -0400 Subject: [PATCH 5/7] teamviewer: refactor executable wrapping This centralizes `PATH` and `LD_LIBRARY_PATH`, avoid multiple layers of wrappers. Refactor as suggested by @Artturin in PR provided patch: . --- .../networking/remote/teamviewer/default.nix | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pkgs/applications/networking/remote/teamviewer/default.nix b/pkgs/applications/networking/remote/teamviewer/default.nix index 17e7bdaf1a91..266a80e19e59 100644 --- a/pkgs/applications/networking/remote/teamviewer/default.nix +++ b/pkgs/applications/networking/remote/teamviewer/default.nix @@ -72,19 +72,19 @@ mkDerivation rec { --replace '/lib64/ld-linux-x86-64.so.2' '${glibc.out}/lib/ld-linux-x86-64.so.2' substituteInPlace $out/share/teamviewer/tv_bin/script/tvw_config \ --replace '/var/run/' '/run/' + ''; - wrapProgram $out/share/teamviewer/tv_bin/script/teamviewer \ - --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" - wrapProgram $out/share/teamviewer/tv_bin/teamviewerd \ - --prefix PATH : "${lib.makeBinPath [ getconf ]}" \ - --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" - wrapProgram $out/share/teamviewer/tv_bin/TeamViewer \ - --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libXrandr libX11 dbus ]}" - wrapProgram $out/share/teamviewer/tv_bin/TeamViewer_Desktop \ - --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [libXrandr libX11 libXext libXdamage libXtst libSM libXfixes dbus ]}" + makeWrapperArgs = [ + "--prefix PATH : ${lib.makeBinPath [ getconf ]}" + "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libXrandr libX11 libXext libXdamage libXtst libSM libXfixes dbus ]}" + ]; - wrapQtApp $out/share/teamviewer/tv_bin/script/teamviewer - wrapQtApp $out/bin/teamviewer + postFixup = '' + wrapProgram $out/share/teamviewer/tv_bin/teamviewerd ''${makeWrapperArgs[@]} + # tv_bin/script/teamviewer runs tvw_main which runs tv_bin/TeamViewer + wrapProgram $out/share/teamviewer/tv_bin/script/teamviewer ''${makeWrapperArgs[@]} ''${qtWrapperArgs[@]} + wrapProgram $out/share/teamviewer/tv_bin/teamviewer-config ''${makeWrapperArgs[@]} ''${qtWrapperArgs[@]} + wrapProgram $out/share/teamviewer/tv_bin/TeamViewer_Desktop ''${makeWrapperArgs[@]} ''${qtWrapperArgs[@]} ''; dontStrip = true; From 4fb188e1d190f2e08053dba3e2e95fff1e29183a Mon Sep 17 00:00:00 2001 From: Raymond Gauthier Date: Tue, 12 Oct 2021 10:51:50 -0400 Subject: [PATCH 6/7] teamviewer: fix 97148 (busybox installed issue) Simply add `coreutils` as a runtime dependency which will prevent teamviewer from using incomplete busybox implementation of expected gnu binaries. As suggested by @Artturin in PR comment: . --- pkgs/applications/networking/remote/teamviewer/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/networking/remote/teamviewer/default.nix b/pkgs/applications/networking/remote/teamviewer/default.nix index 266a80e19e59..2ba1d4fe1002 100644 --- a/pkgs/applications/networking/remote/teamviewer/default.nix +++ b/pkgs/applications/networking/remote/teamviewer/default.nix @@ -1,6 +1,6 @@ { mkDerivation, lib, fetchurl, autoPatchelfHook, makeWrapper, xdg-utils, dbus , qtbase, qtwebkit, qtwebengine, qtx11extras, qtquickcontrols, getconf, glibc -, libXrandr, libX11, libXext, libXdamage, libXtst, libSM, libXfixes +, libXrandr, libX11, libXext, libXdamage, libXtst, libSM, libXfixes, coreutils , wrapQtAppsHook }: @@ -75,7 +75,7 @@ mkDerivation rec { ''; makeWrapperArgs = [ - "--prefix PATH : ${lib.makeBinPath [ getconf ]}" + "--prefix PATH : ${lib.makeBinPath [ getconf coreutils ]}" "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libXrandr libX11 libXext libXdamage libXtst libSM libXfixes dbus ]}" ]; From 975ab7f3a02ac0232afe7920a8f7d78fc22d5ccb Mon Sep 17 00:00:00 2001 From: Raymond Gauthier Date: Tue, 12 Oct 2021 11:08:34 -0400 Subject: [PATCH 7/7] teamviewer: 15.18.5 -> 15.22.3 Required move from libsForQt514 -> libsForQt515. Note that this changset won't be backportable to 21.05. --- pkgs/applications/networking/remote/teamviewer/default.nix | 5 +++-- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/networking/remote/teamviewer/default.nix b/pkgs/applications/networking/remote/teamviewer/default.nix index 2ba1d4fe1002..158f2aa327e0 100644 --- a/pkgs/applications/networking/remote/teamviewer/default.nix +++ b/pkgs/applications/networking/remote/teamviewer/default.nix @@ -6,11 +6,11 @@ mkDerivation rec { pname = "teamviewer"; - version = "15.18.5"; + version = "15.22.3"; src = fetchurl { url = "https://dl.tvcdn.de/download/linux/version_15x/teamviewer_${version}_amd64.deb"; - sha256 = "03m8k6qr3mgylik1gqi8qlm0dngb3vf4p6gdwd5hyvz7gh5mdm2r"; + sha256 = "15fvzhdq7mnx2l2w4byvij8ww16qwdlkbadal60rm66yzv79mv9w"; }; unpackPhase = '' @@ -28,6 +28,7 @@ mkDerivation rec { rm -R \ $out/share/teamviewer/logfiles \ $out/share/teamviewer/config \ + $out/share/teamviewer/tv_bin/RTlib \ $out/share/teamviewer/tv_bin/xdg-utils \ $out/share/teamviewer/tv_bin/script/{teamviewer_setup,teamviewerd.sysv,teamviewerd.service,teamviewerd.*.conf,libdepend,tv-delayed-start.sh} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 819108f9efc8..46ceb970628a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -9583,7 +9583,7 @@ with pkgs; ted = callPackage ../tools/typesetting/ted { }; - teamviewer = libsForQt514.callPackage ../applications/networking/remote/teamviewer { }; + teamviewer = libsForQt515.callPackage ../applications/networking/remote/teamviewer { }; teleconsole = callPackage ../tools/misc/teleconsole { };