This part is missing libraries that cannot be satisfied with any available stage-packages known to snapcraft

Hello everyone! I have the next config:

name: mindrecorder
icon: snap/gui/mindrecorder.png
summary: Take screenshots and record screen easy.
description: Description will be soon

base: core18
adopt-info: mindrecorder
grade: stable
confinement: strict

parts:
  mindrecorder:
    plugin: dump
    source: https://github.com/Roman-Dzerkal/wordcreator/releases/download/1.0/mindrecorder-linux-latest.tar.gz
    override-pull: |
      snapcraftctl pull
      snapcraftctl set-version $(cat version.txt)
    stage-packages:
      - libnotify-dev 
      - libkeybinder-3.0-0
      - libjsoncpp1
      - libjsoncpp-dev
      - libsecret-1-0
      - libsecret-1-dev
      - libslang2
      - libayatana-appindicator3-dev 
      - libayatana-ido3-0.4-0
      - libvlc-dev 
      - freeglut3-dev
      - libgtk-3-dev
      - liblzma-dev 
      - gnome-screenshot 
      - ffmpeg 
      - v4l-utils

apps:
  mindrecorder:
    command: mindrecorder
    extensions: [gnome-3-28]
    plugs:
      - home
      - network

An on “Priming mindrecrder” stage I have next warning:

This part is missing libraries that cannot be satisfied with any available stage-packages known to snapcraft:
- libjsoncpp.so.25
These dependencies can be satisfied via additional parts or content sharing. Consider validating configured filesets if this dependency was built.

What do I do wrong? The library was added in stage-packages (libjsoncpp1 and libjsoncpp-dev).

The library is probably newer than what the base provides. The easiest way to satisfy the dependency would be to use core22, or if you need to stay in core18 you can rebuild the required version of the library in a different part.

Got an error

