After updating our GNU/Linux distribution from Fedora 26
to Fedora 27
, and maybe updating Viber Desktop client as well, Viber
stopped working. To be more precise it could not connect to the internet any more. (Note: we used the RPM package of Viber
Desktop
to install Viber
on our Fedora
system).
Solution for the OpenSSL issue – Create a symbolic link to the missing library in the libraries folder of Viber
#Make sure all necessary packages are installed
sudo dnf install openssl openssl-devel;
#Create a symbolic link from the system installed libssl shared object to the Viber installation folder
sudo ln -s /usr/lib64/libssl.so.10 /opt/viber/lib/libssl.so;
Explanation and details – Optional Reading
To find the installation folder of Viber
, we used the following command:
find / -iname viber 2>/dev/null;
that led us to the installation location of Viber
which was /opt/viber/Viber
.
Executing the binary in a terminal
gave us the following errors
$ /opt/viber/Viber
Qt WebEngine ICU data not found at /opt/viber/resources. Trying parent directory...
Qt WebEngine resources not found at /opt/viber/resources. Trying parent directory...
Qt WebEngine ICU data not found at /opt/viber/resources. Trying parent directory...
Qt WebEngine resources not found at /opt/viber/resources. Trying parent directory...
qt.network.ssl: QSslSocket: cannot resolve CRYPTO_num_locks
qt.network.ssl: QSslSocket: cannot resolve CRYPTO_set_id_callback
qt.network.ssl: QSslSocket: cannot resolve CRYPTO_set_locking_callback
qt.network.ssl: QSslSocket: cannot resolve ERR_free_strings
qt.network.ssl: QSslSocket: cannot resolve EVP_CIPHER_CTX_cleanup
qt.network.ssl: QSslSocket: cannot resolve EVP_CIPHER_CTX_init
qt.network.ssl: QSslSocket: cannot resolve sk_new_null
qt.network.ssl: QSslSocket: cannot resolve sk_push
qt.network.ssl: QSslSocket: cannot resolve sk_free
qt.network.ssl: QSslSocket: cannot resolve sk_num
qt.network.ssl: QSslSocket: cannot resolve sk_pop_free
qt.network.ssl: QSslSocket: cannot resolve sk_value
qt.network.ssl: QSslSocket: cannot resolve SSL_library_init
qt.network.ssl: QSslSocket: cannot resolve SSL_load_error_strings
qt.network.ssl: QSslSocket: cannot resolve SSL_get_ex_new_index
qt.network.ssl: QSslSocket: cannot resolve SSLv23_client_method
qt.network.ssl: QSslSocket: cannot resolve SSLv23_server_method
qt.network.ssl: QSslSocket: cannot resolve X509_STORE_CTX_get_chain
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_add_all_algorithms_noconf
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf
qt.network.ssl: QSslSocket: cannot resolve SSLeay
qt.network.ssl: QSslSocket: cannot resolve SSLeay_version
qt.network.ssl: Incompatible version of OpenSSL
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
QQuickItem: Cannot set activeFocusOnTab to false once item is the active focus item.
QQuickItem: Cannot set activeFocusOnTab to false once item is the active focus item.
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
QQuickItem: Cannot set activeFocusOnTab to false once item is the active focus item.
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
From the error we could see that the application was trying to access the functions SSLv23_client_method
and SSL_library_init
and it could not find them.
It was obvious that the missing functions were related to the SSL
protocol, so we executed the following to make sure all necessary OpenSSL
packages were installed.
sudo dnf install openssl openssl-devel;
After that we tried Viber
again and gave us the same error.
So we made the assumption that Viber
could not ‘see’ the installation of OpenSSL
.
Then we decided to use the following command to:
- find all shared objects (shared libraries) of
OpenSSL
on our system,
- list all of the available functions in each shared library and
- identify the ones that contain the
SSLv23_client_method
method.
find / -iname libssl.so* -print -exec sh -c 'nm -D "$1" | grep SSLv23_client_method' _ {} \; 2>/dev/null;
Executing the command yielded the following results:
$ find / -iname libssl.so* -print -exec sh -c 'nm -D "$1" | grep SSLv23_client_method' _ {} \; 2>/dev/null;
/usr/lib/libssl.so
/usr/lib/libssl.so.1.1
/usr/lib/libssl.so.10
00027880 T SSLv23_client_method
/usr/lib/libssl.so.1.0.2m
00027880 T SSLv23_client_method
/usr/lib/libssl.so.1.1.0g
/usr/lib64/libssl.so
/usr/lib64/libssl.so.1.1
/usr/lib64/libssl.so.10
000000000002dd10 T SSLv23_client_method
/usr/lib64/libssl.so.1.0.2m
000000000002dd10 T SSLv23_client_method
/usr/lib64/libssl.so.1.1.0g
/opt/viber/lib/libssl.so
From the results two libraries in the lib64
folder got our interest, so we executed ls -l
on both to check them out:
$ ls -l /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.1.0.2m;
lrwxrwxrwx. 1 root root 16 Nov 13 13:52 /usr/lib64/libssl.so.10 -> libssl.so.1.0.2m
-rwxr-xr-x. 1 root root 448640 Nov 13 13:52 /usr/lib64/libssl.so.1.0.2m
As you can see in the results, the two files that got us interested were in end the same file so we decided to use /usr/lib64/libssl.so.10
whose name was not tight to a minor distribution version of the library and would automatically link to any minor updates in the future.
After examining the Viber
installation folder in /opt/viber/
, we saw that there was a lib
folder there with no SSL
libraries available (even though all the QT
and networking libraries were there already):
$ ls /opt/viber/lib/
libicudata.so.52 libQt5Gui.so.5 libQt5Qml.so.5 libQt5WebEngine.so.5
libicui18n.so.52 libQt5Location.so.5 libQt5QuickControls2.so.5 libQt5WebEngineWidgets.so.5
libicuuc.so.52 libQt5MultimediaQuick_p.so.5 libQt5Quick.so.5 libQt5WebSockets.so.5
libpng12.so.0 libQt5Multimedia.so.5 libQt5QuickTemplates2.so.5 libQt5Widgets.so.5
libqgsttools_p.so.1 libQt5MultimediaWidgets.so.5 libQt5QuickWidgets.so.5 libQt5XcbQpa.so.5
libqrencode.so libQt5Network.so.5 libQt5Sql.so.5
libQt5Concurrent.so.5 libQt5OpenGL.so.5 libQt5Svg.so.5 libxcb-xinerama.so.0
libQt5Core.so.5 libQt5Positioning.so.5 libQt5WebChannel.so.5
libQt5DBus.so.5 libQt5PrintSupport.so.5 libQt5WebEngineCore.so.5
Examining our OS, we saw that in the rest of the locations were the QT
libraries were installed there was a copy of the libssl
as well.
So we decided to make a soft symbolic link of the /usr/lib64/libssl.so.10
shared library in the Viber
libraries folder.
We did two tests:
- Creating a symbolic link named
libssl.so.10
failed.
- Creating a symbolic link name
libssl.so
succeeded and solved the issue!
The command that we used was the following:
sudo ln -s /usr/lib64/libssl.so.10 /opt/viber/lib/libssl.so;
After performing this step, Viber
was working again as expected!
$ sudo ln -s /usr/lib64/libssl.so.10 /opt/viber/lib/libssl.so;
$ /opt/viber/Viber
Qt WebEngine ICU data not found at /opt/viber/resources. Trying parent directory...
Qt WebEngine resources not found at /opt/viber/resources. Trying parent directory...
Qt WebEngine ICU data not found at /opt/viber/resources. Trying parent directory...
Qt WebEngine resources not found at /opt/viber/resources. Trying parent directory...
QQuickItem: Cannot set activeFocusOnTab to false once item is the active focus item.
QQuickItem: Cannot set activeFocusOnTab to false once item is the active focus item.
QQuickItem: Cannot set activeFocusOnTab to false once item is the active focus item.
QQuickItem: Cannot set activeFocusOnTab to false once item is the active focus item.
QQuickItem: Cannot set activeFocusOnTab to false once item is the active focus item.
qml: type=""
qml: type=""
qrc:/QML/Feed/FeedView.qml:98:5: QML ListViewEx: Binding loop detected for property "bottomMargin"
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QObject(0x7f3f5f970520), parent's thread is QThread(0x4191210), current thread is QThread(0x515f5b0)
Invalid SOS parameters for sequential JPEG
Success!