Disable the default site in Apache's configuration automatically
Add --admin-password argument to install.py

Useful for scripted installations for testing purposes, where the password
isn't particularly secret or sensitive.
Add --headless argument to install.py/upgrade.py

Causes all defaults to be selected automatically, and any other request
for input causes the installation to fail.  Primary use-case is scripted
installation for testing purposes.
Add --skip-testmail-check argument to install.py

This argument disables the "Did the test email arrive correctly?" question
after the test email has been (seemingly) successfully sent.  Useful when
installing as part of testing; the testing framework will catch the email
and check that it was correct, but doesn't want to have to tell the
installation script whether it arrived correctly.
Fix criticctl's validation of role names provided on command-line

The validation of roles specified using the --role parameter was inverted;
all valid roles were rejected.
Add <title>News</title> on /news
Change document title on /login to "Sign in"

This matches the title in the page content.
Don't run migration scripts that existed when Critic was installed

For most migration scripts this doesn't matter; they are (and will
continue to be) written to be harmless or no-ops if run when they don't
need to be run.

But for migration scripts that add news items it does matter.  Without
this change the first time Critic is upgraded after installation, all
existing migration scripts would run, and all migration scripts that
add news items would add their news items, despite the news being old.

This is not the end of the world, but is a bit unexpected.

Running DB schema migration scripts also triggers the warning about
the DB schema being modified before the prompt asking whether to make
a dump of the database, and changes the default answer in that prompt
to true.  This is of course just unnecessary if the DB schema will in
fact not be modified.
Install python-bcrypt unconditionally when --auth-mode=critic
Make use of bcrypt package during installation more robust

Importing the bcrypt package sometimes fails if we just installed it.
To work around this, we can start a child-process and import (and use)
the package in it instead.
Fix OperationFailureMustLogin exception

Both its __init__() and __str__() incorrectly used

  super(OperationFailure, self)

to get the "base class instance" of 'self', but this returned instance
belonging to the base class of OperationFailure, which is Exception,
meaning it accidentally ended up bypassing its immediate base class.

Also, OperationFailureMustLogin.__str__() was completely redundant; it
meant to redirect to its immediate base class's __str__(), but the
easiest way to do that is of course to not override __str__() in the
first place.
Run "apt-get update" (once) before running "apt-get install"

If not done, "apt-get install" might try to download out-of-date versions
of packages that no longer exist in the archive (mirror.)
High-level testing framework

Framework for automated installation and "black-box" testing of Critic
running in a VirtualBox instance.