Categories: BlogCanonicalUbuntu

Snapcraft offline mode – Build snaps while saving data

As part of the snap creation cycle, the Snapcraft tool creates isolated build instances inside which all of the necessary work – download of sources, compilation, packaging, etc. – is done in a safe manner, without touching the host system. While there are many advantages to the use of the virtual machines (via Multipass) or containers (via LXD) for these tasks, the downside is a fairly liberal use of the network bandwidth to setup and configure the Snapcraft work environment.

In some scenarios, you may be constrained in your available network throughput or data. To help with that, the latest build of Snapcraft comes with a new, experimental offline mode, designed to minimize the reliance on online sources, and allow you to continue working and building snaps even if you have no access to the network.

The
Sponsored
basics

To run Snapcraft in the offline mode, simply pass the –offline flag to the Snapcraft command-line tool. However, there are a few important things to take into consideration first.

  • Snapcraft cannot magically spawn the necessary data out of nothing. It needs the initial pull of the relevant sources, including the build images (say Ubuntu 18.04 or Ubuntu 20.04 container images), the sources for your software, any additional build or stage packages that will be used, and other assets that your application relies on.
  • To get the necessary data for subsequent offline runs, run snapcraft pull. This will download the assets once and cache them for later use.

Now, with or without the network connection, you can run Snapcraft in the offline mode. It will rely on the downloaded data for the build, and will not try to contact the online archives and grab any new packages. The final objective is to allow users to be able to iterate on their builds without consuming additional data.

On the other hand, if you discover you rely on new components that do not exist in your cache, you may have to re-run Snapcraft in its standard (online) mode again at some point. You will also not receive any updates or patches to libraries (depending on how long you stay in the offline mode).

Sponsored

Example

I tried to build a snap that uses the core20 base. The initial download weighed 143 MB. After that, Snapcraft did not use or download any new sources. I was then able to make modifications to the snapcraft.yaml file and build the snap. Of course, these changes did not rely on additional data from the Internet.

snapcraft pull
Launching a VM.
2021-11-10T12:30:13Z INFO Waiting for automatic snapd restart…
snapd 2.52.1 from Canonical✓ installed
core20 20210928 from Canonical✓ installed
"core20" switched to the "latest/stable" channel
snapcraft 6.0 from Canonical✓ installed
"snapcraft" switched to the "latest/edge" channel
snapd is not logged in, snap install commands will use sudo
snap "core20" has no updates available
Pulling segfexample
+ snapcraftctl pull
snapcraft --use-lxd --offline
*EXPERIMENTAL* --offline enabled.
Launching a container.
Waiting for container to be ready
...
...
*EXPERIMENTAL* --offline enabled.
Offline mode, not installing build packages.
...

You can also always try to use the –offline mode while connected to the network. In the current experimental implementation, Snapcraft may make some assumptions for you, and may perform an initial download & cache of relevant data on first run even if you do not manually specify the pull command.

Summary

The offline mode is a handy addition to the arsenal of capabilities available in Snapcraft, and it should help with scenarios where data usage should be as low as possible. The functionality is still in experimental mode, so if you’d like to test it, or have any ideas or suggestions, or if you find any bugs, please tell us in the forum. For instance, you might want to know if cached data can be reused across systems, how to perform partial updates of online sources, or similar. We welcome feedback, and we’re interested in learning more about how we can further simplify and enhance the developer experience with Snapcraft.

Photo by Markus Spiske on Unsplash.

Ubuntu Server Admin

Recent Posts

Cut data center energy costs with bare metal automation

Data centers are popping up everywhere. With the rapid growth of AI, cloud services, streaming…

12 hours ago

Build the future of *craft: announcing Starcraft Bounties!

Our commitment to building a thriving open source community is stronger than ever. We believe…

12 hours ago

NodeJS 18 LTS EOL extended from April 2025 to May 2032 on Ubuntu

The clock was ticking: Node.js 18’s upstream End of Life (EOL) The OpenJS Foundation is…

12 hours ago

Native integration now available for Pure Storage and Canonical LXD

June 25th, 2025 – Canonical, the company behind Ubuntu, and Pure Storage, the IT pioneer…

2 days ago

Revolutionizing Web Page Creation: How Structured Content is Slashing Design and Development Time

Co-authored with Julie Muzina A year ago, during our Madrid Engineering Sprint, we challenged ourselves…

3 days ago

Ubuntu Weekly Newsletter Issue 897

Welcome to the Ubuntu Weekly Newsletter, Issue 897 for the week of June 15 –…

3 days ago