linuxdeploy-plugin-qt icon indicating copy to clipboard operation
linuxdeploy-plugin-qt copied to clipboard

lacking support for embedded device apps

Open James-Hudson3010 opened this issue 3 years ago • 0 comments

I am working with the project at https://github.com/jh3010-qt-questions/HelloWorld

My goal is to have linuxdeploy, with the qt plugin, create an AppImage that can be launched by a systemd service on an embedded device.

Both my host and embedded device are running Ubuntu 18.04.

First, I build the Qt Libraries myself with:

./configure -opensource -confirm-license -verbose -pkg-config -no-use-gold-linker -device linux-nuc-g++ -device-option CROSS_COMPILE=/usr/bin/ -kms -gbm -sysroot / -system-freetype -fontconfig -skip webengine -verbose -recheck-all -make libs -prefix /usr/ -extprefix /opt/myapp-target -hostprefix /opt/myapp-host -qt-zlib -qt-libjpeg -qt-libpng -no-feature-bearermanagement -no-xcb -no-xcb-xlib -no-xkbcommon -no-xcb-xinput -no-linuxfb

I believe the relevant flags are -kms, -gbm, -prefix /usr/, -extprefix /opt/myapp-target, and -hostprefix /opt/myapp-host

If I construct my AppDir by doing:

$ mkdir build

$ cd build

$ /opt/myapp-host/bin/qmake ../HelloWorld.pro -spec linux-g++ CONFIG+=qtquickcompiler

$ make

$ DEBUG=1 QMAKE=/opt/myapp-host/bin/qmake EXTRA_QT_PLUGINS=imageformats QML_SOURCES_PATHS=/home/jamesh/HelloWorld/HelloWorld LD_LIBRARY_PATH=/opt/myapp-target/lib linuxdeploy -e ./HelloWorld -d ../HelloWorld.desktop -i ./HelloWorld.png --appdir AppDir

I get the AppDir

$ tree AppDir/

AppDir/
├── AppRun -> usr/bin/HelloWorld
├── HelloWorld.desktop -> usr/share/applications/HelloWorld.desktop
├── HelloWorld.png -> usr/share/icons/hicolor/256x256/apps/HelloWorld.png
└── usr
    ├── bin
    │   └── HelloWorld
    ├── lib
    │   ├── libbsd.so.0
    │   ├── libdouble-conversion.so.1
    │   ├── libgraphite2.so.3
    │   ├── libicudata.so.60
    │   ├── libicui18n.so.60
    │   ├── libicuuc.so.60
    │   ├── libpcre.so.3
    │   ├── libpng16.so.16
    │   ├── libQt5Core.so.5
    │   ├── libQt5Gui.so.5
    │   ├── libQt5Network.so.5
    │   ├── libQt5Qml.so.5
    │   ├── libXau.so.6
    │   └── libXdmcp.so.6
    └── share
        ├── applications
        │   └── HelloWorld.desktop
        ├── doc
        │   ├── libbsd0
        │   │   └── copyright
        │   ├── libdouble-conversion1
        │   │   └── copyright
        │   ├── libgraphite2-3
        │   │   └── copyright
        │   ├── libicu60
        │   │   └── copyright
        │   ├── libpcre3
        │   │   └── copyright
        │   ├── libpng16-16
        │   │   └── copyright
        │   ├── libqt5core5a
        │   │   └── copyright
        │   ├── libqt5gui5
        │   │   └── copyright
        │   ├── libqt5network5
        │   │   └── copyright
        │   ├── libqt5qml5
        │   │   └── copyright
        │   ├── libxau6
        │   │   └── copyright
        │   └── libxdmcp6
        │       └── copyright
        └── icons
            └── hicolor
                ├── 128x128
                │   └── apps
                ├── 16x16
                │   └── apps
                ├── 256x256
                │   └── apps
                │       └── HelloWorld.png
                ├── 32x32
                │   └── apps
                ├── 64x64
                │   └── apps
                └── scalable
                    └── apps

For some reason it did not pull in the imageformats extra plugin. I am guessing it is because the qt plugin is not aware of the -target / -host split that occurs and it unaware that the plugins are stored on the -target side. I am guessing this is why I also needed to specify LD_LIBRARY_PATH=/opt/myapp-target/lib ... the tool could not find some libraries that were on the -target side because (I believe) it was only looking on the -host side.

Is there a better way to use the tool in this situation or is this a bug / feature that is not currently supported?

