Combining the Simplicity of NATS with the Simplicity of Snapcraft.io - NATS Snap now available
Wally Quevedo — January 2, 2017
The Snap initiative spearheaded by Canonical, Dell, Samsung, Intel, The Linux Foundation and others, enables a single binary to run securely on any Linux system (desktop, mobile, cloud, IoT - you name it) – a standard approach providing flexibility, simplicity, and security. Moreover, all of the various Snap-enabled applications need to communicate with a multitude of devices and systems.
NATS is a messaging system all about simplicity, security, and performance. It’s a single binary with no external dependencies, and just a few MB in size. It’s lightweight footprint, security, and scalability made it a great fit for the Snap initiative, and we’re happy to share that a Snap for NATS Server is now available via the command line (``` sudo snap install nats-server
What is interesting about snaps as a technology offering, is how they have decided to make policy a first class citizen from the start.
For example, let's take a look at its YAML definition for the latest release of the server (which is available at [https://github.com/wallyqs/nats-snapcraft/blob/master/snapcraft.yaml](https://github.com/wallyqs/nats-snapcraft/blob/master/snapcraft.yaml))
```yaml
name: nats-server
version: "0.9.4"
summary: "High-Performance server for NATS"
description: "High-Performance server for NATS, the cloud native messaging system"
confinement: strict
apps:
nats-server:
command: gnatsd-v0.9.4-linux-amd64/gnatsd
plugs: [network-bind]
parts:
gnatsd:
plugin: dump
source: https://github.com/nats-io/gnatsd/releases/download/v0.9.4/gnatsd-v0.9.4-linux-amd64.zip
We can notice an entry plugs: [network-bind]
entry being explicitly declared and for a reason: the NATS server requires being able to listen on a port.
If we take out that declaration for example…
apps:
nats-server:
command: gnatsd-v0.9.4-linux-amd64/gnatsd
# plugs: [network-bind]
…and try to start the server again we’ll be getting the following:
/snap/bin/nats-server
[1707] 2016/12/13 08:30:48.319522 [INF] Starting nats-server version 0.9.4
[1707] 2016/12/13 08:30:48.319576 [INF] Listening for client connections on 0.0.0.0:4222
[1707] 2016/12/13 08:30:48.320145 [FTL] Error listening on port: 0.0.0.0:4222, "listen tcp 0.0.0.0:4222: socket: permission denied"
If we uncomment again on the other hand, the server will be able to start and we connect to it without issues:
/snap/bin/nats-server &
[1] 1753
[1753] 2016/12/13 08:37:45.072217 [INF] Starting nats-server version 0.9.4
[1753] 2016/12/13 08:37:45.072263 [INF] Listening for client connections on 0.0.0.0:4222
[1753] 2016/12/13 08:37:45.072545 [INF] Server is ready
telnet 127.0.0.1 4222
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
INFO {"server_id":"KIWGx86ug3TDKpDNVCCBDj","version":"0.9.4","go":"go1.6.3","host":"0.0.0.0","port":4222,"auth_required":false,"ssl_required":false,"tls_required":false,"tls_verify":false,"max_payload":1048576}
You can find the official NATS snap by running:
snap install nats-server
Back to Blog