Defining a command


#1

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

A snap’s executable is exposed to the host system via the top-level apps section of snapcraft.yaml. Its name needs to correspond with with part name responsible for staging the executable within your snap.

For example, here’s a complete snapcraft.yaml for a fully-functional snap:

name: os-release
base: core18
version: '0.1'
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
part:
  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, and located within the top-level snap of the directory:

#! /bin/sh
cat /etc/os-release

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 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

For further details on other metadata, see Snapcraft app and service metadata and to define an executable as a service or a daemon, see Services and daemons.


Snap documentation
Snapcraft build, debug and publishing docs roadmap (page breakdown)
Services and daemons