This morning I set up Solderpunk's GeGoBi on my personal server to
mirror my gopher content to gemini. It's a great complement to
Pygopherd. Between Pygopherd and GeGoBi, my gopher hole is served to
gopher, http (on port 70), and gemini. I may yet add Shizaru and a
gophermap conversion script so that the gopher hole is mirrored on port
443 as well.

Here are the details of my GeGoBi setup on Debian 10. I suspect
there might be others out there who want to do the same thing.

Note that I was logged in as root when I did everything in part I. Then
I shut it all down and set GeGoBi up to run as a regular user and start
automatically in part II.


Part I: GeGoBi Setup
====================


1. Download GeGoBi from https://tildegit.org/solderpunk/gegobi


2. Unzip the contents to /opt/gegobi

You should have the following files in /opt/gegobi:

gegobi.py
LICENSE
README.md


3. Enter the directory and generate the SSL certificate and key that
you'll need for the gemini server. I figured it was easiest to keep
these files in the /opt/gegobi directory because I don't need them for
anything else.

Enter the following command:

openssl req -new -x509 -newkey ec \
-pkeyopt ec_paramgen_curve:prime256v1 \
-days 1825 -nodes -out cert.pem -keyout key.pem

In the dialog that follows, you can just enter a period to avoid
answering most of the questions, but it's probably best to enter your
server address under Common Name. In my case, I did this:

Country Name (2 letter code) [AU]:CA
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:.
Organization Name (eg, company) [Internet Widgits Pty Ltd]:.
Organizational Unit Name (eg, section) []:.
Common Name (e.g. server FQDN or YOUR name) []:gopher.visiblink.ca
Email Address []:.

*I found this on Alex Schroeder's site (Thanks Alex!):
https://alexschroeder.ch/wiki/2020-07-20_Does_a_Gemini_certificate_need_a_Common_Name_matching_the_domain%3f


4. Figure out the command-line switches you'll need when you launch
gegobi.py. These are the options:

 --base [BASE]         Gopherhole base directory.
 --cert [CERT]         TLS certificate file.
 --host HOST           Hostname of Gemini server.
 --key [KEY]           TLS private key file.
 --local               Serve only on 127.0.0.1.
 --port [PORT]         TCP port to serve on.
 --redirects [REDIRECTS]
                       File to read redirect definitions from.
 --tilde [TILDE]       Home subdirectory to map tilde URLs to.

My gopher content is in /var/gopher, so I ended up with this combination
of command-line switches, which works, as long as you're in /opt/gegobi
when you enter it:

/gegobi.py --base /var/gopher --cert cert.pem --key key.pem --host gopher.visiblink.ca --port 1965


5. Open port 1965 in your firewall.

ufw allow 1965


6. Set up port forwarding on the router. Once you've done that, the
world should be able to see your gopher content on gemini! You can
verify that by visiting your gopher hole from a gemini proxy.


7. Shut GeGoBi down. Don't run GeGoBi as root on a regular basis.



Part II: Setup GeGoBi to be run by a regular user and autostart with systemd
============================================================================


Systemd unit files -- which allow you to autostart GeGoBi -- don't
accept command-line switches, but you can still get them to work by
assigning them to variables in a config file.


1. Make a file in your /opt/gegobi directory called .conf

This file will hold the command-line switches you figured out in Part I.
Alter it to meet your specific requirements.

Here are the contents of my .conf (you may need to change the base
directory and you _will_ need to change the hostname):

ARG1=--base /var/gopher
ARG2=--cert /opt/gegobi/cert.pem
ARG3=--key /opt/gegobi/key.pem
ARG4=--host gopher.visiblink.ca
ARG5=--port 1965


2. Navigate to /etc/systemd/system/


3. Create a file called gegobi.service

Enter the following in the file:

[Unit]
Description=Run GeGoBi as a regular user

[Service]
Type=simple
User=your_username
Restart=always
EnvironmentFile=/opt/gegobi/.conf
ExecStart=/usr/bin/python3 /opt/gegobi/gegobi.py $ARG1 $ARG2 $ARG3 $ARG4 $ARG5
TimeoutStartSec=0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target


4. Change the ownership of all of the files in /opt/gegobi/ to the
regular (non-root) user you have chosen to run gegobi.

chown your_username:your_username /opt/gegobi/*

You might have to change the ownership of the hidden /opt/gegobi/.conf
file separately. I can't remember if the wildcard changed it or not.


5. Make GeGoBi run as a daemon:

First, reload the daemon service files:

systemctl daemon-reload

Then you can start GeGoBi:

systemctl start gegobi.service

Finally, set GeGoBi to start up automatically with your server:

systemctl enable gegobi.service