Gophernicus - Copyright (c) 2009-2016 Kim Holviala
Gophernicus is a modern full-featured (and hopefully) secure gopher
Command line options:
-h hostname Change server hostname (FQDN) [$HOSTNAME]
-p port Change server port [70]
-r root Change gopher root [/var/gopher]
-t type Change default gopher filetype [0]
-g mapfile Change gophermap file [gophermap]
-a tagfile Change gophertag file [gophertag]
-c cgidir Change CGI script directory [/cgi-bin/]
-u userdir Change users personal gopherspace [public_gopher]
-l logfile Log to Apache-compatible combined format logfile
-w width Change default page width [76]
-o charset Change default output charset [US-ASCII]
-s seconds Session timeout in seconds [1800]
-i hits Maximum hits until throttling [4096]
-k kbytes Maximum transfer until throttling [4194304]
-f filterdir Specify directory for output filters
-e ext=type Map file extension to gopher filetype
-R old=new Rewrite the beginning of a selector
-D text|file Set or load server description for caps.txt
-L text|file Set or load server location for caps.txt
-A admin Set admin email for caps.txt
-nv Disable virtual hosting
-nl Disable parent directory links
-nh Disable menu header (title)
-nf Disable menu footer
-nd Disable dates and filesizes in menus
-nc Disable file content detection
-no Disable charset conversion for output
-nq Disable HTTP-style query strings (?query)
-ns Disable logging to syslog
-na Disable autogenerated caps.txt
-nm Disable shared memory use (for debugging)
-nr Disable root user checking (for debugging)
-d Debug to syslog (not for production use)
-v Display version number and build date
-b Display the BSD license
-? Display this help
Setting up a gopher site
========================
After succesfully installing Gophernicus (see INSTALL) you need to set
up the gopher root directory. By default Gophernicus serves documents
from /var/gopher so start by creating that directory and making sure
t's world-readable. Then, simply add files and directories under your
Lynx) and open up this URL:
That's it, your first gopher site is now up and running. If the links
on the root menu don't work make sure you are using the -h
nstead of - see INSTALL).
Security
========
Gophernicus has been written with high security in mind. There should
be no buffer overflows or memory allocation problems so it should be
However, the security settings (which are non-changeable) are so strict
that you need to keep one thing in mind. Gophernicus will only serve
enough, all files and directories MUST be world-readable or they are
Gophermaps
==========
By default all gopher menus are automatically generated from the
content of the directory being viewed. If you want to have
nformational text along with the files, or if you want to completely
Gophertags
==========
A gophertag file can be used to virtually rename a directory. Let's
assume that you have a directory called "foo" somewhere - it will
be listed as "foo" in all automatically generated menus. Now if you
create a file foo/gophertag and put the text "bar" into it the menus
useful for creating descriptive names for directories without
littering the file system with spaces and weird characters.
=====================
Gophernicus supports users personal gopherspaces. If a user has
that directory.
Virtual hosting
===============
Gophernicus supports virtual hosting, or serving more than one logical
To enable virtual hosting create one or more directories under your
Almost.
To make gopher clients work properly with virtual hosting, create a
character to create a list of all available virtual hosts (see
README.gophermap). The generated virtual host links will be created so
that standard gopher clients will find the correct domain even when
they don't specifically tell the server which host they're trying to
CGI support
===========
Gophernicus supports most parts of the CGI/1.1 standard. Most standard
CGI variables are set, and some non-standard ones are added.
By default all scripts and binaries under any directory called
/cgi-bin/ are executed as CGI scripts (this includes cgi-bin
s marked executable it is also processed as an CGI script.
As with regular files, CGI scripts must be world-executable (and
Output filtering and PHP support
================================
t on by using the -f option, creating that directory
and creating one or more scripts in there named by either the file
file to client the output filter script is executed with the
original file as the first parameter and the output of the script
s then sent to client.
For PHP support install the CLI version of the PHP interpreter and
then symlink (or copy) that binary to the directory specified with
-f option using the destination name "php".
$ ln -s /usr/bin/php5-cli /usr/lib/gophernicus/filters/php
After that all files with the php suffix will be "filtered" through
the PHP command line interpreter. In other words, PHP starts working.
And don't use the CGI version of PHP as it outputs HTTP headers the
Charset support and conversions
===============================
Gophernicus supports three charsets: US-ASCII, ISO-8859-1 and UTF-8.
All textual input is internally upconverted to UTF-8 and then
conversion is input autosensing which means that you don't have to
t's all detected automatically.
With standard gopher clients this is a bit of a problem as your text
files WILL be converted to 7-bit US-ASCII. This means that all 8-bit
charaters WILL BE LOST. This decision was made because no gopher
client that I tested was reliably cabable of decoding anything else
than pure US-ASCII. If you want to disable the conversion use the
"-no" option, or if you'd like to change the default output charset to
option.
Selector rewriting
==================
Selector rewriting lets you rewrite parts of the selector on the fly.
Well, not parts, but really just the start of it. And the rewrite
enging here is nothing like Apache's mod_rewrite as I was too lazy
to integrate any regex libraries... So, all it does is rewrite a
fixed string at the start of the selector to something else. This
existing deeplinks still work.
Examples:
-R "/~user=/~luser"
-R "/old-dir=/new-dir"
Session tracking and statistics
===============================
To enable virtual hosting with gopher (RFC1436) clients Gophernicus
tracks users and their session. As a side effect of that session
tracking, Gophernicus has simple throttling controls to keep nasty
users from killing your precious 120MHz PPC 604e server from dying
under the load. The throttling defaults are high enough that normal
The current sessions and other real-time status data can be viewed
by opening the URL gopher:///0/server-status . This status
view has been modeled after the Apache server-status which means
that it's possible to integrate Gophernicus into existing server
monitoring systems. To ease up such integrations, Gophernicus