Syndicate Dataspace Server
The syndicate-server
program is a daemon that speaks the
Syndicate network protocol, offering
-
a gateway service for resolving “sturdy references” to usable capabilities;
-
a root dataspace service; and
-
optional internal services such as
-
TCP listeners, for accessing the gateway and other services over TCP/IP (either plain TCP/IP or websockets-over-TCP/IP);
-
Unix socket listeners, for accessing the gateway and other services over Unix sockets; and, last but not least,
-
Configuration watchers, for dynamic reconfiguration of the server and its active services.
-
Installation
The program is written in Rust.
- Install
cargo
and anightly
toolchain. - Then,
cargo +nightly install syndicate-server
.
Command-line usage
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
syndicate-server 0.10.0
USAGE:
syndicate-server [FLAGS] [OPTIONS]
FLAGS:
--debt-reporter
-h, --help Prints help information
--inferior
-V, --version Prints version information
OPTIONS:
-c, --config <config>...
-p, --port <ports>...
-s, --socket <sockets>...
Configuration
The internal services of the daemon are activated by adding particular
assertions to the server’s root dataspace. This is done initially with
the -c
/--config
command-line flag, although any program holding a
capability to assert appropriate values into the root dataspace may
subsequently reconfigure the server on the fly by doing so.
When -c <path>
is specified, each file and subdirectory at or within
path
is monitored for changes. A path
will usually point to a
directory, but pointing to a single file is also just fine.
Each file at or within path
is read as a sequence of
text-syntax Preserves
documents. Each complete Preserves Value
in each file is separately
asserted into the root dataspace within the server.
Every time a file is created, changed, or deleted, it is rescanned and its assertions are updated accordingly.
For example, if -c /etc/syndicate/config
appeared on the
command-line, and the file /etc/syndicate/config/listeners.pr
existed with contents
1
2
3
4
<require-service <relay-listener <tcp "0.0.0.0" 1>>
<require-service <relay-listener <tcp "0.0.0.0" 8001>>
<require-service <relay-listener <unix "/run/ds">>>
<require-service <config-watcher "/usr/lib/syndicate/config">>
then
- the internal TCP listener service would be instantiated twice, once on port 1 and once on port 8001;
- the UNIX socket listener service would be instantiated once, with
socket path
/run/ds
; and - another configuration-watcher service would be started, monitoring
the path
/usr/lib/syndicate/config
.
Removing any of those lines of text and saving the file causes the
daemon to automatically shut down the matching service. And of course
editing or adding files under /etc/syndicate/config
or
/usr/lib/syndicate/config
will update the root dataspace’s
assertions accordingly.