Multics > About
01 Jan 2021

Maintenance tasks

History | People | Library | Sites | About Search

Tom Van Vleck

This file describes maintenance tasks for (These notes are a brain dump and need organizing and clarification.)

Design principles and Rules for maintenance and content of are listed in Design Principles for the Multicians Website.

The site build process and tools for are listed in Build process for the Multicians Website.

1. Roles -- Who Does What

2. Hosting for

Hosting for this site is provided by the hosting site admin, who pays the domain name registration fees and web hosting fees as a contribution to the online community. The web site has been hosted at Pair Networks Inc in Pittsburgh PA since 2001. Pair is referred to as the Information Service Provider (ISP).

We are limited in both storage space and bandwidth as a result of Pair's account parameters. The editor will take whatever steps are necessary to avoid exceeding the (fairly high) limits imposed by the ISP, since this could cost the editor a lot more money than he can spare.

The ISP has a fairly reasonable policy on "slashdotting" but more than one in a month could be a problem.

We are also bound by Pair's Acceptable Use Policies. So far this has not been a problem.

The advantages of hosting at Pair are

Pair has been in business since 1996 and says it does not plan to change management, merge, or be sold.

Pair supports

3. Tasks for Site Editor

Files on the site include graphics and PDFs, HTML provided by others, and HTML compiled from HTMX.

The open source expandfile tool translates HTMX to HTML.


Translation is invoked using the Unix make command for any file whose source is newer than its object.

After translation, the Makefile invokes HTML Tidy to warn if there are errors. Cure these and re-install.

Web pages on are written in .htmx source files that contain extended HTML for the page's contents. The source file ends by invoking a wrapper that formats the page with standard layout, headings, and CSS. expandfile creates a .html object file.

3.1 Updating the Main Page of

Edit multics.htmx in the source directory.

Execute make and then check the local copy of the compiled files. Fix any errors or warnings. Then execute make install to publish the new story.

make will automatically update the main page if other pages change that would change totals in the main page. See Makefile.

(explain how to add a photo to the sliding gallery)

3.2 Adding or Updating a Multician's Entry in multicians.html

Visitor Interface

A site visitor may use the Multician add/update form at mform.html to send mail to the site editor.

If the visitor has JavaScript enabled, changing the person name in mform.htmx sends an XHR (Ajax) request to mxregister4.cgi at to look for existing database entries in the m table and fill in the rest of the form. If multiple database entries match the partial person name, the form code presents a pick list.

