Want to contribute?
Draw a logo for the Grumpy project!
Grumpy - The most grouchy http & gopher server out there!  


Introduction

Grumpy web server screenshot Grumpy is a simple, easy to install, open-source web & Gopher server for Linux and Windows. Grumpy is not a standalone daemon - it requires an inetd-compatible superserver to work (already provided in the Windows package). Why one would prefer Grumpy over any other web server, like Apache, Lighttp, Jigsaw...? Well, I wrote Grumpy primarily for fun, but it appears to have become a rather strong web server with some very good points: easy to install, lightweight, secure (as it doesn't support any dangerous features)... Besides that, Grumpy supports the gopher protocol, too, and can be easily used as a secure https server. The Grumpy web server is meant to be used for small projects, like home servers, some intranet applications, small-sized companies, etc. All the configuration is done via a single configuration file, which has very reasonable defaults. That makes Grumpy easily maintainable, and allows the administator to have a full knowledge of what features are allowed/enabled on the server. Grumpy supports CGI applications, and is entirely written in FreeBASIC.

How to install Grumpy on my system?

Installing Grumpy on a Linux host is very easy. On the first place you will have to copy grumpy to /sbin/, and grumpy.cfg to /etc/. As I said previously, Grumpy needs an inetd-like superserver to work. If using the basic inetd, you will have to add the following line to /etc/inetd.conf:

www   stream   tcp   nowait   www-data   /sbin/grumpy   grumpy

The important things here are: "www", which is the name of the service to bind to. You will have to check if the www service has its entry in /etc/services. "www-data" is the name of the user which has to be used to run the grumpy process. Obviously, you will have to check if the www-data user exists on your system, and let him write to /var/log/grumpy.log, read from /etc/grumpy.cfg and execute /sbin/grumpy. When the inetd configuration is done, you'll have to restart the superserver (or the whole machine). Obviously, you will have to add a second entry for the Gopher protocol (if you plan to serve Gopher, too).

For any further technical informations, go read the manual!

What's this inetd thing you're talking about?

Primarily, inetd is used to spawn other daemons. It is sometimes referred to as the "Internet Super-Server" because it manages connections for several services. When a connection is received by inetd, it determines which program the connection is destined for, spawns the particular process and delegates the socket to it (the program is invoked with the service socket as its standard input, output and error descriptors). Running inetd for servers that are not heavily used can reduce the overall system load, when compared to running each daemon individually in stand-alone mode. A nice replacement for inetd is xinetd, which offers a more secure super-server service.

Legal stuff

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Download

Version Files Description
v0.21
07 Feb 2011
Binary release (Linux)
Binary release (Windows)
Source files
Changelog
Version 0.21 provides support for big files (up to 8EiB), and includes a basic support for HTTP language negotiation. → 3'155 lines of code
Older releases
(not recommended, it's probably a better idea to use the latest version instead)
v0.20
16 Mar 2010
Binary release (Linux)
Binary release (Windows)
Source files
Changelog
The v0.20 includes protection mechanisms against Slowloris-like attacks and bandwidth stealing. It also fixes some minor issues related to partial downloads handling, and provides an optional MD5 checksumming of served files. → 3'448 lines of code
v0.19
08 Jul 2009
Binary release (Linux)
Binary release (Windows)
Source files
Changelog
The v0.19 brings two major features: CGI support on the gopher server, and MIME support for content-type HTTP declarations (over 60 MIME types are detected automatically). → 2'804 lines of code
v0.18
26 Jun 2009
Binary release (Linux)
Binary release (Windows)
Source files
Changelog
The major change of v0.18 is the support of UTF-8 encoding in filenames. Of course, there are other changes as well: Gopher links to HTTP URLs are more tolerant now for dumb gopher clients, the http directory listing code has been cleaned a lot, and I added some minor features (applying a custom CSS style to http listings, specifying alternative log files...). → 2'228 lines of code
v0.17b
15 Apr 2009
Binary release (Linux)
Binary release (Windows)
Source files
Changelog
I fixed a serious bug in the Gopher module. After having processed a Gopher request, the server wasn't closing the connection, and was processing that (gopher) request again via the HTTP engine, returning a HTTP 400 error to the gopher client. → 1'976 lines of code
v0.17
02 Apr 2009
Binary release (Linux)
Binary release (Windows)
Source files
Changelog
The code has been optimised here and there to be more portable, what permitted a Windows release to appear. A basic brute-force protection has been added to the http authentication module, the directory listing module has been greatly improved (much faster now), connection's logs contain the connection's duration, the gopher server is dropping some insecure requests and support for ranged http requests has been optimised. As usual, see the changelog for more informations. → 1'975 lines of code
v0.16
26 Feb 2009
Binary release
Source files
Changelog
Many improvements have been added to the support of the gopher protocol. As for the HTTP server, it is explicitly denying any CONNECT requests, adds a "Last-modified" header whenever possible, supports absolute URI requests, and may send some customized HTTP headers. See the changelog for details. → 1'696 lines of code
v0.15
25 Jan 2009
Binary release
Source files
Changelog
No change in the HTTP server in this release. I added a Gopher engine to the server, which makes Grumpy a HTTP and Gopher server now! → 1'448 lines of code
v0.14
14 Dec 2008
Binary release
Source files
Changelog
This version of Grumpy comes with some major changes: support for ETAG headers (allows client browsers to cache web content more efficiently) and support for CGI applications. Another nice improvement is that the remote IP is logged now in Grumpy logs. Besides all that, I fixed some minor issues related to GMT handling, the on-the-fly html generation and partial download support. → 1'296 lines of code
v0.13
09 Nov 2008
Binary release
Source files
Changelog
I fixed some general minor bugs, made few changes in the authentication module (auth rules are applied recursively now), and added the possibility to customize some 4xx error pages returned by Grumpy. → 1'015 lines of code
v0.12
21 Oct 2008
Binary release
Source files
Changelog
Mostly a "feature-rich" release. Many optimizations made Grumpy over 20x faster, I added a QoS support (bandwidth limitation), improved log handling, support for partial downloads, virtual hosts capabilities... → 952 lines of code
v0.11
13 Oct 2008
Binary release
Source files
Changelog
This release is a big step ahead. Several improvements have been added, the most interesting are: support for HTTP basic authentication (via a specific per-directory configuration file), support for the HEAD command, I added a security routine which performs some sanity checks on all requests, and the directory listing feature has been greatly enhanced (sorting entries, nicer color scheme, possibility to add descriptions via a descript.ion file, etc...). → 798 lines of code
v0.10
03 Oct 2008
Binary release
Source files
The first public release. It's a very bare (although functional) HTTP server. The only command it understands is GET. → 395 lines of code


Copyright © Mateusz Viste 2008 - 2010
Is the Grumpy server useful to you?
Donate or contribute!