The Oddmuse Wiki Engine

Wikis are fun and useful. Try one on for size by installing Alex Schroeder's Oddmuse.
Oddmuse Features

Oddmuse is a single Perl script. This makes basic installation straightforward and supports another of Schroeder's project goals: to keep Oddmuse simple and easy to use. The potential loss of flexibility is offset by Oddmuse's extensibility. As evidence, you can find a list of available modules on the project Web site.

Aside from the ordinary, requisite wiki features, such as automatic tracking of recent changes, powerful linking syntax, revision control and visual diffs of revisions, Oddmuse has a number of notable features and advantages. One of the first things that impressed me about Oddmuse was the quality of its documentation. Schroeder makes abundant documentation in an assortment of languages a priority, and it shows. Conveniently, he gets to use the tool he's documenting to write and maintain the documentation. A visit to the Oddmuse project Web site is both a demonstration of the engine in action and an encounter with ample information about how to set up, use and customize it.

Figure 3. Oddmuse's visual diff makes understanding what has changed between revisions obvious and clear.

Figure 4. Typical History page. Checkboxes allow the user to define which page revisions to diff.

As someone who strives to adhere to World Wide Web Consortium (W3C) standards, I was pleased to note that Oddmuse produces valid HTML 4.01 Transitional. On a related note, Oddmuse integrates nicely with Cascading Style Sheets (CSS). If you're interested in syndication by way of RSS, Oddmuse supports both an outbound RSS feed for your wiki and inbound RSS feed aggregation.

An obvious concern for any wiki is page vandalism. What, after all, is to prevent someone from editing a page and intentionally making a mess of it in one way or another? If you want to take full advantage of wikis' biggest strength—namely, that anyone can create and edit pages—simply leave the system open and revert defaced pages as they appear. An attentive group of editors can catch vandalism by monitoring the RecentChanges page.

Figure 5. Typical RecentChanges Page

If, on the other hand, you prefer to forgo the advantages of open editing and would prefer to prevent vandalism in the first place, Oddmuse provides two methods for doing so. You can lock specific pages or the entire site and use passwords to grant page editing permission to certain individuals. Your other option is simply to ban problematic users.

Oddmuse uses flat files for data storage rather than a database such as MySQL or PostgreSQL. A good argument can be made for why this is a strength, and an equally good argument can be made for why this is a weakness. On the one hand, using flat files instead of a database means more simplicity and less administrative overhead. On the other hand, databases provide advantages when it comes to data storage and retrieval. If you feel that you must have a database behind your wiki, then Oddmuse is not for you. However, if your concern is speed, it's worth noting that searches are reasonably fast, for instance, on the Emacs Wiki, which uses Oddmuse and currently has 2,242 pages.


The installation section of the Oddmuse Web site has links to the latest version of the script and guides to installing and configuring it. Basic installation is absurdly simple. Once you've downloaded the script, simply place it in your CGI directory and make it executable. It should work immediately. If it doesn't, consult the troubleshooting guide on the Oddmuse Web site.

Even if you have no plans to customize your wiki, you should make one important change before you do anything else. Namely, you should change the $DataDir variable in the script to the absolute path of the directory in which you would like Oddmuse to store its data. If you don't change this variable, Oddmuse uses /tmp/oddmuse as its data directory, and you could lose your data down the road.

Another step you should take, no matter how simple or complex you intend to make your wiki configuration, is setting the administrator and editor passwords. The variables to change are, respectively, $AdminPass and $EditPass. Because the passwords are stored in plain text, the security of your wiki is only as good as the security of your server in general. Nonetheless, you should pick strong passwords.

Although the basic installation provides a fully functional Oddmuse wiki and may be all you need, you might want to consider the more-advanced installation. I chose the more-advanced installation for the Oddmuse wikis I've set up recently, and I've found that the added flexibility is well worth the trivial amount of additional effort required during its setup.

First, I used the wrapper script strategy clearly explained on the Web site. This strategy eliminates the need to define the data directory pathname every time you upgrade the script. Second, I used an external configuration file, and in it I specified an external CSS file.



Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Spam blocking in OddMuse

Bayle Shanks's picture

OddMuse also has an excellent spam-blocking system, including a list of "blacklisted content" (lists of regular expressions which cannot appear in posts), and a way to back out recent changes which weren't blacklisted at the time but which now are (because you just updated the blacklist). There is also a script which can be run as a cronjob to automatically merge in someone else's content blacklist, allowing the creation of federated/network blacklists -- for instance, you can keep up-to-date by merging in the OddMuse documentation wiki's blacklist.

(for technical reasons I only update the blacklist manually on my personal website, but on other sites I administer I use the cronjob, and it's amazing how little spam gets through -- spam that does get through is easily taken care of by updating the blacklist and running the de-spammer)

wiki problem

Anonymous's picture

Anybody who can tell me how to make a wiki page