How to deploy to a Linux server without a Qt install ?
-
Hi,
As a first-time Qt user, I've installed Qt Creator on a Ubuntu 22.04.3 LTS VM and am deploying to a bare metal Linux Mint Victoria server where Qt is not installed.
I'm trying to understand Linux deployment options. I want to try deploying some of the examples, which are built in Qt 6.5.3, and I want to develop my own app in Qt 6.6.0 thereafter. The server is resource constrained so I'd prefer to install self-contained packages instead of doing Qt installations on the system itself, at least for now while I'm kicking the tires.
I first tried to execute the released AppImage, but this failed, and I'm not comfortable installing a glibc that is too old for my distro since that could wreak unnecessary havoc.
mdear@KhapMylesLinux:~/Downloads$ ./linuxdeployqt-continuous-x86_64.AppImage linuxdeployqt (commit 6fcaf74), build 55 built on 2023-09-23 13:33:41 UTC ERROR: The host system is too new. Please run on a system with a glibc version no newer than what comes with the oldest currently supported mainstream distribution (Ubuntu Focal Fossa), which is glibc 2.31. This is so that the resulting bundle will work on most still-supported Linux distributions. For more information, please see https://github.com/probonopd/linuxdeployqt/issues/340
I then cloned https://github.com/probonopd/linuxdeployqt.git but am getting issues when I try to use the "qmake" command.
It appears that I'm missing software components, but I took a look at the maintenance tool and couldn't figure out what I might be missing since options weren't that granular.
help?
mdear@KhapMylesLinux:~/workspaces/git/linuxdeployqt$ which qmake /home/mdear/Qt/6.5.3/gcc_64/bin//qmake mdear@KhapMylesLinux:~/workspaces/git/linuxdeployqt$ qmake /home/mdear/workspaces/git/linuxdeployqt/.qmake.conf:2: Cannot find feature qt_build_config /home/mdear/workspaces/git/linuxdeployqt/.qmake.conf:2: Cannot find feature qt_build_config /home/mdear/workspaces/git/linuxdeployqt/linuxdeployqt.pro:1: Cannot find feature qt_parts
Thanks !
-
@mdear Have you read the documentation on deploying Qt applications? I have never found it that difficult that it needed a special utility to do it for me.
As for the build issue with the 3rd-party linuxdeployqt, there's this bug. Works fine with Qt 5 (although with compilation warnings).
-
Hi @mdear,
I'm trying to understand Linux deployment options.
As long as you're trying to understand the options, I use and recommend linuxdeploy, along with the linuxdeploy Qt plugin and the linuxdeploy AppImage plugin.
Cheers.
-
When I deployed an example app to the bare metal target server it failed to launch, with the following errors (does anybody know how I can work around these?) :
./dice-x86_64.AppImage: /lib/x86_64-linux-gnu/libQt6Qml.so.6: no version information available (required by ./dice-x86_64.AppImage) ./dice-x86_64.AppImage: /lib/x86_64-linux-gnu/libQt6Core.so.6: version `Qt_6.5' not found (required by ./dice-x86_64.AppImage)
Since I control the OS of the build VM and the target bare metal server, I want to use AppImages, I just happened to have chosen the VM to be a modern version of Ubuntu (Jammy Jellyfish) and have coupled it with the target server running Mint (which is based on Jammy Jellyfish). I am using this strategy in a corporate environment and am not releasing to the public.
I used ldd to identify the shared libraries that my app required, and I bundled them into the AppDir (which is the input format required by the appimagetool) :
mdear@KhapMylesLinux:~/Downloads$ tree /home/mdear/Qt/Examples/Qt-6.5.3/demos/build-dice-Desktop_Qt_6_5_3_GCC_64bit-Release/dice.AppDir /home/mdear/Qt/Examples/Qt-6.5.3/demos/build-dice-Desktop_Qt_6_5_3_GCC_64bit-Release/dice.AppDir ├── AppRun -> dice ├── dice ├── dice.desktop ├── dice.png ├── lib │ └── x86_64-linux-gnu │ ├── ld-linux-x86-64.so.2 │ ├── libbrotlicommon.so.1 │ ├── libbrotlidec.so.1 │ ├── libbsd.so.0 │ ├── libcap.so.2 │ ├── libcom_err.so.2 │ ├── libc.so.6 │ ├── libdbus-1.so.3 │ ├── libdl.so.2 │ ├── libEGL.so.1 │ ├── libexpat.so.1 │ ├── libfontconfig.so.1 │ ├── libfreetype.so.6 │ ├── libgcc_s.so.1 │ ├── libgcrypt.so.20 │ ├── libGLdispatch.so.0 │ ├── libglib-2.0.so.0 │ ├── libGL.so.1 │ ├── libGLX.so.0 │ ├── libgpg-error.so.0 │ ├── libgssapi_krb5.so.2 │ ├── libgthread-2.0.so.0 │ ├── libicudata.so.56 │ ├── libicui18n.so.56 │ ├── libicuuc.so.56 │ ├── libk5crypto.so.3 │ ├── libkeyutils.so.1 │ ├── libkrb5.so.3 │ ├── libkrb5support.so.0 │ ├── liblz4.so.1 │ ├── liblzma.so.5 │ ├── libmd.so.0 │ ├── libm.so.6 │ ├── libOpenGL.so.0 │ ├── libpcre.so.3 │ ├── libpng16.so.16 │ ├── libpthread.so.0 │ ├── libQt6Core.so.6 │ ├── libQt6Core.so.6.5 -> libQt6Core.so.6 │ ├── libQt6Core.so.6.5.3 -> libQt6Core.so.6 │ ├── libQt6DBus.so.6 │ ├── libQt6Gui.so.6 │ ├── libQt6Network.so.6 │ ├── libQt6Qml.so.6 │ ├── libQt6Qml.so.6.5 -> libQt6Qml.so.6 │ ├── libQt6Qml.so.6.5.3 -> libQt6Qml.so.6 │ ├── libresolv.so.2 │ ├── librt.so.1 │ ├── libstdc++.so.6 │ ├── libsystemd.so.0 │ ├── libuuid.so.1 │ ├── libX11.so.6 │ ├── libXau.so.6 │ ├── libxcb.so.1 │ ├── libXdmcp.so.6 │ ├── libxkbcommon.so.0 │ ├── libz.so.1 │ └── libzstd.so.1 └── TGIF 3 directories, 62 files
-
@Paul-Colby Thanks for the pointer! I'll check this out.
-
Ok, I tried using the linuxdeploy with its AppImage plugin on my Ubuntu build VM:
./linuxdeploy-static-x86_64.AppImage --desktop-file /home/mdear/Qt/Examples/Qt-6.5.3/demos/build-dice-Desktop_Qt_6_5_3_GCC_64bit-Release/dice.desktop --appdir /home/mdear/Qt/Examples/Qt-6.5.3/demos/build-dice-Desktop_Qt_6_5_3_GCC_64bit-Release/dice.AppDir --executable /home/mdear/Qt/Examples/Qt-6.5.3/demos/build-dice-Desktop_Qt_6_5_3_GCC_64bit-Release/dice --icon-file /home/mdear/Qt/Examples/Qt-6.5.3/demos/build-dice-Desktop_Qt_6_5_3_GCC_64bit-Release/dice.png --output appimage
... but I'm now getting new errors on my Linux Mint target (I introduced some softlinks into the package under usr/lib/Qt and usr/lib/Qt/plugin just to see if that would fix it, but no go).
vcuadmin@vcuproject2030:~/Downloads$ sudo ./dice-x86_64.AppImage qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in "" This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
mdear@KhapMylesLinux:~/Qt/Examples/Qt-6.5.3/demos/build-dice-Desktop_Qt_6_5_3_GCC_64bit-Release/dice.AppDir$ tree . . ├── AppRun -> usr/bin/dice ├── dice.desktop -> usr/share/applications/dice.desktop ├── dice.png -> usr/share/icons/hicolor/160x160/apps/dice.png └── usr ├── bin │ └── dice ├── lib │ ├── libbrotlicommon.so.1 │ ├── libbrotlidec.so.1 │ ├── libbsd.so.0 │ ├── libcap.so.2 │ ├── libdbus-1.so.3 │ ├── libgcrypt.so.20 │ ├── libglib-2.0.so.0 │ ├── libgssapi_krb5.so.2 │ ├── libgthread-2.0.so.0 │ ├── libicudata.so.56 │ ├── libicui18n.so.56 │ ├── libicuuc.so.56 │ ├── libk5crypto.so.3 │ ├── libkeyutils.so.1 │ ├── libkrb5.so.3 │ ├── libkrb5support.so.0 │ ├── liblz4.so.1 │ ├── liblzma.so.5 │ ├── libmd.so.0 │ ├── libpcre.so.3 │ ├── libpng16.so.16 │ ├── libQt6Core.so.6 │ ├── libQt6DBus.so.6 │ ├── libQt6Gui.so.6 │ ├── libQt6Network.so.6 │ ├── libQt6Qml.so.6 │ ├── libsystemd.so.0 │ ├── libXau.so.6 │ ├── libxcb.so.1 │ ├── libXdmcp.so.6 │ ├── libxkbcommon.so.0 │ ├── libzstd.so.1 │ └── Qt │ ├── libQt6Core.so.6 -> ../libQt6Core.so.6 │ ├── libQt6DBus.so.6 -> ../libQt6DBus.so.6 │ ├── libQt6Gui.so.6 -> ../libQt6Gui.so.6 │ ├── libQt6Network.so.6 -> ../libQt6Network.so.6 │ ├── libQt6Qml.so.6 -> ../libQt6Qml.so.6 │ └── plugins │ └── libxcb.so.1 -> ../../libxcb.so.1 └── share ├── applications │ └── dice.desktop ├── doc │ ├── libbrotli1 │ │ └── copyright │ ├── libbsd0 │ │ └── copyright │ ├── libgcrypt20 │ │ └── copyright │ ├── libglib2.0-0 │ │ └── copyright │ ├── libgssapi-krb5-2 │ │ └── copyright │ ├── libk5crypto3 │ │ └── copyright │ ├── libkrb5-3 │ │ └── copyright │ ├── libkrb5support0 │ │ └── copyright │ ├── liblz4-1 │ │ └── copyright │ ├── libmd0 │ │ └── copyright │ ├── libpng16-16 │ │ └── copyright │ ├── libsystemd0 │ │ └── copyright │ ├── libxau6f │ │ └── copyright │ ├── libxdmcp6 │ │ └── copyright │ ├── libxkbcommon0 │ │ └── copyright │ └── libzstd1 │ └── copyright └── icons └── hicolor ├── 128x128 │ └── apps ├── 160x160 │ └── apps │ └── dice.png ├── 16x16 │ └── apps ├── 256x256 │ └── apps ├── 32x32 │ └── apps ├── 64x64 │ └── apps └── scalable └── apps 40 directories, 60 files
-
@Paul-Colby, I should have mentioned that both the original app (obviously) and the AppImage created solely by the appimagetool ran as expected on the build VM but not on the target.
I included the qt plugin, as you indicated, and ended up with an AppImage that ran neither on the build VM nor on the target, but at least both platforms are giving consistent errors so I must be missing something obvious. Any ideas? I really appreciate the assist today!
mdear@KhapMylesLinux:~/Downloads$ ./dice-x86_64.AppImage qt.qpa.plugin: Could not find the Qt platform plugin "wayland" in "" QQmlApplicationEngine failed to load component qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed mdear@KhapMylesLinux:~/Downloads$
The output on the target:
vcuadmin@vcuproject2030:~/Downloads$ sudo ./dice-x86_64.AppImage QQmlApplicationEngine failed to load component qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed qrc:/main.qml:9:1: module "QtQuick.Layouts" is not installed qrc:/main.qml:8:1: module "QtQuick.Controls.Material" is not installed qrc:/main.qml:7:1: module "QtQuick.Controls" is not installed qrc:/main.qml:6:1: module "QtQuick.Window" is not installed qrc:/main.qml: module "QtQml.WorkerScript" is not installed qrc:/main.qml: module "QtQml.Models" is not installed qrc:/main.qml:4:1: module "QtQuick" is not installed vcuadmin@vcuproject2030:~/Downloads$