How to build Mozilla VPN client with GUI (2023)

There is a previous thread about this (How to build Mozilla VPN Client), however, I wanted to contribute with my experience in building a client for OpenSuse Leap 15.5 for those with limited developer skills like me.

I have successfully built the client and I am able to use it via command line. The only issue I have now, and the reason for this thread, is that GUI does not work.

This is just a compilation of steps I followed by trial-and-error using the output errors I saw during the process. It starts by cloning the git repo:

git clone https://github.com/mozilla-mobile/mozilla-vpn-client/
cd mozilla-vpn-client/
git submodule update --init

Install required packages (C++ and Qt6) to compile the sources:

sudo zypper install -t pattern devel_C_C++
sudo zypper install -t pattern devel_qt6
sudo zypper in cargo

Install the required version of gcc and point to right version:

sudo zypper in gcc11-c++
gcc --version
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-11 /usr/bin/gcc
gcc --version

Also point g++ to right version:

g++ --version
ll /usr/bin/ | grep ++
sudo rm /usr/bin/g++
sudo rm /usr/bin/c++
sudo ln -s /usr/bin/g++-11 /usr/bin/c++

Install and run glean-parser:

pip install glean-parser
python3 ./qtglean/glean_parser_ext/run_glean_parser.py

At this point the error is:

CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY
  OPENSSL_INCLUDE_DIR)

So install openssl

sudo zypper in libopenssl-devel

Next error libsecret, again just install the right package:

--   No package 'libsecret-1' found
CMake Error at /usr/share/cmake/Modules/FindPkgConfig.cmake:556 (message):
  A required package was not found

And so on:

sudo zypper in libsecret-devel
sudo zypper in libcap-devel
sudo zypper in go

Finally run cmake:

cmake -DCMAKE_BUILD_TYPE=Release -S mozilla-vpn-client/ -B mozilla_vpn
cmake --build mozilla_vpn/

Once again I get an error, this time something called breakpad is required and not found, its corresponding directory is empty:

-- Configuring done
CMake Error at external/CMakeLists.txt:121 (add_library):
  Cannot find source file:

    breakpad/src/common/convert_UTF.cc

  Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .h .hh .h++
  .hm .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .ispc


CMake Error at external/CMakeLists.txt:121 (add_library):
  No SOURCES given to target: breakpad_client


CMake Generate step failed.  Build files cannot be regenerated correctly.
gmake[2]: *** [src/CMakeFiles/sentry.dir/build.make:92: src/sentry-prefix/src/sentry-stamp/sentry-configure] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:1645: src/CMakeFiles/sentry.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2

In this case the solution I found after searching the web was to download, extract, and copy-paste breakpad sources into mozilla-vpn-client/3rdparty/sentry/external/breakpad/, find sources in url: https://github.com/google/breakpad/tree/main.

I imagine that maybe there is a more elegant way to download the sources? Idk.

Same problem with something called LSS, put sources into mozilla-vpn-client/3rdparty/sentry/external/third_party/lss/, find sources from: https://github.com/cpp-pm/linux-syscall-support.

The process finished, yay! Go to the directory where the Makefile was created…

cd mozilla_vpn

Compile and install:

make
sudo make install

Now, although there is a direct access link in the Plasma menu it does not work, or at least the GUI cannot start.

However, the command line works just fine, run mozillavpn --help to see available options. Again after trial-and-error I discovered you have to start the program with:

mozillavpn login

So it can open a browser where you can login, then go back to the terminal. Login sometimes hangs if for some reason the program is already running, check with mozillavpn status and kill it if necessary.

Again if anybody has any idea why the GUI is not working please let me know I would really appreciate it. Running mozillavpn or mozillavpn ui does not output anything in the terminal. For now it does not bother me, I’m used to work with VPNs this way.

Nice write up!

Some feedback:

Another way to do this setting GCCVER or using alternatives:

For the GUI: Can you try to start it from the command prompt? What output does it give then?

SUSE does not use alternatives for GCC. At any given point in time there is exactly one system-wide version that is used to compile Tumbleweed. Overriding this version may result in subtle problems compiling extensions (modules, plugins, etc) for the programs provided by distribution. Different compiler versions may emit incompatible code.

Every configuration system (autoconf, cmake, meson, …) has a way to set compiler used to compile a project. This is the correct way to override default gcc alias when building.

1 Like

For the GUI part, you can check out the three mozillavpn projects on OBS if they solve the GUI problem for you. From what I can see, this project builds for tumbleweed. Can’t see that Leap 15.5 is enabled in the repos for anyone of them. You could fork it and massage it to build for LEAP 15.5. https://build.opensuse.org/package/show/home:cimbali/mozillavpn