Foswiki Installation based on git

ALERT! Note: This is a developers topic. We don't recommend that production sites run directly from a git checkout. It won't have any of the compression / optimization of the js and css files!.

Once you have followed the instructions in GitRepository you can run a Foswiki instance from this clone simply by pointing Apache at it in the normal way and running configure.

By default the cloned Foswiki core won't have any of the extensions (plugins or contribs) installed. Default extensions are downloaded one level up from the Foswiki core:

To "install" extensions in a checkout area, you should use the pseudo-install.pl script to install them. On Unix/Linux this script generates soft-links from the core tree to the extensions, so you can work on your code in situ and see the impact of the changes on your live foswiki without needing to do an install step. Windows doesn't support soft links, so the script can also be run in -copy mode (the default on Windows), but in this case you will have to re-run it each time you change your extension. Remember you have to enable any plugins you want to test in configure. Use:
  • pseudo-install.pl default to enable the default contribs and plugins (e.g. TwistyContrib which is relied on by PatternSkin)
  • pseudo-install.pl developer to install the additional developer extensions. The developer option also installs all the default extensions.
See the header comment of the pseudo-install.pl script (core directory of checkout) for options and more information. Note that pseudo-install.pl only works with extensions that have a MANIFEST file, as required by the BuildContrib.

Script examples below are for bash shell.

Example of running pseudo-install

The typical situation is that you want to run a pseudo-installed Foswiki checked out from "master" branch. And if you develop plugins, you want to be able to activate your plugin in this installation. This is the entire sequence for checking out the master branch from git and doing the pseudo-install. We assume that you want to run your git based install in /var/www/foswiki

The following commands check out an absolutely minimal Foswiki (the core + default user mapping only). This is the smallest checkout that will run. The steps are:
  1. create the root directory called foswiki
  2. checkout https://github.com/foswiki/distro.git using the git master branch
    • This will check out core and all the default and developer extensions, however they are not installed yet.
  3. pseudo-install default
  4. change the ownership so the entire tree is owned by the user running the Apache. In this example the user name is "apache".
  5. point Apache at the checkout
Change the commands to fit your actual file locations and Apache user. Some commands may have to be run as root.

cd /var/www
mkdir foswiki

git clone https://github.com/foswiki/distro.git foswiki
Cloning into 'foswiki'...
remote: Counting objects: 134190, done.
remote: Compressing objects: 100% (37847/37847), done.
remote: Total 134190 (delta 87343), reused 132136 (delta 85289)
Receiving objects: 100% (134190/134190), 66.86 MiB | 1.63 MiB/s, done.
Resolving deltas: 100% (87343/87343), done.
Checking connectivity... done.

# By default this will leave you in the "master" branch, where leading edge development happens
# If you want to use the current release branch, change to the Release01x01 branch
# Skip this step if you want to remain on the experimental master branch.

cd foswiki
git checkout Release01x01
Branch Release01x01 set up to track remote branch Release01x01 from origin.
Switched to a new branch 'Release01x01'

# The extensions have all been checked out one level up from the "core" directory
# the next step is to link / copy them into the installation.  This is done with pseudo-install.

cd core
perl -T pseudo-install.pl default
Installing extensions: PatchFoswikiContrib, AutoViewTemplatePlugin, CompareRevisionsAddOn, CommentPlugin, EditTablePlugin, EmptyPlugin, FamFamFamContrib, HistoryPlugin, InterwikiPlugin, JSCalendarContrib, JQueryPlugin, MailerContrib, TablePlugin, TwistyPlugin, PatternSkin, PreferencesPlugin, RenderListPlugin, SlideShowPlugin, SmiliesPlugin, SpreadSheetPlugin, TipsContrib, WysiwygPlugin, TinyMCEPlugin, TopicUserMappingContrib, TWikiCompatibilityPlugin, core
Processing AutoViewTemplatePlugin
Linked data/System/AutoViewTemplatePlugin.txt
mkdir /var/www/fw/core/lib/Foswiki/Plugins
...
#...
#... A large amount of output is generated.  
#... Errors about dependencies on foswiki extensions can generally be ignored.  
#... The extensions are not installed in the order that would resolve all dependencies.
#... 


# If necessary, change ownership of all files to the webserver user.
# In this case that is 'apache:apache', though it may also be 'www-data:www-data'
# e.g. on Debian and Ubuntu systems, or something else entirely. Check first.
chown -R apache:apache foswiki

# Now configure Apache to use the Foswiki in /var/www/foswiki/core

  1. Use to generate configuration http://foswiki.org/Support/ApacheConfigGenerator?vhost=example.com&dir=%2Fvar%2Fwww%2Fexample.com%2Ffoswiki&pathurl=%2Ffoswiki&allowconf=&requireconf=&engine=CGI&fastcgimodule=fastcgi&apver=2&shorterurls=enabled&loginmanager=Template&phpinstalled=None&errordocument=UserRegistration
  2. Clipboard copy and save this to core/../foswiki.httpd.conf
    • cat > foswiki-svn_httpd.conf
  3. Include this httpd.conf from your apache httpd.conf
    • If you are on a Mac, you can put this file into /etc/apache2/other/ and line "Include /private/etc/apache2/other/*.conf" will pick it up.
    • Otherwise, edit your httpd.conf and add: Include /path/to/foswiki-svn_httpd.conf
    • Ensure your new .conf file has chmod a+r access
info Note: If the apache error log has lots of Symbolic link not allowed or link target not accessible type messages, then you probably need to add +FollowSymLinks to the Options for the /var/www/foswiki/dev/core/pub directory in your apache configuration.

