Goldstein

Goldstein is a social media server with multiple client programs for handing different functions. It’s modelled on IRC, but stores messages, on both the server and client. It aims to eventually replicate the basic functionality of Facebook, YouTube, Twitter, etc, but with the freedom of running one’s own server.

However, it’s main purpose is to reliably preserve messages and files. If a server goes down (or is taken down) all messages and user information still functions as normal in offline mode. This provides the user with a complete record of every message she has downloaded, across multiple servers. This is the origin of the name: from the supposed character of Goldstein in George Orwell’s Nineteen Eighty-Four, who was demonised for trying to accurately preserve history.

Features

Limitations

Temporary limitations

Programs

Encryption

Goldstein uses two different forms of encryption: symmetric block cipher and Diffie-Hellman-Merkle (DHM) key exchange.

There are two types of block cipher used: Serpent and Rijndael (aka AES). The default is Serpent, since it only lost the Advanced Encryption Standard (AES) competition in favour of Rijndael because it was slower - thus the competition was flawed. Since Serpent uses a more conservative design it must take precedence, especially since it appears as if it has been abandoned by the cryptography community, for no good reason.

DHM key exchange is done with GNU Multiple Precision Arithmetic (GMP) library, using a 4096 bit modulus and 2048 bit secrets. This is achieved with only one packet in each direction.

Installation

See the INSTALL file for generic install instructions - this package uses the Autoconf compilation and installation system.

To get it running, a bit more work is needed. First on the server:

  1. Create the change root directory (/var/lib/goldsd/ by default).

  2. Create the “users” directory within the change root directory and copy the supplied “etc/admin.cfg” file there, editing it to add a password (in the passwd-text option). Nb. the password will be hashed (encrypted) once the server has been run.

  3. Copy the supplied “etc/channels.txt” file to the change root directory, editing it to add/remove channels.

  4. Run goldsd, either like this: goldsd -chroot-dir=[change root directory] -pass=[server password] -hostname=[server hostname], or placing the options in the system config file (probably /etc/stdconfig/goldsd) and running it like this: goldsd. Nb. -chroot-dir can be omitted it’s the default (/var/lib/goldsd). Nb. chroot with the root user will be insecure unless run without all but chroot capabilities - eg. via Systemd, Startd, etc.

Now on the client:

  1. Create the “~/.config/goldstein/servers/” directory, and copy the supplied “etc/local” config file to it.

  2. Edit the “~/.config/goldstein/servers/local” config file, and possibly change the name - the name of the file is the name of the server for commands.

  3. You can now connect to the server, adding more users with golds-user, upload files with golds-file, etc. The commands must be run with the -server=local option.

License

The daemon and associated commands are licensed under the GNU General Public Licence (GPL).

The major version of the GPL used is only 2, in rejection of version 3’s social engineering. Forks of Startd may use GPL version 2, version 3, or later versions.

Bug reports and patches

Found a bug? Please send the details to bugs@cinfinity.info. Mention the program being used, package (with version and/or release number) it came from, command line and config file options, and ideally the backtrace provided by gdb (with the bt command). Please don’t send core files (unless requested).

Any ideas for improvements can be sent to marks@cinfinity.info.

If you want to make a contribution, you can send patches to patches@cinfinity.info. I can’t guarantee I’ll accept them though, since Startd is designed to be minimalist, so for anything substantial, you should probably ask first. Patches should be in unified diff format, created with diff -u <original file> <modified file>. Nb. I don’t use git or any other source code version control system, since I believe that every package should have a single author, and that large projects should ideally be broken down into a number of independent libraries.

Author

My name is Mark Skinner. I’m an Australian, self taught computer programmer, with a degree in engineering (specifically, computer control systems).

I write all my source code using a simple text editor, and compile and test it via the command line. My Xwindow GUI consists of a text editor, web browser and a number of terminals.

Last modified: 2022-08-03 15:37:07 UTC.