-- Leo's gemini proxy

-- Connecting to gemini.uxq.ch:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini


You have reached the Gemini server at gemini.uxq.ch!

What is this?

This is a quick demonstration of the current state of geminid, my attempt to implement the server-side of the Gemini specification in C. You can find the sourcecode at https://github.com/jovoro/geminid/, or maybe some time later even in Geminispace. ;)

GitHub repository of geminid

Running geminid

What is this not?

Many things, but especially something you would want to rely on, yet.

What's new?


We've been busy in the data center, since we finally were able to install new hardware after a year or so of waiting because of several problems.

So my work on geminid has pretty much stalled. But I've received some help by a fellow named dacav, who has provided some fixes and enhancements for geminid. Thank you, dacav!

Also, I've been thinking about doing some writing besides these little notes here. So I've decided to create my own Gopherhole, which you can reach at gopher://gopher.uxq.ch/. I don't know how that will turn out. But the general idea is to just write down some thoughts and notes about experiments in computing. We'll see.

Cheers, J.


We've had a power outage a few weeks ago. Some of the OpenNebula infrastructure is still running on a single ESX host running in the lab, which of course is not connected to any form of UPS. So the machine went down and with it the Ceph monitors. This in turn didn't make the FreeBSD VM happy on which my installation of geminid is running. The configuration scripts seem to have taken a hit and so the whole thing is now in a somewhat unknown state and not very reliable anymore, I suppose. It's running, but for how long I don't know. The system even lost it's default route for some reason, making this site unreachable. I haven't noticed for quite some time, my apologies.

So I decided to build a new VM and migrate all the content. Since the whole SNAFU with Red Hat killing CentOS I've fallen in love again with SuSE, i.e. OpenSUSE. It seems to me that the build quality of the Distribution is still excellent and some aspects have still a traditional touch to them, like /usr being a real directory. Even the "Have a lot of fun..." message is still there!

Therefore, I've chosen OpenSUSE Leap 15.2 for the new installation. Just in case anyone is wondering: To get the header file for libmagic (<magic.h>) you have to install the package file-devel. Took me some minutes to figure that one out. Besides that I am very happy with it.

All packages that I've installed for building geminid on OpenSUSE: gcc, make, libopenssl-1_1-devel, libconfig-devel, file-devel, flex. Also, tcsh. But that's just me being masochistically traditional in a weird way.

Stay tuned! Cheers, J.


I've added support for IPv6 some time ago, but completely forgot to update this log. What a shame. I'm also trying to implement some kind of support for client certificates. Since the Gemini specification is not yet clear about the handling of client certificates, I thought I'd wait some time until these concepts are worked out. Oh, well. I guess some tinkering doesn't hurt.

Since geminid does not support input queries or the like, the use-case for client certificates is limited to access control at the moment. But that is also an interesting task. The current state is not actually usable, I've barely managed to create some kind of configurational infrastructure to handle the definition of secure paths and the fingerprints allowed to access them. But business is slow at the moment since everyone is on summer break, so I should be able to allocate some time to geminid.

Other than that I'm pleased how geminid is humming along for weeks now. I've also tested in on OpenBSD now that my old machine is working again. I've moved the (OpenNebula) infrastructure on which this virtual machine (gemini.uxq.ch) is running to a proper rack so there has been some downtime last week. The setup was running in the lab before and now went into production, more or less.

I had the thought of adjusting the access logging to include IP addresses though, since there was an incident with excessive requests which made me realize that one wouldn't be able to track down such an issue very quickly.


I finally had the time to work on geminid again. It is now encoding and decoding URLs to catch up with some of the specification changes earlier this month.


After a few days of rudimentary testing I'm confident enough to merge the vhost-work branch into master. I've done so earlier this week but I haven't had the opportunity to write an update here.


I've implemented SNI and vhosts. This feature is currently being tested and available in the git branch vhost-work. I've configured a second vhost on this machine, which you can visit here:

Visit other Gemini vhost

It may take some time until the domain and FQDN is fully functional, though. If you can't wait, you can always edit your /etc/hosts. :)


I've adjusted the response header according to the updated specification. So geminid now uses a space character instead of a tab character.


To answer the question "what's new"? Well, it's in active development, so things are changing almost constantly... :) As of today, I can announce the availability of a proper configuration file, for example. The file structure provides the facilities to define virtual hosts. Although I haven't implemented SNI yet, so you can use only the first one.


You can reach me at jr at vrtz dot ch.

Cheers, Johannes

a.k.a Unix Querulant

-- Response ended

-- Page fetched on Fri Aug 6 04:18:50 2021