What is Snapcraft?
Snapcraft is a set of tools bundled under the snapcraft
command to easily create (craft) packages for multiple Linux distributions. These .snap packages generally contain self-contained apps, provide secure isolation and are installable either from the Ubuntu Software Store or manually via the snap install <snap-name>.snap
command.
In a nutshell, as a developer you would write code using your regular tools, and let Snapcraft take care of assembling it for distribution. Snapcraft also excels in enabling developers port their existing apps to any snap-enabled Linux platform.
Snapcraft:
- Is intelligent: it fetches, builds and assembles diverse pieces of software (parts) from remote sources into a final .snap package, which contains all dependencies it needs to function
-
Needs a recipe: it relies on a
snapcraft.yaml
file that specifies the parts and plugins required to create the package - Is extensible with plugins. While it ships with a set of the most common build system plugins to cater for a wide range of app builds, it can be easily extended with new ones.
The 3-minute Snapcraft tour
Install Snapcraft on Ubuntu
You will need Ubuntu 16.04 LTS to use Snapcraft. Open a terminal with Ctrl+Alt+t and simply install Snapcraft with this command:
sudo apt install snapcraft
sudo apt install build-essential # Optional, but useful for different builds
If you are using another distro, check out the alternative installation instructions >
Test-drive Snapcraft
The following example crafts a package that contains a service that allows you to paste and share. Once finished, you can install it manually on your snappy device for testing purposes or upload it to the Store for other users.
First of all we open a terminal and download the example from the examples repository:
sudo apt install git
git clone https://github.com/ubuntu-core/snapcraft.git
cd snapcraft/demos/gopaste
Notice the snapcraft.yaml
file in that directory, which specifies a service and the parts required to assemble the final .snap. You can optionally examine it with a text editor.
Now run the snapcraft
command on the terminal. This will cause all snapcraft subcommands to run in sequence to build the parts and put the results in the final .snap package. During development, you would normally run the steps separately until you are confident that the whole build and assembly works.
$ snapcraft
Pulling gopaste
env GOPATH=/tmp/snapcraft/examples/gopaste/parts/gopaste/build go get -t -d github.com/wisnij/gopaste/gopasted
Building gopaste
env GOPATH=/tmp/snapcraft/examples/gopaste/parts/gopaste/build go build github.com/wisnij/gopaste/gopasted
env GOPATH=/tmp/snapcraft/examples/gopaste/parts/gopaste/build go install github.com/wisnij/gopaste/gopasted
env GOPATH=/tmp/snapcraft/examples/gopaste/parts/gopaste/build cp -a /tmp/snapcraft/examples/gopaste/parts/gopaste/build/bin /tmp/snapcraft/examples/gopaste/parts/gopaste/install
Staging gopaste
Snapping gopaste
Generated 'gopaste_1.0_amd64.snap' snap
On the output of the command you can see the steps snapcraft runs for you:
- Pull: it pulls the code from the required gopaste part from a remote Github repo
- Build: it builds gopaste locally
- Stage: after the build, the parts are put into a single directory tree, the "staging area"
- Snap: the final .snap package is created from the assembled parts in the staging area
Notes:
- You'll find the final snap file as
gopaste_1.0_amd64.snap
(notice in my case I built it on my amd64 desktop, e.g. Raspberry Pi 2 packages would have the_armhf
architecture suffix). - You can also run each command individually:
snapcraft pull
,snapcraft build
,snapcraft stage
orsnapcraft snap
- Use
snapcraft -h
for a quick overview of all commands available.
And that's it for a quick glimpse of what Snapcraft can do! Learn more about Snapcraft >