Defining a command

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.

:information_source: 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.


Last updated 7 months ago.