MirKiosk: Snap won't start on Ubuntu Core

My snap works fine on the desktop, both X11 and Wayland session. It also works on UbuntuCore if I remove certain part of my program, the part that initialized a QWebEngineView.

Here is the crash log

om26er@localhost:~$ sudo xbr-dashboard 
+++ cat /proc/cmdline
++ [[ BOOT_IMAGE=(loop)/kernel.img root=LABEL=writable snap_core=core_5358.snap snap_kernel=pc-kernel_144.snap ro net.ifnames=0 init=/lib/systemd/systemd console=ttyS0 console=tty1 panic=-1 = *\s\n\a\p\_\c\o\r\e\=* ]]
++ export QT_QPA_PLATFORM=wayland-egl
++ QT_QPA_PLATFORM=wayland-egl
++ python3 -u /snap/xbr-dashboard/16/main.py --no-sandbox
Using Wayland-EGL
libEGL warning: MESA-LOADER: failed to retrieve device information

MESA-LOADER: failed to retrieve device information
MESA-LOADER: failed to retrieve device information
WebEngine compiled with X11 support, however qpa backend is not xcb. This may fail.
Received signal 11 SEGV_MAPERR 000000000000
#0 0x7f529022095f <unknown>
#1 0x7f528ec5285d <unknown>
#2 0x7f5290220e6e <unknown>[1572:1586:0825/201740.450128:ERROR:udev_linux.cc(21)] Failed to initialize udev, possibly due to an invalid system configuration. Various device-related browser features may be broken.

#3 0x7f52a03ff390 <unknown>
#4 0x7f5286efa65d <unknown>
#5 0x7f5298b64051 <unknown>
#6 0x7f5298b67275 <unknown>
#7 0x7f5298b674ac <unknown>
#8 0x7f5298b406d6 <unknown>
#9 0x7f528ecea615 <unknown>
#10 0x7f529547924d <unknown>
#11 0x7f529547a080 <unknown>
#12 0x7f52954719f7 <unknown>
#13 0x7f52954720c4 <unknown>
#14 0x7f529547fd6b <unknown>
#15 0x7f529547fe09 <unknown>
#16 0x7f52956bc33d <unknown>
#17 0x00000053b9c6 <unknown>
#18 0x0000005416ea <unknown>
#19 0x0000004ebd23 <unknown>
#20 0x0000005c1797 <unknown>
#21 0x0000004fb9ce <unknown>
#22 0x0000005c1797 <unknown>
#23 0x000000574999 <unknown>
#24 0x00000057f03c <unknown>
#25 0x0000005c1797 <unknown>
#26 0x00000053bba6 <unknown>
#27 0x000000540199 <unknown>
#28 0x000000540e4f <unknown>
#29 0x00000060c272 <unknown>
#30 0x00000060e71a <unknown>
#31 0x00000060ef0c <unknown>
#32 0x00000063fb26 <unknown>
#33 0x0000004cfeb1 <unknown>
#34 0x7f52a0044830 <unknown>
#35 0x0000005d6049 <unknown>
  r8: 00000000016e49b0  r9: 0000000000000000 r10: 0000000000000145 r11: 00007f528b1d7ed0
 r12: 0000000000000000 r13: 0000000000000000 r14: 00000000016d94c0 r15: 00000000016e49b0
  di: 00000000ffffffff  si: 00007f52a03e8b28  bp: 00007ffc1a336260  bx: 0000000000000000
  dx: 00000000016d94b0  ax: 00000000016d94b0  cx: 0000000000000000  sp: 00007ffc1a336210
  ip: 00007f5286efa65d efl: 0000000000010206 cgf: 0000000000000033 erf: 0000000000000004
 trp: 000000000000000e msk: 0000000000000000 cr2: 0000000000000000
[end of stack trace]
Calling _exit(1). Core file will not be generated.

Here is the snapcraft.yaml

name: xbr-dashboard
version: '0.1'
summary: XBR Applets Dashboard
description: |
  XBR Applets Dashboard

grade: stable
confinement: strict

apps:
  xbr-dashboard:
    command: desktop-launch $SNAP/start.sh
    environment:
      PYTHONPATH: $SNAP/pyside
      XDG_RUNTIME_DIR: $SNAP_DATA/wayland
    plugs:
      - network
      - opengl
      - desktop
      - x11
      - wayland
      - browser-support
      - process-control
      - system-observe

