2023-03-11

Adding cassini gemring server to bubblewrapped services (bws)

#software

#gemini

After adding a minimal finger daemon[a] to bubblewrapped servies (bws)[b] I set out to add cassini --- a specialized gemini server implementing a gemini ring. It is written in Go by Sol Fisher Romanoff[c].

Gemini Ring or Orbit

A web ring is a doubly linked list of sites, which can be traversed or examined in full on the ring server. So naturally this idea was adopted in gemini space as well. Some time ago I had collected terms from gemini space[d]. The term orbit was used in place of a gemini ring or gemring for short.

A Gemini Ring Server

As explained, a gemring is a way, to connect a series of capsules. Every site features a link to the previous and next site in the gemring. The gemring server hosts that list of sites. Going to the next site actually calls the gemring server including the current sites "name", i.e. the name used as key in the list on the gemring server. The gemring server responds with a redirect to the next site in the list.

In order to add a new capsule to the gemring, the operator of the gemring server will add a key and the sites URL to the list, and report the key string back to the owner of the site. The owner of the site can then add links to their capsule, pointing to the previous or next site, a random site in that list, or the index, possibly featuring a full list of sites belonging to the gemring.

Adding Cassini

The following commands are for you inspiration, don't follow them blindly.

mkdir src; cd src
git clone https://git.sr.ht/~sfr/cassini
cd cassini; go build
cd ~

cd ~/services
mkdir gemring-cassini; cd gemring-cassini
mkdir -p ./bin/linux-$(uname -m) ./pub ./cert
cp ~/src/cassini/cassini ./bin/linux-$(uname -m)/cassini
chmod 0755 ./bin/linux-$(uname -m)/cassini
cd ./cert
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 3650 -nodes -subj "/CN=your.host.name.on.net"
cd ..

cat <<EOF > pub/index.gmi
# cassini gemring @ your.host.name.on.net

This gemring or orbit is about ???
Send requests to ???

List of registered capsules:

{{ list }}

Have the appropriate amount of fun.

Powered by cassini
=> https://git.sr.ht/~sfr/cassini
EOF

cat <<EOF > pub/ring.txt
antenna gemini://warmedal.se/~antenna/
cosmos gemini://skyjake.fi/~Cosmos/
midnight gemini://midnight.pub/
EOF

cat <<'EOF' > start.sh
#!/bin/sh

OS="$(uname -s)"
PLATFORM="$(uname -m)"
BIN="unknown"

if test "$OS" = "Linux"; then
  BIN="linux-$PLATFORM"
elif test "$OS" = "Darwin"; then
  BIN="macos-$PLATFORM"
fi

./bin/$BIN/cassini --port 1966 --cert ./cert/cert.pem --key ./cert/key.pem --list ./pub/ring.txt --index ./pub/index.gmi
EOF
chmod 0755 start.sh

cd ..
echo '~/services/bws start gemring-cassini' >> start

After all this you host a gemring. Now on to fill it with interesting things!

Whacky Ideas

While doing this I thought, well, I can create a detailed list of documents found in gemini space. What is called "user name" in the documentation is a mere key to said entry. So I should be able to implement the equivalent of my Ribbons[e] using this technology as well, i.e. a traversable list of documents within my capsule. I just need to add the appropriate links everywhere.

One could also try to write episodes of a story, where each chapter is hosted elsewhere, written by the owner of that capsule, and thus create funny or intriguing text, crowd edited and everything. The owner of the ring/orbit server is the one to decide about the selection and their order. The owner might even resort to hosting copies to activate when capsules get lost. And they do get lost all the time.

The cassini/huygens space mission was launched in 1997, so that might suit you as an alternate port number.

Cheers,

~ew

References

[a] Adding a minimal fingerd to bubblewrapped services (bws)

[b] Simpler Linux self-hosting with tmux and bubblewrap

[c] git.sr.ht/~sfr/cassini

[d] Terms in Gemini Space I like

[e] Towards a proper FlightLog: Ribbons (was: Colored Lines)

Home