mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-15 01:55:03 +00:00
Imported documentation from snac 1.x.
This commit is contained in:
parent
5994b4a313
commit
99c43fbc41
7 changed files with 668 additions and 0 deletions
208
doc/snac.1
Normal file
208
doc/snac.1
Normal file
|
@ -0,0 +1,208 @@
|
||||||
|
.Dd $Mdocdate$
|
||||||
|
.Dt SNAC 1
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm snac
|
||||||
|
.Nd A simple, minimalistic ActivityPub instance
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Cm command
|
||||||
|
.Ar basedir
|
||||||
|
.Op Ar option ...
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
The
|
||||||
|
.Nm
|
||||||
|
daemon processes messages from other servers in the Fediverse
|
||||||
|
using the ActivityPub protocol.
|
||||||
|
.Pp
|
||||||
|
This is the user manual and expects an already running
|
||||||
|
.Nm
|
||||||
|
installation. For the administration manual, see
|
||||||
|
.Xr snac 8 .
|
||||||
|
For file and data formats, see
|
||||||
|
.Xr snac 5 .
|
||||||
|
.Ss Web Interface
|
||||||
|
The web interface provided by
|
||||||
|
.Nm
|
||||||
|
is split in two data streams: the public timeline and the
|
||||||
|
private timeline. There are no other feeds like the server-scoped
|
||||||
|
or the federated firehoses provided by other similar ActivityPub
|
||||||
|
implementations like Mastodon or Pleroma.
|
||||||
|
.Pp
|
||||||
|
The public timeline, also called the local timeline, is what an
|
||||||
|
external visitor sees about the activity of a
|
||||||
|
.Nm
|
||||||
|
user: that is, only the list of public notes, boosts and likes
|
||||||
|
the user generates or participates into. This is, obviously,
|
||||||
|
read-only, and not very remarkable, unless the user publishes
|
||||||
|
messages of staggering genious. A set of history links, grouped
|
||||||
|
by month, will also be available at the bottom of the page.
|
||||||
|
.Pp
|
||||||
|
The private timeline, or simply the timeline, is the private,
|
||||||
|
password-protected area of a
|
||||||
|
.Nm
|
||||||
|
server where the user really interacts with the rest of the
|
||||||
|
Fediverse.
|
||||||
|
.Pp
|
||||||
|
The top area of the timeline provides a big text area to write
|
||||||
|
notes for the public (i.e. for the user followers). As this is
|
||||||
|
the second most important activity on the Fediverse, this is
|
||||||
|
located in the most prominent area of the user page. You can
|
||||||
|
enter plain text, @user@host mentions and other things. See the
|
||||||
|
.Xr snac 5
|
||||||
|
manual for more information on the allowed markup.
|
||||||
|
.Pp
|
||||||
|
More options are hidden under a toggle control. They are the
|
||||||
|
following:
|
||||||
|
.Bl -tag -offset indent
|
||||||
|
.It Follow (by URL or user@host)
|
||||||
|
Fill the input area with a user 'actor' URL or a user@host
|
||||||
|
Fediverse identifier to follow.
|
||||||
|
.It Boost (by URL)
|
||||||
|
Fill the input area with the URL of a Fediverse note to be
|
||||||
|
boosted.
|
||||||
|
.It User setup...
|
||||||
|
This option opens the user setup dialog.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
The user setup dialog allows some user information to be
|
||||||
|
changed, specifically:
|
||||||
|
.Bl -tag -offset indent
|
||||||
|
.It User name
|
||||||
|
Your user name, or not really that. People like to include
|
||||||
|
emojis, flags and strange symbols for some reason.
|
||||||
|
.It Avatar URL
|
||||||
|
The URL of a picture to be used as your avatar in timelines
|
||||||
|
around the world.
|
||||||
|
.It Bio
|
||||||
|
Enter here a bunch of self-indulgent blurb about yourself.
|
||||||
|
The same markup options available for text notes apply here.
|
||||||
|
.It Password
|
||||||
|
Write the same string in these two fields to change your
|
||||||
|
password. Don't write anything if you don't want to do this.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
The rest of the page contains your timeline in reverse
|
||||||
|
chronological order (i.e., newest interactions first).
|
||||||
|
.Nm
|
||||||
|
shows the conversations as nested trees, unlike other Fediverse
|
||||||
|
software; everytime something new is added to a conversation,
|
||||||
|
the full thread is bumped up, so new interactions are shown
|
||||||
|
always at the top of the page while the forgotten ones languish
|
||||||
|
at the bottom.
|
||||||
|
.Pp
|
||||||
|
Private notes (a.k.a. direct messages) are also shown in
|
||||||
|
the timeline as normal messages, but marked with a cute lock
|
||||||
|
to mark them as non-public. Replies to direct messages are
|
||||||
|
also private and cannot be liked nor boosted.
|
||||||
|
.Pp
|
||||||
|
For each entry in the timeline, a set of reasonable actions
|
||||||
|
in the form of buttons will be shown. These can be:
|
||||||
|
.Bl -tag -offset indent
|
||||||
|
.It Reply
|
||||||
|
Unveils a text area to write your intelligent and acute comment
|
||||||
|
to an uninformed fellow. This note is sent to the original
|
||||||
|
author as well as to your followers. The note can include
|
||||||
|
mentions in the @user@format; these people will also become
|
||||||
|
recipients of the message. If you reply to a boost or like,
|
||||||
|
you are really replying to the note, not to the admirer of it.
|
||||||
|
.It Like
|
||||||
|
Click this if you admire this post. The poster and your
|
||||||
|
followers will be informed.
|
||||||
|
.It Boost
|
||||||
|
Click this if you want to propagate this post to all your
|
||||||
|
followers. The original author will also be informed.
|
||||||
|
.It Follow
|
||||||
|
Click here if you want to start receiving all the shenanigans
|
||||||
|
the original author of the post will write in the future.
|
||||||
|
.It Unfollow
|
||||||
|
Click here if you are fed up of this fellow's activities.
|
||||||
|
.It Delete
|
||||||
|
Click here to send this post to the bin. If it's an activity
|
||||||
|
written by you, the appropriate message is sent to the rest
|
||||||
|
of involved parts telling them that you no longer want your
|
||||||
|
thing in their servers (not all implementations really obey
|
||||||
|
this kind of requirements, though).
|
||||||
|
.It MUTE
|
||||||
|
This is the most important button in
|
||||||
|
.Nm
|
||||||
|
and the Fediverse in general. Click it if you don't want
|
||||||
|
to read crap from this user again in the forseeable future.
|
||||||
|
.El
|
||||||
|
.Ss Command-line options
|
||||||
|
The command-line tool provide the following commands:
|
||||||
|
.Bl -tag -offset indent
|
||||||
|
.It Cm init Op basedir
|
||||||
|
Initializes the database. This is an interactive command; necessary
|
||||||
|
information will be prompted for. The
|
||||||
|
.Ar basedir
|
||||||
|
directory must not exist.
|
||||||
|
.It Cm check Ar basedir Op uid
|
||||||
|
Does a minimal health check to the database and its users. If a
|
||||||
|
user id is provided, only this user will be checked.
|
||||||
|
.It Cm purge Ar basedir Op uid
|
||||||
|
Purges old data from the timeline of all users. If a user id is
|
||||||
|
provided, only this user's timeline will be purged.
|
||||||
|
.It Cm adduser Ar basedir Op uid
|
||||||
|
Adds a new user to the server. This is an interactive command;
|
||||||
|
necessary information will be prompted for. Also, a copy of
|
||||||
|
the server
|
||||||
|
.Pa style.css
|
||||||
|
is installed in the user's
|
||||||
|
.Pa static/
|
||||||
|
directory.
|
||||||
|
.It Cm httpd Ar basedir
|
||||||
|
Starts the daemon.
|
||||||
|
.It Cm queue Ar basedir Ar uid
|
||||||
|
Processes the output queue of the specied user, sending all
|
||||||
|
enqueued messages and re-enqueing the failing ones. This command
|
||||||
|
must not be executed if the server is running.
|
||||||
|
.It Cm update Ar basedir Ar uid
|
||||||
|
Enqueues a user information Update message to all followers.
|
||||||
|
.It Cm passwd Ar basedir Ar uid
|
||||||
|
Changes the password for a user (interactive).
|
||||||
|
.It Cm follow Ar basedir Ar uid Ar actor
|
||||||
|
Sends a Follow message for the specified actor URL.
|
||||||
|
.It Cm unfollow Ar basedir Ar uid Ar actor
|
||||||
|
Sends an Unfollow message for the specified actor URL.
|
||||||
|
.It Cm mute Ar basedir Ar uid Ar actor
|
||||||
|
Mutes an actor for the specified user. This is the most important
|
||||||
|
command for the Fediverse. The user will no longer receive nor
|
||||||
|
read another activity from the specified moron.
|
||||||
|
.It Cm unmute Ar basedir Ar uid Ar actor
|
||||||
|
In case a muted moron is no longer a moron, it can be unmuted
|
||||||
|
this way. This is the least used command ever.
|
||||||
|
.It Cm like Ar basedir Ar uid Ar url
|
||||||
|
Enqueues a Like message for a post given its url.
|
||||||
|
.It Cm announce Ar basedir Ar uid Ar url
|
||||||
|
Enqueues an Announce (boost) message for a message post its url.
|
||||||
|
.It Cm request Ar basedir Ar uid Ar url
|
||||||
|
Requests an object and dumps it to stdout. This is a very low
|
||||||
|
level command that is not very useful to you.
|
||||||
|
.It Cm note Ar basedir Ar uid Ar text
|
||||||
|
Enqueues a Create + Note message to all followers. If the
|
||||||
|
.Ar text
|
||||||
|
argument is - (a lonely hyphen), the external editor defined
|
||||||
|
by the EDITOR environment variable will be invoked to prepare
|
||||||
|
a message.
|
||||||
|
.El
|
||||||
|
.Sh ENVIRONMENT
|
||||||
|
.Bl -tag -width Ds
|
||||||
|
.It Ev DEBUG
|
||||||
|
Overrides the debugging level from the server 'dbglevel' configuration
|
||||||
|
variable. Set it to an integer value. The higher, the deeper in meaningless
|
||||||
|
verbiage you'll find yourself into.
|
||||||
|
.It Ev EDITOR
|
||||||
|
The user-preferred interactive text editor to prepare messages.
|
||||||
|
.El
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr snac 5 ,
|
||||||
|
.Xr snac 8
|
||||||
|
.Sh AUTHORS
|
||||||
|
.An grunfink
|
||||||
|
.Sh LICENSE
|
||||||
|
See the LICENSE file for details.
|
||||||
|
.Sh CAVEATS
|
||||||
|
Use the Fediverse sparingly. Don't fear the mute button.
|
||||||
|
.Sh BUGS
|
||||||
|
Plenty. Some issues may be documented in the TODO.md file.
|
131
doc/snac.5
Normal file
131
doc/snac.5
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
.Dd $Mdocdate$
|
||||||
|
.Dt SNAC 5
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm snac
|
||||||
|
.Nd message formatting and file format documentation
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
The
|
||||||
|
.Nm
|
||||||
|
daemon processes messages from other servers in the Fediverse
|
||||||
|
using the ActivityPub protocol.
|
||||||
|
.Pp
|
||||||
|
This manual describes the allowed formatting of note messages
|
||||||
|
and the disk storage layout of
|
||||||
|
.Nm
|
||||||
|
server and user data. For the operation manual, see
|
||||||
|
.Xr snac 1 .
|
||||||
|
For the administration manual, see
|
||||||
|
.Xr snac 8 .
|
||||||
|
.Ss Message Formatting
|
||||||
|
Message notes respect the entered new line breaks rigurously.
|
||||||
|
A special subset of Markdown is allowed, including:
|
||||||
|
.Bl -tag -width tenletters
|
||||||
|
.It bold
|
||||||
|
**text between two pairs of asterisks**
|
||||||
|
.It italic
|
||||||
|
*text between a pair of asterisks*
|
||||||
|
.It code
|
||||||
|
Text `between backticks` is formatted as code.
|
||||||
|
.Bd -literal
|
||||||
|
```
|
||||||
|
/* text between lines with only three backticks is preformatted */
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
.Ed
|
||||||
|
.It links
|
||||||
|
Standalone URLs.
|
||||||
|
.It quoted text
|
||||||
|
Lines starting with >.
|
||||||
|
.It User Mentions
|
||||||
|
Strings in the format @user@host are requested using the Webfinger
|
||||||
|
protocol and converted to links and mentions if something reasonable
|
||||||
|
is found.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
HTML tags are left untouched. This is probably a bad idea that may
|
||||||
|
change in future versions.
|
||||||
|
.Pp
|
||||||
|
.Ss Disk Layout
|
||||||
|
This section documents version 1 of the disk storage layout. It's still
|
||||||
|
subject to change.
|
||||||
|
.Pp
|
||||||
|
The base directory contains the following files and folders:
|
||||||
|
.Bl -tag -width tenletters
|
||||||
|
.It Pa server.json
|
||||||
|
Server configuration.
|
||||||
|
.It Pa user/
|
||||||
|
Directory holding user subdirectories.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
Each user directory is a subdirectory of
|
||||||
|
.Pa BASEDIR/user/ ,
|
||||||
|
has the user id as name and contains the following subdirectories and files:
|
||||||
|
.Bl -tag -width tenletters
|
||||||
|
.It Pa user.json
|
||||||
|
User configuration file.
|
||||||
|
.It Pa key.json
|
||||||
|
SHA-1 secret/public key PEM data.
|
||||||
|
.It Pa actors/
|
||||||
|
This subdirectory stores cached 'Person' ActivityPub messages as JSON files. Each
|
||||||
|
file name is an MD5 hash of the actor URL.
|
||||||
|
.It Pa timeline/
|
||||||
|
This subdirectory stores the user's timeline. Everytime a valid message arrives,
|
||||||
|
it's stored in this directory as a JSON object. The file name spec is: a Unix
|
||||||
|
timestamp followed by a hyphen followed by an MD5 of the message Id. Additionally,
|
||||||
|
metadata for each message parent and children is stored under the '_snac' field;
|
||||||
|
parent messages with new children are renamed with an updated timestamp so that
|
||||||
|
the more recently updated thread is shown at the top. This directory is presented
|
||||||
|
in the web interface in reverse file name order up to a maximum, hardcoded limit.
|
||||||
|
These files are purged when they are considered old (this time can be changed by
|
||||||
|
tweaking the server configuration).
|
||||||
|
.It Pa local/
|
||||||
|
This subdirectory stores all activities generated by this user as hardlinks to
|
||||||
|
their analogue entries in the
|
||||||
|
.Pa timeline/
|
||||||
|
subdirectory. These files are never deleted.
|
||||||
|
.It Pa followers/
|
||||||
|
This subdirectory stores the 'Follow' ActivityPub message from each
|
||||||
|
Fediverse user that is following this user as a JSON file. Each file name is
|
||||||
|
an MD5 hash of the actor that is a follower of this user.
|
||||||
|
.It Pa following/
|
||||||
|
This subdirectory stores the 'Follow' (not yet confirmed) or the 'Accept'
|
||||||
|
(confirmed) ActivityPub message for each actor that is being followed. Each file
|
||||||
|
name is an MD5 hash of the actor.
|
||||||
|
.It Pa muted/
|
||||||
|
This directory contains files which names are MD5 hashes of muted actors. The
|
||||||
|
content is a line containing the actor URL.
|
||||||
|
Messages from these actors will be ignored on input and not shown in any timeline.
|
||||||
|
.It Pa queue/
|
||||||
|
This directory contains the output queue of messages generated by the user as
|
||||||
|
JSON files. File names contain timestamps that indicate when the message will
|
||||||
|
be sent. Messages not accepted by their respective servers will be re-enqueued
|
||||||
|
for later retransmission until a maximum number of retries is reached,
|
||||||
|
then discarded.
|
||||||
|
.It Pa static/
|
||||||
|
Files in this directory are served as-is when requested from the
|
||||||
|
.Pa https://HOST/s/...
|
||||||
|
URL path. A special file named
|
||||||
|
.Pa style.css
|
||||||
|
can contain user-specific CSS code to be inserted into the HTML of the
|
||||||
|
web interface.
|
||||||
|
.It Pa history/
|
||||||
|
This directory contains generated HTML files. They may be snapshots of the
|
||||||
|
local timeline in previous months or other cached data.
|
||||||
|
.It Pa archive/
|
||||||
|
This directory stores all input/output traffic of ActivityPub messages. There
|
||||||
|
is a different file for each day. This information is only stored if
|
||||||
|
.Nm
|
||||||
|
is run with a debug level >= 1.
|
||||||
|
.El
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr snac 1 ,
|
||||||
|
.Xr snac 8
|
||||||
|
.Sh AUTHORS
|
||||||
|
.An grunfink
|
||||||
|
.Sh LICENSE
|
||||||
|
See the LICENSE file for details.
|
326
doc/snac.8
Normal file
326
doc/snac.8
Normal file
|
@ -0,0 +1,326 @@
|
||||||
|
.Dd $Mdocdate$
|
||||||
|
.Dt SNAC 8
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm snac
|
||||||
|
.Nd snac administration
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
The
|
||||||
|
.Nm
|
||||||
|
daemon processes messages from other servers in the Fediverse
|
||||||
|
using the ActivityPub protocol.
|
||||||
|
.Pp
|
||||||
|
This is the admin manual. For user operation, see
|
||||||
|
.Xr snac 1 .
|
||||||
|
For file and data formats, see
|
||||||
|
.Xr snac 5 .
|
||||||
|
.Ss Installation
|
||||||
|
Install the OpenSSL and urllib3 Python3 external packages, and run as root
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
make install
|
||||||
|
.Ed
|
||||||
|
.Ss Database Initialization
|
||||||
|
Once
|
||||||
|
.Nm
|
||||||
|
is properly installed on the system, designate a directory where
|
||||||
|
the server and user data are to be stored. This directory
|
||||||
|
must not exist yet.
|
||||||
|
.Nm
|
||||||
|
must always be run as a regular user; you can create one for
|
||||||
|
it or use your own. To initialize the database, execute
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
snac init $HOME/snac-data
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
A small set of questions will be asked regarding the installation,
|
||||||
|
specially the host name it will run under, the local network address
|
||||||
|
and port
|
||||||
|
.Nm
|
||||||
|
will listen to, the optional path prefix and possibly other things.
|
||||||
|
.Pp
|
||||||
|
You can launch the
|
||||||
|
.Nm
|
||||||
|
process by running
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
snac httpd $HOME/snac-data
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
Use a web browser to connect to the specified address and port. You
|
||||||
|
should see a greeting page.
|
||||||
|
.Pp
|
||||||
|
Log messages are sent to the standard error stream. By default, only
|
||||||
|
relevant information is written there. You can increase the debugging
|
||||||
|
level by editing the 'dbglevel' field in the
|
||||||
|
.Pa server.json
|
||||||
|
file or by setting a numeric value between 0 and 3 to the DEBUG
|
||||||
|
environment variable, see below.
|
||||||
|
.Pp
|
||||||
|
If you run
|
||||||
|
.Nm
|
||||||
|
in an OS controlled by
|
||||||
|
.Xr systemd 1 ,
|
||||||
|
you can prepare a user service to start/stop the daemon. Following the
|
||||||
|
previous example, create the file
|
||||||
|
.Pa ~/.config/systemd/user/snac.service
|
||||||
|
with the following content:
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
[Unit]
|
||||||
|
Description=snac daemon
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
ExecStart=/usr/local/bin/snac httpd /path/to/snac-data
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
And activate it by running
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
systemctl --user enable snac.service
|
||||||
|
systemctl --user start snac.service
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
For other operating systems, please read the appropriate documentation
|
||||||
|
on how to install a daemon as a non-root service.
|
||||||
|
.Ss Server Setup
|
||||||
|
.Pp
|
||||||
|
An http server with TLS and proxying support must already be
|
||||||
|
installed and configured.
|
||||||
|
.Nm
|
||||||
|
runs as a daemon and listens on a TCP/IP socket, preferrably
|
||||||
|
on a local interface. It can serve the full domain or only
|
||||||
|
a directory. The http server must be configured to route to the
|
||||||
|
.Nm
|
||||||
|
socket all related traffic and also the webfinger standard
|
||||||
|
address. The Host header must be propagated.
|
||||||
|
See the examples below.
|
||||||
|
.Ss Adding Users
|
||||||
|
.Pp
|
||||||
|
Users must be created from the command line.
|
||||||
|
You can do it by running
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
snac adduser $HOME/snac-data
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
All needed data will be prompted for. There is no artificial limit
|
||||||
|
on the number of users that can be created.
|
||||||
|
.Ss Customization
|
||||||
|
The
|
||||||
|
.Pa server.json
|
||||||
|
configuration file allows some behaviour tuning:
|
||||||
|
.Bl -tag -width tenletters
|
||||||
|
.It Ic host
|
||||||
|
The host name.
|
||||||
|
.It Ic prefix
|
||||||
|
The URL path prefix.
|
||||||
|
.It Ic address
|
||||||
|
The listen network address.
|
||||||
|
.It Ic port
|
||||||
|
The list network port.
|
||||||
|
.It Ic dbglevel
|
||||||
|
The debug level. An integer value, being 0 the less verbose (the default).
|
||||||
|
.It Ic layout
|
||||||
|
The disk storage layout version. Never touch this.
|
||||||
|
.It Ic queue_retry_max
|
||||||
|
Messages sent out are stored in a queue. If the posting of a messages fails,
|
||||||
|
it's re-enqueued for later. This integer configures the maximum count of
|
||||||
|
times the sending will be retried.
|
||||||
|
.It Ic queue_retry_minutes
|
||||||
|
The number of minutes to wait before the failed posting of a message is
|
||||||
|
retried. This is not linear, but multipled by the number of retries
|
||||||
|
already done.
|
||||||
|
.It Ic max_timeline_entries
|
||||||
|
This is the maximum timeline entries shown in the web interface.
|
||||||
|
.It Ic timeline_purge_days
|
||||||
|
Entries in the timeline older that this number of days are purged.
|
||||||
|
.It Ic css_urls
|
||||||
|
This is a list of URLs to CSS files that will be inserted, in this order,
|
||||||
|
in the HTML before the user CSS. Use these files to configure the global
|
||||||
|
site layout.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
You must restart the server to make effective these changes.
|
||||||
|
.Pp
|
||||||
|
If a file named
|
||||||
|
.Pa greeting.html
|
||||||
|
is present in the server base directory, it will be returned whenever
|
||||||
|
the base URL of the server is requested. Fill it with whatever
|
||||||
|
information about the instance you want to supply to people
|
||||||
|
visiting the server, like sign up requirements, site policies
|
||||||
|
and such. The special %userlist% mark in the file will cause
|
||||||
|
the list of users in this instance to be inserted.
|
||||||
|
.Pp
|
||||||
|
Users can change a bit of information about themselves from the
|
||||||
|
web interface. See
|
||||||
|
.Xr snac 1
|
||||||
|
for details. Further, every user has a private CSS file in their
|
||||||
|
.Pa static/style.css
|
||||||
|
that can be modified to suit their needs. This file contains
|
||||||
|
a copy of the
|
||||||
|
.Pa style.css
|
||||||
|
file in the server root and it's inserted into the HTML output.
|
||||||
|
It's not easily accesible from the web interface to avoid users
|
||||||
|
shooting themselves in the foot by destroying everything.
|
||||||
|
.Ss Old Data Purging
|
||||||
|
The Fediverse generates big loads of data that get old and
|
||||||
|
stale very quickly. By default,
|
||||||
|
.Nm
|
||||||
|
does not delete anything; you must do it explicitly by issuing a
|
||||||
|
.Ar purge
|
||||||
|
command periodically. A cron entry will suffice. You can add the
|
||||||
|
following to the
|
||||||
|
.Nm
|
||||||
|
user's crontab:
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
# execute a data purge on Sundays at 4 am
|
||||||
|
0 4 * * 0 /usr/local/bin/snac purge /path/to/snac-data
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
Other directories, like
|
||||||
|
.Pa archive/ ,
|
||||||
|
can grow very quickly if the debug level is greater than 0. These
|
||||||
|
files must be deleted manually.
|
||||||
|
.Pp
|
||||||
|
The user-generated data (the local timeline) is never deleted.
|
||||||
|
.Ss ActivityPub Support
|
||||||
|
These are the following activities and objects that
|
||||||
|
.Nm
|
||||||
|
supports:
|
||||||
|
.Bl -tag -width tenletters
|
||||||
|
.It Vt Follow
|
||||||
|
Complete support, on input and output.
|
||||||
|
.It Vt Undo
|
||||||
|
For
|
||||||
|
.Vt Follow ,
|
||||||
|
.Vt Like
|
||||||
|
and
|
||||||
|
.Vt Announce
|
||||||
|
objects, on input and output.
|
||||||
|
.It Vt Create
|
||||||
|
For
|
||||||
|
.Vt Note
|
||||||
|
objects, on input and output.
|
||||||
|
.It Vt Accept
|
||||||
|
For
|
||||||
|
.Vt Follow
|
||||||
|
objects, on input and output.
|
||||||
|
.It Vt Like
|
||||||
|
For
|
||||||
|
.Vt Note
|
||||||
|
objects, on input and output.
|
||||||
|
.It Vt Announce
|
||||||
|
For
|
||||||
|
.Vt Note
|
||||||
|
objects, on input and output.
|
||||||
|
.It Vt Update
|
||||||
|
For
|
||||||
|
.Vt Person
|
||||||
|
objects, on input and output. Support for updating
|
||||||
|
.Vt Note
|
||||||
|
objects will probably be added in the future.
|
||||||
|
.It Vt Delete
|
||||||
|
Supported for
|
||||||
|
.Vt Note
|
||||||
|
and
|
||||||
|
.Vt Tomsbtone
|
||||||
|
objects on input, and for
|
||||||
|
.Vt Note
|
||||||
|
objects on output.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
The rest of activities and objects are dropped on input.
|
||||||
|
.Pp
|
||||||
|
There is partial support for
|
||||||
|
.Vt OrderedCollection
|
||||||
|
objects in the
|
||||||
|
.Pa /outbox
|
||||||
|
(with the last 20 entries of the local timeline shown). No pagination
|
||||||
|
is supported. Intentionally, the
|
||||||
|
.Pa /followers
|
||||||
|
and
|
||||||
|
.Pa /following
|
||||||
|
paths return empty lists.
|
||||||
|
.Ss Other Considerations
|
||||||
|
.Nm
|
||||||
|
stores all the messages it receives as JSON files, which are usually
|
||||||
|
bloated and filled with redundant information. Using a filesystem with
|
||||||
|
file compression enabled (like btrfs or zfs) will probably be a good
|
||||||
|
choice to store the
|
||||||
|
.Nm
|
||||||
|
database into.
|
||||||
|
.Sh ENVIRONMENT
|
||||||
|
.Bl -tag -width Ds
|
||||||
|
.It Ev DEBUG
|
||||||
|
Overrides the debugging level from the server 'dbglevel' configuration
|
||||||
|
variable. Set it to an integer value. The higher, the deeper in meaningless
|
||||||
|
verbiage you'll find yourself into.
|
||||||
|
.El
|
||||||
|
.Sh EXAMPLES
|
||||||
|
You want to install the
|
||||||
|
.Nm
|
||||||
|
Fediverse daemon in the host example.com, that is correctly configured
|
||||||
|
with a valid TLS certificate and running the nginx httpd server.
|
||||||
|
The service will be installed under the
|
||||||
|
.Pa fedi
|
||||||
|
location. Two users, walter and jessie, will be hosted in the system.
|
||||||
|
Their Fediverse presence addresses will be https://example.com/fedi/walter
|
||||||
|
and https://example.com/fedi/jesse, respectively. They will be known
|
||||||
|
in the Fediverse as @walter@example.com and @jesse@example.com. The
|
||||||
|
.Nm
|
||||||
|
daemon will run as the user snacusr in the system and listen to the
|
||||||
|
localhost:8001 network socket. All data will be stored in the
|
||||||
|
.Pa /home/snacusr/fedidata
|
||||||
|
directory.
|
||||||
|
.Pp
|
||||||
|
Log into the system as snacusr and execute:
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
snac init /home/snacusr/fedidata
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
Answer "example.com" to the host name question, "/fedi" to the path
|
||||||
|
prefix question, "localhost" to the address and "8001" to the port.
|
||||||
|
.Pp
|
||||||
|
Create the users
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
snac adduser /home/snacusr/fedidata walter
|
||||||
|
snac adduser /home/snacusr/fedidata jesse
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
Answer the questions with reasonable values.
|
||||||
|
.Pp
|
||||||
|
Execute the server:
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
snac httpd /home/snacusr/fedidata
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
Edit the nginx configuration and add the following snippet to the
|
||||||
|
example.com server section:
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
location /.well-known/webfinger {
|
||||||
|
proxy_pass http://localhost:8001;
|
||||||
|
proxy_set_header Host $http_host;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /fedi {
|
||||||
|
proxy_pass http://localhost:8001;
|
||||||
|
proxy_set_header Host $http_host;
|
||||||
|
}
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
Restart the nginx daemon and connect to https://example.com/fedi/walter.
|
||||||
|
The empty, default screen will be shown. Enter the admin section with the
|
||||||
|
credentials defined for this user. Search people, start following
|
||||||
|
them, engage in arid discussions and generally enjoy the frustrating
|
||||||
|
experience of Social Media.
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr snac 1 ,
|
||||||
|
.Xr snac 5
|
||||||
|
.Sh AUTHORS
|
||||||
|
.An grunfink
|
||||||
|
.Sh LICENSE
|
||||||
|
See the LICENSE file for details.
|
||||||
|
.Sh CAVEATS
|
||||||
|
JSON files are fragile when modified by hand. Take care.
|
BIN
doc/susie.png
Normal file
BIN
doc/susie.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 116 B |
3
doc/susie.txt
Normal file
3
doc/susie.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQAAAA
|
||||||
|
A3iMLMAAAAO0lEQVQI1wEwAM//AAZgAAcwAA/4AAPkAB3cAAPgAKXIAKfIAH/
|
||||||
|
8AD/8ADw8AB56AA/2AEPtAMwfAO+/UlQP2C3B0yEAAAAASUVORK5CYII=
|
BIN
doc/susie32.png
Normal file
BIN
doc/susie32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 134 B |
BIN
doc/susie64.png
Normal file
BIN
doc/susie64.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 138 B |
Loading…
Reference in a new issue