parts:
  dashboard:
    plugin: dump
    source: .
    after:
      - desktop-glib-only
    stage:
      - main.py
      - start.sh
      - components/*

  pyside:
    plugin: nil
    override-build: |
      snapcraftctl build
      python3 -m easy_install pip
      mkdir -p ${SNAPCRAFT_PART_INSTALL}/pyside
      pip install --no-cache-dir --index-url=http://download.qt.io/snapshots/ci/pyside/5.11/latest/ pyside2 --trusted-host download.qt.io -t ${SNAPCRAFT_PART_INSTALL}/pyside
      rm -r ${SNAPCRAFT_PART_INSTALL}/pyside/PySide2/examples
    build-packages:
      - unzip
      - wget
      - python3-setuptools
    stage-packages:
      - libnss3
      - libxcomposite1
      - libxcursor1
      - libxtst6
      - libxrandr2
      - libasound2
      - libglu1-mesa
      - libgles2-mesa
      - fontconfig
      - libxkbcommon0
      - ttf-ubuntu-font-family
      - dmz-cursor-theme
      - light-themes
      - adwaita-icon-theme
      - gnome-themes-standard
      - shared-mime-info
      - libgdk-pixbuf2.0-0
      - locales-all
      - libxslt1.1
      - fonts-dejavu-core
      - xfonts-base
      - xfonts-scalable
    after:
      - dashboard

plugs:
  wayland-socket-dir:
    content: wayland-socket-dir
    interface: content
    target: $SNAP_DATA/wayland
    default-provider: mir-kiosk

Here is the dmesg log of the app

[   19.671904] audit: type=1400 audit(1535228003.880:14): apparmor="DENIED" operation="capable" profile="snap.xbr-dashboard.xbr-dashboard" pid=1465 comm="python3" capability=21  capname="sys_admin"
[   21.503204] audit: type=1400 audit(1535228005.712:15): apparmor="DENIED" operation="open" profile="snap.xbr-dashboard.xbr-dashboard" name="/proc/1465/mem" pid=1465 comm="python3" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[   21.754226] audit: type=1400 audit(1535228005.964:16): apparmor="DENIED" operation="open" profile="snap.xbr-dashboard.xbr-dashboard" name="/proc/1467/mem" pid=1467 comm="QtWebEngineProc" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[   22.257040] audit: type=1326 audit(1535228006.468:17): auid=1000 uid=0 gid=0 ses=1 pid=1482 comm="Chrome_IOThread" exe="/usr/bin/python3.5" sig=0 arch=c000003e syscall=41 compat=0 ip=0x7fbf314b65a7 code=0x50000
[   22.362200] audit: type=1400 audit(1535228006.572:18): apparmor="DENIED" operation="open" profile="snap.xbr-dashboard.xbr-dashboard" name="/usr/share/fonts/" pid=1465 comm="python3" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[   22.367395] audit: type=1400 audit(1535228006.576:19): apparmor="DENIED" operation="open" profile="snap.xbr-dashboard.xbr-dashboard" name="/usr/share/fonts/" pid=1465 comm="python3" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[   22.367570] audit: type=1400 audit(1535228006.576:20): apparmor="DENIED" operation="open" profile="snap.xbr-dashboard.xbr-dashboard" name="/usr/share/fonts/" pid=1465 comm="python3" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[   22.367618] audit: type=1400 audit(1535228006.576:21): apparmor="DENIED" operation="open" profile="snap.xbr-dashboard.xbr-dashboard" name="/usr/share/fonts/" pid=1465 comm="python3" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[   22.368215] audit: type=1400 audit(1535228006.576:22): apparmor="DENIED" operation="open" profile="snap.xbr-dashboard.xbr-dashboard" name="/usr/local/share/fonts/" pid=1465 comm="python3" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[   22.375192] audit: type=1400 audit(1535228006.584:23): apparmor="DENIED" operation="open" profile="snap.xbr-dashboard.xbr-dashboard" name="/usr/local/share/fonts/" pid=1465 comm="python3" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
1 Like

cc’ing @greyback and @alan_g as this is related to mir-kiosk

snap list

om26er@localhost:~$ snap list
Name           Version                 Rev   Tracking  Publisher   Notes
core           16-2.35+git940.75e9b53  5358  edge      canonical✓  core
mir-kiosk      0.32.1                  168   stable    canonical✓  -
pc             16.04-0.9               24    edge      canonical✓  gadget
pc-kernel      4.4.0-134.160           144   edge      canonical✓  kernel
xbr-dashboard  0.1                     16    edge      om26er      -

snap interfaces output would also be interesting here … (specifically did you connect xbr-connect:wayland-socket-dir to mir-kiosk:wayland-socket-dir ?)

Here is the output

om26er@localhost:/snap/mir-kiosk/current$ snap interfaces
Slot                          Plug
chromium-mir-kiosk:x11        chromium-mir-kiosk:x11-plug
:account-control              -
:alsa                         -
:autopilot-introspection      -
:bluetooth-control            -
:broadcom-asic-control        -
:browser-support              chromium-mir-kiosk:browser-sandbox,xbr-dashboard
:camera                       -
:can-bus                      -
:classic-support              -
:core-support                 -
:cpu-control                  -
:daemon-notify                -
:dcdbas-control               -
:docker-support               -
:dvb                          -
:firewall-control             -
:framebuffer                  -
:fuse-support                 -
:gpg-keys                     -
:gpg-public-keys              -
:gpio-memory-control          -
:greengrass-support           -
:hardware-observe             -
:hardware-random-control      -
:hardware-random-observe      -
:home                         -
:hostname-control             -
:io-ports-control             -
:joystick                     -
:kernel-module-control        -
:kubernetes-support           -
:kvm                          -
:log-observe                  -
:lxd-support                  -
:mount-observe                -
:netlink-audit                -
:netlink-connector            -
:network                      chromium-mir-kiosk,xbr-dashboard
:network-bind                 -
:network-control              -
:network-observe              -
:network-setup-control        -
:network-setup-observe        -
:opengl                       chromium-mir-kiosk,mir-kiosk,xbr-dashboard
:openvswitch-support          -
:physical-memory-control      -
:physical-memory-observe      -
:ppp                          -
:process-control              xbr-dashboard
:raw-usb                      -
:removable-media              -
:shutdown                     -
:snapd-control                -
:ssh-keys                     -
:ssh-public-keys              -
:system-observe               xbr-dashboard
:system-trace                 -
:time-control                 -
:timeserver-control           -
:timezone-control             -
:tpm                          -
:uhid                         -
mir-kiosk:mir                 -
mir-kiosk:mir-libs-1604       -
mir-kiosk:wayland             chromium-mir-kiosk,xbr-dashboard
mir-kiosk:wayland-socket-dir  xbr-dashboard
-                             chromium-mir-kiosk:camera
-                             chromium-mir-kiosk:cups-control
-                             chromium-mir-kiosk:desktop
-                             chromium-mir-kiosk:gsettings
-                             chromium-mir-kiosk:hardware-observe
-                             chromium-mir-kiosk:home
-                             chromium-mir-kiosk:mount-observe
-                             chromium-mir-kiosk:network-manager
-                             chromium-mir-kiosk:password-manager-service
-                             chromium-mir-kiosk:pulseaudio
-                             chromium-mir-kiosk:removable-media
-                             chromium-mir-kiosk:screen-inhibit-control
-                             xbr-dashboard:desktop
-                             xbr-dashboard:x11

Ok, so I updated my snapcraft.yaml with few changes and my snap now seems to work, though the store won’t publish my upload, because

Will need manual review...
The Store automatic review failed.
A human will soon review your snap, but if you can't wait please write in the snapcraft forum asking for the manual review explicitly.
If you need to disable confinement, please consider using devmode, but note that devmode revision will only be allowed to be released in edge and beta channels.
Please check the errors and some hints below:
  - Layouts are currently a beta feature
  - human review required due to 'deny-connection' constraint for 'on-classic' from base declaration

These are the changes I made

  • added a custom plug for x11 (given its not available on UbuntuCore)
  • Used layout feature to expose fonts directories
name: xbr-dashboard
version: '0.1'
summary: XBR Applets Dashboard
description: |
  XBR Applets Dashboard

grade: stable
confinement: strict

apps:
  xbr-dashboard:
    command: desktop-launch $SNAP/start.sh
    environment:
      PYTHONPATH: $SNAP/pyside
      XDG_RUNTIME_DIR: $SNAP_DATA/wayland
    slots:
      - x11
    plugs:
      - network
      - opengl
      - desktop
      - wayland
      - browser-support
      - x11-plug

parts:
  dashboard:
    plugin: dump
    source: .
    after:
      - desktop-glib-only
    stage:
      - main.py
      - start.sh
      - components/*

  pyside:
    plugin: nil
    override-build: |
      snapcraftctl build
      python3 -m easy_install pip
      mkdir -p ${SNAPCRAFT_PART_INSTALL}/pyside
      pip install --no-cache-dir --index-url=http://download.qt.io/snapshots/ci/pyside/5.11/latest/ pyside2 --trusted-host download.qt.io -t ${SNAPCRAFT_PART_INSTALL}/pyside
      rm -r ${SNAPCRAFT_PART_INSTALL}/pyside/PySide2/examples
    build-packages:
      - unzip
      - wget
      - python3-setuptools
    stage-packages:
      - libnss3
      - libxcomposite1
      - libxcursor1
      - libxtst6
      - libxrandr2
      - libasound2
      - libglu1-mesa
      - libgles2-mesa
      - fontconfig
      - libxkbcommon0
      - ttf-ubuntu-font-family
      - dmz-cursor-theme
      - light-themes
      - adwaita-icon-theme
      - gnome-themes-standard
      - shared-mime-info
      - libgdk-pixbuf2.0-0
      - locales-all
      - libxslt1.1
      - fonts-dejavu-core
      - xfonts-base
      - xfonts-scalable
    after:
      - dashboard

plugs:
  wayland-socket-dir:
    content: wayland-socket-dir
    interface: content
    target: $SNAP_DATA/wayland
    default-provider: mir-kiosk

  x11-plug:
    interface: x11

passthrough:
  layout:
    /usr/share/fonts:
      bind: $SNAP/usr/share/fonts
    /etc/fonts:
      bind: $SNAP/etc/fonts