Bug 368633 - No keyboard when recompiling 3.0.1 appimage
Summary: No keyboard when recompiling 3.0.1 appimage
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: General (show other bugs)
Version: 3.0.1
Platform: Compiled Sources Linux
: NOR normal
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-09-11 19:37 UTC by beuc
Modified: 2016-09-18 08:06 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
appimage: add missing build dependencies to fix lack of keyboard support when building from minimal CentOS environment (1.55 KB, patch)
2016-09-16 18:10 UTC, beuc
Details
appimage: do not remove previously built appimages (836 bytes, patch)
2016-09-16 18:10 UTC, beuc
Details
appimage: add documentation (1.77 KB, patch)
2016-09-16 18:11 UTC, beuc
Details

Note You need to log in before you can comment on or make changes to this bug.
Description beuc 2016-09-11 19:37:08 UTC
I recompiled the latest appimage using the packaging script.
Krita starts correctly but no keyboard stroke is taken into account (not even Ctrl).

Comparing the files in the official and the rebuilt images, besides an additional krita.wrapper, locales moved to /use/share/krita/local/, different (rebuilt) Krita binaries and system security updates, I don't see anything suspicious. All differing files are binaries, system configuration files are hence identical.

Reproducible: Always

Steps to Reproduce:
docker pull centos:6

(cd src/ && git checkout krita/3.0.1)

docker run -ti -v $(pwd)/src:/krita centos:6 /bin/bash
cd /krita/packaging/linux/appimage/
bash build-deps.sh  # 2h45mn, 5-6GB
docker commit XXXXXX  # 3-4mn
docker tag YYYYYY krita-deps

docker run -ti -v $(pwd)/src:/krita -v $(pwd)/build:/krita_build -v $(pwd)/out:/out krita-deps /bin/bash
bash build-krita.sh  # 1h
yum install mesa-libGLU-devel
bash build-image.sh  # 10mn

./out/krita-3.0.1-cab6520-x86_64.appimage

Actual Results:  
$ ./krita-3.0.1-cab6520-x86_64.appimage 
QCoreApplication::arguments: Please instantiate the QApplication object first
krita.lib.pigment: Compiled for arch: 7
krita.lib.pigment: Features supported:
krita.lib.pigment: 	 "SSE2" 	---	 yes
krita.lib.pigment: 	 "SSSE3" 	---	 yes
krita.lib.pigment: 	 "SSE4.1" 	---	 yes
krita.lib.pigment: 	 "AVX " 	---	 yes
krita.lib.pigment: 	 "AVX2 " 	---	 yes
xkbcommon: ERROR: failed to add default include path auto
Qt: Failed to create XKB context!
Use QT_XKB_CONFIG_ROOT environmental variable to provide an additional search path, add ':' as separator to provide several search paths and/or make sure that XKB configuration data directory contains recent enough contents, to update please see http://cgit.freedesktop.org/xkeyboard-config/ .
OpenGL Info
  Vendor:  Intel Open Source Technology Center
  Renderer:  Mesa DRI Intel(R) Haswell Mobile 
  Version:  3.0 Mesa 11.2.2
  Shading language:  1.30
  Requested format:  QSurfaceFormat(version 3.0, options QFlags(0x4), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 0, profile  2)
  Current format:    QSurfaceFormat(version 3.0, options QFlags(0x4), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 0, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 0, profile  0)
krita has opengl true
Setting XDG_DATA_DIRS "/tmp/.mount_2HvQo0/usr/bin/../share:./share/:/usr/share/mate:/usr/local/share/:/usr/share/"
Available translations QSet("en_US")
Available domain translations QSet("en_US")
Override language: ""
KoJsonTrader will load its plugins from "/tmp/.mount_2HvQo0/usr/lib/kritaplugins"
libpng warning: iCCP: too many profiles
libpng warning: iCCP: too many profiles
libpng warning: iCCP: too many profiles
libpng warning: iCCP: too many profiles
KoJsonTrader will load its plugins from "/tmp/.mount_2HvQo0/usr/lib/kritaplugins"


Note the 2 lines about xkb errors.

Expected Results:  
Taking into account keyboard key strokes.
For reference the output of the official build :

