Release notes: Snapcraft 6.0

The team behind Snapcraft is pleased to announce the release of Snapcraft 6.0.

Among its many updates, fixes and additions, the following are what we consider its highlights:

  • Snapcraft is itself now built on the core20 base snap
  • Building on core20 means we now support RISC-V (riscv64)
  • Experimental --offline mode for snap building without a network connection

For general details, including installation instructions, see Snapcraft overview, or take a look at Snapcraft release notes for other Snapcraft releases.

RISC-V support

Ubuntu 20.04 LTS introduced support for a new family of CPU architectures, riscv64. At the same time, the support for i386 was reduced to a skeleton list of 32-bit compatibility libraries. This means that the Snapcraft migration to core20 includes the addition of riscv64 and the removal of i386 in the list of supported build and run architectures.

This does not means i386 compatibility is lost, however:

  • Snapcraft already maintains two tracks in parallel; the mainstream version in the latest track, starting with version 5.x, and the legacy track 4.x, specifically designed for use with developers and publishers who require the use of ESM base (core), and cannot migrate to the newer bases. The legacy track supports core, and the i386 architecture.
  • Similarly, builds for core20 are already configured not to use and build for the i386 architecture, which reduces any potential disruption in development workflows for those already building their snaps with core20.

The change primarily impacts those publishers and developers who are building their snaps with core18 and are targeting the i386 architecture. However, much as we did with the introduction of the ESM support for Ubuntu 16.04 LTS, we want to make the change as seamless as possible. Indeed, the 32-bit compatibility libraries remain in the Ubuntu 20.04 archives, and are not affected by this migration.

Offline mode

By default, Snapcraft requires network connectivity to both source the Multipass or LXD images used to host the build environment, and to populate the build environment with whatever dependencies, source repositories, binaries, and other packages are required to build the snap.

It may sometimes be necessary, or helpful, to build snaps without this network dependency, such as when needing Aeroplane mode on a laptop, or in areas with restricted bandwidth. For those situations, Snapcraft has a (currently experimental) offline mode.

See Snapcraft offline mode for further details.

Full list of changes

  • schema: add “microk8s” to the list of allowed system users by @mardy in #3545
  • schema: add environment support for hooks (CRAFT-424) by @cjp256 in #3565
  • lint: disable new shellcheck warnings (CRAFT-482) by @cjp256 in #3574
  • snaps: eliminate extra call to query snap info (CRAFT-479) by @cjp256 in #3573
  • extensions: preload bindtextdomain from content snap if it exists by @kenvandine in #3569
  • cli & providers: pass part names for lifecycle commands (CRAFT-481) by @cjp256 in #3572
  • ROS V2 plugins: resolve conditional dependencies by @artivis in #3570
  • ROS 2 plugins v2 misc fixes by @artivis in #3566
  • cli: add experimental --offline option (CRAFT-480) by @cjp256 in #3577
  • snap: move base to core20 (CRAFT-509) by @sergiusens in #3579
  • github: update snapcore/action-build dep by @sergiusens in #3582
  • environment-setup-local: do not build rust by @xnox in #3580
  • packaging: load the correct libraries on riscv64 by @xnox in #3581
  • build providers: snapcraft’s new base is core20 (CRAFT-544) by @sergiusens in #3583
  • repo: use host state for apt cache (CRAFT-488) by @cmatsuoka in #3585
  • yaml: detect and log warning on duplicate keys in snapcraft.yaml (CRAFT-553) by @cjp256 in #3518
  • lifecycle: init with core20 (CRAFT-517) by @sergiusens in #3587
  • snap: patch patchelf on riscv64 (CRAFT-566) by @sergiusens in #3588
  • snap: correct patch apply for patchelf by @sergiusens in #3589
  • snap: correct patch path quotes by @sergiusens in #3590
  • extensions: conditionally prepend to LIBVA_DRIVERS_PATH instead of overriding it by @oSoMoN in #3591
  • Ported font rendering fix from the desktop helpers. by @kenvandine in #3586
  • extensions/desktop: do not export a fixed QT_QPA_PLATFORM_THEME by @sergiusens in #3594
  • lifecycle, providers: skip network operations in offline mode (CRAFT-587) by @cmatsuoka in #3593