How It Works
So one thing you don't find in most blogs is a peel-back of how the blog actually works. Even the current Blosxom page (which I think is a copied static rendering, without any actual running Blosxom anymore) fails to give a whole lot about how it was configured.
I'd like to get that out of the way first. This is currently running
blosxom-2.1.2
powered by whatever my ISP has installed as perl-latest
(today that is v5.24.3, but they update as needed) on a NetBSD 8.1
server (subject to updates) with Apache/2.4.41 (and, again, subject to
updates). From my point of view, what I get is a directory in which I
can put things, including .htaccess
files and system tools
and libraries I can use. But I don't have root, I can't configure Apache
beyond what's allowed in .htaccess
, and I'm not installing
new system tools and libraries.
So what's in the .htaccess
files? At the root of /qz/ I
have this:
DirectoryIndex blosxomSetHandler cgi-script AddOutputFilterByType DEFLATE text/html RewriteEngine on RewriteCond %{HTTP_HOST} !^qaz.wtf [NC] RewriteRule ^(.*) https://qaz.wtf/qz/$1 [R=301]
The first line makes the extension-less blosxom
script run
for an access that doesn't go to a particular file. Next, I make that
script behave as a CGI program, then I enable compression for HTML
files, finally I turn on the "RewriteEngine" and set a case insensitive
match on the hostname, if it's not "qaz.wtf" then redirect to the
qaz.wtf form with a 301 "permanent" status. This will update people
(search engines) that have the old panix.com URL to use the new one and
also get people to not use "www.qaz.wtf". Don't get a seven character
domain name and use it as an eleven character name is my motto.
Inside other directories I have different .htaccess
rules
like setting a GIF for directory index in the images directory; adding a
"deny from all
" rule in the data directory, blocking
access to a few other directories, plus one more more I'll share below.
What I will show you, if you want, is the plugins/ directory and the code in there, as well as notused-plugins/ which has some others. Given that Blosxom is a rather dead tool, finding some of those required a bit of digging. I've included an unconfigured copy of the Blosxom CGI script in the notused-plugins directory, too. The actualy configuration in the script is pretty trivial, mostly just setting the directory names and base URL. Mine looks something like this:
# What's this blog's title? $blog_title = "QZ redux"; # What's this blog's description (for outgoing RSS feed)? $blog_description = "Queasy, a blog."; # Base installation $installdir = "/htdocs/userdirs/eli/qz"; # Where are this blog's entries kept? $datadir = "$installdir/data"; # What's my preferred base URL for this blog (leave blank for automatic)? $url = "https://qaz.wtf/qz/blosxom"; # How many entries should I show on the home page? $num_entries = 4; # Where are my plugins kept? $plugin_dir = "$installdir/plugins"; # Where should my plugins keep their state information? $plugin_state_dir = "$plugin_dir/state";
That leaves out all the settings I didn't change. Besides the configuration
of the software, there are the "flavour" templates for Blosxom. These are
sets of templates with the same suffix (which is the flavour name). But
just because the suffix looks like a file type, doesn't mean it is. The
content-type.
suffix
file gives the type
for that flavor. Both the .html
and 1993
flavors in mine are HTML. One is kinda modern, should be HTML 5 but
probably doesn't validate and the other is HTML 2.0. Take a
gander at the templates I have today, 23 Feb 2020:
/qz/flavours/. I also include a readable copy of
the htaccess file there, showing how I disabled the HTML mimetype. It
was moderately tricky, so I'm sharing.
Lastly, you can look in the CSS directory for my stylesheet(s). At present, there's just the one.
Right now, I code these blog entries by hand in vim
, but
I may write myself a helper tool or find some sort of markup-to-html
plugin. Probably not markdown
markup, because I'm really
not a fan of how links/images/dictionary lists work in that system.
I'm almost certainly going to make a from-my-phone method to create
entries, and when I do, I expect to create posts explaining how those
tools work.
I want to show how the sausage is made.