Use hashtypes(c.f Cytoplasm#47) #57
3 changed files with 94 additions and 192 deletions
94
docs/dev/ports.md
Normal file
94
docs/dev/ports.md
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
## Ports
|
||||||
|
|
||||||
|
Telodendria is distributed primarily as source code, and the project
|
||||||
|
itself does not offer a convenient install process such as in the form
|
||||||
|
of a shell script. This is intentional; the Telodendria project is
|
||||||
|
primarily concerned with developing Telodendria itself, not packaging
|
||||||
|
it for the hundreds of different operating systems and linux
|
||||||
|
distributions that exist. It is my firm belief that distributing an
|
||||||
|
open source project is not the job of the open source developer; that
|
||||||
|
is the reason software distributions exist: to collect and
|
||||||
|
*distribute* software.
|
||||||
|
|
||||||
|
It would be impossible to single-handedly package Telodendria for
|
||||||
|
every platform, because each platform has very different expectations
|
||||||
|
and conventions for software. Even different Linux distributions have
|
||||||
|
different conventions for where manual pages, binaries, and
|
||||||
|
configuration files go.
|
||||||
|
|
||||||
|
That being said, this document aims to assist those who want to
|
||||||
|
package Telodendria for their operating system or software
|
||||||
|
distribution.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Before attempting to package Telodendria, make sure that you can build
|
||||||
|
it and that it builds cleanly on your target platform. See
|
||||||
|
[Install → From Source](../user/install.md#from-source)
|
||||||
|
for general build instructions.
|
||||||
|
|
||||||
|
To package Telodendria, you should collect the following files, and
|
||||||
|
figure out where they should be installed on your system:
|
||||||
|
|
||||||
|
- The `telodendria` server binary itself, located at
|
||||||
|
`build/telodendria`.
|
||||||
|
- All manual pages in the `man/` directory. These should be prefixed
|
||||||
|
with `telodendria-`. You may also wish to ship the `docs/` directory
|
||||||
|
so that the user can read the documentation offline, and ensure that
|
||||||
|
they are reading the correct documentation for the installed version.
|
||||||
|
- An init script. People that wish to install Telodendria on their
|
||||||
|
system using your package are going to expect it to be integrated
|
||||||
|
enough that Telodendria can easily be started at boot and otherwise
|
||||||
|
managed by the system's daemon tools, be it `systemd` or another
|
||||||
|
init system. Consult your system's documentation for writing an init
|
||||||
|
script. **Note:** Telodendria *does not* fork itself to the background;
|
||||||
|
the init script should do that.
|
||||||
|
|
||||||
|
You may wish to optionally create a dedicated user under which
|
||||||
|
Telodendria should run. Telodendria can be directly started as that
|
||||||
|
user, or start as root and be configured to automatically drop to that
|
||||||
|
user. Additionally, it might be helpful to provide a default
|
||||||
|
configuration, which can be placed in the samples directory on your
|
||||||
|
platform, or in a default location that Telodendria will load from.
|
||||||
|
A good default directory that you may wish to provide for configuration,
|
||||||
|
data, and logs could perhaps be `/var/telodendria` on Unix-like systems.
|
||||||
|
|
||||||
|
Once you have collected the necessary files and directories that need
|
||||||
|
to be installed, make sure your package performs the following tasks
|
||||||
|
on install:
|
||||||
|
|
||||||
|
- If necessary and depending on the configuration used, create a new
|
||||||
|
system user for the Telodnedria daemon to run as.
|
||||||
|
- If conventional for your system, enable the Telodendria init script
|
||||||
|
so that Telodendria is started on system boot.
|
||||||
|
- Instruct the user to carefully read the [Setup](../user/setup.md)
|
||||||
|
(`docs/user/setup.md`) instructions and the
|
||||||
|
[Configuration](../user/config.md) (`docs/user/config.md`) instructions
|
||||||
|
before starting Telodendria.
|
||||||
|
|
||||||
|
The goal of a package should be to get everything as ready-to-run as
|
||||||
|
possible. The user should be able to start Telodendria right away and
|
||||||
|
begin configuring it.
|
||||||
|
|
||||||
|
Remember to publicly document the setup of Telodendria on your platform
|
||||||
|
if there are additional steps required that are not mentioned in the
|
||||||
|
official Telodendria documentation. This ensures that users can get
|
||||||
|
up and running quickly and easily. If you're packaging Telodendria
|
||||||
|
for a container system such as Docker, you can omit the things that
|
||||||
|
containers typically do not have, such as the init scripts and
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
Also remember that your port should feel like it belongs on your target
|
||||||
|
system. Follow all of your system's conventions when placing files
|
||||||
|
on the filesystem, so your users know what to expect. The goal is not
|
||||||
|
necessarily to have a unified experience across all operating systems,
|
||||||
|
rather, you should cater to the opinions of your operating system.
|
||||||
|
Telodendria is architected in such a way that it does not impose the
|
||||||
|
developer's opinions of where things should go, and since the
|
||||||
|
configuration lives in the database, it is fairly self contained.
|
||||||
|
|
||||||
|
If there are any changes necessary to the upstream code or build
|
||||||
|
system that would make your job in porting Telodendria easier, do not
|
||||||
|
hesitate to get involved by opening an issue and/or submitting a pull
|
||||||
|
request.
|
||||||
|
|
|
@ -1,119 +0,0 @@
|
||||||
.Dd $Mdocdate: April 24 2023 $
|
|
||||||
.Dt PORTING 7
|
|
||||||
.Os Telodendria Project
|
|
||||||
.Sh NAME
|
|
||||||
.Nm porting
|
|
||||||
.Nd Some guidelines for packaging Telodendria for your operating system.
|
|
||||||
.Sh DESCRIPTION
|
|
||||||
.Pp
|
|
||||||
Telodendria is distributed at source code, and does not offer a
|
|
||||||
convenient install process. This is intentional; the Telodendria
|
|
||||||
project is primarily concerned with developing Telodendria itself,
|
|
||||||
not packaging it for the hundreds of different operating systems
|
|
||||||
and Linux distributions that exist. It is my firm belief that
|
|
||||||
distributing an open source project is not the job of the open
|
|
||||||
source developer; that's the reason software distributions exist,
|
|
||||||
to collect and distribute software.
|
|
||||||
.Pp
|
|
||||||
It would be impossible to single-handedly package Telodendria for
|
|
||||||
every platform, because each platform has very different expectations
|
|
||||||
for software. Even different Linux distributions have different
|
|
||||||
conventions for where manual pages, binaries, and configuration
|
|
||||||
files go.
|
|
||||||
.Pp
|
|
||||||
That being said, this page aims to assist those who want to package
|
|
||||||
Telodendria for their operating system or software distribution.
|
|
||||||
.Pp
|
|
||||||
See
|
|
||||||
.Xr td 1
|
|
||||||
for instructions on how to build Telodendria. Only proceed with
|
|
||||||
packaging Telodendria after you have successfully built it on your
|
|
||||||
operating system.
|
|
||||||
.Pp
|
|
||||||
To package Telodendria, you should collect the following files, and
|
|
||||||
figure out where they should be installed for your system:
|
|
||||||
.Bl -bullet
|
|
||||||
.It
|
|
||||||
The telodendria server binary itself:
|
|
||||||
.Pa build/telodendria
|
|
||||||
.It
|
|
||||||
All manual pages in the
|
|
||||||
.Pa man/
|
|
||||||
directory that are prefixed with "telodendria". These are the user
|
|
||||||
documentation pages. All pages that do not have the "telodendria"
|
|
||||||
prefix are intended only for developers, and so do not need to be
|
|
||||||
installed to the system.
|
|
||||||
.It
|
|
||||||
An init script. People that wish to install Telodendria to their
|
|
||||||
system expect it to be integrated enough that Telodendria can be
|
|
||||||
easily started at boot, and otherwise managed by the system's daemon
|
|
||||||
tools, be it systemd, or another init system. Consult your system's
|
|
||||||
documentation for writing an init script. Do note that Telodendria
|
|
||||||
does not fork itself to the background; the init script should do
|
|
||||||
that. Note that the init script probably requires a few things:
|
|
||||||
.Bl -bullet
|
|
||||||
.It
|
|
||||||
A dedicated system user under which Telodendria should run.
|
|
||||||
Telodendria can either be started as that user, or started as
|
|
||||||
root and configured to automatically drop to that user.
|
|
||||||
.It
|
|
||||||
A default data directory, in which all Telodendria data, including
|
|
||||||
the configuration and logs, will be stored. A good default on
|
|
||||||
Unix-like system is probably
|
|
||||||
.Pa /var/telodendria .
|
|
||||||
.El
|
|
||||||
.El
|
|
||||||
.Pp
|
|
||||||
Optionally, it may be helpful to provide these as well:
|
|
||||||
.Bl -bullet
|
|
||||||
.It
|
|
||||||
A sample Telodendria configuration. This should be placed in the
|
|
||||||
examples directory on your
|
|
||||||
system, if such a directory exists. You can use or adapt any of the
|
|
||||||
configuration files in
|
|
||||||
.Pa contrib/ ,
|
|
||||||
or write your own specifically for your package.
|
|
||||||
.El
|
|
||||||
.Pp
|
|
||||||
Once you have collected the files that need to be installed, make
|
|
||||||
sure your package performs the following tasks on install:
|
|
||||||
.Bl -bullet
|
|
||||||
.It
|
|
||||||
If necessary, depending on the config used, create a new system
|
|
||||||
user for the Telodendria daemon to run as.
|
|
||||||
.It
|
|
||||||
If conventional for your system, enable the Telodendria init script
|
|
||||||
so that Telodendria is started on system boot.
|
|
||||||
.It
|
|
||||||
Insruct the user to carefully read the
|
|
||||||
.Xr telodendria-setup 7 ,
|
|
||||||
.Xr telodendria-admin 7 ,
|
|
||||||
and
|
|
||||||
.Xr telodendria-config 7
|
|
||||||
manual pages before starting Telodendria.
|
|
||||||
.El
|
|
||||||
.Pp
|
|
||||||
The goal of a package should be to get everything as ready-to-run
|
|
||||||
as possible. The user should be able to start Telodendria
|
|
||||||
right away and begin configuring it.
|
|
||||||
.Pp
|
|
||||||
Remember to publicly document the setup of Telodendria on your
|
|
||||||
platform so that users can easily get things running. If you're
|
|
||||||
packaging Telodendria for a containerization system such as Docker,
|
|
||||||
you can omit the things that containers typically do not have, such
|
|
||||||
as the init script and man pages.
|
|
||||||
.Pp
|
|
||||||
Also remember that your port should feel like it belongs on your
|
|
||||||
target system. Follow all of your system's conventions when placing
|
|
||||||
files on the filesystem, so your users know what to expect. The
|
|
||||||
goal is not necessarily to have a unified experience across all
|
|
||||||
operating systems, rather, you should cater to the opinions of
|
|
||||||
your operating system. Telodendria is architected in such a way
|
|
||||||
that it does not impose the developers opinions of where things
|
|
||||||
should go, and since the configuration lives in the database,
|
|
||||||
it is fairly self-contained.
|
|
||||||
.Pp
|
|
||||||
.Sh SEE ALSO
|
|
||||||
.Xr telodendria-contributing 7 ,
|
|
||||||
.Xr td 1 ,
|
|
||||||
.Xr telodendria 7
|
|
|
@ -1,73 +0,0 @@
|
||||||
.Dd $Mdocdate: April 30 2023 $
|
|
||||||
.Dt TELODENDRIA 8
|
|
||||||
.Os Telodendria Project
|
|
||||||
.Sh NAME
|
|
||||||
.Nm telodendria
|
|
||||||
.Nd Daemon command line manual for Telodendria administrators.
|
|
||||||
.Sh SYNOPSIS
|
|
||||||
.Nm
|
|
||||||
.Op Fl nVv
|
|
||||||
.Op Fl f Ar file
|
|
||||||
.Sh DESCRIPTION
|
|
||||||
.Nm
|
|
||||||
is a Matrix homeserver written entirely from scratch in ANSI C.
|
|
||||||
It is designed to be lightweight and simple, yet functional.
|
|
||||||
.sp
|
|
||||||
The options are as follows:
|
|
||||||
.Bl -tag -width Ds
|
|
||||||
.It Fl d Ar dir
|
|
||||||
Specify the data directory to use. All persistant storage that
|
|
||||||
Telodendria requires is saved and loaded here.
|
|
||||||
.It Fl V
|
|
||||||
Only print the version information header and then quit.
|
|
||||||
.It Fl v
|
|
||||||
Verbose mode. This overrides the configuration file and sets the
|
|
||||||
log level to
|
|
||||||
.Em LOG_DEBUG .
|
|
||||||
It also enables extra logging of memory operations, which can
|
|
||||||
be useful for debugging.
|
|
||||||
.El
|
|
||||||
.Sh ENVIRONMENT
|
|
||||||
.Nm
|
|
||||||
does not read any environment variables. All configuration should
|
|
||||||
be done via the configuration file.
|
|
||||||
.Sh FILES
|
|
||||||
Just the data directory. Telodendria does not read any files outside
|
|
||||||
of its data directory, with the exception of TLS files if configured.
|
|
||||||
.Sh SIGNALS
|
|
||||||
Telodendria recognizes a number of signals that it handles:
|
|
||||||
.Bl -tag -width Ds
|
|
||||||
.It PIPE
|
|
||||||
This signal is ignored, because all I/O errors should be handled
|
|
||||||
properly.
|
|
||||||
.It USR1
|
|
||||||
Perform a soft restart by shutting down the HTTP servers and resetting
|
|
||||||
all program state. However, the daemon process does not exit.
|
|
||||||
.It TERM
|
|
||||||
Perform a clean shutdown after all existing connections are closed.
|
|
||||||
.It INT
|
|
||||||
Perform a clean shutdown after all existing connections are closed.
|
|
||||||
.El
|
|
||||||
.Pp
|
|
||||||
Any other signals are not explicitly handled, so they have the
|
|
||||||
default behavior defined by the operating system.
|
|
||||||
.Sh EXIT STATUS
|
|
||||||
.Nm
|
|
||||||
exits with a non-0 exit code if the configuration file is invalid, or
|
|
||||||
one or more required paths is inaccessible.
|
|
||||||
.Nm
|
|
||||||
will print an error to the log and then terminate abnormally.
|
|
||||||
.Pp
|
|
||||||
.Nm
|
|
||||||
exits with a code of 0 if the configuration file is valid, all
|
|
||||||
paths and files required are accessible, and the HTTP listener starts
|
|
||||||
as intended. If
|
|
||||||
.Nm
|
|
||||||
is sent a signal that it catches after it begins servicing requests, it
|
|
||||||
will still exit with a code of 0 after it safely shuts down, because
|
|
||||||
the bootstrap process completed successfully, and by all accounts,
|
|
||||||
it ran normally and exitted normally.
|
|
||||||
.Sh SEE ALSO
|
|
||||||
.Xr telodendria 7 ,
|
|
||||||
.Xr telodendria-setup 7 ,
|
|
||||||
.Xr telodendria-admin 7
|
|
Loading…
Reference in a new issue