Here is the debug output from the tool:

linuxdeploy version 1-alpha (git commit ID b7c9785), <local dev build> built on 2021-04-22 07:42:08 UTC

-- Creating basic AppDir structure --
Creating directory AppDir/usr/bin/
Creating directory AppDir/usr/lib/
Creating directory AppDir/usr/share/applications/
Creating directory AppDir/usr/share/icons/hicolor/
Creating directory AppDir/usr/share/icons/hicolor/16x16/apps/
Creating directory AppDir/usr/share/icons/hicolor/32x32/apps/
Creating directory AppDir/usr/share/icons/hicolor/64x64/apps/
Creating directory AppDir/usr/share/icons/hicolor/128x128/apps/
Creating directory AppDir/usr/share/icons/hicolor/256x256/apps/
Creating directory AppDir/usr/share/icons/hicolor/scalable/apps/

-- Deploying dependencies for existing files in AppDir --

-- Deploying executables --
Deploying executable ./HelloWorld
WARNING: Could not find copyright files for file ./HelloWorld using dpkg-query
Deploying dependencies for ELF file ./HelloWorld
Deploying shared library /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
Deploying shared library /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
Deploying shared library /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libgcc_s.so.1
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libc.so.6
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libpthread.so.0
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libGL.so.1
Deploying shared library /usr/lib/x86_64-linux-gnu/libpng16.so.16
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libpng16.so.16
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libz.so.1
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libm.so.6
Deploying shared library /usr/lib/x86_64-linux-gnu/libQt5Network.so.5
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libQt5Network.so.5
Deploying shared library /usr/lib/x86_64-linux-gnu/libicui18n.so.60
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libicui18n.so.60
Deploying shared library /usr/lib/x86_64-linux-gnu/libicuuc.so.60
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libicuuc.so.60
Deploying shared library /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libdl.so.2
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libGLX.so.0
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libfreetype.so.6
Deploying shared library /usr/lib/x86_64-linux-gnu/libgraphite2.so.3
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libgraphite2.so.3
Deploying shared library /usr/lib/x86_64-linux-gnu/libicudata.so.60
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libicudata.so.60
Deploying shared library /lib/x86_64-linux-gnu/libpcre.so.3
Deploying copyright files for file /lib/x86_64-linux-gnu/libpcre.so.3
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libX11.so.6
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libxcb.so.1
Deploying shared library /usr/lib/x86_64-linux-gnu/libXau.so.6
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libXau.so.6
Deploying shared library /usr/lib/x86_64-linux-gnu/libXdmcp.so.6
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libXdmcp.so.6
Deploying shared library /lib/x86_64-linux-gnu/libbsd.so.0
Deploying copyright files for file /lib/x86_64-linux-gnu/libbsd.so.0
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/librt.so.1