Summary
Launching instance... | (9.8s)                                                 Traceback (most recent call last):
  File "/snap/snapcraft/8619/bin/snapcraft", line 8, in <module>
    sys.exit(run())
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/cli.py", line 228, in run
    _run_dispatcher(dispatcher)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/cli.py", line 204, in _run_dispatcher
    dispatcher.run()
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/craft_cli/dispatcher.py", line 448, in run
    return self._loaded_command.run(self._parsed_command_args)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/commands/lifecycle.py", line 259, in run
    super().run(parsed_args)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/commands/lifecycle.py", line 132, in run
    parts_lifecycle.run(self.name, parsed_args)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/parts/lifecycle.py", line 208, in run
    _run_command(
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/parts/lifecycle.py", line 249, in _run_command
    _run_in_provider(project, command_name, parsed_args)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/parts/lifecycle.py", line 530, in _run_in_provider
    with provider.launched_environment(
  File "/snap/snapcraft/8619/usr/lib/python3.8/contextlib.py", line 113, in __enter__
    return next(self.gen)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/craft_providers/lxd/lxd_provider.py", line 126, in launched_environment
    instance = launch(
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/craft_providers/lxd/launcher.py", line 212, in launch
    base_configuration.setup(executor=instance)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/craft_providers/bases/buildd.py", line 337, in setup
    self._ensure_os_compatible(executor=executor, deadline=deadline)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/craft_providers/bases/buildd.py", line 273, in _ensure_os_compatible
    raise BaseCompatibilityError(
craft_providers.bases.errors.BaseCompatibilityError: Incompatible base detected: Expected OS 'Ubuntu', found None.
Clean incompatible instance and retry the requested operation.

what did you change in your snapcraft.yaml ?

  1. changed the base version to core22
  2. snapcraftctl pull replaced with snapcraftctl default
  3. temporarily deleted extensions

Here how my snapcraft.yaml file looks like:

Summary
name: mindrecorder
icon: snap/gui/mindrecorder.png
summary: Open Source Password Manager with Keepass file support.
description: |
  Easily and securely keep track of all your Passwords!

base: core22
adopt-info: mindrecorder
grade: stable
confinement: strict

parts:
  mindrecorder:
    plugin: dump
    source: https://github.com/Roman-Dzerkal/wordcreator/releases/download/1.0/mindrecorder-linux-latest.tar.gz
    override-pull: |
      snapcraftctl default
      snapcraftctl set-version $(cat version.txt)
    build-packages:
      - libsecret-1-dev
      - libjsoncpp-dev
    stage-packages:
      - libnotify-dev 
      - libkeybinder-3.0-0
      - libjsoncpp1
      - libjsoncpp-dev
      - libsecret-1-0
      - libsecret-1-dev
      - libslang2
      - libayatana-appindicator3-dev 
      - libayatana-ido3-0.4-0
      - libvlc-dev 
      - freeglut3-dev
      - libgtk-3-dev
      - liblzma-dev
      - gnome-screenshot
      - ffmpeg 
      - v4l-utils

apps:
  mindrecorder:
    command: mindrecorder
    # extensions: [gnome-3-34]
    plugs:
      - home
      - network

Interesting… All is ok when I run the application from snap folder. But when I try to run the application from another folder I get error about unsatisfied library. I have no idea how it works

switching to a core22 base means your build will be using the 22.04 repositories.

in 22.04 the package is named libjsoncpp25. change the name and re-build your snap and it should be found (you might have to do that for other libs as well, packages with versioning in their name tend to get bumped to higher numbers in newer releases)

you should also re-enable the extension but rename it to just be: extensions: [ gnome ] to get all the desktop integration back.

So, I updated all stage-packages from ubuntu 22.04 packages.

Now snapcraft.yaml looks like:

snapcraft.yaml
name: mindrecorder
icon: snap/gui/mindrecorder.png
summary: Open Source Password Manager with Keepass file support.
description: |
  Easily and securely keep track of all your Passwords!

base: core22
adopt-info: mindrecorder
grade: stable
confinement: strict

parts:
  mindrecorder:
    plugin: dump
    source: https://github.com/Roman-Dzerkal/wordcreator/releases/download/1.0/mindrecorder-linux-latest.tar.gz
    override-pull: |
      snapcraftctl default
      snapcraftctl set-version $(cat version.txt)
    build-packages:
      - libsecret-1-dev
      - libjsoncpp-dev
    stage-packages:
      - libnotify4
      - libkeybinder-3.0-0
      - libjsoncpp25
      - libsecret-1-0
      - libslang2
      - libayatana-appindicator3-1 
      - libayatana-ido3-0.4-0
      - libvlc-bin 
      - freeglut3
      - libgtk-3-0
      - liblzma5
      - gnome-screenshot
      - ffmpeg 
      - v4l-utils

apps:
  mindrecorder:
    command: mindrecorder
    extensions: [ gnome ]
    plugs:
      - home
      - network

But when I tried to build snap archive got next message:

Launching instance…
Executed: pull gnome/sdk
‘override-pull’ in part ‘mindrecorder’ failed with code 1.
Review the scriptlet and make sure it’s correct.
Failed to execute pack in instance.
Full execution log: ‘/home/roman/.cache/snapcraft/log/snapcraft-20230209-113626.663526.log’

Cleaning all .log files not effected :worried:

ah, sorry, i missed that in your snapcraft.yaml, snapcraftctl has been renamed for core22 and the syntax for set-version is also a bit different now:

snapcraft.yaml
base: core22
adopt-info: mindrecorder
grade: stable
confinement: strict

parts:
  mindrecorder:
    plugin: dump
    source: https://github.com/Roman-Dzerkal/wordcreator/releases/download/1.0/mindrecorder-linux-latest.tar.gz
    override-pull: |
      craftctl default
      craftctl set version $(cat version.txt)
    build-packages:
      - libsecret-1-dev
      - libjsoncpp-dev
    stage-packages:
      - libnotify4
      - libkeybinder-3.0-0
      - libjsoncpp25
      - libsecret-1-0
      - libslang2
      - libayatana-appindicator3-1 
      - libayatana-ido3-0.4-0
      - libvlc-bin 
      - freeglut3
      - libgtk-3-0
      - liblzma5
      - gnome-screenshot
      - ffmpeg 
      - v4l-utils

apps:
  mindrecorder:
    command: mindrecorder
    extensions: [ gnome ]
    plugs:
      - home
      - network

Got the same error message

I found this post and edited “set version” line and it’s working!

Also switched to LXD

snapcraft.yaml config looks like:

Summary
name: mindrecorder
icon: snap/gui/mindrecorder.png
summary: Open Source Password Manager with Keepass file support.
description: |
  Easily and securely keep track of all your Passwords!

base: core22
adopt-info: mindrecorder
grade: stable
confinement: strict

parts:
  mindrecorder:
    plugin: dump
    source: https://github.com/Roman-Dzerkal/wordcreator/releases/download/1.0/mindrecorder-linux-latest.tar.gz
    override-pull: |
      craftctl default
      craftctl set version=1.0.0
    build-packages:
      - libsecret-1-dev
      - libjsoncpp-dev
    stage-packages:
      - libnotify4
      - libkeybinder-3.0-0
      - libjsoncpp25
      - libsecret-1-0
      - libslang2
      - libayatana-appindicator3-1 
      - libayatana-ido3-0.4-0
      - libvlc-bin 
      - freeglut3
      - libgtk-3-0
      - liblzma5
      - gnome-screenshot
      - ffmpeg 
      - v4l-utils

apps:
  mindrecorder:
    command: mindrecorder
    extensions: [ gnome ]
    plugs:
      - home
      - network
1 Like