# Setting up Molly-Brown on Ubuntu

Originally posted on 2023-04-11

[ Ubuntu version: 22.04 ]

## Install it

This will NOT fully install the service; it just gets the code ready in the right place.

```
apt install molly-brown
```

## Create the Molly-Brown unit file (service file) for SystemD

```
nano /etc/systemd/system/molly-brown.service
```

The basic setup looks like this. Note that this is running as root. I'd like to change this at some point, but I don't know how (yet).

```
[Unit]
Description=Molly Brown gemini server
After=network.target multi-user.target

[Service]
Type=simple
Restart=always
#User=molly
ExecStart=/usr/bin/molly-brown -c /etc/molly.conf

[Install]
WantedBy=multi-user.target
```

## Create the CONF file

```
/etc/molly.conf
```

The basic CONF file looks like this:

```
## Basic settings
#
Port = 1965
Hostname = "tiny.local"
CertPath = "/etc/ssl/certs/selfsigned.crt"
KeyPath = "/etc/ssl/private/selfsigned.key"
DocBase = "/var/gemini/"
HomeDocBase = "users"
GeminiExt = "gmi"
DefaultLang = "en"
AccessLog = "/var/log/molly/access.log"
ErrorLog = "/var/log/molly/error.log"
ReadMollyFiles = true

## Directory listing
#
DirectorySort = "Time"
DirectorySubdirsFirst = false
DirectoryReverse = true
DirectoryTitles = true

## Dynamic content
#
#CGIPaths = [
#       "/var/gemini/cgi-bin",
#       "/var/gemini/users/*/cgi-bin/", # Unsafe!
#]
#
#[SCGIPaths]
#"/scgi-app-1/" = "/var/run/scgi1.sock"
#"/scgi-app-2/" = "/var/run/scgi2.sock"

## MIME type overrides
#
[MimeOverrides]
"atom.xml$" = "application/atom+xml"
"rss.xml$" = "application/rss+xml"

## Redirects
#
#[TempRedirects]
#"/old/path/file.ext" = "/new/path/file.ext"
#[PermRedirects]
#"/old/path/file.ext" = "/new/path/file.ext"

## Certificate zones
#
#[CertificateZones]
#"^/secure-zone-1/" = [
#       "d146953386694266175d10be3617427dfbeb751d1805d36b3c7aedd9de02d9af",
#]
#"^/secure-zone-2/" = [
#       "d146953386694266175d10be3617427dfbeb751d1805d36b3c7aedd9de02d9af",
#       "786257797c871bf617e0b60acf7a7dfaf195289d8b08d1df5ed0e316092f0c8d",
#]
```

## Create needed files and folders

```
# Logs
touch /var/log/molly/access.log
touch /var/log/molly/error.log

# SSL Certificate
# (Replace with 3rd party cert later)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/selfsigned.key -out /etc/ssl/certs/selfsigned.crt

# Create the default path and default .gmi page
mkdir /var/gemini
nano /var/gemini/index.gmi

# Put whatever you want in the index.gmi file...
```

5. Start the service and test

```
service molly-brown start
```

If it all works, you're good.
If not, ummm, sorry?

6. Enable the service

```
systemctl enable molly-brown.service
```

Done.

## Some other things you might want to do

### User directories

Molly-Brown supports ~/user style user dirctories, but I'm not sure how to use those at the moment. One way I've found around this is to create softlinks to user's "public_gemini" folders u>

```
# "public_gemini" isn't really needed - it could be any folder. I just like to have all my Gemini, Gopher, and WWW folders in a row
ln -s /home/<username>/public_gemini <username>
```

Similar to a user directory in Gophernicus (~/public_gopher), the user will need to create a "public_gemini" folder. This folder should be world readable (as far as I can tell).