$ ./krita-3.0.1-x86_64.appimage 
QCoreApplication::arguments: Please instantiate the QApplication object first
krita.lib.pigment: Compiled for arch: 7
krita.lib.pigment: Features supported:
krita.lib.pigment: 	 "SSE2" 	---	 yes
krita.lib.pigment: 	 "SSSE3" 	---	 yes
krita.lib.pigment: 	 "SSE4.1" 	---	 yes
krita.lib.pigment: 	 "AVX " 	---	 yes
krita.lib.pigment: 	 "AVX2 " 	---	 yes
OpenGL Info
  Vendor:  Intel Open Source Technology Center
  Renderer:  Mesa DRI Intel(R) Haswell Mobile 
  Version:  3.0 Mesa 11.2.2
  Shading language:  1.30
  Requested format:  QSurfaceFormat(version 3.0, options QFlags(0x4), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 0, profile  2)
  Current format:    QSurfaceFormat(version 3.0, options QFlags(0x4), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 0, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 0, profile  0)
krita has opengl true
Setting XDG_DATA_DIRS "/tmp/.mount_ThAHpL/usr/bin/../share:./share/:/usr/share/mate:/usr/local/share/:/usr/share/"
Available translations QSet("ne", "cs", "ta", "sq", "tr", "he", "gl", "sv", "en_GB", "eu", "uz@cyrillic", "pl", "sk", "hu", "ia", "es", "bg", "nds", "et", "de", "ms", "fr", "tg", "hr", "mr", "fy", "ar", "mk", "en_US", "be", "uk", "da", "mai", "ro", "nb", "fi", "wa", "bs", "ko", "oc", "xh", "ga", "kk", "hi", "br", "zh_TW", "km", "nl", "is", "lv", "hne", "nn", "ru", "af", "ast", "ca", "ja", "it", "eo", "uz", "pt_BR", "pt", "zh_CN", "pa", "fa", "th", "ug", "sl", "ca@valencia", "vi", "se", "el", "cy", "lt")
Available domain translations QSet("ne", "cs", "ta", "sq", "tr", "he", "gl", "sv", "en_GB", "eu", "uz@cyrillic", "pl", "sk", "hu", "ia", "es", "bg", "nds", "et", "de", "ms", "fr", "tg", "hr", "mr", "fy", "ar", "mk", "en_US", "be", "uk", "da", "mai", "ro", "nb", "fi", "wa", "bs", "ko", "oc", "xh", "ga", "kk", "hi", "br", "zh_TW", "km", "nl", "is", "lv", "hne", "nn", "ru", "af", "ast", "ca", "ja", "it", "eo", "uz", "pt_BR", "pt", "zh_CN", "pa", "fa", "th", "ug", "sl", "ca@valencia", "vi", "se", "el", "cy", "lt")
Override language: ""
KoJsonTrader will load its plugins from "/tmp/.mount_ThAHpL/usr/lib/kritaplugins"
libpng warning: iCCP: too many profiles
libpng warning: iCCP: too many profiles
libpng warning: iCCP: too many profiles
libpng warning: iCCP: too many profiles
KoJsonTrader will load its plugins from "/tmp/.mount_ThAHpL/usr/lib/kritaplugins"


Incidentally I'm surprised the appimage takes 10 full minutes (on SSD disk) of doing some massive search and copies for a mere ~100M archive. Hopefully that was normal.
Comment 1 Halla Rempt 2016-09-12 08:59:15 UTC
It's normal. It checks all the libraries in the appdir and copies the dependencies recursively. I don't use docker, I use a plain centos 6.7 vm. I'm not sure what the differences are: you will have to investigate that yourself, since I don't have this issue with exactly the same script.
Comment 2 beuc 2016-09-12 16:54:12 UTC
When the user runs a build script in a clean environment and gets an incorrect result, this usually is a problem with the script, not the user's fault.

This could be a missing base dependency that is installed with a common install of CentOS, but not in a tight environment such as the 70MB Docker image. Aka, like #368624, a missing build dependency.

Before I try anything, any specifics about your centos vm installation?
Comment 3 Halla Rempt 2016-09-13 06:38:48 UTC
Of course it must be a difference between your docker and the vm I use. I download the default CentOS-6.8-x86_64-bin-DVD1.iso and install it in VirtualBox. I use the plain gnome desktop install so I've got a terminal and a browser, and then I run the scripts.
Comment 4 beuc 2016-09-14 19:25:08 UTC
Hi,

I downloaded and installed CentOS-6.8-x86_64-bin-DVD1.iso, with the default Desktop install target (Gnome).

I noted that mesa-libGLU-devel is not installed by default :
$ rpm -q mesa-libGLU-devel
package mesa-libGLU-devel is not installed
So maybe I didn't make the same install as you,  or you installed that package manually at a point?

I also noticed this when in the build-deps.sh step, ext_qt part:
  xkbcommon-x11........... yes (bundled copy, XKB config root: /usr/share/X11/xkb)
  xkbcommon-evdev......... no
