When creating snapcraft.yaml to build a new snap, its executable components are built from parts, following the Snapcraft lifecycle, and selectively made available to the host system.
Exposing executable components
An executable is exposed to the host system via one or more sub-sections beneath the top-level apps
section of snapcraft.yaml.
To give an executable the same name as the snap, ensure the sub-section name matches the snap name.
For example, here’s a complete snapcraft.yaml for a fully-functional snap:
name: os-release
base: core22
version: '0.2'
summary: Outputs the contents of /etc/os-release
description: Prints the contents of os-release
grade: stable
confinement: strict
apps:
part-os-release:
command: bin/os-release.sh
parts:
part-os-release:
plugin: dump
source: .
organize:
os-release.sh: bin/
The above example creates a snap from the following simple script, called os-release.sh
, located within the top-level snap of the directory:
#! /bin/sh
cat /etc/os-release
Make sure the above script is executable by running the following command on the build host after creating the script:
$ chmod +x os-release.sh
The os-release.sh
executable is brought into the snap via part-os-release
, which is a part using the dump plugin. It then uses organize
to copy the os-release.sh file into the snap’s bin/
directory before the top-level apps section exposes the bin/os-release.sh
executable to the host system
Services can be managed with a set of additional commands. See Services and daemons for more information and for further details on other metadata, see Snapcraft app and service metadata.
If you need to add user configurable options to your service or daemon, such as which port it should use, see Adding snap configuration.
See Tab completion if you wish to add command line tab completion to your snap.
Interfaces enable an app to access system resources. Interfaces that are required for normal operation are specified at snap build-time within the above
app
metadata of a snap’s snapcraft.yaml. See Adding Interfaces for more details.