Packaging Apps To Run on Any Linux Device
It's a Snap!
Finding Nemo
Figure 3 shows a search using the keyword host
. This is a command that you'll be using frequently with snap if you're pulling in other people's snaps. Instead of search
, as in Docker, the Snap Store uses find
to look for useful snaps.
To install one of the newly found packages, just use the install
command (Figure 4). Opting sensibly for the second package from the top, because it's from Canonical, I use the command:
$ snap install wifi-ap
In the console, you can see the snap output as it installs successfully.
Shopping Lists
Another command you'll need frequently is the list
command, which shows your installed snaps. Figure 5 shows two locally installed snaps: core
and wifi-ap
, both created by Canonical.
A quick glance at what the docs have to say about a Hello World! snap can be found on the Usage
page [11]. I remember when I first saw this, I was surprised to see the output without any prepended command on the host's command prompt (i.e., no snap
command). I just typed hello
after installing the snap:
$ hello Hello, world!
The output denotes success.
Remember the wifi-ap
snap? This command has a lot of juicy information, which you can see by entering the info
command (Listing 2). The description
section should be self-explanatory; just below that, a URL points you to the snap's source code [12]. Also note the options listed under the commands
section, which lists the possible parameters you can send to the snap.
Listing 2
Getting wifi-ap Snap Information
root@chris:~# snap info wifi-ap name: wifi-ap summary: "WiFi Access Point based on hostapd" publisher: canonical contact: snappy-canonical-storeaccount@canonical.com description: | This snap is implementing a WiFi access point based on hostapd and allows easily to share a internet connection or just create a network others can easily connect to. Please find the source of this snap at: https://code.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/wifi-ap commands: - wifi-ap.config - wifi-ap.setup-wizard - wifi-ap.status tracking: stable installed: 15 (146) 31MB - refreshed: 2017-05-05 16:20:19 +0000 UTC channels: stable: 15 (146) 31MB - candidate: 15 (146) 31MB - beta: 16 (186) 31MB - edge: 17-dev (194) 31MB -
If you follow the source link to the Ubuntu Launchpad site, navigate to the Get this repository
section, and then run the git clone
command with the -b
(branch) switch (Listing 3), you can download the latest source. If you then enter the wifi-ap
directory, you can see, among all the small files, the all-important snapcraft.yaml
file.
Listing 3
Getting the Latest wifi-ap Source Code
root@chris:~# git clone -b master https://git.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/wifi-ap Cloning into 'wifi-ap'... remote: Counting objects: 2220, done. remote: Compressing objects: 100% (1903/1903), done. remote: Total 2220 (delta 882), reused 955 (delta 182) Receiving objects: 100% (2220/2220), 2.71 MiB | 0 bytes/s, done. Resolving deltas: 100% (882/882), done. Checking connectivity... done.
Snap, Crackle, and Pop
Now I'll look at how you can create your own very basic snap. In this example, you just want to perform a super-simple echo
command of whatever input (STDIN) is typed. To develop your own snaps, you need to install the snapcraft
package:
$ apt install snapcraft
After a little more than 8MB of files are installed, you can start creating a snap with an init
command (Figure 6), which pulls in a template.
Because I've already run hello
and wifi-ap
, those snaps are in the snap/
directory, along with the snapcraft.yaml
file:
root@chris:~# ls snap/ core hello snapcraft.yaml wifi-ap
Listing 4 shows the intuitive and easy-to-follow template file.
Listing 4
A snapcraft.yaml Template File
name: my-snap-name # you probably want to 'snapcraft register <name>' version: '0.1' # just for humans, typically '1.2+git' or '1.3.2' summary: Single-line elevator pitch for your amazing snap # 79 char long summary description: | This is my-snap's description. You have a paragraph or two to tell the most important story about your snap. Keep it under 100 words though, we live in tweetspace and your description wants to look good in the snap store. grade: devel # must be 'stable' to release into candidate/stable channels confinement: devmode # use 'strict' once you have the right plugs and slots parts: my-part: # See 'snapcraft plugins' plugin: nil
Buy this article as PDF
(incl. VAT)