-- Copying files into AppDir --
Copying file ./HelloWorld to AppDir/usr/bin/HelloWorld
Copying file /lib/x86_64-linux-gnu/libbsd.so.0 to AppDir/usr/lib/libbsd.so.0
Copying file /lib/x86_64-linux-gnu/libpcre.so.3 to AppDir/usr/lib/libpcre.so.3
Copying file /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 to AppDir/usr/lib/libQt5Core.so.5
Copying file /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 to AppDir/usr/lib/libQt5Gui.so.5
Copying file /usr/lib/x86_64-linux-gnu/libQt5Network.so.5 to AppDir/usr/lib/libQt5Network.so.5
Copying file /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5 to AppDir/usr/lib/libQt5Qml.so.5
Copying file /usr/lib/x86_64-linux-gnu/libXau.so.6 to AppDir/usr/lib/libXau.so.6
Copying file /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 to AppDir/usr/lib/libXdmcp.so.6
Copying file /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1 to AppDir/usr/lib/libdouble-conversion.so.1
Copying file /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 to AppDir/usr/lib/libgraphite2.so.3
Copying file /usr/lib/x86_64-linux-gnu/libicudata.so.60 to AppDir/usr/lib/libicudata.so.60
Copying file /usr/lib/x86_64-linux-gnu/libicui18n.so.60 to AppDir/usr/lib/libicui18n.so.60
Copying file /usr/lib/x86_64-linux-gnu/libicuuc.so.60 to AppDir/usr/lib/libicuuc.so.60
Copying file /usr/lib/x86_64-linux-gnu/libpng16.so.16 to AppDir/usr/lib/libpng16.so.16
Copying file /usr/share/doc/libbsd0/copyright to AppDir/usr/share/doc/libbsd0/copyright
Copying file /usr/share/doc/libdouble-conversion1/copyright to AppDir/usr/share/doc/libdouble-conversion1/copyright
Copying file /usr/share/doc/libgraphite2-3/copyright to AppDir/usr/share/doc/libgraphite2-3/copyright
Copying file /usr/share/doc/libicu60/copyright to AppDir/usr/share/doc/libicu60/copyright
Copying file /usr/share/doc/libpcre3/copyright to AppDir/usr/share/doc/libpcre3/copyright
Copying file /usr/share/doc/libpng16-16/copyright to AppDir/usr/share/doc/libpng16-16/copyright
Copying file /usr/share/doc/libqt5core5a/copyright to AppDir/usr/share/doc/libqt5core5a/copyright
Copying file /usr/share/doc/libqt5gui5/copyright to AppDir/usr/share/doc/libqt5gui5/copyright
Copying file /usr/share/doc/libqt5network5/copyright to AppDir/usr/share/doc/libqt5network5/copyright
Copying file /usr/share/doc/libqt5qml5/copyright to AppDir/usr/share/doc/libqt5qml5/copyright
Copying file /usr/share/doc/libxau6/copyright to AppDir/usr/share/doc/libxau6/copyright
Copying file /usr/share/doc/libxdmcp6/copyright to AppDir/usr/share/doc/libxdmcp6/copyright
Calling strip on library AppDir/usr/bin/HelloWorld
Calling strip on library AppDir/usr/lib/libQt5Core.so.5
Calling strip on library AppDir/usr/lib/libQt5Gui.so.5
Calling strip on library AppDir/usr/lib/libQt5Network.so.5
Calling strip on library AppDir/usr/lib/libQt5Qml.so.5
Calling strip on library AppDir/usr/lib/libXau.so.6
Calling strip on library AppDir/usr/lib/libXdmcp.so.6
Calling strip on library AppDir/usr/lib/libbsd.so.0
Calling strip on library AppDir/usr/lib/libdouble-conversion.so.1
Calling strip on library AppDir/usr/lib/libgraphite2.so.3
Calling strip on library AppDir/usr/lib/libicudata.so.60
Calling strip on library AppDir/usr/lib/libicui18n.so.60
Calling strip on library AppDir/usr/lib/libicuuc.so.60
Calling strip on library AppDir/usr/lib/libpcre.so.3
Calling strip on library AppDir/usr/lib/libpng16.so.16
Setting rpath in ELF file AppDir/usr/bin/HelloWorld to $ORIGIN/../lib
Setting rpath in ELF file AppDir/usr/lib/libQt5Core.so.5 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libQt5Gui.so.5 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libQt5Network.so.5 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libQt5Qml.so.5 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libXau.so.6 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libXdmcp.so.6 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libbsd.so.0 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libdouble-conversion.so.1 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libgraphite2.so.3 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libicudata.so.60 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libicui18n.so.60 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libicuuc.so.60 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libpcre.so.3 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libpng16.so.16 to $ORIGIN

-- Deploying icons --
Deploying icon ./HelloWorld.png
WARNING: Could not find copyright files for file ./HelloWorld.png using dpkg-query

-- Deploying desktop files --
Deploying desktop file ../HelloWorld.desktop

-- Copying files into AppDir --
Copying file ./HelloWorld.png to AppDir/usr/share/icons/hicolor/256x256/apps/HelloWorld.png
Copying file ../HelloWorld.desktop to AppDir/usr/share/applications/HelloWorld.desktop

-- Deploying files into AppDir root directory --
Deploying files to AppDir root using desktop file: AppDir/usr/share/applications/HelloWorld.desktop
Deploying desktop file to AppDir root: AppDir/usr/share/applications/HelloWorld.desktop
Creating symlink for file AppDir/usr/share/applications/HelloWorld.desktop in/as AppDir
Deploying icon to AppDir root: AppDir/usr/share/icons/hicolor/256x256/apps/HelloWorld.png
Creating symlink for file AppDir/usr/share/icons/hicolor/256x256/apps/HelloWorld.png in/as AppDir
Deploying AppRun symlink for executable in AppDir root: AppDir/usr/bin/HelloWorld
Creating symlink for file AppDir/usr/bin/HelloWorld in/as AppDir/AppRun

James-Hudson3010 avatar May 03 '21 17:05 James-Hudson3010