Now and then you will want to keep your installation in sync with the latest version in the foswiki git repository. The pseudo-install script is not intelligent enough to cope with changes to MANIFESTs, so this is the idiot proof way to update. It first removes all the links (or copied files), git fetch. And finally does a new pseudo-install.
cd /var/www/foswiki/core
./pseudo-install.pl -uninstall all
git pull
./pseudo-install.pl default
chown -R apache:apache ..

Normally just doing the git pull will be enough, unless someone has removed files (and even then you can usually ignore it).

If you are a developer you can also install the kit required to run unit tests, by passing the developer parameter to pseudo-install.pl
cd /var/www/foswiki/core
./pseudo-install.pl developer

This will also install the BuildContrib and a number of other components useful to developers.

Tips, hints, and useful commands

Enable ASSERTS for more extensive testing

The unit tests run with ASSERTS enabled, but the live web environment does not. In order to enable ASSERTS, edit bin/LocalLib.cfg (If it's not there, create it by copying bin/LocalLib.cfg.txt) and un-comment the following line
$ENV{FOSWIKI_ASSERTS} = 1;

This enables additional validation tests that will impact performance, but will catch some issues that might be missed during normal web usage.

You should also install Taint::Runtime (available in most Linux distributions, or install from CPAN). This will automatically enable Perl Taint mode when asserts are enabled.

Use the CPAN modules shipped with Foswiki

Foswiki ships with a number of CPAN modules that are used only when the underlying platform is missing the modules. In order to test using the modules that are shipped with Foswiki, CPAN lib prepending should be enabled in bin/LocalLib.cfgby uncommenting the following line:

$CPANBASE = '';                     # Uncommented: Default path prepended

. See the comments in bin/LocalLib.cfg.txt for more details.

It is probably best to test using platform modules as well as the shipped modules.

Installing non-default extensions

The example commands above describe how to install a minimalist Foswiki. The pseudo-install script knows some additional tricks to use with non-default extensions. If you pseudo-install an extension that is not currently checked out, pseudo-install will automatically clone the extension from github using https://github.com/foswiki/ExtensionName.git

TIP Note that although we use release managed branches (master, Release01x00, Release01x01) in the Foswiki core distribution ("distro"), non-default extensions typically only have a "master" branch.

Here's how to install a non-default extension, using AntiWikiSpamPlugin as an example:
cd foswiki/core
 ./pseudo-install.pl AntiWikiSpamPlugin
Useless use of \E at ./pseudo-install.pl line 1553.
Useless use of \E at ./pseudo-install.pl line 1553.
Installing extensions: AntiWikiSpamPlugin
Processing AntiWikiSpamPlugin
Trying clone from git://github.com/foswiki/AntiWikiSpamPlugin.git...
Cloning into 'AntiWikiSpamPlugin'...
remote: Counting objects: 489, done.
remote: Total 489 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (489/489), 86.42 KiB | 0 bytes/s, done.
Resolving deltas: 100% (185/185), done.
Checking connectivity... done.
Cloned AntiWikiSpamPlugin OK
Linked data/Main/AntiWikiSpamBypassGroup.txt
Linked data/System/AntiWikiSpamLocalList.txt
Linked data/System/AntiWikiSpamRegistrationWhiteList.txt
Linked data/System/AntiWikiSpamRegistrationBlackList.txt
Linked data/Sandbox/AntiWikiSpamTestTopic.txt
Linked data/System/AntiWikiSpamPlugin.txt
Linked lib/Foswiki/Plugins/AntiWikiSpamPlugin.pm
Linked lib/Foswiki/Plugins/AntiWikiSpamPlugin
Linked test/unit/AntiWikiSpamPlugin
Linked /var/www/fw/core/tools/develop/githooks/commit-msg as /var/www/fw/AntiWikiSpamPlugin/.git/hooks/commit-msg
Linked /var/www/fw/core/tools/develop/githooks/pre-commit as /var/www/fw/AntiWikiSpamPlugin/.git/hooks/pre-commit
Linked /var/www/fw/core/tools/develop/githooks/commit-msg as /var/www/fw/AntiWikiSpamPlugin/../.git/hooks/commit-msg
Linked /var/www/fw/core/tools/develop/githooks/pre-commit as /var/www/fw/AntiWikiSpamPlugin/../.git/hooks/pre-commit
 AntiWikiSpamPlugin installed
Linked /var/www/fw/core/tools/develop/githooks/commit-msg as /var/www/fw/core/.git/hooks/commit-msg
Linked /var/www/fw/core/tools/develop/githooks/pre-commit as /var/www/fw/core/.git/hooks/pre-commit
Linked /var/www/fw/core/tools/develop/githooks/commit-msg as /var/www/fw/core/../.git/hooks/commit-msg
Linked /var/www/fw/core/tools/develop/githooks/pre-commit as /var/www/fw/core/../.git/hooks/pre-commit

This is handy if you have changed a lot of MANIFESTS or have manually soft-linked any files, and want to remove any broken soft links. Assume your trunk checkout is at /var/www/foswiki

find -L /var/www/foswiki/core -type l -exec rm \{\} \;

Create a new extension

You can quickly and easily create a new extension using the create_new_extension.pl script that is installed in core when you pseudo-install the BuildContrib.

Set up the unit test framework

If you are developing new code you will want to set up the development and test environment. For this you will need to pseudo-install BuildContrib, UnitTestContrib and TestFixturePlugin.

./pseudo-install.pl developer

Then:
cd test/unit
export FOSWIKI_LIBS=/var/www/foswiki/core/lib
perl ../bin/TestRunner.pl FoswikiSuite

(or equivalent on Windows)

For full details, see Development.UnitTests#SettingUpATestEnvironment
Topic revision: r4 - 27 Nov 2017, GeorgeClark
The copyright of the content on this website is held by the contributing authors, except where stated elsewhere. See Copyright Statement. Creative Commons License    Legal Imprint    Privacy Policy