vmrc v10.0.3 not run in linux debian 64bit
The error:
DLSYM: Failed to resolve SSLv3_method: /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2: undefined symbol: SSLv3_method
Thanks
Same here on Debian 9.5. Linking libssl.so to libssl.so.1.0.0 or libssl.so.1.1 doesn't help
Same issue here, also with debian testing
I ran into this as well. After realizing that vmware ships it's own libraries, installed in /usr/lib/vmware/lib, I decided to try preloading vmware's SSL lib:
$ LD_PRELOAD=/usr/lib/vmware/lib/libssl.so.1.0.2/libssl.so.1.0.2 vmrc
Loop on signal 11.
Better, but not quite there yet.
$ ldd `which vmrc`
not a dynamic executable
Well, we can't easily see what libs this needs, as it's statically compiled. Damn. At least we shouldn't break it by replacing LD_PRELOAD with LD_LIBRARY_PATH:
$ LD_LIBRARY_PATH=/usr/lib/vmware/lib/libssl.so.1.0.2 vmrc
Loop on signal 11.
Vmware ships a lot of libraries in this tree, and it's not easy to figure out which one that's being called from the system libraries is breaking vmrc, so I decided to get a bit creative: Load *every* library that vmware ships.
$ cd /usr/lib/vmware/lib ; LD_LIBRARY_PATH=$(for i in */; do echo -n $(pwd)/${i%/}:; done) vmrc
I/O warning : failed to load external entity "/etc/vmware/hostd/proxy.xml"
vmrc: requires either a host or a VMRC URI as arguments.
Try 'vmrc --help' for more information.
Voila!
We can wrap vmrc in a script:
#!/bin/bash
libdir=/usr/lib/vmware/lib
[ -d "$libdir" ] || exit 1
exec=/usr/bin/vmrc
[ -x "$exec" ] || exit 1
cd "$libdir"
LIBPATHS="$(for i in */; do echo -n $(pwd)/${i%/}:; done)"
LD_LIBRARY_PATH="$LIBPATHS" "$exec" $@
... which works to launch vmrc, until vmware removes their silly reliance on SSLv3, which is long dead.
Curse the fact that I have but one like to give to this comment.
Thank you very much.
It works... I can launch it, but for some reason it can't connect to my remote moid
anyways Thanks a lot
That script works if invoked from console but where should I put it to make the web client calling it instead of the stock vmrc script (that your script calls also)?
Thank you!
At the time of writing, I can confirm that VRMC 10.0.3-9300449 works like a charm on Debian Buster/Testing amd64
OpenSSL Version: OpenSSL 1.1.1a 20 Nov 2018
Kernel: Linux 4.18.0-3-amd64 #1 SMP Debian 4.18.20-2 (2018-11-23) x86_64 GNU/Linux
Hello!
thank you!
working perfectly!
Hi,
The reason "ldd `which vmrc`" returns "not a dynamic executable" (at least on my system) is that /usr/bin/vmrc is actually a script itself.
It would probably be better to merge the VMware script and your script, rather than wrapping one script around another!
I will have a go at this, but you probably know better than I will what would be needed.
The vmrc script is:
----------------------------------------------------
#!/usr/bin/env bash
#
# Copyright 2005-2008 VMware, Inc. All rights reserved.
#
# Wrapper for a binary. Ensure that the binary will find all the
# shared libraries it needs. If a shared library is not available from
# any of the standard system-wide locations, we provide it from the
# location where the VMware software is installed.
#
# The binary must have the same name in BINDIR as it does in LIBDIR/bin.
#
set -e
ROOT_REQUIRED=no
ETCDIR=/etc/vmware
. $ETCDIR/bootstrap
export PRODUCT_NAME="VMware Remote Console"
libdir="$LIBDIR"/vmware
uid=`id -u` || exit 1
if [ "$ROOT_REQUIRED" = "yes" -a $uid -ne 0 ]; then
"$BINDIR"/vmware-gksu "$0" "$@"
else
binary="`basename "$0"`"
exec "$libdir"/bin/"$binary" "$@"
fi
exit 1
----------------------------------------------------
Because of the way it's been done, it also prevents replacing /usr/bin/vmrc with your script, and renaming the VMware script to something else, as it uses '$0' to determine what executable to run.
Hi,
Merging the two was actually relatively straightforward, except that I haven't found a way to escape one part to work correctly if there are spaces in the VMware library path (which there aren't for the default locations). The script I have so far is:
----------------------------------------------------------------
#!/usr/bin/env bash
#
# Copyright 2005-2008 VMware, Inc. All rights reserved.
#
# Wrapper for a binary. Ensure that the binary will find all the
# shared libraries it needs. If a shared library is not available from
# any of the standard system-wide locations, we provide it from the
# location where the VMware software is installed.
#
# The binary must have the same name in BINDIR as it does in LIBDIR/bin.
#
set -e
ROOT_REQUIRED=no
ETCDIR=/etc/vmware
. $ETCDIR/bootstrap
export PRODUCT_NAME="VMware Remote Console"
libdir="$LIBDIR"/vmware
uid=`id -u` || exit 1
LIBPATHS="$(cd $libdir/lib ; for i in */; do echo -n $(pwd)/${i%/}:; done)"
if [ "$ROOT_REQUIRED" = "yes" -a $uid -ne 0 ]; then
"$BINDIR"/vmware-gksu "$0" "$@"
else
binary="`basename "$0"`"
LD_LIBRARY_PATH="$LIBPATHS" exec "$libdir"/bin/"$binary" "$@"
fi
exit 1
----------------------------------------------------------------
The "LIBPATHS" line is from your script, and then the LD_LIBRARY_PATH="$LIBPATHS" part of your script is prepended to VMware's line to execute the real binary
There is probably a more elegant way to do it, but it removes this error