Monarch Of The Hill - base infrastructure for computer-based puzzle contests
Go to file
J. Patrick Avery, Jr a186ddceec f451: remove some dirty words and update the dictionary 2018-05-17 11:41:02 -06:00
bin Look for "until" file to disable contest by time 2018-01-28 10:24:49 -07:00
docs Update documentation 2018-05-14 19:17:18 +00:00
example-puzzles Add a counting example puzzle 2018-04-12 14:58:12 +00:00
src Dockerize 2017-09-11 03:08:18 +00:00
tools f451: remove some dirty words and update the dictionary 2018-05-17 11:41:02 -06:00
www fix puzzles.html 2018-05-17 09:09:34 -06:00
.dockerignore More dockering 2017-09-11 16:12:22 +00:00
.gitignore Reworked some basics of how the Puzzle class works. Shouldn't look to different from the outside. 2016-10-17 13:24:54 -06:00
Dockerfile.moth Rewrite devel server to be more reliable, accept seed in URL 2018-05-11 21:48:10 +00:00
Dockerfile.moth-compile dev server now includes mothballer 2018-05-11 23:00:55 +00:00
Dockerfile.moth-devel Rewrite devel server to be more reliable, accept seed in URL 2018-05-11 21:48:10 +00:00
Dockerfile.package-puzzles Move to base alpine image so I can get PIL 2017-09-14 15:06:07 +00:00
LICENSE.md Change license to comply with LANL legal request 2017-09-08 20:58:33 +00:00
README.md Update README to emphasize devel server 2018-05-17 13:42:09 +00:00
devel.sh update usage message 2017-09-15 10:27:53 -06:00
install.sh Make CGIs executable on installation 2017-06-17 06:27:01 +00:00
setup.cfg devel-server use new Puzzles obj. Needs cleanup. 2016-10-18 05:02:05 +00:00

README.md

Dirtbags Monarch Of The Hill Server

This is a set of thingies to run our Monarch-Of-The-Hill contest, which in the past has been called "Tracer FIRE", "Project 2", "HACK", "Queen Of The Hill", "Cyber Spark", and "Cyber Fire".

Information about these events is at http://dirtbags.net/contest/

This software serves up puzzles in a manner similar to Jeopardy. It also tracks scores, and comes with a JavaScript-based scoreboard to display team rankings.

Getting Started Developing

You'll want to start out with the Development Server.

More on how the devel sever works in the devel server documentation

How everything works

This section wound up being pretty long. Please check out the overview for details.

Running A Production Server

Please submit a merge request to improve this section ;)

How to install it

It's made to be virtualized, so you can run multiple contests at once if you want. If you were to want to run it out of /srv/moth, do the following:

$ mothinst=/srv/moth/mycontest
$ mkdir -p $mothinst
$ install.sh $mothinst

Yay, you've got it installed.

How to run a contest

mothd runs through every contest on your server every few seconds, and does housekeeping tasks that make the contest "run". If you stop mothd, people can still play the contest, but their points won't show up on the scoreboard.

A handy side-effect here is that if you need to meddle with the points log, you can just kill mothd, do you work, then bring mothd back up.

$ cp src/mothd /srv/moth
$ /srv/moth/mothd

You're also going to need a web server if you want people to be able to play.

How to run a web server

Your web server needs to serve up files for you contest out of $mothinst/www.

If you don't want to fuss around with setting up a full-featured web server, you can use tcpserver and eris, which is what we use to run our contests.

tcpserver is part of the uscpi-tcp package in Ubuntu. You can also use busybox's tcpsvd (my preference, but a PITA on Ubuntu).

eris can be obtained at https://woozle.org/neale/g.cgi/net/eris/about/

$ mothinst=/srv/moth/mycontest
$ $mothinst/bin/httpd

Installing Puzzle Categories

Puzzle categories are distributed in a different way than the server. After setting up (see above), just run

$ /srv/koth/mycontest/bin/install-category /path/to/my/category

Permissions

It's up to you not to be a bonehead about permissions.

Install sets it so the web user on your system can write to the files it needs to, but if you're using Apache, it plays games with user IDs when running CGI. You're going to have to figure out how to configure your preferred web server.