Issue when creating appimage for Skrooge

Hi,

I’m the main developer of Skrooge and I would like to publish an appimage for my application.
I tried to create it wy using pkg2appimage on this appimage.yml:

app: Skrooge

ingredients:
  dist: zesty
  packages:
    - skrooge-kf5
  sources: 
    - deb http://archive.ubuntu.com/ubuntu/ zesty main universe
    - deb http://ppa.launchpad.net/djcj/gnutls-patched/ubuntu zesty main
  ppas:
    - s-mankowski/beta-kf5

script:
 - mv ./usr/lib/x86_64-linux-gnu/grantlee/5.1/* ./usr/lib/x86_64-linux-gnu/qt5/plugins/grantlee/5.1/.
 - cp usr/share/applications/org.kde.skrooge.desktop skrooge.desktop

The appimage is created and I can run it :smile:
But, I have some issues that I am not able to solve:
Issue 1:
When I do on the “Skrooge dashboard”, the QML widgets are not displayed and I have the following traces in the console:

##WARNING: file:///tmp/.mount_skroog9xyEhZ/usr/share/skrooge/html/default/interests.qml:17:1: plugin cannot be loaded for module “QtQuick”: Le plugin “/usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick.2/libqtquick2plugin.so” utilise une bibliothèque Qt incompatible. (5.9.3) [release]
import QtQuick 2.0

Is it normal that libqtquick2plugin.so seems to be found on my system instead of in the appimage?
What could be the solution?

Issue 2:
When I try to open a file protected by password, I have the following error message:

[ERR-13]: Le chiffrement « AES128 » n’est pas pris en charge (random,md5,sha1,keystorelist). Veuillez installer « qca-ossl ».

As you can see, it seems that QCA module is not able to found the OSSL plugin. I checked, the needed libraries are well installed in the image.

What could be the solution?

Thank you in advance for your help.
And thank you for this great tool (appimage of course).

Regards.

Hi @miraks thanks for your interest in AppImage. In this case (a Qt application that can be compiled from source) it is better to use linuxdeployqt than to convert existing debs. Please see https://github.com/probonopd/linuxdeployqt for how to use this, especially the example at https://github.com/probonopd/linuxdeployqt#using-linuxdeployqt-with-travis-ci.

Please note that in order to be compatible with all still-supported versions of Ubuntu, you need to build on 14.04 (trusty) rather than zesty.

Hi @probono,

Thank you for this quick answer.
I tried to build the appimage.
I did:
./linuxdeployqt-continuous-x86_64.AppImage skrooge/build/appdir/usr/share/applications/.desktop -bundle-non-qt-libs
./linuxdeployqt-continuous-x86_64.AppImage skrooge/build/appdir/usr/share/applications/
.desktop -appimage

But, when I launch the image, the skrooge plugins are not loaded. Do you have an idea?

Can you please upload both the AppImage and the script that generates it so that I can have a look at it?

Hi,
I tried again to generate an appimage like this:

cd /home/s/Developpements/
git clone git://anongit.kde.org/skrooge.git
cd skrooge
mkdir build
cd build
cmake (as described in README)

make DESTDIR=appdir -j$(nproc) install
cp /usr/share/icons/breeze-dark/apps/48/skrooge.svg appdir/.
unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
cd …/…
./linuxdeployqt-continuous-x86_64.AppImage skrooge/build/appdir/usr/share/applications/org.kde.skrooge.desktop -bundle-non-qt-libs
./linuxdeployqt-continuous-x86_64.AppImage skrooge/build/appdir/usr/share/applications/org.kde.skrooge.desktop -verbose=3 -appimage -always-overwrite

This last step fails with:

Log: “libskgbasegui.so.2” already at target location
ERROR: file copy failed from “/home/s/Developpements/skrooge/build/appdir/usr/bin/…/lib/libskgbasegui.so.2”
ERROR: to “/home/s/Developpements/skrooge/build/appdir/usr/lib///libskgbasegui.so.2”
Log: copyCopyrightFile: “/home/s/Developpements/skrooge/build/appdir/usr/bin/…/lib/libskgbasegui.so.2”
Log: Determining whether to run strip:
Log: checking whether “” has an rpath set
Log: patchelf --print-rpath “”
ERROR: Error reading rpath with patchelf “” : “stat: No such file or directory\n”
ERROR: Error reading rpath with patchelf “” : “”

I did many tests but without success. I don’t understood how I did the first time.:roll_eyes:

In the other hand, I successfully create an appimage with pkg2appimage and this yml file: https://cgit.kde.org/skrooge.git/tree/appimage.yml
The generated appimage is here: Download - Skrooge
I only have one issue with QCA (OSSL not found).

Thank you in advance for your advice and your help.
Regards.

PS: I understood that “trusty” is better but the last version of Skrooge is not supported on “trusty”.

I don’t know if this is helpful or not but I tried out the AppImage for Skrooge and here are the errors I received when trying to execute it.

skrooge: /lib/x86_64-linux-gnu/libz.so.1: version `ZLIB_1.2.9’ not found (required by /tmp/.mount_skroogfXowNq/usr/lib/x86_64-linux-gnu/libpng16.so.16)

skrooge: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.25’ not found (required by /tmp/.mount_skroogfXowNq/lib/x86_64-linux-gnu/libudev.so.1)

skrooge: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.25’ not found (required by /tmp/.mount_skroogfXowNq/lib/x86_64-linux-gnu/libsystemd.so.0)

Hi,

Just to inform you that “working” app image is here: https://bintray.com/miraks31/Skrooge/download_file?file_path=skrooge-2.10.10-x86_64.AppImage

This appimage has been build with pkg2appimage, the only known issue is with QCA module.
This is causing trouble only when the user tries to load or save a file protected by password.

How could I solve this issue?
Regards.

Hi,
When I launch this:

strace ./skrooge-2.10.10-x86_64.AppImage 2>&1 | grep -i qca

The result is this:

open(“/tmp/.mount_skroogtUKTmN/usr/lib/libqca-qt5.so.2”, O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open(“/tmp/.mount_skroogtUKTmN/usr/lib/x86_64-linux-gnu/libqca-qt5.so.2”, O_RDONLY|O_CLOEXEC) = 4
stat(“/home/s/.config/Affinix/QCA2.conf”, 0x7ffc14bcebf0) = -1 ENOENT (No such file or directory)
stat(“/home/s/.config/Affinix/QCA2.conf”, 0x7ffc14bcebf0) = -1 ENOENT (No such file or directory)
stat(“/home/s/.config/Affinix/QCA2.conf”, 0x7ffc14bcebc0) = -1 ENOENT (No such file or directory)
stat(“/etc/xdg/Affinix/QCA2.conf”, 0x7ffc14bcebf0) = -1 ENOENT (No such file or directory)
stat(“/etc/xdg/Affinix/QCA2.conf”, 0x7ffc14bcebf0) = -1 ENOENT (No such file or directory)
stat(“/etc/xdg/Affinix/QCA2.conf”, 0x7ffc14bcebc0) = -1 ENOENT (No such file or directory)
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
stat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
open(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto”, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 38
statfs(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/”, {f_type=“EXT2_SUPER_MAGIC”, f_bsize=4096, f_blocks=8556741, f_bfree=1397917, f_bavail=957495, f_files=2182992, f_ffree=1492097, f_fsid={425557329, 2146204417}, f_namelen=255, f_frsize=4096, f_flags=4128}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-cyrus-sasl.so”, {st_mode=S_IFREG|0644, st_size=60224, …}) = 0
open(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-cyrus-sasl.so”, O_RDONLY|O_CLOEXEC) = 38
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-gcrypt.so”, {st_mode=S_IFREG|0644, st_size=56280, …}) = 0
open(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-gcrypt.so”, O_RDONLY|O_CLOEXEC) = 38
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-gnupg.so”, {st_mode=S_IFREG|0644, st_size=249888, …}) = 0
open(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-gnupg.so”, O_RDONLY|O_CLOEXEC) = 38
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-logger.so”, {st_mode=S_IFREG|0644, st_size=43984, …}) = 0
open(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-logger.so”, O_RDONLY|O_CLOEXEC) = 38
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-ossl.so”, {st_mode=S_IFREG|0644, st_size=317968, …}) = 0
open(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-ossl.so”, O_RDONLY|O_CLOEXEC) = 38
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto”, {st_mode=S_IFDIR|0755, st_size=4096, …}) = 0
lstat(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-softstore.so”, {st_mode=S_IFREG|0644, st_size=118216, …}) = 0
open(“/usr/lib/x86_64-linux-gnu/qca-qt5/crypto/libqca-softstore.so”, O_RDONLY|O_CLOEXEC) = 38

Do you know why the libqca-ossl.so is searched on my system and not on the image?

libqca-ossl.so is in a non-standard location inside the AppImage (not in usr/lib or usr/lib/x86_64-linux-gnu) so the application does not know where it has to search for it. It might work if you move it (and any other libraries that are currently in subdirectories of usr/lib or usr/lib/x86_64-linux-gnu) there.

This is how the application looks for me on Xubuntu 16.04:

Is this correct or are there icons missing? If yes, make sure that the application looks for them in relative paths (relative to the application itself) rather than in absolute paths that are hardcoded at compile time (e.g., $PREFIX).

This is how it looks for me as well in elementary 0.4.
But apart from the missing icons it’s usable.

Thank you so much for the appimage. I’ve started distrohopping again and it’s super useful as skrooge is the one program i can’t go without.

Thanks! :smiley:

Hi,

I published a new version with icons included.
https://bintray.com/miraks31/Skrooge/download_file?file_path=skrooge-2.11.1-x86_64.AppImage

Could you tell me if this is better?
Regards.

Looks like this in the XFCE file manager on Xubuntu when the optional appimaged daemon is installed:

Screenshot_2018-02-23_20-31-31

And when you launch Skrooge, do you have icons on buttons and menus?

You mean inside the Skrooge application?

yes, inside the Skrooge application.

This is how it looks on Xubuntu 16.04:

Arg! Icons are missing. I don’t understand why. There are well in the package but not loaded.
An idea?

Are they being loaded from a path relative to the main binary? Need to make the app relocateable, i.e., use no absolute paths.

Icons are loaded by using KDE API( example: KDE::icon(“edit-undo”) ).
They are normally searched in standard directories and loaded.
They should be found in /usr/share/icons which is in the appimage.
Regards.