Katlas installation notes: Difference between revisions

From Knot Atlas
Jump to navigationJump to search
m (Reverted edits by LapasOrsit (Talk); changed back to last version by Drorbn)
 
(121 intermediate revisions by 12 users not shown)
Line 1: Line 1:
On July 14, 2007 we've upgraded MediaWiki to version 1.10.1. The pre-upgrade installation notes are at [[MediaWiki 1.4 installation notes]].
Okay... these are my notes while trying to setup [http://katlas.math.toronto.edu/wiki/ the wiki on katlas].


==Upgrading MySQL==
===Fixing search===
In file <tt>/www/html/w/skins/MonoBook.php</tt> change <tt>&lt;form ... id="searchform"&gt;</tt> to <tt>&lt;form method=post ... id="searchform"&gt;</tt>.
For better or worse, I decided to upgrade MySQL to version 4.0 before doing anything else. I mostly followed [http://dev.mysql.com/doc/mysql/en/linux-rpm.html these instructions].


===Rendering PNG===
''Warning: do not install MySQL 4.1. It is incompatible with mediawiki. Install version 4.0.''
Follow the instructions at http://mywiki.ncsa.uiuc.edu/wiki/MediaWiki_Servers#Problems_Rendering_PNG_Images:

*Add to LocalSettings.php
For this I need three RPMs which are all available with only a little digging at [http://www.mysql.com/ mysql.com]
<pre>
* MySQL-shared-compat-4.0.25-0.i386.rpm
$wgMimeDetectorCommand = "file -bi";
* MySQL-server-4.0.25-0.i386.rpm
</pre>
* MySQL-client-4.0.25-0.i386.rpm
*then rebuild images

<pre>
The first of these is required so we don't break dependencies while upgrading. Install it first, with
# cd /www/html/w/maintenance
:rpm -iv MySQL-shared-compat-4.0.25-0.i386.rpm
# php rebuildImages.php
Then upgrade the other two packages
Processing image...
:rpm -U MySQL-server-4.0.25-0.i386.rpm
Finished image... 3 of 4 rows updated
:rpm -U MySQL-client-4.0.25-0.i386.rpm
Processing oldimage...
Finished oldimage... 2 of 2 rows updated
#
</pre>


===Creating nice thumbnails with ImageMagick===
Note the warning the server install gives --
Unfortunately, they've broken things in mediawiki 1.10, and creating thumbnails of transparent gifs is horrible. If you make the following changes to /includes/media/Bitmap.php, things should behave just like in mediawiki 1.4 (i.e. perfectly, for our purposes).
<pre>
<pre>
// replacing this all with something much simpler from around mediawiki 1.4
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
# $cmd = wfEscapeShellArg($wgImageMagickConvertCommand) .
To do so, start the server, then issue the following commands:
# " {$quality} -background white -size {$physicalWidth} ".
/usr/bin/mysqladmin -u root password 'new-password'
# wfEscapeShellArg($srcPath) .
/usr/bin/mysqladmin -u root -h katlas.math.toronto.edu password 'new-password'
# // Coalesce is needed to scale animated GIFs properly (bug 1017).
See the manual for more instructions.
# ' -coalesce ' .
# // For the -resize option a "!" is needed to force exact size,
# // or ImageMagick may decide your ratio is wrong and slice off
# // a pixel.
# " -thumbnail " . wfEscapeShellArg( "{$physicalWidth}x{$physicalHeight}!" ) .
# " -depth 8 $sharpen " .
# wfEscapeShellArg($dstPath) . " 2>&1";
// here's what we used to do, back in mediawiki 1.4, and it works great.
$cmd = wfEscapeShellArg($wgImageMagickConvertCommand) .
" {$quality} -background white -geometry {$physicalWidth} ".
wfEscapeShellArg($srcPath) . " " .
wfEscapeShellArg($dstPath) . " 2>&1";
</pre>
</pre>


===Modifying the navigation box===
(note however that you need to upgrade the client package before mysqladmin is available to do this!)
Edit [[MediaWiki:Sidebar]].


===Add "tour" sidebar box===
I also deleted the local anonymous account, and put a password on the remote anonymous account. (Ask [[User:Scott]] for these passwords.)
In skins/MonoBook.php, right above the lines
<?php
if( $this->data['language_urls'] ) { ?>
add lines as follows:<pre><nowiki>
<div class="portlet" id="p-tour">
<h5><a href="/wiki/Tour_of_the_Knot_Atlas">tour</a></h5>
<div class="pBody">
<ul>
<li><a href="/wiki/5_2">5 2</a> (edit me!)
<li><a href="/wiki/5_2_Quantum_Invariants">5 2 Quantum Invariants</a>
<li><a href="/wiki/L10n85">L10n85</a>
<li><a href="/wiki/The_Multivariable_Alexander_Polynomial">Multivariable Alexander</a>
<li><a href="/wiki/Knot_Atlas:About">About</a>
<li><a href="/wiki/Data:5_2/Bridge_Index">Data:5_2/Bridge_Index</a>
<li><a href="/wiki/The_Mathematica_Package_KnotTheory%60">Knot Theory`</a>
<li><a href="/wiki/How_to_Edit_this_Manual...">How to Edit Manual...</a>
<li><a href="/wiki/Modifying_Knot_Pages">Modifying Knot Pages</a>
<li><a href="/wiki/Special:Recentchanges">Recent changes</a>
<li><a href="/wiki/To_Do">To Do</a> (history!)
</ul>
</div>
</div>
</nowiki></pre>


==="Redraw Page" tab===
==Apache==
I had to fix the server name, from katlas to katlas.math.toronto.edu in /etc/httpd/conf/httpd.conf


Add to [[MediaWiki:Monobook.js]], following [http://en.wikipedia.org/wiki/Wikipedia:WikiProject_User_scripts/Scripts/Add_purge_to_tabs Wikipedia:WikiProject User scripts/Scripts/Add purge to tabs]:
I added
AllowOverride FileInfo
AllowOverride AuthConfig
in the httpd.conf file, in the section for /var/www/html, so I could use .htaccess files to rewrite the wiki URLs nicely, and to disallow access to phpMyAdmin.


addOnloadHook(function () {
I added a [http://meta.wikimedia.org/wiki/Robots.txt robots.txt] file, to protect the wiki internals from spiders. --[[User:Scott|Scott]] 12:44, 19 Aug 2005 (EDT)
var hist; var url;
if (!(hist = document.getElementById('ca-history') )) return;
if (!(url = hist.getElementsByTagName('a')[0] )) return;
if (!(url = url.href )) return;
addPortletLink('p-cactions', url.replace(/([?&]action=)history([&#]|$)/, '$1purge$2'),
'redraw page', 'ca-purge', 'Purge server cache for this page', '0');
});


===Spam filtering===
I moved the document root from /var/www/html to /www/html. (Actually, I moved everything in /var/www to /www) This required the following steps
Follow the directions at http://www.mediawiki.org/wiki/Extension:SpamBlacklist
# in /var/www, as root <pre>cp -R --preserve * /www</pre>
# in httpd.conf, replacing /var/www everywhere with /www
# in LocalSettings.php replacing /var/www with /www in the $IP line
# test everything seems to work!
# in /var, as root, <pre>rm -Rf www</pre>
--[[User:Scott|Scott]] 12:44, 19 Aug 2005 (EDT)


===Tweaking the job queue===
This messed up webalizer, however, so I modified the appropriate line in /etc/webalizer.conf. I also added a section in http.conf to make /usage world-readable. --[[User:Scott|Scott]] 13:03, 19 Aug 2005 (EDT)
Running jobs seems to slow everything down horribly. It's '''essential''' that you add
<pre>
$wgJobRunRate = 0.01;
</pre>
to <code>LocalSettings.php</code>. It may prove necessary to add a cron job running <code>/w/maintenance/runJobs.php</code>, if the length of the job queue (see [[Special:Statistics]]) gets out of hand. This should only happen after edits to widely used templates.


In an attempt to stop the job queue from processing latex, Scott added a line to <code>includes/JobQueue.php</code>.
Restarting apache is best achieved by (as root)
<pre>
<pre>/usr/sbin/apachectl graceful</pre>
$options = new ParserOptions;
or
// turning off math rendering while processing jobs, because it's a terrible idea.
<pre>/etc/rc.d/init.d/httpd restart</pre>--[[User:Scott|Scott]] 13:17, 19 Aug 2005 (EDT)
$options->setUseTeX( false );

</pre>
Error logs can be found at /var/log/httpd --[[User:Scott|Scott]] 10:33, 26 Aug 2005 (EDT)


===Installing ParserFunctions===
We had a nasty (to diagnose!) problem with uploading large files. We had to edit /etc/httpd/conf.d/php.conf, modifying the LimitRequestBody line. --[[User:Scott|Scott]] 11:08, 23 Aug 2005 (EDT)
In order to use template-like parser functions, such as <code>{{#ifexist:<pagename>|<true>|<false>}}</code>, we need to enable the ParserFunctions extension, following the instructions at http://meta.wikimedia.org/wiki/ParserFunctions.


Download the files
==phpMyAdmin==
* [http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/ParserFunctions/Expr.php Expr.php]
Just unzip'd it into phpMyAdmin, editted the config.inc.php, and created a .htaccess and a .htpassword file
* [http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/ParserFunctions/ParserFunctions.php ParserFunctions.php]

* [http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/ParserFunctions/ParserFunctions.i18n.php ParserFunctions.i18n.php]
==MediaWiki==
and then add a line to LocalSettings.php:
I added the namespace "Data", as per [http://meta.wikimedia.org/wiki/Help:Custom_namespaces these instructions], adding
<pre>
<pre>
require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );
$wgExtraNamespaces =
array(100 => "Data",
101 => "Data talk");
$wgNamespacesWithSubpages =
array( -1 => 0, 0 => 0, 1 => 1, 2 => 1, 3 => 1,
4 => 0, 5 => 1, 6 => 0, 7 => 1,
8 => 0, 9 => 1, 10 => 0,11 => 1,
100 => 1, 101 => 1 );
</pre>
</pre>
to LocalSettings.php. (For some reason, the namespace "Knot Data" didn't seem to work?)


===Installing a PHP cache===
===Enable <nowiki><math></math></nowiki> processing===
Look at http://meta.wikimedia.org/wiki/PHP_caching_and_optimization.
First, I made the /images directory writable.


# Install PEAR, by saving http://go-pear.org/ as <code>/home/wiki/pear/go-pear.php</code>, then running <code>php go-pear.php</code> and following the prompts
Next, I installed ocaml (download the sources, ./configure, make world, make bootstrap, make opt, make install). What a pain! After that, go to the math directory under the wiki installation, and run make.
# Install APC, by running <code>/home/wiki/pear/bin/pecl install apc</code>
# Add <code>extension=apc.so</code> to <code>/etc/php.ini</code>


You can see APC's statistics at http://katlas.org/apc.php
Finally, edit LocalSettings.php to enable TeX.


Add
===Allowing .zip and .gif uploads===
In LocalSettings.php I added the line
<pre>
<pre>
# See http://www.mediawiki.org/wiki/Manual:%24wgMainCacheType
$wgFileExtensions = array( 'png','gif','jpg','jpeg','ogg','mp3','pdf','zip');
$wgMainCacheType = CACHE_ACCEL;
</pre>
</pre>
to <code>LocalSettings.php</code>.

===Installing memcached===
In my continuing quest for faster page loads, I'm trying memcached. Follow the nice instructions at http://blog.ajohnstone.com/archives/installing-memcached/.

Although it's not installed, it's not running, or being used. See http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/docs/memcached.txt?view=markup for instructions for actually running it. You'll probably need to uncomment some lines in LocalSettings.php too.

===Updating CSS and JS===
* Write [http://en.wikipedia.org/wiki/MediaWiki:Common.css MediaWiki:Common.css] on top of the local [[MediaWiki:Common.css]].
* Write [http://en.wikipedia.org/wiki/MediaWiki:Monobook.css MediaWiki:Monobook.css] on top of the local [[MediaWiki:Monobook.css]].
* Write [http://en.wikipedia.org/wiki/MediaWiki:Common.js MediaWiki:Common.js] on top of the local [[MediaWiki:Common.js]] being super-careful not to step on any of our extensions.

===Increasing PHP's memory_limit===
In LocalSettings.php, change
ini_set( 'memory_limit', '20M' );
to
ini_set( 'memory_limit', '40M' );

===Fixing "Random Page"===


The standard MediaWiki [[Special:Random|random page]] algorithm is strange, and anyway unsuitable for our purposes. See [[Fixing "Random Page"]] for the details and for our fix.
===Marking users as bots===
See [http://meta.wikimedia.org/wiki/Setting_user_rights_in_MediaWiki]. Note that all our tables have the prefix mw_. As far as I can tell, you have to guess the user number (or you can log in as that user, and go to Preferences).

Latest revision as of 17:10, 8 January 2009

On July 14, 2007 we've upgraded MediaWiki to version 1.10.1. The pre-upgrade installation notes are at MediaWiki 1.4 installation notes.

Fixing search

In file /www/html/w/skins/MonoBook.php change <form ... id="searchform"> to <form method=post ... id="searchform">.

Rendering PNG

Follow the instructions at http://mywiki.ncsa.uiuc.edu/wiki/MediaWiki_Servers#Problems_Rendering_PNG_Images:

  • Add to LocalSettings.php
$wgMimeDetectorCommand = "file -bi"; 
  • then rebuild images
# cd /www/html/w/maintenance
# php rebuildImages.php 
Processing image...
Finished image... 3 of 4 rows updated
Processing oldimage...
Finished oldimage... 2 of 2 rows updated
#

Creating nice thumbnails with ImageMagick

Unfortunately, they've broken things in mediawiki 1.10, and creating thumbnails of transparent gifs is horrible. If you make the following changes to /includes/media/Bitmap.php, things should behave just like in mediawiki 1.4 (i.e. perfectly, for our purposes).

                        // replacing this all with something much simpler from around mediawiki 1.4
                        # $cmd  =  wfEscapeShellArg($wgImageMagickConvertCommand) .
                        #       " {$quality} -background white -size {$physicalWidth} ".
                        #       wfEscapeShellArg($srcPath) .
                        #       // Coalesce is needed to scale animated GIFs properly (bug 1017).
                        #       ' -coalesce ' .
                        #       // For the -resize option a "!" is needed to force exact size,
                        #       // or ImageMagick may decide your ratio is wrong and slice off
                        #       // a pixel.
                        #       " -thumbnail " . wfEscapeShellArg( "{$physicalWidth}x{$physicalHeight}!" ) .
                        #       " -depth 8 $sharpen " .
                        #       wfEscapeShellArg($dstPath) . " 2>&1";
                        // here's what we used to do, back in mediawiki 1.4, and it works great.
                        $cmd  =  wfEscapeShellArg($wgImageMagickConvertCommand) .
                                " {$quality} -background white -geometry {$physicalWidth} ".
                                wfEscapeShellArg($srcPath) . " " .
                                wfEscapeShellArg($dstPath) . " 2>&1";

Modifying the navigation box

Edit MediaWiki:Sidebar.

Add "tour" sidebar box

In skins/MonoBook.php, right above the lines

<?php
                if( $this->data['language_urls'] ) { ?>

add lines as follows:

        <div class="portlet" id="p-tour">
          <h5><a href="/wiki/Tour_of_the_Knot_Atlas">tour</a></h5>
          <div class="pBody">
            <ul>
            <li><a href="/wiki/5_2">5 2</a> (edit me!)
            <li><a href="/wiki/5_2_Quantum_Invariants">5 2 Quantum Invariants</a>
            <li><a href="/wiki/L10n85">L10n85</a>
            <li><a href="/wiki/The_Multivariable_Alexander_Polynomial">Multivariable Alexander</a>
            <li><a href="/wiki/Knot_Atlas:About">About</a>
            <li><a href="/wiki/Data:5_2/Bridge_Index">Data:5_2/Bridge_Index</a>
            <li><a href="/wiki/The_Mathematica_Package_KnotTheory%60">Knot Theory`</a>
            <li><a href="/wiki/How_to_Edit_this_Manual...">How to Edit Manual...</a>
            <li><a href="/wiki/Modifying_Knot_Pages">Modifying Knot Pages</a>
            <li><a href="/wiki/Special:Recentchanges">Recent changes</a>
            <li><a href="/wiki/To_Do">To Do</a> (history!)
            </ul>
          </div>
        </div>

"Redraw Page" tab

Add to MediaWiki:Monobook.js, following Wikipedia:WikiProject User scripts/Scripts/Add purge to tabs:

addOnloadHook(function () {
    var hist; var url;
    if (!(hist = document.getElementById('ca-history') )) return;
    if (!(url = hist.getElementsByTagName('a')[0] )) return;
    if (!(url = url.href )) return;
    addPortletLink('p-cactions', url.replace(/([?&]action=)history([&#]|$)/, '$1purge$2'),
                   'redraw page', 'ca-purge', 'Purge server cache for this page', '0');
});

Spam filtering

Follow the directions at http://www.mediawiki.org/wiki/Extension:SpamBlacklist

Tweaking the job queue

Running jobs seems to slow everything down horribly. It's essential that you add

$wgJobRunRate = 0.01;

to LocalSettings.php. It may prove necessary to add a cron job running /w/maintenance/runJobs.php, if the length of the job queue (see Special:Statistics) gets out of hand. This should only happen after edits to widely used templates.

In an attempt to stop the job queue from processing latex, Scott added a line to includes/JobQueue.php.

$options = new ParserOptions;
// turning off math rendering while processing jobs, because it's a terrible idea.
$options->setUseTeX( false );

Installing ParserFunctions

In order to use template-like parser functions, such as <false>, we need to enable the ParserFunctions extension, following the instructions at http://meta.wikimedia.org/wiki/ParserFunctions.

Download the files

and then add a line to LocalSettings.php:

require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );

Installing a PHP cache

Look at http://meta.wikimedia.org/wiki/PHP_caching_and_optimization.

  1. Install PEAR, by saving http://go-pear.org/ as /home/wiki/pear/go-pear.php, then running php go-pear.php and following the prompts
  2. Install APC, by running /home/wiki/pear/bin/pecl install apc
  3. Add extension=apc.so to /etc/php.ini

You can see APC's statistics at http://katlas.org/apc.php

Add

# See http://www.mediawiki.org/wiki/Manual:%24wgMainCacheType
$wgMainCacheType = CACHE_ACCEL;

to LocalSettings.php.

Installing memcached

In my continuing quest for faster page loads, I'm trying memcached. Follow the nice instructions at http://blog.ajohnstone.com/archives/installing-memcached/.

Although it's not installed, it's not running, or being used. See http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/docs/memcached.txt?view=markup for instructions for actually running it. You'll probably need to uncomment some lines in LocalSettings.php too.

Updating CSS and JS

Increasing PHP's memory_limit

In LocalSettings.php, change

ini_set( 'memory_limit', '20M' );

to

ini_set( 'memory_limit', '40M' );

Fixing "Random Page"

The standard MediaWiki random page algorithm is strange, and anyway unsuitable for our purposes. See Fixing "Random Page" for the details and for our fix.