Is that the normal, with regard to the xkbcommon dependency?
Comment 5 beuc 2016-09-14 20:27:13 UTC
> Is that the normal, with regard to the xkbcommon dependency?
For instance, the result of this comment on your build environment would help :)
# rpm -qa | grep xkb
Comment 6 Halla Rempt 2016-09-15 13:16:33 UTC

    [root@krita-builder out]# rpm -qa | grep xkb
    libxkbfile-1.0.6-1.1.el6.x86_64
    xorg-x11-xkb-utils-7.7-12.el6.x86_64
    [root@krita-builder out]# rpm -qa | grep GLU
    mesa-libGLU-11.0.7-4.el6.x86_64
Comment 7 beuc 2016-09-16 07:28:36 UTC
OK so it doesn't come from these packages.

Now, I could rebuild an appimage with a working keyboard from a CentOS VM.
By comparing the build output I noted 2 discrepancies with the slimmer (docker) CentOS environment, both in the early 'ext_qt' configuration phase:

1)
  Iconv .................. yes
  Iconv .................. no

Note that this happens before ext_iconv is built.

This is also an issue when building AppImageKit :
[ 75%] Building C object CMakeFiles/runtime.dir/runtime.c.o
Linking C executable runtime
libisofs.a(isofs.c.o): In function `isofs_fix_entry':
/AppImageKit/isofs.c:604: undefined reference to `libiconv_open'
/AppImageKit/isofs.c:621: undefined reference to `libiconv'
/AppImageKit/isofs.c:628: undefined reference to `libiconv_close'
/AppImageKit/isofs.c:647: undefined reference to `libiconv_close'
collect2: error: ld returned 1 exit status
make[2]: *** [runtime] Error 1
make[1]: *** [CMakeFiles/runtime.dir/all] Error 2
make: *** [all] Error 2
fatal: No tags can describe 'd5fcf2e4d8b50361585e1c7d9ffa9143bc852065'.
Try --always, or create some tags.
/AppImageKit
+ cd /
+ ln -sf /usr/share/pkgconfig /usr/lib/pkgconfig

Note that this AppImageKit build error is ignored, btw.

This is fixed by installing:
$ yum install glibc-devel


2)
  xkbcommon-x11........... yes (bundled copy, XKB config root: /usr/share/X11/xkb)
  xkbcommon-x11........... yes (bundled copy, XKB config root: not found)

This looks like the keyboard source issue.
This is fixed by installing:
$ yum install xkeyboard-config


I'm trying a full rebuild now, if this works I'll produce a patch.
Comment 8 beuc 2016-09-16 18:10:11 UTC
Created attachment 101125 [details]
appimage: add missing build dependencies to fix lack of keyboard support when building from minimal CentOS environment

appimage: add missing build dependencies to fix lack of keyboard support when building from minimal CentOS environment
Comment 9 beuc 2016-09-16 18:10:42 UTC
Created attachment 101126 [details]
appimage: do not remove previously built appimages

appimage: do not remove previously built appimages
Comment 10 beuc 2016-09-16 18:11:33 UTC
Created attachment 101127 [details]
appimage: add documentation

appimage: add documentation
Comment 11 beuc 2016-09-16 18:14:01 UTC
Build now works from a minimal CentOS such as Docker's :)

Attached are 3 patched:
- adding missing QT build dependencies
- avoid clearing /out/* since I lost all my previous builds :/
- add documentation

I would recommend pushing it to krita/3.0.1 along with fe518206866a6cffdc64903ce3bf18b5e7a80867
2ac3c47e3ba91005143f4b59768f4e235e6d6762
so that people checking out the stable branch get a fully-working script.

Cheers!
Comment 12 Halla Rempt 2016-09-17 07:18:36 UTC
I'm wondering, being a docker newbie, in the docker instructions, what do the XXXXXX and YYYYY stand for?
Comment 13 Halla Rempt 2016-09-17 07:19:34 UTC
Git commit 0397774143eefb1a1f19cf561176f1d28c8428af by Boudewijn Rempt.
Committed on 17/09/2016 at 07:19.
Pushed by rempt into branch 'master'.

Apply Beuc's patches to the appimage build script

A  +42   -0    packaging/linux/appimage/README.txt
M  +1    -1    packaging/linux/appimage/build-deps.sh

http://commits.kde.org/krita/0397774143eefb1a1f19cf561176f1d28c8428af
Comment 14 beuc 2016-09-18 08:06:56 UTC
Thanks for reviewing the patches.

XXX and YYY are 2 git-commit-like identifiers.
Point is : when you start a Docker image, quit, then restart the image again, the environment is completely reset, so when you want to save your changes you:
- commit the last XXX container identifier (displayed in the command prompt or in 'docker ps -a'); this displays the new image id YYY
- tag YYY with a descriptive name

Still wanting to remove out/* btw?