Difference between revisions of "Overview of Problem Libraries"

From WeBWorK_wiki
Jump to navigation Jump to search
Line 1: Line 1:
== National Problem Library (NPL) ==
 
  +
== Installation instructions for specific operating systems ==
   
The National Problem Library contains problems from several of the File Based Problem Libraries, including all of the problems from the Arizona State, Rochester, Cal State Long Beach, University of Virginia libraries. It also contains most, if not all, of the problems from Union College, College of New Jersey, Dartmouth, Ohio State, Northern Arizona University, and Indiana University.
 
  +
These manuals offer command-by-command procedures (and fewer choices) than the general instructions. They are targeted at UNIX beginners.
   
In addition to merging these problem collections into a single collection, WeBWorK provides a different interface to these problems. Problems in the NPL are marked internally with metadata, and instructors can search for problems on the basis of this data. This mechanism is built into WeBWorK's library browser. In particular, one can search hierarchically by course, chapter, section. To a limited extent, problems have been indexed against sections of textbooks in which case an instructor can also search for problems on that basis. WeBWorK stores this information in a database, so part of the installation involves loading metadata into the database.
 
  +
* [[Administrator's Guide/Installation/WW2.4/Ubuntu 7.04|WeBWorK 2.4 on Ubuntu 7.04]]
   
=== Obtaining the NPL ===
 
  +
* [[Administrator's Guide/Installation/WW2.3/CentOS 5|WeBWorK 2.3 on CentOS 5]]
  +
* [[Administrator's Guide/Installation/WW2.3/Debian 4.0|WeBWorK 2.3 on Debian 4.0]]
  +
* [[Administrator's Guide/Installation/WW2.3/Fedora Core 7|WeBWorK 2.3 on Fedora Core 4]]
  +
* [[Administrator's Guide/Installation/WW2.3/SuSE 10.1|WeBWorK 2.3 on SuSE 10.1]]
  +
* [[Administrator's Guide/Installation/WW2.3/SuSE 10.2|WeBWorK 2.3 on SuSE 10.2]]
  +
* [[Administrator's Guide/Installation/WW2.3/Ubuntu 7.04|WeBWorK 2.3 on Ubuntu 7.04]]
   
First, make sure you have an <code>/opt/webwork/libraries</code> directory:
 
  +
== Dependencies ==
   
$ mkdir -p /opt/webwork/libraries
 
  +
=== Apache ===
   
The database problem library can be downloaded from the ASU CVS repository.
 
  +
WeBWorK supports Apache 1.3 and 2.0. Apache 2.2 is supported experimentally. WeBWorK requires that the <code>mod_alias</code> module be available. Most vendors compile their Apache packages with the necessary features enabled.
   
$ cd /opt/webwork/libraries
 
  +
==== Apache 1.3 ====
$ cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/asu co database_problems
 
   
If you are running WeBWorK 2.3.x, you must create a <code>ProblemLibrary</code> database on your MySQL server. (<strong>*****</strong> represents the MySQL root password.)
 
  +
* Source: http://httpd.apache.org/
  +
* Debian/Ubuntu: <code>apache</code>
  +
* Red Hat/Fedora: build from source
   
$ mysql -u root
 
  +
==== Apache 2.0 or 2.2 ====
Password: *****
 
  +
&gt; CREATE DATABASE ProblemLibrary;
 
  +
Apache must be using the <code>prefork</code> MPM. This is because the <code>Safe</code> module, which WeBWorK makes extensive use of, is not threadsafe. This is set at compile time with the <code>--with-mpm=prefork</code> switch to the <code>configure</code> script.
&gt; GRANT SELECT on ProblemLibrary.* TO webworkWrite@localhost;
 
  +
&gt; quit
 
  +
* Source: http://httpd.apache.org/
Bye.
 
  +
* Debian/Ubuntu: <code>apache2</code> with <code>apache2-mpm-prefork</code>
$
 
  +
* Red Hat/Fedora: build from source; or see below
  +
  +
''On my Scientific Linux 4 box (i.e., RHEL4) there is no need to recompile apache; mpm-prefork is already set. Of course mod_perl2 must be compiled!'' -- Niels Walet - 13 Mar 2007
  +
  +
=== Perl ===
  +
  +
WeBWorK requires Perl 5.6.1 or higher.
  +
  +
* Source: http://perl.org/
  +
* Debian/Ubuntu: <code>perl</code> (in the default install)
  +
* Red Hat/Fedora: <code>perl</code> (in the default install)
  +
  +
=== Perl modules ===
  +
  +
The following Perl modules are required. All are available from [http://cpan.org/ CPAN], and many vendors provide packages of these modules. To see if a module is installed on your system, use the following command. Replace <code>Module</code> with the name of the module.
  +
  +
$ perl -MModule -e 'print "installed!\n"'
   
If you are running WeBWorK 2.4.x, this is not necessary as the NPL indexes are stored within the main <code>webwork</code> database.
 
  +
To install a module from CPAN, use the following command as root. Replace <code>Module</code> with the name of the module.
   
Configure WeBWorK to access the problem library. The settings are in <code>global.conf</code>:
 
  +
# perl -MCPAN -e "install Module"
   
'''''For WeBWorK 2.3.x:'''''
 
  +
For more information about using CPAN, consult the [http://cpan.org/misc/cpan-faq.html CPAN FAQ].
  +
  +
{| border="1"
  +
|-
  +
| '''module'''
  +
| '''Debian/Ubuntu package'''
  +
| '''Gentoo package'''
  +
| '''Fedora Core 7 package'''
  +
|-
  +
| Apache::Request<br/><small>(only if using Apache 1.3.x)
  +
| <code>libapache-request-perl</code>
  +
|
  +
|
  +
|-
  +
| Apache2::Request<br/><small>(only if using Apache 2.0.x)
  +
| <code>libapache2-request-perl</code>
  +
| <code>libapreq</code>
  +
| <code>perl-libapreq2</code>
  +
|-
  +
| Data::UUID
  +
| <code>libdata-uuid-perl</code> <br><small>(virtual package, provided by <code>libossp-uuid-perl</code>)</small>
  +
| <code>Data-UUID</code>
  +
| <code>perl-uuid</code>
  +
|-
  +
| Date::Format
  +
| <code>libtimedate-perl</code>
  +
| <code>TimeDate</code>
  +
| <code>perl-TimeDate</code>
  +
|-
  +
| Date::Parse
  +
| <code>libtimedate-perl</code>
  +
| <code>TimeDate</code>
  +
| <code>perl-TimeDate</code>
  +
|-
  +
| DateTime
  +
| <code>libdatetime-perl</code>
  +
| <code>DateTime</code>
  +
| <code>perl-DateTime</code>
  +
|-
  +
| DBD::mysql
  +
| <code>libdbd-mysql-perl</code>
  +
| <code>DBD-mysql</code>
  +
| <code>perl-DBD-MySQL</code>
  +
|-
  +
| Email::Address
  +
| <code>libemail-address-perl</code>
  +
| <code>Email-Address</code>
  +
| <code>perl-Email-Address</code>
  +
|-
  +
| GD
  +
| <code>libgd-gd2-perl</code>
  +
| <code>GD</code>
  +
| <code>perl-GD</code>
  +
|-
  +
| Iterator
  +
| not packaged
  +
| not packaged
  +
| not packaged
  +
|-
  +
| Iterator::Util
  +
| not packaged
  +
| not packaged
  +
| not packaged
  +
|-
  +
| Mail::Sender
  +
| <code>libmail-sender-perl</code>
  +
| <code>Mail-Sender</code>
  +
| <code>perl-Mail-Sender</code>
  +
|-
  +
| SQL::Abstract
  +
| <code>libsql-abstract-perl</code>
  +
| unknown
  +
| <code>perl-SQL-Abstract</code>
  +
|-
  +
| String::ShellQuote
  +
| <code>libstring-shellquote-perl</code>
  +
| <code>String-ShellQuote</code>
  +
| <code>perl-String-ShellQuote</code>
  +
|-
  +
| Time::HiRes<br><small>(included in Perl 5.8 and higher)</small>
  +
| included in <code>perl</code> package
  +
| unknown
  +
| included in <code>perl</code> package
  +
|-
  +
| XML::Parser
  +
| <code>libxml-parser-perl</code>
  +
| <code>libxml-perl</code>
  +
| <code>perl-XML-Parser</code>
  +
|-
  +
| XML::Parser::EasyTree
  +
| not packaged
  +
| unknown
  +
| not packaged
  +
|-
  +
| XML::Writer
  +
| <code>libxml-writer-perl</code>
  +
| <code>XML-Writer</code>
  +
| <code>perl-XML-Writer</code>
  +
|}
  +
  +
==== DateTime::TimeZone: use version 0.34 or later ====
  +
  +
Versions of DateTime::TimeZone (a component of DateTime) below 0.34 suffer from a problem with displaying some time zones. Make sure you have version 0.34 or later.
  +
  +
==== Problems building Time::HiRes ====
  +
  +
Some users have reported problems building Time::HiRes through CPAN. If this is your experience, try downloading the Time::HiRes tarball from http://search.cpan.org/~jhi/Time-HiRes/ and building it manually (<code>perl Makefile.PL && make && make test && make install</code>).
  +
  +
==== Problems building Apache::Request or Apache2::Request ====
  +
  +
Apache::Request is one component of the libapreq library. If you run into problems building it through CPAN, try downloading the libapreq tarball from http://httpd.apache.org/apreq/.
  +
  +
Apache 2.0.x users should use libapreq2.
  +
  +
=== mod_perl ===
  +
  +
WeBWorK uses mod_perl to interface with the Apache server. If compiling mod_perl from source, use the <code>EVERYTHING=1</code> flag to enable all mod_perl features. Most vendors compile their mod_perl packages with this setting enabled.
  +
  +
==== Apache 1.3 ====
  +
  +
* Source: http://perl.apache.org/download/
  +
* Debian/Ubuntu: <code>libapache-mod-perl</code>
  +
* Red Hat/Fedora: build from source; see below.
  +
* Gentoo: <code>mod_perl </code>
  +
  +
==== Apache 2.0 ====
  +
  +
* Source: http://perl.apache.org/download/
  +
* Debian/Ubuntu: <code>libapache2-mod-perl</code>
  +
* Red Hat/Fedora: build from source
  +
  +
==== RHEL4/Fedora build notes ====
  +
  +
''I had to use the flags below to get the compile to work correctly:''
  +
  +
perl Makefile.PL EVERYTHING=1 DO_HTTPD=1 USE_APACI=1 APACHE_PREFIX=/usr/local/apache
  +
  +
-- Mark Hamrick
  +
  +
=== MySQL ===
  +
  +
MySQL 4.0.x or later is required. If you are going to be using the experimental Moodle Integration, MySQL 4.1.x or later is required.
  +
  +
* Source: http://dev.mysql.com/downloads/
  +
* Debian/Ubuntu: 4.0.x: <code>mysql-server</code>; 4.1.x: <code>mysql-server-4.1</code>
  +
* RHEL4/Fedora: <code>mysql-sever</code>, <code>mysql-client</code>
  +
* Gentoo: <code>mysql </code>
  +
  +
=== LaTeX ===
  +
  +
WeBWorK requires LaTeX for generating hardcopy output and displaying mathematics graphically. Any standard LaTeX distribution that provides the commands <code>latex</code> and <code>pdflatex</code> should work. We use TeTeX.
  +
  +
* Source: http://tug.org/tetex/
  +
* Debian/Ubuntu: <code>tetex-bin</code>, <code>tetex-extra</code>
  +
* Red Hat/Fedora: <code>tetex</code>, <code>tetex-latex</code>
  +
* Gentoo: <code>tetex</code>
  +
  +
=== Netpbm ===
  +
  +
WeBWorK requires Netpbm to convert images among the GIF, PNG, and EPS formats.
  +
  +
* Source: http://netpbm.sf.net/
  +
* Debian/Ubuntu: <code>netpbm</code>
  +
* Red Hat/Fedora: build from source
  +
* Gentoo: <code>netpbm </code>
  +
  +
=== dvipng ===
  +
  +
WeBWorK uses dvipng to display mathematics graphically. It is only required if you wish to use the <code>images</code> display mode. dvipng requires the <code>preview.sty</code> file from the [http://preview-latex.sf.net/ preview-latex] package.
  +
  +
* Source: http://dvipng.sf.net/
  +
* Debian: <code>dvipng</code>, <code>preview-latex-style</code>
  +
* Red Hat/Fedora: <code>preview-latex-common-0.9.1-1.fedora.noarch.rpm</code>
  +
* Gentoo: <code>dvipng</code>
  +
  +
WeBWorK is initially configured to work with dvipng 1.0 or greater, but can be reconfigured to work with dvipng 0.8 or 0.9. See <code>webwork2/lib/WeBWorK/Constants.pm</code> for details.
  +
  +
=== TtH ===
  +
  +
WeBWorK uses TtH to display mathematics as formatted HTML. It is only required if you wish to use the <code>formatted-text</code> display mode.
  +
  +
* Source: http://hutchinson.belmont.ma.us/tth/
  +
* Debian:*|| <code>tth</code>
  +
* Red Hat/Fedora: build from source
  +
* Gentoo: <code>tth</code>
  +
  +
== Installing the WeBWorK files ==
  +
  +
WeBWorK is typically installed using CVS. We provide version tags that correspond to each released version of WeBWorK. This ensures that you can maintain a stable system, and experimental upgrades will not be applied to your installation.
  +
  +
We also provide tarballs for each release. They contain the necessary CVS data to update from CVS at a later date. Choose a tarball if for some reason you do not want to use CVS. Keep in mind that because of the layout of files within the <code>webwork2</code> directory tree, upgrading an existing installation is harder using a tarball than using CVS.
  +
  +
=== Creating the base directory directory ===
  +
  +
Before you begin installing files, create a base directory to hold them. We prefer <code>/opt/webwork</code>:
  +
  +
# mkdir -p /opt/webwork
  +
  +
To make things easier during the installation, you can give yourself write permission to this directory. That way, you won't have to become root to install the WeBWorK files:
  +
  +
# chown yourNameHere /opt/webwork
  +
  +
=== Installing from CVS ===
  +
  +
Installing from CVS allows you more flexibility in selecting versions of the WeBWorK code between or ahead of releases. You have several options, depending on which release tag you select when accessing the CVS repository.
  +
  +
==== CVS tags ====
  +
  +
'''''Released version:''''' By specifying the '''rel-2-4-1''' tag, you get the same version of the code that you would by downloading the WeBWorK 2.4.1 tarball. This is the most conservative option. Updating will have no effect -- this code will never change.
  +
  +
'''''Released version with patches:''''' By specifying the '''rel-2-4-dev''' tag, you can stay up to date with the latest bug fixes against the released version of WeBWorK 2.4. Few, if any, new features are introduced on a patch branch. We recommend that you choose this option.
  +
  +
'''''Latest code:''''' If you do not specify a release tag, you will get the latest code. Since this code is a work in progress, it is sometimes unstable or broken. If you require features that are not in a stable release, and are willing to devote more time to keeping your installation running smoothly, this may be the option for you.
  +
  +
No matter what tag you chose, you can change later by specifying a new tag when running <code>cvs upgrade</code>.
  +
  +
==== New installation from CVS ====
  +
  +
If you do not have an existing WeBWorK installation, use the following commands to check out copies of the <code>webwork2</code> and <code>pg</code> modules. If you are prompted for a password, press enter.
  +
  +
'''''Released version:'''''
  +
  +
<code>$ cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/system checkout -r rel-2-4-1 webwork2</code><br/>
  +
<code>$ cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/system checkout -r rel-2-4-0 pg</code>
  +
  +
'''''Released version with patches:'''''
  +
  +
<code>$ cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/system checkout -r rel-2-4-dev webwork2 pg</code>
  +
  +
'''''Latest development code:'''''
  +
  +
<code>$ cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/system checkout webwork2 pg</code>
  +
  +
The message <code>warning: cannot open /webwork/cvs/system/CVSROOT/val-tags read/write: Permission denied</code> is harmless and should be ignored.
  +
  +
After checkout finishes, become root and move the directories to the your installation directory. I prefer <code>/opt/webwork</code>:
  +
  +
# cp -r webwork2 /opt/webwork/webwork2
  +
# cp -r pg /opt/webwork/pg
  +
  +
==== Upgrading using CVS ====
  +
  +
If you already have an existing WeBWorK installation, use the following commands to update your exsting files to version 2.4. You may need to become root to run these commands (depending on your permissions situation).
  +
  +
Take note of the messages that CVS gives during the update. If you have modified files, you may see the message <code>Merging differences between ''version1'' and ''version2'' into _filename_</code>. This indicates that the file in question is updated in WeBWorK 2.4, and since you also made local modifications to it, CVS is attempting to merge the two changed versions.
  +
  +
If this process fails, because the same parts of the file were modified in both versions, you will see the message <code>rcsmerge: warning: conflicts during merge</code>. If you end up in this situation, you will need to resolve the conflict by editing the file in question. Consult this [http://ximbiot.com/cvs/manual/cvs-1.11.22/cvs_10.html#SEC85 conflicts example] from the CVS manual.
  +
  +
The message <code>warning: cannot open /webwork/cvs/system/CVSROOT/val-tags read/write: Permission denied</code> is harmless and should be ignored.
  +
  +
'''''Released version:'''''
  +
  +
cd /opt/webwork/webwork2
  +
cvs -q update -dP -r rel-2-4-1
  +
cd /opt/webwork/pg
  +
cvs -q update -dP -r rel-2-4-0
  +
  +
'''''Released version with patches:'''''
  +
  +
cd /opt/webwork/webwork2
  +
cvs -q update -dP -r rel-2-4-dev
  +
cd /opt/webwork/pg
  +
cvs -q update -dP -r rel-2-4-dev
  +
  +
'''''Latest development code:'''''
  +
  +
cd /opt/webwork/webwork2
  +
cvs -q update -dPA
  +
cd /opt/webwork/pg
  +
cvs -q update -dPA
  +
  +
=== Installing from a tarball ===
  +
  +
Tarballs of WeBWorK releases are available from our [http://sf.net/project/showfiles.php?group_id=93112 SourceForge file release] page. You will need to download both a <code>webwork</code> tarball and a <code>pg</code> tarball. Make sure that the versions of the tarballs match. You can choose either a GZip or BZip2 archive.
  +
  +
After downloading the tarballs, untar them somewhere (like your home directory):
  +
  +
$ tar -xjf webwork-2.4.1.tar.bz2
  +
$ tar -xjf pg-2.4.0.tar.bz2
  +
  +
If you have an existing WeBWorK installation, move your existing <code>webwork2</code> and <code>pg</code> directories to <code>webwork2.OLD</code> and <code>pg.OLD</code>, respectively. (You will move your existing courses and configuration over to the new directories later.)
  +
  +
Then, become root and move the directories to the your installation directory. The installation directory should '''not''' be web-accessible. I prefer <code>/opt/webwork</code>:
  +
  +
# cp -r webwork-2.4.1 /opt/webwork/webwork2
  +
# cp -r pg-2.4.0 /opt/webwork/pg
  +
  +
From now on, we will assume that WeBWorK 2 is installed in <code>/opt/webwork/webwork2</code> and PG is installed in <code>/opt/webwork/pg</code>.
  +
  +
=== Installing fonts for jsMath ===
  +
  +
jsMath is a display mode that renders math expressions using a JavaScript implementation of the TeX math layout engine. For more information about jsMath, see http://www.math.union.edu/~dpvc/jsmath/.
  +
  +
Version 2.0 of jsMath introduced a new fallback method for when the TeX fonts are not available on the student's computer. This uses images of the individual TeX characters in place of the TeX fonts, but this requires a large number of individual character images in a wide range of sizes. These are distributed in <code>webwork2/htdocs/jsMath/jsMath-fonts.tar.gz</code>, and you need to unpack this tarball before jsMath will work properly. Use the command
  +
  +
$ cd /opt/webwork/webwork2/htdocs/jsMath
  +
$ tar -xzvf jsMath-fonts.tar.gz
  +
  +
This will unpack the archive. Since there are 20,000 tiny files, it can take a long time, so the =v= option is used to show you the names as they are unpacked so that you know the command is actually doing something. Once the images are unpacked, jsMath's image mode fallback (the default fallback method) will work properly, and most students will have results as good as they would with the TeX fonts installed.
  +
  +
If you do not wish to install the jsMath image fonts (to save space, for example), you should change the value of <code>noImageFonts</code> in the <code>$pg{displayModeOptions}{jsMath}</code> hash in <code>global.conf</code> to 1. This will prevent jsMath from using the image fallback methods.
  +
  +
See also: [[#jsMath_settings|jsMath settings]]
  +
  +
=== Creating the courses directory ===
  +
  +
The courses directory should be located at <code>/opt/webwork/courses</code>. Placing the courses directory outside the <code>webwork2</code> directory makes updates easier.
  +
  +
You can create your courses directory from the <code>courses.dist</code> directory distributed with WeBWorK. This directory contains the skeleton of a course called <code>modelCourse</code>, which contains the template files for three demo sets. You can opt to copy templates from this set when creating new courses.
  +
  +
$ cd /opt/webwork/webwork2
  +
$ cp -RPp courses.dist ../courses
  +
  +
If you prefer not to use <code>modelCourse</code>, you can create an empty courses directory instead:
  +
  +
$ cd /opt/webwork
  +
$ mkdir courses
  +
  +
If you are upgrading from WeBWorK 2.2.x, move your existing courses into the new <code>/opt/webwork/courses</code> directory.
  +
  +
=== Making copies of distribution configuration files ===
  +
  +
Some files are distributed with the <code>.dist</code> suffix. You must make copies lacking the <code>.dist</code> suffix for WeBWorK to be able to find them. This is done to ease updating with CVS. The <code>.dist</code> files may be updated during a CVS update, but your local versions will be left untouched.
  +
  +
Before configuring the system, you must make local copies of the <code>global.conf</code> and <code>database.conf</code> configuration files, located in <code>/opt/webwork/webwork2/conf/</code>:
  +
  +
$ cd /opt/webwork/webwork2/conf
  +
$ cp global.conf.dist global.conf
  +
$ cp database.conf.dist database.conf
  +
  +
=== Setting permissions ===
  +
  +
The PG installation directory and files should be owned by root and not writable by other users:
  +
  +
# cd /opt/webwork/pg
  +
# chown -R root:root .
  +
# chmod -R u+rwX,go+rX .
  +
  +
Most WeBWorK directories and files should also be owned by root and not writable by other users:
  +
  +
# cd /opt/webwork/webwork2
  +
# chown -R root:root .
  +
# chmod -R u+rwX,go+rX .
  +
  +
Certain data directories need to be writable by the web server. These are <code>DATA</code>, <code>courses</code>, <code>htdocs/tmp</code>, <code>logs</code>, and <code>tmp</code>. It is convenient to give WeBWorK administrators access to these directories as well, so they can perform administrative tasks such as removing temporary files, creating and editing courses from the command line, managing logs, and so on.
  +
  +
The simplest way to set this up assumes that all WeBWorK administrators have root access. In this case, directories that must be writable by the web server should be given the ''group'' of the web server. In the following examples, it is assumed that the web server's group is <code>www-data</code>.
  +
  +
If you wish to perform administrative tasks without becoming root, you can either add the WeBWorK administrators to the web server's group, or create a new group called <code>wwdata</code>, containing both the WeBWorK administrators and the web server.
  +
  +
If you chose not to create the <code>wwdata</code> group, the WeBWorK data directories should have the group of the web server:
  +
  +
# cd /opt/webwork/webwork2
  +
# chgrp -R www-data DATA ../courses htdocs/tmp logs tmp
  +
# chmod -R g+w DATA ../courses htdocs/tmp logs tmp
  +
# find DATA/ ../courses/ htdocs/tmp/ logs/ tmp/ -type d -a ! -name CVS -exec chmod g+s {} \;
  +
  +
If you chose to create the <code>wwdata</code> group, the WeBWorK directories that must be writable by the web server should have that group:
  +
  +
# cd /opt/webwork/webwork2
  +
# chgrp -R wwdata DATA ../courses htdocs/tmp logs tmp
  +
# chmod -R g+w DATA ../courses htdocs/tmp logs tmp
  +
# find DATA/ ../courses/ htdocs/tmp/ logs/ tmp/ -type d -a ! -name CVS -exec chmod g+s {} \;
  +
  +
==== CVS updates and permissions ====
  +
  +
In the instructions above, you set most WeBWorK and PG files to be owned and only writable by root. If you are planning to do in-place updates of the system with CVS, you may want to set those files to be owned by a regular user instead. That will let you avoid running CVS as root, which could be a security risk. One option is to create a user account that cannot be logged into directly and use it only for WeBWorK files.
  +
  +
== Configuring your shell ==
  +
  +
To make working with WeBWorK easier, there are a couple of changes you can make to your shell environment.
  +
  +
Add the WeBWorK <code>bin</code> directory to your path. This will allow you to run WeBWorK command-line utilities without typing the full path to the utility. If you installed WeBWorK in the default location of <code>/opt/webwork/webwork2</code>, add the directory <code>/opt/webwork/webwork2/bin</code> to your path.
  +
  +
{| border="1"
  +
|-
  +
| '''if your shell is''' || '''put this line''' || '''in this file'''
  +
|-
  +
| <code>bash</code> || <tt>export PATH=$PATH:/opt/webwork/webwork2/bin</tt> || <code>~/.bashrc</code>
  +
|-
  +
| <code>tcsh</code> || <tt>setenv PATH $PATH:/opt/webwork/webwork2/bin</tt> || <code>~/.cshrc</code>
  +
  +
|}
  +
  +
Set the <code>WEBWORK_ROOT</code> environment variable. Some command-line scripts rely on this variable to find other WeBWorK files.
  +
  +
{| border="1"
  +
|-
  +
| '''if your shell is''' || '''put this line''' || '''in this file'''
  +
|-
  +
| <code>bash</code> || <tt>export WEBWORK_ROOT=/opt/webwork/webwork2</tt> || <code>~/.bashrc</code>
  +
|-
  +
| <code>tcsh</code> || <tt>setenv WEBWORK_ROOT /opt/webwork/webwork2</tt> || <code>~/.cshrc</code>
  +
  +
|}
  +
  +
== Configuring WeBWorK ==
  +
  +
Most WW configuration is done in the file <code>/opt/webwork/webwork2/conf/global.conf</code>. This file provides system-wide configuration settings, and defaults for course settings. Any setting in this file can be overridden in the <code>course.conf</code> file for a particular course.
  +
  +
There are several options that must be set for WW to work with your system. The rest of the file consists of customization options.
  +
  +
=== Seed variables ===
  +
  +
These are the main configuration variables of WeBWorK. The are used by the Apache configuration and by the system itself. Many other settings rely on these variables:
   
 
{| border="1"
 
{| border="1"
Line 36: Line 462:
 
| '''variable''' || '''description'''
 
| '''variable''' || '''description'''
 
|-
 
|-
| <code>$problemLibrary{root}</code> || Path to <code>database_problems</code> directory. Should be <code>/opt/webwork/libraries/database_problems</code>.
+
| <code>$webwork_url</code> || The URL associated with the WeBWorK handler. Usually <code>/webwork2</code>.
 
|-
 
|-
| <code>$problemLibrary{version}</code> || Version of the problem library database. Should be =2=.
+
| <code>$pg_root</code> || The path to the PG directory. Usually <code>/opt/webwork/pg</code>.
 
|-
 
|-
| <code>$problemLibrary{sourceSQL}</code> || Name of the database. Should be <code>ProblemLibrary</code>.
+
| <code>$webwork_htdocs_url</code> || The URL of static WeBWorK hypertext files. Usually <code>/webwork2_files</code>.
 
|-
 
|-
| <code>$problemLibrary{userSQL}</code> || Username to use when connecting to the database. Can usually be left as <code>$database_username</code>.
+
| <code>$webwork_htdocs_dir</code> || The path to the static WeBWorK hypertext files. Usually <code>$webwork_dir/htdocs</code>.
 
|-
 
|-
| <code>$problemLibrary{passwordSQL}</code> || Password to use when connecting to the database. Can usually be left as <code>$database_password</code>.
+
| <code>$webwork_courses_url</code> || The URL of the courses directory. Usually <code>/webwork2_course_files</code>.
  +
|-
  +
| <code>$webwork_courses_dir</code> || The path to the courses directory. Usually <code>$webwork_dir/courses</code>.
  +
 
|}
 
|}
   
'''''For WeBWorK 2.4.x'''''
 
  +
=== Paths to external programs ===
  +
  +
To avoid executing malicious code, WW calls external programs using full path names.
   
 
{| border="1"
 
{| border="1"
Line 53: Line 481:
 
| '''variable''' || '''description'''
 
| '''variable''' || '''description'''
 
|-
 
|-
| <code>$problemLibrary{root}</code> || Path to <code>database_problems</code> directory. Should be <code>/opt/webwork/libraries/database_problems</code>.
+
| <code>$externalPrograms{mkdir}</code> || Path to <code>mkdir</code> binary. Usually <code>/bin/mkdir</code>.
 
|-
 
|-
| <code>$problemLibrary{version}</code> || Version of the problem library database. Should be =2=.
 
  +
| <code>$externalPrograms{mysql}</code> || Path to <code>mysql</code> binary. Usually <code>/usr/bin/mysql</code> or <code>/usr/local/bin/mysql</code>.
 
|-
 
|-
| <code>$problemLibrary_db{dbsource}</code> || Name of the database. Can usually be left as $database_dsn.
 
  +
| <code>$externalPrograms{tar}</code> || Path to <code>tar</code> binary. Usually <code>/usr/bin/tar</code>.
 
|-
 
|-
| <code>$problemLibrary_db{user}</code> || Username to use when connecting to the database. Can usually be left as <code>$database_username</code>.
+
| <code>$externalPrograms{latex}</code> || Path to <code>latex</code> binary. Usually <code>/usr/bin/latex</code> or <code>/usr/local/bin/latex</code>.
 
|-
 
|-
| <code>$problemLibrary_db{passwd}</code> || Password to use when connecting to the database. Can usually be left as <code>$database_password</code>.
 
  +
| <code>$externalPrograms{pdflatex}</code> || Path to <code>pdflatex</code> binary. Usually <code>/usr/bin/pdflatex</code> or <code>/usr/local/bin/pdflatex</code>.
  +
|-
  +
| <code>$externalPrograms{dvipng}</code> || Path to <code>dvipng</code> binary. Usually <code>/usr/bin/dvipng</code> or <code>/usr/local/bin/dvipng</code>.
  +
|-
  +
| <code>$externalPrograms{tth}</code> || Path to <code>tth</code> binary. Usually <code>/usr/bin/tth</code> or <code>/usr/local/bin/tth</code>.
  +
|-
  +
| <code>$externalPrograms{giftopnm}</code> || Path to <code>giftopnm</code> binary. Usually <code>/usr/bin/giftopnm</code> or <code>/usr/local/bin/giftopnm</code>.
  +
|-
  +
| <code>$externalPrograms{ppmtopgm}</code> || Path to <code>ppmtopgm</code> binary. Usually <code>/usr/bin/ppmtopgm</code> or <code>/usr/local/bin/ppmtopgm</code>.
  +
|-
  +
| <code>$externalPrograms{pnmtops}</code> || Path to <code>pnmtops</code> binary. Usually <code>/usr/bin/pnmtops</code> or <code>/usr/local/bin/pnmtops</code>.
  +
|-
  +
| <code>$externalPrograms{pnmtopng}</code> || Path to <code>pnmtopng</code> binary. Usually <code>/usr/bin/pnmtopng</code> or <code>/usr/local/bin/pnmtopng</code>.
  +
|-
  +
| <code>$externalPrograms{pngtopnm}</code> || Path to <code>pngtopnm</code> binary. Usually <code>/usr/bin/pngtopnm</code> or <code>/usr/local/bin/pngtopnm</code>.
  +
 
|}
 
|}
   
Finally, populate the database:
 
  +
=== Mail settings ===
   
'''''For WeBWorK 2.3.x:'''''
 
  +
WW sends mail in three instances. The PG system sends mail to report answers to questionnaires and free-response problems. The mail merge module is used to send mail to course participants, i.e. to report scores. The feedback module allows participants to send mail to course instructors.
   
Run the <code>loadDB2</code> script to populate the database. This script must be run from the <code>database_problems</code> directory.
 
  +
To send mail, WW needs the address of an SMTP server. When connecting to the SMTP server, it must also send an email address representing the sender of the email.
   
$ cd /opt/webwork/libraries/database_problems
 
  +
{| border="1"
$ ./loadDB2
 
  +
|-
What is the root password for mysql? *****
 
  +
| '''variable''' || '''description'''
Mysql database reinitialized
 
  +
|-
Converting data from tagged pgfiles into mysql.
 
  +
| <code>$mail{smtpServer}</code> || The address of an SMTP server. If the local machine is running an SMTP server (as is likely), use <code>localhost</code>.
$
 
  +
|-
  +
| <code>$mail{smtpSender}</code> || The address to send when connecting to the SMTP server. This has nothing to do with the <code>From</code> address on the mail message.
   
'''''For WeBWorK 2.4.x:'''''
 
  +
|}
   
Run the NPL-update script to populate the database. This script is located in the <code>webwork2/bin</code> directory and may be invoked from anywhere.
 
  +
=== Database settings ===
   
$ /opt/webwork/webwork2/bin/NPL-update
 
  +
The following settings are used in connecting to the MySQL database.
Mysql database reinitialized.
 
Reading in textbook data.
 
Converting data from tagged pgfiles into mysql.
 
Number of files processed:
 
100 200 300 400 500 600 700 800 900 1000
 
...
 
Done.
 
$
 
   
There is no need to add symlinks to course <code>templates</code> directory, as is necessary with file based Problem Libraries. It is done automatically.
 
  +
{| border="1"
  +
|-
  +
| '''variable''' || '''description'''
  +
|-
  +
| <code>$database_dsn</code> || The location of the WeBWorK database. Usually <code>dbi.mysql.webwork</code>. See the Perl DBI documentation for more information about DSNs.
  +
|-
  +
| <code>$database_username</code> || The username to use when connecting to the database. Usually <code>webworkWrite</code>.
  +
|-
  +
| <code>$database_password</code> || The password to use when connecting to the database. Use a secure, random password of sufficient length.
   
=== Browsing the NPL ===
 
  +
|}
   
Log into a WeBWorK course and select '''Library Browser''' from the links menu. On the resulting screen, click the '''Problem Library''' button.
 
  +
The <code>$dbLayoutName</code> variable controls the default database layout that will be used for new courses. If you plan to use moodle on all new courses, set this to "sql_moodle". Otherwise, leave it set to the default, "sql_single".
   
=== Updating the NPL ===
 
  +
You can override the default when creating a new course.
   
The CVS repository for the NPL is updated as problems are added, additional metadata is added, or problem bugs are fixed. So, it is a good idea to update your copy of the NPL periodically, say once per semester.
 
  +
=== Timezone setting ===
   
To update, run the <code>cvs update</code> command to download the latest versions from our server. Then, re-run <code>loadDB2</code> (WeBWorK 2.3.x) or NPL-update (WeBWorK 2.4.x).
 
  +
You can set the local timezone to use when displaying times using the <code>$siteDefaults{timezone}</code> setting. To get a list of timezone names, run:
   
$ cd /opt/webwork/libraries/database_problems
 
  +
$ perl -MDateTime::TimeZone -e 'print join "\n", DateTime::TimeZone::all_names'
$ cvs -q update -dPA
 
  +
$ ./loadDB2
 
  +
To get a list of valid timezone "links" (deprecated names), run:
What is the root password for mysql? *****
 
  +
Mysql database reinitialized
 
  +
$ perl -MDateTime::TimeZone -e 'print join "\n", DateTime::TimeZone::links'
Converting data from tagged pgfiles into mysql.
 
  +
  +
Links can be shorter and more familiar, but they may be ambiguous.
  +
  +
=== Display modes ===
  +
  +
WeBWorK has several techniques for displaying homework problems. Which of these modes is available is controlled by the <code>$pg{displayModes}</code> list. To disable a display mode, comment out its line from the list by inserting a =#= character at the beginning of the line.
  +
  +
The supported display modes are as follows:
  +
  +
{| border="1"
  +
|-
  +
| '''display mode''' || '''status''' || '''description'''
  +
|-
  +
| <code>plainText</code> || STABLE || This mode shows the raw TeX source of mathematics. It is useful for debugging.
  +
|-
  +
| <code>formattedText</code> || DEPRECATED || This mode uses the <code>tth</code> program to represent mathematics as HTML table structures. Output quality depends on the browser. There are typically font problems on the Mac platform.
  +
|-
  +
| <code>images</code> || STABLE || This mode uses the <code>dvipng</code> program to represent mathematics as PNG images. This gives excellent output on all browsers, but uses more bandwidth, as the images must be sent to the client.
  +
|-
  +
| <code>jsMath</code> || STABLE || This mode uses jsMath to display mathematics. The raw TeX is sent to the client, where a JavaScript program displays it. This requires the client to have a decent JavaScript implementation, and can be slow on older machines.
  +
|-
  +
| <code>asciimath</code> || DEPRECATED || This mode converts mathematics to ASCIIMath on the server and uses a <nobpo>JavaScript to convert them to MathML on the client. Requires a Mozilla-based browser or MSIE with the MathPlayer plugin.
  +
|-
  +
| <code>LaTeXMathML</code> || EXPERIMENTAL || This mode is a modification of the <code>asciimath</code> mode that skips the intermediate ASCIIMath form. Requires a Mozilla-based browser or MSIE with the MathPlayer plugin.
  +
  +
|}
  +
  +
=== jsMath settings ===
  +
  +
When a student doesn't have the TeX fonts installed, jsMath can display a warning message pointing to the jsMath font download site. Since the image-mode fallback method is of high enough quality, most students will not feel the need to download and install the fonts, so this warning message is disabled by default. (It tended to worry the students, and there is a link to the download page on the control panel that is new in version 2.0 of jsMath).
  +
  +
jsMath settings are stored in the <code>$pg{displayModeOptions}{jsMath}</code> hash:
  +
  +
{| border="1"
  +
|-
  +
| '''variable''' || '''description'''
  +
|-
  +
| <code>reportMissingFonts</code> || Set to 1 if you want to have a message displayed for students who don't have the TeX fonts installed. The warning will only be shown on the first page they view that used jsMath (and there is a "hide" button that they can use to hide it even on that page). They can use the control panel to disable the warning messages permanently for their computer, if they want, so even if you turn on the warning message, it is not too intrusive.
  +
|-
  +
| <code>missingFontMessage</code> || An HTML string that will be used for the missing font message (when <code>reportMissingFonts</code> is non-zero). This string will replace the default warning message, and can be used to point to your own page of instructions for getting the fonts, for example, or for using the control panel to disable the warning.
  +
|-
  +
| <code>noImageFonts</code> || Set to 1 to prevent jsMath from using the image fallback method. This can be useful if you elected not to unpack the <code>jsMath-fonts.tar.gz</code> archive.
  +
|-
  +
| <code>processDoubleClicks</code> || By default, double-clicking on the math expression will display the TeX source that generated it. If you wish to disable this behavior, set this to 0. (Note that the raw TeX is still available in the page's HTML source.)
  +
  +
|}
  +
  +
== Configuring the database ==
  +
  +
WeBWorK uses a single MySQL database to store course data. By default, this database is named <code>webwork</code> and is accessed by a MySQL user named <code>webworkWrite</code>.
  +
  +
=== Creating a new database ===
  +
  +
If this is a new installation, you must create the <code>webwork</code> database:
  +
  +
$ mysql -u root -p mysql
  +
Password: '''***'''
  +
> CREATE DATABASE webwork;
  +
> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, LOCK TABLES
  +
ON webwork.* TO webworkWrite@localhost IDENTIFIED BY 'password';
  +
> exit
  +
Bye
 
$
 
$
   
=== Contributing to the NPL ===
 
  +
(Replace <code>password</code> with the password you set for <code>$database_password</code> in <code>global.conf</code>.)
   
If you have written new problems, you might like to contribute contribute them to the NPL so others can benefit from them as well.
 
  +
=== Using an existing database ===
   
* [[Author's Guide/Tagging Problems|Tagging Problems]]
 
  +
If you already have a <code>webwork</code> database from WeBWorK 2.1.x or 2.2.x, you must run the utility <code>wwdb_check</code> to make sure that it is up-to-date for use with 2.4.x. You should '''not''' use this utility if you are upgrading from 2.3.x or an earlier version of 2.4.x. (For example, from 2.4.1 to 2.4.2.)
* [[Problem Libraries/Submitting problems to the NPL|Submitting problems to the NPL]]
 
   
== File Based Problem Libraries ==
 
  +
To run the utility:
  +
  +
$ /opt/webwork/webwork2/bin/wwdb_check
  +
  +
The script will look at the structure of your <code>webwork</code> database, and alert you to missing tables, missing fields, and incorrect field types. You will have the option to fix these problems.
  +
  +
WeBWorK 2.4 requires permision to <code>LOCK TABLES</code> in the <code>webwork</code> database. Use the <code>mysql</code> console to add it:
  +
  +
$ mysql -u root mysql
  +
Password: '''***'''
  +
> GRANT LOCK TABLES ON webwork.* TO webworkWrite@localhost;
  +
> exit;
  +
$
   
These libraries consist of a directory tree organized roughly by the chapters of
 
  +
=== Automated database initialization and upgrade ===
a canonical calculus book (or in some cases a canonical text for another subject).
 
There is no database index of tagged metadata. It is envisioned that the material in these libraries will eventually be given metadata, checked for errors and duplicates and folded into the NPL.
 
   
* The "(CVS)" links for each library allow you to inspect the contents of the library over the web.
 
  +
WeBWorK 2.3.0 introduces an automatic database upgrade system. Rather than manually issuing SQL commands to make changes to the database, or using ad-hoc scripts like <code>wwdb_addgw</code>, there is a single script called <code>wwdb_upgrade</code> that applies any necessary updates. It should be run when creating a new database, and any time you upgrade WeBWorK.
* See [[Problem Libraries/CVS Access]] for instructions on downloading the contents of these libraries via CVS.
 
* You can find tarballs of each libraries at http://webhost.math.rochester.edu/webworkdocs/librarytarballs.
 
 
=== Arizona State University Math Problem Library ===
 
   
This problem library is now empty. All of the problems have been moved into the National Problem Library.
 
  +
$ /opt/webwork/webwork2/bin/wwdb_upgrade
   
=== The College of New Jersey Math Problem Library ===
 
  +
Add the <code>-v</code> switch to get more information about what the script is doing.
   
The College of New Jersey (TCNJ) makes a large number of linear algebra
 
  +
=== Image depths database ===
problems available in this collection. Please send links of any problems that don't
 
work to Tom Hagedorn, <code>hagedorn at tcnj.edu</code>. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/tcnj_problib/?cvsroot=The+College+of+New+Jersey CVS])
 
   
'''''To check out this library:'''''
 
  +
The "images" display mode has the capability to store depth information in a <code>depths</code> table when equation images are generated. The information allows better alignment of images with surrounding text. In previous versions of WeBWorK, the <code>depths</code> table was stored in a separate database, named <code>DvipngDepths</code>. Starting with WeBWorK 2.3.0, it is stored in the <code>webwork</code> database itself.
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/tcnj co tcnj_problib
 
  +
If you are upgrading an existing installation, and you had set <code>$pg{displayModeOptions}{images}{dvipng_align}</code> to <code>mysql</code> in the old version, you have depths information stranded in your old <code>DvipngDepths</code> database, and existing images will lose access to this information.
   
=== Dartmouth College Library ===
 
  +
The easiest way to solve this is to delete the existing images. This is probably a good idea anyway when upgrading since existing images won't take advantage of rendering improvements, dvipng improvements, etc. To delete the images:
   
This library has problems compatible with the Marsden and Tromba multi-dimensional
 
  +
$ /opt/webwork/webwork2/bin/remove_stale_images --days=0 --delete
calculus book. It also has problems compatible with the later chapters in Stewart's
 
calculus book. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/dartmouth_problib/?cvsroot=Dartmouth+College CVS])
 
   
'''''To check out this library:'''''
 
  +
== Configuring Apache ==
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/dartmouth co dartmouth_problib
 
  +
=== Testing mod_perl ===
   
=== Detroit County Day School Math Problem Library (High School) ===
 
  +
To verify that mod_perl is installed, you can use mod_info to list the installed modules. If mod_info itself is disabled or not installed, you can either install/enable it, or skip this test and check using Apache::Status instead. The process for installing and enabling modules varies by distribution. To configure mod_perl, uncomment the location block <code>&lt;Location /server-info&gt;</code> in your Apache config file (usually <code>httpd.conf</code> or <code>apache.conf</code>). It should look something like this:
   
These high school and pre-calculus level problems were written by Mark Schmidt at Detroit Country Day School. Send corrections to <code>gage at math.rochester.edu</code> or to <code>M.Schmitt at dcds.edu</code>. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/dcds_problib/?cvsroot=Detroit+County+Day+School CVS])
 
  +
<Location /server-info>
  +
SetHandler server-info
  +
Order deny,allow
  +
Deny from all
  +
Allow from localhost
  +
Allow from .yourschool.edu
  +
</Location>
   
'''''To check out this library:'''''
 
  +
You may have to add the <code>Order</code>, <code>Deny</code>, and <code>Allow</code> lines yourself, or there may already be lines there you can customize. Restart Apache (<code>apachectl graceful</code>) and visit <code>http://yourserver.yourschool.edu/server-info</code>. You should see an entry in the list of active modules for mod_perl.
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/dcds co dcds_problib
 
  +
To further test mod_perl, you can install the Perl module Apache::Status. After installing, add the following section to your Apache config file:
   
=== Indiana University Math Problem Library ===
 
  +
<Location /perl-status>
  +
SetHandler perl-script
  +
PerlHandler Apache::Status
  +
Order deny,allow
  +
Deny from all
  +
Allow from localhost
  +
Allow from .yourschool.edu
  +
</Location>
   
No description. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/indiana_problib/?cvsroot=Indiana+University CVS])
 
  +
Restart Apache (<code>apachectl graceful</code>) and visit <code>http://yourserver.yourschool.edu/perl-status</code>. You should see a page listing various information about mod_perl.
   
'''''To check out this library:'''''
 
  +
=== Enabling WeBWorK ===
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/indiana co indiana_problib
 
  +
Once mod_perl is working, Apache must be configured to handle requests for WeBWorK. Apache provides access to WeBWorK through three URL locations:
   
=== Northern Arizona University Library ===
 
  +
* The location that is handled by the <code>Apache::WeBWorK</code> module, usually <code>/webwork2</code>.
  +
* The location of system-wide resources, usually <code>/webwork2_files</code>.
  +
* The location of course-specific resources, usually <code>/webwork2_course_files</code>.
   
The Northern Arizona University Library has new problems for graph theory, statistics and pre-calculus. The <code>setExamples</code> set cleans up some of the problems
 
  +
WeBWorK ships with an Apache config file that you can include in your main Apache config file. The file is named <code>webwork.apache-config.dist</code> and located in the <code>conf</code> directory. First, copy the file to <code>webwork.apache-config</code>:
in Rochester Library's <code>setMAAtutorial</code> set and adds several more.
 
Send corrections to <code>Nandor.Sieben at nau.edu</code>. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/nau_problib/?cvsroot=Northern+Arizona+University CVS])
 
   
'''''To check out this library:'''''
 
  +
$ cd /opt/webwork/webwork2/conf
  +
$ cp webwork.apache-config.dist webwork.apache-config
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/nau co nau_problib
 
  +
Then, edit the copy to set the <code>$webwork_dir</code> variable to the path of the directory containing the WeBWorK installation. This is usually <code>/opt/webwork/webwork2</code>. This value is used to read the WeBWorK configuration file and get the rest of the configuration data.
   
=== Union College Math Problem Library ===
 
  +
Further down in the file, you may want to customize the directives used to define the association between Apache and WeBWorK. Specifically, you may need to add the following to the <code>&lt;ocation&gt;</code> and <code>&lt;Directory&gt;</code> stanzas, to permit access:
   
The Union College Math Problem Library should now be fully funcitonal. A few of the problems may not work as advertised, since they may have trouble finding the links to auxiliary materials, such as external graphs.
 
  +
Order allow,deny
  +
Allow from all
   
Davide Cervones and Kathryn Leash are principally responsible for designing these problems. The level set and 3d problems are particularly nice!!
 
  +
After editing <code>webwork.apache-config</code>, append the following line to your Apache configuration file:
   
Please send links of any problems that don't work to <code>gage at math.rochester.edu</code> or <code>dpvc at union.edu</code> or better yet enter them into the WeBWorK bugzilla via the "report problem bugs" on the PG editor page. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/union_problib/?cvsroot=Union+College CVS])
 
  +
Include /opt/webwork/webwork2/conf/webwork.apache-config
   
'''''To check out this library:'''''
 
  +
If you are upgrading from a previous version of WeBWorK which did not use the <code>webwork.apache-config</code> file, you will need to remove the WeBWorK-related directives from your Apache configuration.
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/union co union_problib
 
  +
Then restart Apache and test your configuration:
   
=== UC Santa Barbara and Brooks/Cole ===
 
  +
* Test the <code>/webwork2</code> location by visiting <code>http://yourserver.yourschool.edu/webwork2</code>. You should see the WeBWorK home page, with no courses listed.
  +
* Test the <code>/webwork2_files</code> location by visiting <code>http://yourserver.yourschool.edu/webwork2_files</code>. You should see the "WeBWorK Placeholder Page".
  +
* You cannot test the <code>/webwork2_course_files</code> location until you have created a course.
   
Problems inspired by Stewart's Calculus book. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/ucsb_problib/?cvsroot=UC+Santa+Barbara CVS])
 
  +
=== Experimental support for Apache 2.0.x ===
   
'''''To check out this library:'''''
 
  +
If you are using Apache 2.0.x, follow hte directions above, with these changes:
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/ucsb co ucsb_problib
 
  +
Enable the libapreq module by adding the following line to your Apache2 configuration file. Place this line with the other <code>LoadModule</code> lines.
   
=== University of Georgia Math Problem Library ===
 
  +
LoadModule apreq_module modules/mod_apreq.so
   
WeBWorK mathematics homework problems created at the University of
 
  +
Use the module Apache2::Status in place of Apache::Status.
Georgia. Send corrections to Ted Ashton (ashted at math.uga.edu) or even better
 
enter them into bugzilla via the "report problem bugs" on the PG editor page. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/uga_problib/?cvsroot=University+of+Georgia CVS])
 
   
'''''To check out this library:'''''
 
  +
Use the file <code>webwork.apache2-config</code> in place of <code>webwork.apache-config</code>.
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/uga co uga_problib
 
  +
== Creating the admin course ==
   
=== University of Michigan Math Problem Library ===
 
  +
WeBWorK includes web-based course management tools. Access to these tools is controlled by a special course named <code>admin</code>. The instructors in this course are permittied to perform administrative functions. If the admin course exists, a '''Course Administration''' link will appear on the WeBWorK home page.
   
This library contains problems related to the Hughes-Hallet et.al. Harvard Calculus text. Send corrections to Gavin Larose, <code>glarose at umich.edu</code>, or even better enter them into the WeBWorK bugzilla via the "report problem bugs" on the PG editor page. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/umich_problib/?cvsroot=University+of+Michigan CVS])
 
  +
If you created a <code>wwadmin</code> group, create the admin course as follows:
   
'''''To check out this library:'''''
 
  +
$ cd /opt/webwork/courses
  +
$ newgrp wwadmin
  +
$ umask 2
  +
$ addcourse
  +
$ addcourse admin --db-layout=sql_single --users=adminClasslist.lst --professors=admin
  +
$ exit
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/umich co umich_problib
 
  +
If you did not create a <code>wwadmin</code> group, create the admin course as follows:
   
=== University of Rochester Math Problem Library ===
 
  +
$ sudo -u www-data addcourse admin --db-layout=sql_single --users=adminClasslist.lst --professors=admin
   
The Rochester Math Problem Library should now be fully funcitonal. A few of the problems may not work as advertised, since they may have trouble finding the links to auxiliary materials, such as external graphs. Please send links of any problems that don't work to <code>gage at math.rochester.edu</code> or even better enter them into the WeBWorK bugzilla via the "report problem bugs" on the PG editor page. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/rochester_problib/?cvsroot=UR+Problem+Library CVS])
 
  +
Replace <code>www-data</code> with the user your webserver runs as.
   
The Rochester library includes many problems prepared by Zbigniew Fiedorowicz at Ohio State University as well as a large number of problems prepared by Jun Wang at Alabama State University
 
  +
See [[Administrator's_Guide/Course_Administration#Permissions_issues|permissions issues]] for more about getting the permission right when using the command-line tools.
   
'''''To check out this library:'''''
 
  +
After you create the course, visit the WeBWorK home page on your server, usually located at <code>http://yourserver.yourschool.edu/webwork2</code>. Click on the '''Course Administration''' link. You can also access the admin course directly, at <code>http://yourserver.yourschool.edu/webwork2/admin</code>.
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/rochester co rochester_problib
 
  +
To log in, enter <code>admin</code> for your username and <code>admin</code> for your password. Once logged into the admin course, the first thing you should do is change the password for the admin account. You can do this by clicking the '''Password/Email''' link on the links menu. After you do this, you may add accounts for any additional people who should have administrative access using the '''Class List Editor''' link.
   
=== University of Rochester Physics Problem Library ===
 
  +
== Where to go from here ==
   
These physics problems were originally written in CAPA and mechanically translated into the PG language. Thanks to help from Frank Wolfs the .eps file pictures now display properly. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/rochester_physics_problib/?cvsroot=UR+Problem+Library CVS])
 
   
'''''To check out this library:'''''
 
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/rochester co rochester_physics_problib
 
  +
Read the [[Administrator's Guide/Course Administration|Course Administration]] for more information about managing courses.
   
=== University of Rochester Grade 8 Math Problems ===
 
  +
Read [[Problem Libraries]] for information on installing libraries of pre-written WeBWorK problems.
   
These problems, written largly by Tori Sweetser, contain material at the level of
 
  +
Read MoodleIntegration for information on including WeBWorK problem sets in Moodle courses. (Experimental)
the New York State 8th grade exams. Many of these problems are written using the multiple choice and matching tools. Send corrections to <code>gage at math.rochester.edu</code>. ([http://cvs.webwork.rochester.edu/viewcvs.cgi/rochester_grade8problems/?cvsroot=UR+Problem+Library CVS])
 
   
'''''To check out this library:'''''
 
  +
Read LdapAuthentication for information about LDAP authentication. (Experimental)
   
cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/rochester co rochester_grade8problems
 
  +
Consult the WeBWorKDocs topic for other WeBWorK documentation.

Revision as of 10:08, 7 February 2008

Installation instructions for specific operating systems

These manuals offer command-by-command procedures (and fewer choices) than the general instructions. They are targeted at UNIX beginners.

Dependencies

Apache

WeBWorK supports Apache 1.3 and 2.0. Apache 2.2 is supported experimentally. WeBWorK requires that the mod_alias module be available. Most vendors compile their Apache packages with the necessary features enabled.

Apache 1.3

Apache 2.0 or 2.2

Apache must be using the prefork MPM. This is because the Safe module, which WeBWorK makes extensive use of, is not threadsafe. This is set at compile time with the --with-mpm=prefork switch to the configure script.

  • Source: http://httpd.apache.org/
  • Debian/Ubuntu: apache2 with apache2-mpm-prefork
  • Red Hat/Fedora: build from source; or see below

On my Scientific Linux 4 box (i.e., RHEL4) there is no need to recompile apache; mpm-prefork is already set. Of course mod_perl2 must be compiled! -- Niels Walet - 13 Mar 2007

Perl

WeBWorK requires Perl 5.6.1 or higher.

  • Source: http://perl.org/
  • Debian/Ubuntu: perl (in the default install)
  • Red Hat/Fedora: perl (in the default install)

Perl modules

The following Perl modules are required. All are available from CPAN, and many vendors provide packages of these modules. To see if a module is installed on your system, use the following command. Replace Module with the name of the module.

$ perl -MModule -e 'print "installed!\n"'

To install a module from CPAN, use the following command as root. Replace Module with the name of the module.

# perl -MCPAN -e "install Module"

For more information about using CPAN, consult the CPAN FAQ.

module Debian/Ubuntu package Gentoo package Fedora Core 7 package
Apache::Request
(only if using Apache 1.3.x)
libapache-request-perl
Apache2::Request
(only if using Apache 2.0.x)
libapache2-request-perl libapreq perl-libapreq2
Data::UUID libdata-uuid-perl
(virtual package, provided by libossp-uuid-perl)
Data-UUID perl-uuid
Date::Format libtimedate-perl TimeDate perl-TimeDate
Date::Parse libtimedate-perl TimeDate perl-TimeDate
DateTime libdatetime-perl DateTime perl-DateTime
DBD::mysql libdbd-mysql-perl DBD-mysql perl-DBD-MySQL
Email::Address libemail-address-perl Email-Address perl-Email-Address
GD libgd-gd2-perl GD perl-GD
Iterator not packaged not packaged not packaged
Iterator::Util not packaged not packaged not packaged
Mail::Sender libmail-sender-perl Mail-Sender perl-Mail-Sender
SQL::Abstract libsql-abstract-perl unknown perl-SQL-Abstract
String::ShellQuote libstring-shellquote-perl String-ShellQuote perl-String-ShellQuote
Time::HiRes
(included in Perl 5.8 and higher)
included in perl package unknown included in perl package
XML::Parser libxml-parser-perl libxml-perl perl-XML-Parser
XML::Parser::EasyTree not packaged unknown not packaged
XML::Writer libxml-writer-perl XML-Writer perl-XML-Writer

DateTime::TimeZone: use version 0.34 or later

Versions of DateTime::TimeZone (a component of DateTime) below 0.34 suffer from a problem with displaying some time zones. Make sure you have version 0.34 or later.

Problems building Time::HiRes

Some users have reported problems building Time::HiRes through CPAN. If this is your experience, try downloading the Time::HiRes tarball from http://search.cpan.org/~jhi/Time-HiRes/ and building it manually (perl Makefile.PL && make && make test && make install).

Problems building Apache::Request or Apache2::Request

Apache::Request is one component of the libapreq library. If you run into problems building it through CPAN, try downloading the libapreq tarball from http://httpd.apache.org/apreq/.

Apache 2.0.x users should use libapreq2.

mod_perl

WeBWorK uses mod_perl to interface with the Apache server. If compiling mod_perl from source, use the EVERYTHING=1 flag to enable all mod_perl features. Most vendors compile their mod_perl packages with this setting enabled.

Apache 1.3

Apache 2.0

RHEL4/Fedora build notes

I had to use the flags below to get the compile to work correctly:

perl Makefile.PL EVERYTHING=1 DO_HTTPD=1 USE_APACI=1 APACHE_PREFIX=/usr/local/apache

-- Mark Hamrick

MySQL

MySQL 4.0.x or later is required. If you are going to be using the experimental Moodle Integration, MySQL 4.1.x or later is required.

LaTeX

WeBWorK requires LaTeX for generating hardcopy output and displaying mathematics graphically. Any standard LaTeX distribution that provides the commands latex and pdflatex should work. We use TeTeX.

  • Source: http://tug.org/tetex/
  • Debian/Ubuntu: tetex-bin, tetex-extra
  • Red Hat/Fedora: tetex, tetex-latex
  • Gentoo: tetex

Netpbm

WeBWorK requires Netpbm to convert images among the GIF, PNG, and EPS formats.

dvipng

WeBWorK uses dvipng to display mathematics graphically. It is only required if you wish to use the images display mode. dvipng requires the preview.sty file from the preview-latex package.

  • Source: http://dvipng.sf.net/
  • Debian: dvipng, preview-latex-style
  • Red Hat/Fedora: preview-latex-common-0.9.1-1.fedora.noarch.rpm
  • Gentoo: dvipng

WeBWorK is initially configured to work with dvipng 1.0 or greater, but can be reconfigured to work with dvipng 0.8 or 0.9. See webwork2/lib/WeBWorK/Constants.pm for details.

TtH

WeBWorK uses TtH to display mathematics as formatted HTML. It is only required if you wish to use the formatted-text display mode.

Installing the WeBWorK files

WeBWorK is typically installed using CVS. We provide version tags that correspond to each released version of WeBWorK. This ensures that you can maintain a stable system, and experimental upgrades will not be applied to your installation.

We also provide tarballs for each release. They contain the necessary CVS data to update from CVS at a later date. Choose a tarball if for some reason you do not want to use CVS. Keep in mind that because of the layout of files within the webwork2 directory tree, upgrading an existing installation is harder using a tarball than using CVS.

Creating the base directory directory

Before you begin installing files, create a base directory to hold them. We prefer /opt/webwork:

# mkdir -p /opt/webwork

To make things easier during the installation, you can give yourself write permission to this directory. That way, you won't have to become root to install the WeBWorK files:

# chown yourNameHere /opt/webwork

Installing from CVS

Installing from CVS allows you more flexibility in selecting versions of the WeBWorK code between or ahead of releases. You have several options, depending on which release tag you select when accessing the CVS repository.

CVS tags

Released version: By specifying the rel-2-4-1 tag, you get the same version of the code that you would by downloading the WeBWorK 2.4.1 tarball. This is the most conservative option. Updating will have no effect -- this code will never change.

Released version with patches: By specifying the rel-2-4-dev tag, you can stay up to date with the latest bug fixes against the released version of WeBWorK 2.4. Few, if any, new features are introduced on a patch branch. We recommend that you choose this option.

Latest code: If you do not specify a release tag, you will get the latest code. Since this code is a work in progress, it is sometimes unstable or broken. If you require features that are not in a stable release, and are willing to devote more time to keeping your installation running smoothly, this may be the option for you.

No matter what tag you chose, you can change later by specifying a new tag when running cvs upgrade.

New installation from CVS

If you do not have an existing WeBWorK installation, use the following commands to check out copies of the webwork2 and pg modules. If you are prompted for a password, press enter.

Released version:

$ cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/system checkout -r rel-2-4-1 webwork2
$ cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/system checkout -r rel-2-4-0 pg

Released version with patches:

$ cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/system checkout -r rel-2-4-dev webwork2 pg

Latest development code:

$ cvs -d :pserver:anoncvs@cvs.webwork.rochester.edu:/webwork/cvs/system checkout webwork2 pg

The message warning: cannot open /webwork/cvs/system/CVSROOT/val-tags read/write: Permission denied is harmless and should be ignored.

After checkout finishes, become root and move the directories to the your installation directory. I prefer /opt/webwork:

# cp -r webwork2 /opt/webwork/webwork2
# cp -r pg /opt/webwork/pg

Upgrading using CVS

If you already have an existing WeBWorK installation, use the following commands to update your exsting files to version 2.4. You may need to become root to run these commands (depending on your permissions situation).

Take note of the messages that CVS gives during the update. If you have modified files, you may see the message Merging differences between version1 and version2 into _filename_. This indicates that the file in question is updated in WeBWorK 2.4, and since you also made local modifications to it, CVS is attempting to merge the two changed versions.

If this process fails, because the same parts of the file were modified in both versions, you will see the message rcsmerge: warning: conflicts during merge. If you end up in this situation, you will need to resolve the conflict by editing the file in question. Consult this conflicts example from the CVS manual.

The message warning: cannot open /webwork/cvs/system/CVSROOT/val-tags read/write: Permission denied is harmless and should be ignored.

Released version:

cd /opt/webwork/webwork2
cvs  -q update -dP -r rel-2-4-1
cd /opt/webwork/pg
cvs  -q update -dP -r rel-2-4-0

Released version with patches:

cd /opt/webwork/webwork2
cvs -q update -dP -r rel-2-4-dev
cd /opt/webwork/pg
cvs  -q update -dP -r rel-2-4-dev

Latest development code:

cd /opt/webwork/webwork2
cvs  -q update -dPA
cd /opt/webwork/pg
cvs  -q update -dPA

Installing from a tarball

Tarballs of WeBWorK releases are available from our SourceForge file release page. You will need to download both a webwork tarball and a pg tarball. Make sure that the versions of the tarballs match. You can choose either a GZip or BZip2 archive.

After downloading the tarballs, untar them somewhere (like your home directory):

$ tar -xjf webwork-2.4.1.tar.bz2
$ tar -xjf pg-2.4.0.tar.bz2

If you have an existing WeBWorK installation, move your existing webwork2 and pg directories to webwork2.OLD and pg.OLD, respectively. (You will move your existing courses and configuration over to the new directories later.)

Then, become root and move the directories to the your installation directory. The installation directory should not be web-accessible. I prefer /opt/webwork:

# cp -r webwork-2.4.1 /opt/webwork/webwork2
# cp -r pg-2.4.0 /opt/webwork/pg

From now on, we will assume that WeBWorK 2 is installed in /opt/webwork/webwork2 and PG is installed in /opt/webwork/pg.

Installing fonts for jsMath

jsMath is a display mode that renders math expressions using a JavaScript implementation of the TeX math layout engine. For more information about jsMath, see http://www.math.union.edu/~dpvc/jsmath/.

Version 2.0 of jsMath introduced a new fallback method for when the TeX fonts are not available on the student's computer. This uses images of the individual TeX characters in place of the TeX fonts, but this requires a large number of individual character images in a wide range of sizes. These are distributed in webwork2/htdocs/jsMath/jsMath-fonts.tar.gz, and you need to unpack this tarball before jsMath will work properly. Use the command

$ cd /opt/webwork/webwork2/htdocs/jsMath
$ tar -xzvf jsMath-fonts.tar.gz

This will unpack the archive. Since there are 20,000 tiny files, it can take a long time, so the =v= option is used to show you the names as they are unpacked so that you know the command is actually doing something. Once the images are unpacked, jsMath's image mode fallback (the default fallback method) will work properly, and most students will have results as good as they would with the TeX fonts installed.

If you do not wish to install the jsMath image fonts (to save space, for example), you should change the value of noImageFonts in the $pg{displayModeOptions}{jsMath} hash in global.conf to 1. This will prevent jsMath from using the image fallback methods.

See also: jsMath settings

Creating the courses directory

The courses directory should be located at /opt/webwork/courses. Placing the courses directory outside the webwork2 directory makes updates easier.

You can create your courses directory from the courses.dist directory distributed with WeBWorK. This directory contains the skeleton of a course called modelCourse, which contains the template files for three demo sets. You can opt to copy templates from this set when creating new courses.

$ cd /opt/webwork/webwork2
$ cp -RPp courses.dist ../courses

If you prefer not to use modelCourse, you can create an empty courses directory instead:

$ cd /opt/webwork
$ mkdir courses

If you are upgrading from WeBWorK 2.2.x, move your existing courses into the new /opt/webwork/courses directory.

Making copies of distribution configuration files

Some files are distributed with the .dist suffix. You must make copies lacking the .dist suffix for WeBWorK to be able to find them. This is done to ease updating with CVS. The .dist files may be updated during a CVS update, but your local versions will be left untouched.

Before configuring the system, you must make local copies of the global.conf and database.conf configuration files, located in /opt/webwork/webwork2/conf/:

$ cd /opt/webwork/webwork2/conf
$ cp global.conf.dist global.conf
$ cp database.conf.dist database.conf

Setting permissions

The PG installation directory and files should be owned by root and not writable by other users:

# cd /opt/webwork/pg
# chown -R root:root .
# chmod -R u+rwX,go+rX .

Most WeBWorK directories and files should also be owned by root and not writable by other users:

# cd /opt/webwork/webwork2
# chown -R root:root .
# chmod -R u+rwX,go+rX .

Certain data directories need to be writable by the web server. These are DATA, courses, htdocs/tmp, logs, and tmp. It is convenient to give WeBWorK administrators access to these directories as well, so they can perform administrative tasks such as removing temporary files, creating and editing courses from the command line, managing logs, and so on.

The simplest way to set this up assumes that all WeBWorK administrators have root access. In this case, directories that must be writable by the web server should be given the group of the web server. In the following examples, it is assumed that the web server's group is www-data.

If you wish to perform administrative tasks without becoming root, you can either add the WeBWorK administrators to the web server's group, or create a new group called wwdata, containing both the WeBWorK administrators and the web server.

If you chose not to create the wwdata group, the WeBWorK data directories should have the group of the web server:

# cd /opt/webwork/webwork2
# chgrp -R www-data DATA ../courses htdocs/tmp logs tmp
# chmod -R g+w DATA ../courses htdocs/tmp logs tmp
# find DATA/ ../courses/ htdocs/tmp/ logs/ tmp/ -type d -a ! -name CVS -exec chmod g+s {} \;

If you chose to create the wwdata group, the WeBWorK directories that must be writable by the web server should have that group:

# cd /opt/webwork/webwork2
# chgrp -R wwdata DATA ../courses htdocs/tmp logs tmp
# chmod -R g+w DATA ../courses htdocs/tmp logs tmp
# find DATA/ ../courses/ htdocs/tmp/ logs/ tmp/ -type d -a ! -name CVS -exec chmod g+s {} \;

CVS updates and permissions

In the instructions above, you set most WeBWorK and PG files to be owned and only writable by root. If you are planning to do in-place updates of the system with CVS, you may want to set those files to be owned by a regular user instead. That will let you avoid running CVS as root, which could be a security risk. One option is to create a user account that cannot be logged into directly and use it only for WeBWorK files.

Configuring your shell

To make working with WeBWorK easier, there are a couple of changes you can make to your shell environment.

Add the WeBWorK bin directory to your path. This will allow you to run WeBWorK command-line utilities without typing the full path to the utility. If you installed WeBWorK in the default location of /opt/webwork/webwork2, add the directory /opt/webwork/webwork2/bin to your path.

if your shell is put this line in this file
bash export PATH=$PATH:/opt/webwork/webwork2/bin ~/.bashrc
tcsh setenv PATH $PATH:/opt/webwork/webwork2/bin ~/.cshrc

Set the WEBWORK_ROOT environment variable. Some command-line scripts rely on this variable to find other WeBWorK files.

if your shell is put this line in this file
bash export WEBWORK_ROOT=/opt/webwork/webwork2 ~/.bashrc
tcsh setenv WEBWORK_ROOT /opt/webwork/webwork2 ~/.cshrc

Configuring WeBWorK

Most WW configuration is done in the file /opt/webwork/webwork2/conf/global.conf. This file provides system-wide configuration settings, and defaults for course settings. Any setting in this file can be overridden in the course.conf file for a particular course.

There are several options that must be set for WW to work with your system. The rest of the file consists of customization options.

Seed variables

These are the main configuration variables of WeBWorK. The are used by the Apache configuration and by the system itself. Many other settings rely on these variables:

variable description
$webwork_url The URL associated with the WeBWorK handler. Usually /webwork2.
$pg_root The path to the PG directory. Usually /opt/webwork/pg.
$webwork_htdocs_url The URL of static WeBWorK hypertext files. Usually /webwork2_files.
$webwork_htdocs_dir The path to the static WeBWorK hypertext files. Usually $webwork_dir/htdocs.
$webwork_courses_url The URL of the courses directory. Usually /webwork2_course_files.
$webwork_courses_dir The path to the courses directory. Usually $webwork_dir/courses.

Paths to external programs

To avoid executing malicious code, WW calls external programs using full path names.

variable description
$externalPrograms{mkdir} Path to mkdir binary. Usually /bin/mkdir.
$externalPrograms{mysql} Path to mysql binary. Usually /usr/bin/mysql or /usr/local/bin/mysql.
$externalPrograms{tar} Path to tar binary. Usually /usr/bin/tar.
$externalPrograms{latex} Path to latex binary. Usually /usr/bin/latex or /usr/local/bin/latex.
$externalPrograms{pdflatex} Path to pdflatex binary. Usually /usr/bin/pdflatex or /usr/local/bin/pdflatex.
$externalPrograms{dvipng} Path to dvipng binary. Usually /usr/bin/dvipng or /usr/local/bin/dvipng.
$externalPrograms{tth} Path to tth binary. Usually /usr/bin/tth or /usr/local/bin/tth.
$externalPrograms{giftopnm} Path to giftopnm binary. Usually /usr/bin/giftopnm or /usr/local/bin/giftopnm.
$externalPrograms{ppmtopgm} Path to ppmtopgm binary. Usually /usr/bin/ppmtopgm or /usr/local/bin/ppmtopgm.
$externalPrograms{pnmtops} Path to pnmtops binary. Usually /usr/bin/pnmtops or /usr/local/bin/pnmtops.
$externalPrograms{pnmtopng} Path to pnmtopng binary. Usually /usr/bin/pnmtopng or /usr/local/bin/pnmtopng.
$externalPrograms{pngtopnm} Path to pngtopnm binary. Usually /usr/bin/pngtopnm or /usr/local/bin/pngtopnm.

Mail settings

WW sends mail in three instances. The PG system sends mail to report answers to questionnaires and free-response problems. The mail merge module is used to send mail to course participants, i.e. to report scores. The feedback module allows participants to send mail to course instructors.

To send mail, WW needs the address of an SMTP server. When connecting to the SMTP server, it must also send an email address representing the sender of the email.

variable description
$mail{smtpServer} The address of an SMTP server. If the local machine is running an SMTP server (as is likely), use localhost.
$mail{smtpSender} The address to send when connecting to the SMTP server. This has nothing to do with the From address on the mail message.

Database settings

The following settings are used in connecting to the MySQL database.

variable description
$database_dsn The location of the WeBWorK database. Usually dbi.mysql.webwork. See the Perl DBI documentation for more information about DSNs.
$database_username The username to use when connecting to the database. Usually webworkWrite.
$database_password The password to use when connecting to the database. Use a secure, random password of sufficient length.

The $dbLayoutName variable controls the default database layout that will be used for new courses. If you plan to use moodle on all new courses, set this to "sql_moodle". Otherwise, leave it set to the default, "sql_single".

You can override the default when creating a new course.

Timezone setting

You can set the local timezone to use when displaying times using the $siteDefaults{timezone} setting. To get a list of timezone names, run:

$ perl -MDateTime::TimeZone -e 'print join "\n", DateTime::TimeZone::all_names'

To get a list of valid timezone "links" (deprecated names), run:

$ perl -MDateTime::TimeZone -e 'print join "\n", DateTime::TimeZone::links'

Links can be shorter and more familiar, but they may be ambiguous.

Display modes

WeBWorK has several techniques for displaying homework problems. Which of these modes is available is controlled by the $pg{displayModes} list. To disable a display mode, comment out its line from the list by inserting a =#= character at the beginning of the line.

The supported display modes are as follows:

display mode status description
plainText STABLE This mode shows the raw TeX source of mathematics. It is useful for debugging.
formattedText DEPRECATED This mode uses the tth program to represent mathematics as HTML table structures. Output quality depends on the browser. There are typically font problems on the Mac platform.
images STABLE This mode uses the dvipng program to represent mathematics as PNG images. This gives excellent output on all browsers, but uses more bandwidth, as the images must be sent to the client.
jsMath STABLE This mode uses jsMath to display mathematics. The raw TeX is sent to the client, where a JavaScript program displays it. This requires the client to have a decent JavaScript implementation, and can be slow on older machines.
asciimath DEPRECATED This mode converts mathematics to ASCIIMath on the server and uses a <nobpo>JavaScript to convert them to MathML on the client. Requires a Mozilla-based browser or MSIE with the MathPlayer plugin.
LaTeXMathML EXPERIMENTAL This mode is a modification of the asciimath mode that skips the intermediate ASCIIMath form. Requires a Mozilla-based browser or MSIE with the MathPlayer plugin.

jsMath settings

When a student doesn't have the TeX fonts installed, jsMath can display a warning message pointing to the jsMath font download site. Since the image-mode fallback method is of high enough quality, most students will not feel the need to download and install the fonts, so this warning message is disabled by default. (It tended to worry the students, and there is a link to the download page on the control panel that is new in version 2.0 of jsMath).

jsMath settings are stored in the $pg{displayModeOptions}{jsMath} hash:

variable description
reportMissingFonts Set to 1 if you want to have a message displayed for students who don't have the TeX fonts installed. The warning will only be shown on the first page they view that used jsMath (and there is a "hide" button that they can use to hide it even on that page). They can use the control panel to disable the warning messages permanently for their computer, if they want, so even if you turn on the warning message, it is not too intrusive.
missingFontMessage An HTML string that will be used for the missing font message (when reportMissingFonts is non-zero). This string will replace the default warning message, and can be used to point to your own page of instructions for getting the fonts, for example, or for using the control panel to disable the warning.
noImageFonts Set to 1 to prevent jsMath from using the image fallback method. This can be useful if you elected not to unpack the jsMath-fonts.tar.gz archive.
processDoubleClicks By default, double-clicking on the math expression will display the TeX source that generated it. If you wish to disable this behavior, set this to 0. (Note that the raw TeX is still available in the page's HTML source.)

Configuring the database

WeBWorK uses a single MySQL database to store course data. By default, this database is named webwork and is accessed by a MySQL user named webworkWrite.

Creating a new database

If this is a new installation, you must create the webwork database:

$ mysql -u root -p mysql
Password: ***
> CREATE DATABASE webwork;
> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, LOCK TABLES
ON webwork.* TO webworkWrite@localhost IDENTIFIED BY 'password';
> exit
Bye
$ 

(Replace password with the password you set for $database_password in global.conf.)

Using an existing database

If you already have a webwork database from WeBWorK 2.1.x or 2.2.x, you must run the utility wwdb_check to make sure that it is up-to-date for use with 2.4.x. You should not use this utility if you are upgrading from 2.3.x or an earlier version of 2.4.x. (For example, from 2.4.1 to 2.4.2.)

To run the utility:

$ /opt/webwork/webwork2/bin/wwdb_check

The script will look at the structure of your webwork database, and alert you to missing tables, missing fields, and incorrect field types. You will have the option to fix these problems.

WeBWorK 2.4 requires permision to LOCK TABLES in the webwork database. Use the mysql console to add it:

$ mysql -u root mysql
Password: ***
> GRANT LOCK TABLES ON webwork.* TO webworkWrite@localhost;
> exit;
$

Automated database initialization and upgrade

WeBWorK 2.3.0 introduces an automatic database upgrade system. Rather than manually issuing SQL commands to make changes to the database, or using ad-hoc scripts like wwdb_addgw, there is a single script called wwdb_upgrade that applies any necessary updates. It should be run when creating a new database, and any time you upgrade WeBWorK.

$ /opt/webwork/webwork2/bin/wwdb_upgrade

Add the -v switch to get more information about what the script is doing.

Image depths database

The "images" display mode has the capability to store depth information in a depths table when equation images are generated. The information allows better alignment of images with surrounding text. In previous versions of WeBWorK, the depths table was stored in a separate database, named DvipngDepths. Starting with WeBWorK 2.3.0, it is stored in the webwork database itself.

If you are upgrading an existing installation, and you had set $pg{displayModeOptions}{images}{dvipng_align} to mysql in the old version, you have depths information stranded in your old DvipngDepths database, and existing images will lose access to this information.

The easiest way to solve this is to delete the existing images. This is probably a good idea anyway when upgrading since existing images won't take advantage of rendering improvements, dvipng improvements, etc. To delete the images:

$ /opt/webwork/webwork2/bin/remove_stale_images --days=0 --delete

Configuring Apache

Testing mod_perl

To verify that mod_perl is installed, you can use mod_info to list the installed modules. If mod_info itself is disabled or not installed, you can either install/enable it, or skip this test and check using Apache::Status instead. The process for installing and enabling modules varies by distribution. To configure mod_perl, uncomment the location block <Location /server-info> in your Apache config file (usually httpd.conf or apache.conf). It should look something like this:

<Location /server-info>
   SetHandler server-info
   Order deny,allow
   Deny from all
   Allow from localhost
   Allow from .yourschool.edu
</Location>

You may have to add the Order, Deny, and Allow lines yourself, or there may already be lines there you can customize. Restart Apache (apachectl graceful) and visit http://yourserver.yourschool.edu/server-info. You should see an entry in the list of active modules for mod_perl.

To further test mod_perl, you can install the Perl module Apache::Status. After installing, add the following section to your Apache config file:

<Location /perl-status>
   SetHandler perl-script
   PerlHandler Apache::Status
   Order deny,allow
   Deny from all
   Allow from localhost
   Allow from .yourschool.edu
</Location>

Restart Apache (apachectl graceful) and visit http://yourserver.yourschool.edu/perl-status. You should see a page listing various information about mod_perl.

Enabling WeBWorK

Once mod_perl is working, Apache must be configured to handle requests for WeBWorK. Apache provides access to WeBWorK through three URL locations:

  • The location that is handled by the Apache::WeBWorK module, usually /webwork2.
  • The location of system-wide resources, usually /webwork2_files.
  • The location of course-specific resources, usually /webwork2_course_files.

WeBWorK ships with an Apache config file that you can include in your main Apache config file. The file is named webwork.apache-config.dist and located in the conf directory. First, copy the file to webwork.apache-config:

$ cd /opt/webwork/webwork2/conf
$ cp webwork.apache-config.dist webwork.apache-config

Then, edit the copy to set the $webwork_dir variable to the path of the directory containing the WeBWorK installation. This is usually /opt/webwork/webwork2. This value is used to read the WeBWorK configuration file and get the rest of the configuration data.

Further down in the file, you may want to customize the directives used to define the association between Apache and WeBWorK. Specifically, you may need to add the following to the <ocation> and <Directory> stanzas, to permit access:

Order allow,deny
Allow from all

After editing webwork.apache-config, append the following line to your Apache configuration file:

Include /opt/webwork/webwork2/conf/webwork.apache-config

If you are upgrading from a previous version of WeBWorK which did not use the webwork.apache-config file, you will need to remove the WeBWorK-related directives from your Apache configuration.

Then restart Apache and test your configuration:

Experimental support for Apache 2.0.x

If you are using Apache 2.0.x, follow hte directions above, with these changes:

Enable the libapreq module by adding the following line to your Apache2 configuration file. Place this line with the other LoadModule lines.

LoadModule apreq_module modules/mod_apreq.so

Use the module Apache2::Status in place of Apache::Status.

Use the file webwork.apache2-config in place of webwork.apache-config.

Creating the admin course

WeBWorK includes web-based course management tools. Access to these tools is controlled by a special course named admin. The instructors in this course are permittied to perform administrative functions. If the admin course exists, a Course Administration link will appear on the WeBWorK home page.

If you created a wwadmin group, create the admin course as follows:

$ cd /opt/webwork/courses
$ newgrp wwadmin
$ umask 2
$ addcourse
$ addcourse admin --db-layout=sql_single --users=adminClasslist.lst --professors=admin
$ exit

If you did not create a wwadmin group, create the admin course as follows:

$ sudo -u www-data addcourse admin --db-layout=sql_single --users=adminClasslist.lst --professors=admin

Replace www-data with the user your webserver runs as.

See permissions issues for more about getting the permission right when using the command-line tools.

After you create the course, visit the WeBWorK home page on your server, usually located at http://yourserver.yourschool.edu/webwork2. Click on the Course Administration link. You can also access the admin course directly, at http://yourserver.yourschool.edu/webwork2/admin.

To log in, enter admin for your username and admin for your password. Once logged into the admin course, the first thing you should do is change the password for the admin account. You can do this by clicking the Password/Email link on the links menu. After you do this, you may add accounts for any additional people who should have administrative access using the Class List Editor link.

Where to go from here

Read the Course Administration for more information about managing courses.

Read Problem Libraries for information on installing libraries of pre-written WeBWorK problems.

Read MoodleIntegration for information on including WeBWorK problem sets in Moodle courses. (Experimental)

Read LdapAuthentication for information about LDAP authentication. (Experimental)

Consult the WeBWorKDocs topic for other WeBWorK documentation.