When the visitor submits the completed form, this action invokes mxregister.cgi at, which sends mail to the editor with SQL rows for database input. (It doesn't update the database.) The mail looks like this:

  ('fooch,melvint', 'Fooch, Melvin T', 'User (MIT): stuff', '', '', 'mail 2020-04-01 11:54', '', 'Y', '', null),

  ('fooch,melvint', '', '', '2020-04-01 11:54'),

Alternatively, a Multician may send a mail message to the editor instead of using the form, or the editor may discover a Multician in some other publication, web page, or forum.

Editor Tasks

The editor verifies the form info, including whether the submitter is actually a Multics contributor. The editor may know the sender personally or know someone who does. They editor may send mail to the submitter and ask for details. The editor also has a standard form letter that says, "Sorry, liking Multics doesn't make you a Multician."

If a Multician's name or "did" contains apostrophes, they should be replaced by '. Loose ampersands should be replaced by &. Accented characters like the accented o in Corby's name must be replaced by character escapes such as ó.

The editor checks the URL if supplied, and may correspond with the submitter if it has a problem.

The editor adjusts the submitted "did" field to match terminology in other entries.. e.g. OU versus Oakland University, UC versus Calgary. Formatting tags such as <cite> and <em> in "did" fields canot be used: the user's browser will remove them when parsing the Ajax XML message. It is OK to use HTMX constructs such as {@page title@} to link to other site pages.

The editor checks the mail info add adds or updates the corresponding row in hiddenmail.sql in the source directory. When a new email address is added, the site editor must also log into the web account hosting control panel and add a mail forwarding recipe. See "mail reflector maintenance" below.

If a Multician has won an award or medal, the editor should add or update a row in the mxawards table in mxawards.sql in the source directory. For an award type not seen before, the editor must also add a row describing the award in the awards table.

When the editor executes make after updating loadm.sql or hiddenmail.sql, the Makefile will rsync updated copies of the m, mmail, and mgemail tables to the web hosting computer and then execute the remote command reloadm on the hosting computer via SSH. The reloadm command loads the SQL database on the hosting site with new copies of the m and mmail tables. Its output looks like this:

  total 892
  -rw-r--r--  1 thvv  users    7897 Apr 25 16:28 grpmail.sql
  -rw-r--r--  1 thvv  users   52710 Mar 31 19:44 hiddenmail.sql
  -rw-r--r--  1 thvv  users  258790 Apr 25 16:39 loadm.sql
  reloaded m on timayo
  reloaded mmail on timayo

Th editor sends a welcome/thanks email to each new or updated Multician.

3.3 Adding or Updating Multics Installation Information

Verify the site info and add or update the site's row in loadsites.sql in the source directory.

Update the site history if there is one. Write a new site history page if you have enough information to make it interesting.

Execute make and then check the local copy of the compiled files. Fix any errors or warnings. Then execute make install to publish the new story.,

3.4 Adding or Updating the Bibliography

Contributors send documents to the editor, or send URLs to online documents, or the editor discovers documents on the Web or scans paper documents. If a document file is provided, find space for a copy, and ensure that the document is readable, searchable, and small enough to load quickly. (As contributors to priovide non-proprietary file formats: e.g. no Word or PowerPoint; PDF is OK.) (Providing copies on the site avoids issues of other sites taking the document down or changing its URL in the future.) Ensure that the rights of the document creator are respected, and that the content is accurate and informational.

Add or update a row in table biblio in loadbib.sql in the source directory. Give this row a document identifier like "Smith100" with an author name and unique sequence number.

For each author of the document, add a row to table "authors" giving the document identifier, the author name as it appears in the document, and the ordinal position of the author name in the citation.

For each author name, ensure that there is a row in table "aka" that links the document-style name with the canonical "name" field in loadm.sql.

Executing make will load the SQL tables and regenerate the bibliography, the MTB index, the MCB index, the MSPM TOC, the MSB index, the MCR index, the MAB index, and the publication counts in the Multicians list. The Makefile will execute the shell script to check that there are no missing rows in the bibliography tables and that they match the Multicians table -- fix any errors and recompile. Then execute make install to publish the new files.

3.5 Adding or updating glossary entries

Edit or add paragraphs to g1.sql in the source directory. Use special tags in other files on the site to generate links to glossary entries and Multicians list entries, and to mark commands, pathnames, and code. One oddity: to insert a backslash in the output, you have to put EIGHT backslashes in the database file, because it gets expanded three times.

Execute make and then check the local copy of the bibliography. Fix any errors or warnings. Then execute make install to publish the new story.

3.6 Adding a New Web Page

Pages may be added to the site to provide additional technical and historical articles, personal stories, event reports, or other information about Multics.

The editor should ensure that the context of the page is clear to a broad audience, and that each new page fits into the rest of the site. See Design Principles for the Multicians Website.

Contributed Text

If a contributor sends information in plain text, convert it to simple HTMX. Change any & characters to &amp;. change any < to &lt;, change any > to &gt;, change any { to \{, and change any \ to \\. If the contributor provided plain text with empty lines as paragraph separators, convert those to </p><p>. Convert bulleted lists to

<ul>  <li> ... </li> </ul>

You can use HTML Tidy on your converted file to have it generate canonical HTML.

If you're provided text in Microsoft Word, just copy the text to the clipboard and paste it into a simple text file.

In either case, turn it into a HTMX file by and wrapping the contributor's text in a

%[*block,&body,^END]% ... user's text ... END %[*include,=pagewrapper.htmi:]%

.. and setting the variables title, description, keywords, and headingdate with the *set builtin.

Contributed HTML

If a contributor provides a story in HTML, turn it into a HTMX file by removing the HEAD section and <BODY> tags, definihg a few standard variables with *set, and wrapping the body text in a

%[*block,&body,^END]% ... user's text ... END %[*include,=pagewrapper.htmi:]%

CSS Definitions

The standard site CSS definitions will be included by the page wrapper; if the story uses specialized CSS constructs, create a

%[*block,&extrastyle,^END]% <style>   user style definitions   ... </style> END

The extratyle block can be used to insert anything into the HEAD section,including JavaScript references or functions. Use <p> and </p> around paragraphs and similar simple markup ... HTML Tidy should find no errors or warnings in the converted file.

Definition of Variables

At the top of the HTMX file, specify

%[*set,&title,="(page title)"]% %[*set,&description,="(page description)."]% %[*set,&keywords,="(keywords)"]% %[*set,&headingtitle,="(short page title, without 'multics')"]% %[** Copyright (c) (year), (author) **]% %[*include,=mxlib.htmi]%


If the story is a long one, using H2 and H3 headings may make it easier to follow. (H1 is the page title, generated by the wrapper from the headingtitile or titile variables.) References to other pages on the site, or to external documents, may help readers understand the relation of this page to other information on the Web.

If possible, include pictures. Getting useful pictures with sufficient pixels may require a mail discussion with the submitter. User supplied pictures will often need color and contrast adjustment to display well in HTML. Use macros to generate IMG tags for pictures, as described below.

Adding a Story to the Site

Create new files storyname.html in the object directory and storyname.htmx in the source directory.

Do the other "new page" operations below. Adding the page to loadpages.sql with a nonblank "site" entry and a kind of "people" triggers its inclusion in the stories index. Set the nextstory field of an existing page to point to this one, and the nextstory field of the new entry to the old value, so "Next Story" link works. (touch the source of the existing page so its navigation links will be regenerated also.)


Spell check the local copy of the file and correct any errors. Execute make and then check the local copy of the compiled files. Fix any errors or warnings. Then execute make install to publish the new story.

3.7 Adding or updating other class 2 and class 3 pages

Edit or add filename.htmx in the source directory. Don't edit the HTML object files directly.

Search the rest of the site to see if links to the new page should be added.

Use the wrapper macros: set title, description, keywords, and headingdate, then define a block called body that contains the HTML of the content. At the bottom, include pagewrapper.htmi to cause the content to be formatted with standard headings and footers. If necessary, use optional blocks extrastyle for extra lines in the HEAD section, and extratail to add content to the footer.

Use the getimgtag, getimgdiv, getfancybox_li, or getimgpopdiv macros for references to images. For new images, make a 150x150 thumbnail and a -2x version of the file if possible, and update multhumbs.sql. If the images have picture of Multicians, add the appropriate 'gallery' field to the multhumbs row.

When a new HTML page is added,

Search the rest of the site to see if links to the new page should be added, and if so, add links referencing the pages table entry.

Spell check the local copy of the new file and correct any errors. Execute make. Fix any errors or warnings. If you made major updates, use W3 validator to check the new local copy of the file. Then execute make install to publish the new or updated story.

3.8 Adding or updating class 4 pages (formatted by others)

Either convert the file to a class 3 page, or

Place the HTML file directly in the object directory. Edit it to insert navigation to the rest of the site at the bottom, so that if a visitor finds the file from a search engine, they can find the rest of the site.

Add a row for the file to loadpages.sql and an entry in makemxtarextrafiles in the source directory.

Optionally edit the HTML to add mxstyle.css for uniform heading styles if this doesn't mess up the appearance of the document; discuss this with the file author.

Change mail addresses in the HTML to HREF links via the Multicians database, so that the submitter's mail address cannot be scraped by spammers.

Verify that the local copy of the file looks OK. Execute make install to publish the page.

3.9 Managing Images

Images are stored in directory /mulimg in the object directory. (This directory is linked to from the source directory so that image macros can get the size of the image.) They can be .jpg, .gif, or .png files.

3.10 Adding or Updating an Offsite Link

For an HTML link to a file not on used in article text, edit loadext.sql to add or modify a row in the external links table. This row specifies an internal tag and the lin target URL. Then generate an HTML link to the external file, using the {:{!tag anchor text!}:} syntax. The globe icon, etc will be generated by expandfile.

Multicians home page URLs are specified in a row in the m table defined in loadm.sql.

External URLs of items in the bibliography are specified in a row in the biblio table defined in loadbib.sql.

After editing the SQL files, execute make install to recompile source files that reference them. In some cases it may be necessary to touch a source file to cause it to be re-expanded.

Check every few months for dead links. I use the Mac tool Integrity, and correct the links if possible.

3.11 Maintaining Links in HTML files

Use the bitsaversmultics HTMX macro to generate HTML links to scanned Multics manuals at,
e.g. %[*callv,bitsaversmultics,="AN61A_storageSysPLM_Sep78.pdf",="AN61, Storage System PLM"]%.

Use the mitsourcefile and mitsourcearc macros to generate links to Multics source at MIT.
e.g. %[*callv,mitsourcefile,="Multics/ldd/include/flagbox.incl.pl1",="flagbox"]%.

Generate other external links using the HTMX construct {!tag anchor text!} which looks up "tag" in the external links table and inserts an HTML link with globe icon and TITLE tag.

Generate multicians links using {[tag anchor text]} which looks up "tag" in the multicians table and inserts an HTML link with TITLE tag.

Generate glossary links using {{tag text}} which looks up "tag" in the glossary table and inserts an HTML link with TITLE tag.

Generate internal links using {@tag text@} which looks up "tag" in the pages table and inserts an HTML link with TITLE tag.

Use {:text:} to format items with the "cmd" class, {=text=} to format items with the "pathname" class, {+text+} to format items with the "code" class, all defined in mxstyle.css.

3.12 Adding or updating a PDF file

Ensure that the PDF has OCR text so that indexers can see its content. If not, try using a utility such as Acrobat to add it. Do not obsess over accuracy.. some faded documents or those with strange fonts will convert poorly.

Place the file in the object directory, with no correspoding source file.

Add its name to loadpages.sql. For the "source" use something like ../multics/foo.pdf -- that is, the file is both source and object. This entry ensures that it is in sitemap.html, and that the date modified displayed is that of the PDF file.

Add its name to makemxtarextrafiles in the source directory. This ensures that the PDF file will be included in the TAR of the whole site.

Execute make install to publish the page.

3.13 For All Changes

Run W3 Validator on each new class 1-3 HTML file. It checks for more errors than HTML Tidy. (Both Tidy and W3 Validator fuss about some things that we include anyway: for example, the Facebook link code and the Google search code use non-standard HTML, and we include a few deprecated CSS constructs necessary for correct display in old browsers like MSIE.)

Update loadc.sql with a one-line description of each change, and execute make to generate changes.html describing what's new. Changing this file will regenerate the HTML site map, RSS feed, and Google sitemap.xml.gz files. (Some minor edits, typo corrections, etc. do not need a line in 'changes.' For intermal machinery changes, enter a line in loadc.sql indicating that we did make a change but that changes.html need not be updated.)

The htmx, sql and other source files are stored in a local git repository (graphics, generated files, and binary files are not included). The make install command will do a git status to remind you to do a git commit -a with a summary of changes. Currently this repository is local to the site editor's machine.

To make a tarfile of the whole site, first touch makemxtarextrafiles and then do a make install. This sends the shell script make_mx_tar to the ISP. Run that script from the ISP command line.

To manage the Google Custom Search box, log into Add and delete sites that are searched.

3.14 Run Lighthouse After Major Changes

Occasionally run Google Chrome Audit (Lighthouse) after significant changes.

4. Monitoring Implementation Features

Editors and admins must keep aware of and respond to the following issues:

5. Smoke Test by Site Editor

Before updating the hosting site, check the appearance of the local copy of the site. Check major updates in Firefox/Mac, Safari/Mac, Chrome/Mac. (I probably ought to check Chrome and Edge on Windows also, but I do not have a Windows 10 machine.) Also check when new browser versions of Chrome, Firefox, and Edge are released. Run the W3C HTML5 Validator on a sample of pages, in case the validator changes its criteria or the HTML language changes (which happens sometimes).

Check for:

If all looks OK, execute make install.

Occasionally check that the actual online site loads correctly and looks right, to make sure that nothing is down or misconfigured at the ISP. Especially check this after making any kind of change to the web server configuration or file access controls.

6. Details to Check on Hosting Site When Deploying

Hosting site admins should ensure the following.

Hosting site admins can execute shell script make_mx_tar to generate a tarfile for transmission to mirror sites when needed.

7. Web Report Maintenance

A CRON job running on the main hosting site at the ISP runs daily at 6AM. (This time is chosen so that Pair's logextractor has time to prepare the input.) The CRON job executes a script called daily which in turn runs /wtx/

Pair's log processing extracts Apache Combined Format web server logs from the shared server's log for each of my domains hosted on the ISP account. The daily logs are placed in the directory /www_logs in the account's home directory.

The directory /wtx has Super Webtrax (SWT) installed. This program has been in use since 2006. The script /wtx/

The output from the CRON job is automatically mailed to the site administrator.

Recovering from Problems With the Web Report

(I find that the web report job almost always works fine, unless I am traveling somewhere with no Internet access.)

If the daily web reporting job encounters problems, the mail message from the CRON job will contain error messages or be missing. The process the site administrator follows will depend on what went wrong.

If the mail message from the cron job did not arrive, is the hosting server up? Was it up when the job should have started? Perhaps the job ran OK but the host mail server was down or backlogged, or the mail was sent OK but was spam trapped before reception.

It the mail message from the cron job did arrive, see if it looks OK. It should end with a "done".

If the hosting server is down, check the ISP web page for outages, or contact support. If it was down and came back up, you can just wait a day, the job should process all available logs.

If the message from the cron job has lines like

  Configuration loaded Fri Nov 27 05:53:39 EST 2020, webtrax version S24
  3.11 real         2.14 user         0.07 sys
  load data
  perl ./tools/ -sql -config swtconfig.htmi templog
  time: command terminated abnormally
  98.05 real        97.68 user         0.20 sys
  User defined signal 1
  **** failed: perl ./tools/ -sql -config swtconfig.htmi templog
  *** swt failed, error 127
  *** moving comb.20201126.gz to badlogs and bailing out
  *** recovery will depend on how far swt got

This is an example of a process in the cron job running so long that Pair's "reaper" utility killed it. Often a retry will work.

Log into the hosting server. crontab -l should show daily job and that file should exist. Check dates modified in wtx: if there are some for today, then the job did something.

Check /badlogs to see if /wtx/gen_swt2 encountered a failure and moved the processed log to /badlogs.

In /www_logs, gen_swt2 executes nice combinelogs to combine multiple webserver logs into comb.mmddyy.gz check /www_logs for comb.mmddyy.gz -- if found, then the cron job did not pick up the logs

Look at the script swt to see how far it got. It executes functions from Check /wtx for a file templog -- if it is there, then the CRON job failed loading the database in function loadusage. Check /wtx for a file comb.* -- if it is there then the CRON job probably crashed.

Try to rerun the job.. a second run may succeed because of caching results. Check /badlogs for a file comb.mmddyy.gz. If it is found, there should be a problem message in the mail from the CRON job, saying that the job has saved the input file it was working on in /badlogs. If this happens, fix the problem and then copy the bad log file to /wtx as www.mmddyy.gz and execute ./daily.

8. Site Maintenance Tasks for Hosting Site Admin

The main hosting site is currently at the ISP The account has a control panel that manages incoming email, domain names, billing, and other details. The domain name is registered at and this site has its own password and control panel. mail reflector maintenance

The procmail script multicians.procmail in the home directory of the account hosting redirects selected mail messages.

See multicians-org.html for details.

We are trying to phase this facility out since the ISP may not support it forever, and because less expensive plans at the ISP do not support procmail.

The redirector script is automatically generated by expandfile with procmail.tpt from the multicians table by the Makefile when loadm.sql is updated.

When a new address is added to hiddenmail.sql, it must also be added to the list of valid entries in the ISP's mail recipe control panel. This allows our site hosting to do SMTP Reject of spam mail sent to invalid addresses at and greatly decreases the load on the server.

Mail Forwarding Repairs

Very occasionally, Pair screws up the mail forwarding. This happened in 2004, 2007, 2014, and 2019 (often when I was traveling). Usually this happens when some other problem, such as disk errors or a spam attack, causes web server load to spike. Inexperienced sysadmins then panic, notice multiple procmail processes running (checking incoming mail for spam), decide that procmail is the problem, and either break .procmailrc or set access on /usr/local/bin/procmail to null. If they choose the first option, then all incoming mail including spam gets dumped into a single file with no filtering. If they choose the second option, then all incoming mail is bounced with a permanent fatal error from MAILER-DAEMON. The site editor must then call Pair support on the phone and teach them their jobs, which takes about an hour on hold. The right solution is usually to fix any I/O problems, and then wait 10 or 15 minutes for procmail to clean out the mail queue. Recovery from such a mess depends on how they panicked: in the first case, this means taking the huge mailbox and piping it through procmail; in the second case, the mails sent are lost forever, but Pair support can grep the qmail log to find out the senders of messages that were discarded.

Domain name management

The domain name is registered at, which has a somewhat cryptic website. Some domain name operations need to be done partly with the domain registrar site and partly with the Pair control panel.

Pair website management supports https access and automatic renewal, for free, in the Pair control panel. So far, it has worked with no problems. It is valuable to enable this feature, since Google search rankings penalize non-https sites.

Search Engine Optimization

Most search engine optimization activity is not relevant to (and some of it is bullshit). Keyword stuffing and fake links to our site from link farms are a very bad idea. Make sure that META DESCRIPTION tags are accurate and incorporate the words that visitors might use in a query. It is worth testing pages occasionally using Chrome Lighthouse. Do cmd-option-C and pick Lighthouse in the top toolbar. Click "generate report" after turning off SEO and selecting "Desktop." Performance should be 100, Accessibility and Best Practices should be high. This report is just a guide.. for instance, it complains about jQuery's version, but we don't use any of the vulnerable features.

Google Webmaster Tools

We have a Google Webmaster Tools account. They sometimes send warnings that our pages have problems they detected when indexing our site. Some of these are issues that should be fixed.. others are not useful. I have been ignoring most of the "click targets too close together" because other click targets nearby are OK.

We don't use Google Analytics, because it would inject JavaScript into our pages, and because users may not wish to have Google tracking their web browsing. For the same reason, we removed the code that creates a Facebook "like".

9. Social Media

alt.os.multics FAQ Maintenance

Currently the site admin causes a short FAQ posting to alt.os.multics on the first of every month. At some point we will stop doing this, when USENET is no longer interesting.

In order to post to USENET you need an account at some USENET service. Currently we have a free account at

To post the short FAQ, execute make auto2 on the first of each month. This operation invokes a Perl program that updates the alt.os.multics FAQ with totals from the website. Multicians group administration

If applicants meet the group criteria (Multics contributor or Multics user) accept them. Otherwise send a form letter. Use the 'admin' control panel of to approve new applications. Add the user's subscription email to grpmail.sql (nothing uses this table yet).

LinkedIn Multicians group administration

If applicants meet the group criteria (Multics contributor, including user) accept them.