canonical / snapcraft

Package, distribute, and update any app for Linux and IoT.
https://snapcraft.io
GNU General Public License v3.0
1.18k stars 447 forks source link

KDE Neon 6 broken on arm64 #5128

Open waveform80 opened 1 month ago

waveform80 commented 1 month ago

Bug Description

We're attempting to update the rpi-imager snap to use the kde-neon-6 extension. The application has recently moved to Qt6, so this seemed like a reasonable opportunity to try the extension and potentially make the snap much smaller by not embedding most of Qt in it.

The snap builds successfully and runs very nicely on amd64. However, on arm64, while the snap builds successfully, it fails to run, complaining that libQt6Widgets.so.6 is missing. This is meant to come from the kf6-core22 content snap and, indeed, on amd64 this is present.

Unfortunately, the arm64 version of kf6-core22 appears completely broken. For starters it's a mere 73MB compared to the amd64 variant's 2GB (!), and indeed it is missing Qt6 entirely. I checked the snapstore page for kf6-core22 but there's no contact information registered.

In the absence of being able to file a bug against kf6-core22 itself, I figure the next best thing is to try filing a bug against the project with an official extension encouraging its use? It may at the least be worth mentioning on the snapcraft extensions page that, contrary to appearances, this extension is amd64 only currently?

To Reproduce

On an arm64 box (e.g. a Raspberry Pi 5) with a desktop installation:

Compare the content of /snap/kd6-core22/current/ between amd64 and arm64 and you should find the missing library located under usr/lib/{arch} on the amd64 variant, but not the arm64 one.

Environment

Built using LXD on Ubuntu 24.04 LTS on a PC (amd64) and a Raspberry Pi 5 (arm64).

snapcraft.yaml

name: rpi-imager
base: core22
adopt-info: imagewriter
summary: Raspberry Pi Imager
website: https://www.raspberrypi.com/software/
source-code: https://github.com/raspberrypi/rpi-imager
issues: https://github.com/waveform80/imager-snap
icon: images/rpi-imager.png
license: Apache-2.0
description: |
  Raspberry Pi Imager is an easy to use application for installing Raspberry Pi
  OS, or other operating systems, to an SD card ready to use with your
  Raspberry Pi.

  Usage is as simple as:

  1. Pick the Raspberry Pi board you want to use.

  2. Pick the operating system you want to write.

  3. Pick the storage you want to write it to (SD card, hard drive, SSD, etc.)

  4. Click "NEXT", confirm you wish to overwrite your storage and wait!

  The application also verifies that the operating system has been written
  correctly after writing has finished. With certain operating system images,
  the imager also supports customizing the first boot configuration (you will
  be prompted for more information after selecting "NEXT" in this case).
compression: lzo
grade: stable
confinement: strict

apps:
  rpi-imager:
    command: usr/local/bin/rpi-imager
    desktop: usr/local/share/applications/org.raspberrypi.rpi-imager.desktop
    extensions: [kde-neon-6]
    environment:
      DISABLE_WAYLAND: 1
      # Use GTK3 cursor theme, icon theme and open/save file dialogs
      QT_QPA_PLATFORMTHEME: gtk3
    plugs:
      - home
      - removable-media  # required to re-write first-boot configuration
      - mount-observe    # required to report mounts on target media
      - network-manager  # required to grab image
      - network-control
      - cifs-mount
      - udisks2          # required for writing to sd card
      - hardware-observe # required to find card with lsblk
      - gsettings        # required for theming on wayland

parts:
  imagewriter:
    plugin: cmake
    cmake-parameters:
      - -DENABLE_CHECK_VERSION=OFF
      - -DQt6_ROOT=
    source: https://github.com/raspberrypi/rpi-imager.git
    source-subdir: src
    source-type: git
    override-pull: |
      craftctl default
      last_committed_tag="$(git describe --tags $(git rev-list --tags --max-count=1))"
      last_committed_tag_ver="$(echo ${last_committed_tag} | sed 's/v//' )"
      git fetch
      git checkout "$last_committed_tag"
      echo "Building $last_committed_tag_ver"
      craftctl set version="$last_committed_tag_ver"
      # Strip out the vendored dependencies and embedded source
      if [ -d "$CRAFT_PART_SRC"/embedded ]; then
        rm -fr "$CRAFT_PART_SRC"/embedded
      fi
      # Point the icon to the right place
      sed -i -e \
        's|^Icon=rpi-imager|Icon=/usr/local/share/icons/hicolor/128x128/apps/rpi-imager.png|' \
        "$CRAFT_PART_SRC"/src/linux/org.raspberrypi.rpi-imager.desktop
    build-packages:
      - libgnutls28-dev

Relevant log output

/snap/rpi-imager/x1/usr/local/bin/rpi-imager: error while loading shared libraries: libQt6Widgets.so.6: cannot open shared object file: No such file or directory

Additional context

No response