INSTALL - Slash Installation


This document describes how to install Slash 2.2. For instructions on installation or upgrade of previous versions of Slash, see the INSTALL document included with those distributions.

These instructions have only been tested on Linux. Installation under BSD and other Unix OSes should work similarly, but there are problems with the Makefile and installtion under some non-Linux OSes. Feel free to submit bug reports (better, patches) for any such problems. We've had reports of the 1.0.x version of Slash running on Windows, but have done no testing and have no further information, and have no information about Slash 2 running on Windows.

PostgreSQL support in Slash 2 is currently alpha-quality.

Slash can always be downloaded from, from the FTP site, and via CVS.

See the page for patches and bug reports.

Important Note

The software and hardware requirements are listed at the end of the document, because we know you want to get right into the installation. Please read those requirements if you have any question about what might be required.

Upgrading information is also toward the end of the document.


Installation Notes

Installation Procedure

There are six steps to installation. Skip the parts you already have installed (making sure you have the correct versions). Make sure to read the special note about Apache / mod_perl installation.

  1. Install MySQL.

    Please refer to MySQL documentation for compilation and/or installation notes for any questions with this process. Find the script that runs mysql (probably safe_mysqld) and add these lines to the beginning of it:

            export TZ

    Start MySQL (it must be running for the installation of Perl modules and Slash).

    Create a database to be used by Slash.

    Create a username/password that can access that database (by default, we normally set the user to have all permissions, but that might not be appropriate for your site; make sure that you have at least privileges to select, insert, update, delete, create, drop, and index).

  2. Install perl.

    perl is likely already installed on your machine; make sure its version is at least the minimum required (see REQUIREMENTS).

  3. Install Apache and mod_perl.

    You MUST install mod_perl and Apache as directed here. OK, that is not strictly true, but it is mostly true. If you already have mod_perl installed, it is probably not configured properly to work with Slash and you will have to rebuild it. [If you are using the provided httpd.conf file from the slash distribution, and find that Apache is giving you errors, chances are mod_perl is not installed correctly, and you need to build it from scratch.] Of course, if you have your own Apache modules or build options, you will need to modify the instructions here appropriately.

    First, untar apache and mod_perl. Then, go to the mod_perl directory, and have mod_perl build and install apache for you:

            perl Makefile.PL APACHE_SRC=/where_you_have_the_source DO_HTTPD=1 \
                    USE_APACI=1 PERL_MARK_WHERE=1 EVERYTHING=1 \
            make test
            make install

    NOTE: You may be unsuccessful with make test if the perl modules are not yet installed. However, some Perl modules will not install without Apache and mod_perl installed. If you wish, come back and run make test after installing here, and then installing the Perl modules, to make sure everything is OK.

  4. Install the Perl modules.

    The best way to do this is with the CPAN module.

    You might also wish to install each module by hand, using distributions found on the CPAN. See perlmodinstall for more information on installing perl modules.


    Overactive CPAN
    With some versions of the CPAN module, the module will try to download and install the latest version of Perl. Watch what the module is doing; if it begins to download an entire perl distribution, interrupt it (hit ctrl-C) until it stops, then try again with the CPAN module. This should not be an issue in the latest version of Bundle::Slash.

    Uninstalling Old Modules
    Sometimes, you will be installing a newer version of a module that exists elsewhere on the system. You might want to tell the CPAN module to automatically remove older files. To do that from the CPAN shell, type:
            cpan> o conf make_install_arg UNINST=1

    Old Version
    If you have previously installed Bundle::Slash, you will want to install it again, but you will need to delete the existing version. Go to your .cpan/Bundle directory (usually ~/.cpan/Bundle/) and remove

    Additional Libraries
    You must have certain libraries existing on your system before building, for Compress::Zlib and XML::Parser (see REQUIREMENTS).

    If running BSD, also install the BSD::Resource module.

    Alternate DBs
    If not using MySQL, just allow the installation of its drivers to continue, and possibly fail. Then install the driver you need (e.g., for PostgreSQL, use "DBD::Pg") using the CPAN shell.

    When installing DBIx::Password, you will be asked for various information, the same information used to create the database and database user in Step 1. You will also be asked for a virtual user name, which will be the identifier for all of this data. You can just use the name of your site, or any other alphanumeric string. You will use this virtual user name in other places, so do not forget it.

    libnet Broken
    libnet is currently broken somewhat in its tests. Please use install Net::Cmd first, before you install anything else. If it fails only tests 8 and 9 of t/require, then it is OK; just do force install Net::Cmd, then continue on with the rest of the modules installation.

    To use the CPAN module, invoke the CPAN shell:

            perl -MCPAN -e shell

    After it has been configured, install Bundle::Slash:

            cpan> install Bundle::Slash

    To read the README for any module, before or after installing:

            cpan> readme MODULE

    If you have problems, feel free to re-run install Bundle::Slash. It will safely skip anything already installed.

    To read the documentation of any of the modules, once they have been installed, type perldoc MODULE at the command line.

  5. Install Slash.

    Unpack the distribution and go to the new directory that creates, and type:

            make install

    Note: you will want the GNU versions of fileutils (version 4.0 recommended, for cp and install) and make. Older versions of install, and make and cp from other systems, might not work.

    There are a few options to make and make install you may want to change.

            option          default                 purpose
            SLASH_PREFIX    /usr/local/slash        Location for
                                                    installed files
            INIT            /etc or /etc/rc.d       Location for init
            USER            nobody                  User to own files
            GROUP           nobody                  Group to own files
            CP              cp                      Name of or path to
                                                    alternate `cp`
            INSTALL         install                 Name of or path to
                                                    alternate `install`

    (USER and GROUP will also be changed later on a per-site basis, in step 6. while running install-slashsite.)

    So, for example, you might type (although the default SLASH_PREFIX is strongly recommended):

            make SLASH_PREFIX=/home/slash
            make install SLASH_PREFIX=/home/slash

    When done, a configuration file for Apache will be created at $SLASH_PREFIX/slash.conf. You can put its contents into your httpd.conf, or you can just Include it in your httpd.conf.


    Please be aware that if you include $SLASH_PREFIX/slash.conf or $SLASH_PREFIX/sites/sitename/sitename.conf more than once, or if this file shares contents with directives in httpd.conf, that your Slash site WILL break. The directives in $SLASH_PREFIX/slash.conf should be run only ONCE in any any site context. Read through $SLASH_PREFIX/slash.conf to make sure it all looks proper.

  6. Install your Slash site.

    Go to your installation directory (by default, /usr/local/slash) and execute (where VIRTUAL_USER is the name of the virtual user given in the DBIx::Password distribution):

            bin/install-slashsite -u VIRTUAL_USER

    The program will prompt for answers to several configuration questions. Answer the questions. When done, another configuration file will be created at $SLASH_PREFIX/$SITENAME/$SITENAME.conf. You can put its contents unto your httpd.conf, or you can just Include it in your httpd.conf.

    NOTE: Read the message printed at the end of running install_slashsite.

  7. Start it up.

    After installation of the site is done, and Apache has been stopped and started (do NOT try to restart Apache, but do a full stop and start), run slashd. This should be done via the init script:

            /etc/init.d/slash start

    slashd is the daemon that runs routine maintenance on Slash sites, including sending out daily mailings, cleaning up the database, and updating stories. The init script above will start up an individual slashd daemon process process for each installed site.


Multiple Servers

You can, of course, have a separate database server from your Slash server. Further, you can have multiple web servers for one Slash site. Slashdot, for instance, has one primary server with all of the code (Apache, perl, etc.), and it runs slashd and NFS. Each web server then mounts the code read-only over NFS. Some notes:

Virtual Hosts

Slash has support for virtual hosts, so you can have multiple Slash sites on one machine. Simply execute step 6 in the install process for each Slash site (after adding a new virtual user to DBIx::Password for each).


In Slash, there are two variables for the root URL of the site. absolutedir is the full URL, including protocol, while rootdir is the URL without protocol:

        rootdir         //

absolutedir is used only for creating external links to the site (such as in RSS files). rootdir is used for internal links; that way, you can use the same HTML pages for SSL and non-SSL. You don't have to do anything special to the code or preferences to allow it to work with SSL by itself, SSL and non-SSL together, or non-SSL by itself.


It is possible to install and run everything here without root.

Describing the process for a non-root install would take up significant space and time, having to account for differences in various systems, and all the workarounds necessary for it to work.

If you must have a non-root install, consult the various documentation for Apache, MySQL, and perl about running and installing without root access. Then, for Slash, you simply need to set the make variables PREFIX, SLASH_PREFIX, and INIT appropriately for your needs.

Note: Slash (or, more accurately, Apache + mod_perl and MySQL) take up a lot of system resources. It is not advisable for anyone to run Slash at all on a system, without the permission of the administrator of that system.


These upgrade procedures are still in testing. Please read them entirely before beginning. We are not responsible for any loss of data or functionality.

Slash 2.0 -> Slash 2.2

Slash 2.2 is a major upgrade from Slash 2.0. It takes a little bit of work to get it going.


  2. Install Bundle::Slash. If you have done so previously, follow the instructions for removing the existing version of Bundle::Slash before proceeding.

  3. Apply this patch to your installed Slash::Install module (probably easiest to hand-edit the file):
      --- Wed May  9 15:02:34 2001
      +++  Fri Sep 28 12:44:41 2001
      @@ -116,7 +116,7 @@
       sub writeTemplateFile {
              my($self, $filename, $template) = @_;
              open(FILE, '>' . $filename) or die "$! unable to open file $filename to write to";
      -       for (keys %$template) {
      +       for (qw(section description title page lang name template seclev)) {
                      next if ($_ eq 'tpid');
                      print FILE "__${_}__\n";
                      $template->{$_} =~ s/\015\012/\n/g;

  4. Run template-check on your site, and make a note of every change you've made to the standard templates. You will need to make those changes again, manually, later.

    This is unfortunately unavoidable, because templates include code that changes significantly between releases. It is recommended that you compile your changes into a THEME so they may easily be updated and applied.

  5. Stop Apache and slashd on the target machine(s).

  6. Install Slash.

    If installing on a different machine ...

    1. Install slash 2.2 as normal. Do not yet run install-slashsite.

    2. Make sure that from this machine, you can access not only the database used for this installation, but the one used for the old installation. You may wish to, instead of accessing that database directly if it on another machine, dumping it and adding it to your new database server under a different name.

    3. Add a virtual user to DBIx::Password for the old installation.

    If installing on the same machine ...

    1. Create a new database for the new installation. You cannot use the same database for both installations.

    2. Add a new virtual user to DBIx::Password for the new database, and update (and flush) MySQL privileges appropriately. You cannot use the same virtual user for both installations.

    3. It is highly recommended that you move /usr/local/slash (or whatever your installation directory is) to a new location, such as /usr/local/slash-old, and install a clean slash 2.2 installation. However, this is not necessary to do; you may install slash 2.2 on top of the slash 2.0 installation.

      The reason to not move anything is that you can keep any customizations done (images, additional scripts and plugins, static files, etc.). The reason to move it is so that everything is clean. It is highly recommended that you move it, and then manually copy back the pieces you want.

    4. In any event, either move the old directory, or don't, and then install slash 2.2 as normal. Do not yet run install-slashsite.

  7. If you have plugins or themes from the old installation to install, copy them over now. Warning: some plugins and themes might need to be ported first. You may wish to deal with them later if they are not yet ported to slash 2.2.

  8. Run install-slashsite. Use the new virtual user.

  9. Copy over any files (images, FAQs, etc.) that need to be copied, if necessary.

  10. Run update script, utils/slash2toslash2.2. Read its instructions!

  11. Update templates.

  12. Doublecheck Apache configs (httpd/slash.conf, site/sitename/sitename.conf). These configs have changed from the last version. Read the comments and set them up as desired.

  13. Start Apache.

  14. Start slashd.

Slash 2.2.x -> Slash 2.2.y

Read all of this section before doing any of it.

The first thing to do is to, as per the instructions below under INSTALLATION, unpack the latest distribution and run make and make install with the proper arguments.

Overwriting Changes
This process will overwrite any customizations of your installed modules, or customizations of the installed scripts in /usr/local/slash/themes/ and /usr/local/slash/plugins/ (for themes and plugins that come with Slash). If you ran install-slashsite with the default option of using symlinks, and made customizations to the originals instead of breaking the symlink and copying the file over, then this will overwrite your changes.

If you did modify the original instead of a copy, then break the symlink, copy over the original (as modified), and then continue. The original will be copied over by the new version, and your modified copy will remain intact.

With every update, there are changes to templates. But most people will modify their templates. A relatively simple way to see what has changed is to use template-tool and template-check. This procedure should help most users deal with the integration of new templates into an existing site (it will only work with the slashcode theme, but a simple modification to the code of template-check can fix that).
Use template-tool to dump your templates into an empty directory.
        % mkdir templates
        % cd templates
        % template-tool -u VIRTUAL_USER -d

(Defaults to current directory.)

Use template-check to compare installed templates in /usr/local/slash/themes/slashcode/ and /usr/local/slash/plugins/ against the templates that have been dumped.
        % template-check -u VIRTUAL_USER

(Defaults to current directory.)

This will use diff to show you the differences. You can either go into the templates with a text editor (in another window) and change the dumped ones by hand, edit them by hand in the Template Editor via the web browser, or take a note of every template you want to copy over your existing template.

After each directory of templates is done, hit "q" to continue to the next plugin/theme.

If you made changes by hand via the web, you are done. Otherwise, take the list of templates to update, and pass the full filenames to template-tool (this will either be the templates you modified by hand in the dump directory, or the unmodified ones in the installation directories). You might need to put each filename in quotes because of the ";" character in the filenames. This will overwrite your existing template with the new template.
        % template-tool -u VIRTUAL_USER -s LIST

Slash 1.0 -> Slash 2.2

Please read the complete documentation of utils/slash1toslash2.2. It is a program that will convert your database from Slash 1.0 to a new Slash 2.2 database. The program documentation (which can be read with perldoc) details exactly what process it follows to do the conversion, so you can attempt to do it by hand if you prefer.



Below, the main software components needed are listed. The recommended version is noted, along with the earliest version that has been tested (or is expected) to work. The earliest versions are not necessarily supported, but should work. perl 5.005_03 is supported, but MySQL 3.22 is not.

Version 5.6.1 (5.005_03).

Version 3.23.42 (3.23).

Version 1.3.20 (1.3.6).

Versions 1.26 (1.21).

Sendmail or other transport daemon
Refer to your OS distribution.

Perl module distributions
See and to get each module individually; however, we recommend you download them using the CPAN module.

The latest version of each module is recommended.

For Compress::Zlib, the zlib development library is required. For XML::Parser, the expat library is required. If they are not present on the system already, download and install them before installing the modules.

The following required distributions are all included in the Bundle::Slash distribution.

Template-Toolkit (version 2)


There are no specific hardware requirements. Apache (with mod_perl) and MySQL both take up a lot of RAM; running a complete system with 128MB might be possible, if you do some tuning of the configuration, but a practical minimum 256MB is recommended, though less could be sufficient with some tuning.Storage space depends on how busy you expect the site to be; 250MB is possible, but a minimum 1GB is recommended. Necessary processor speed is also dependent on how busy the site is; Pentium 133 or equivalent might work, but less than a Pentium II/200 is not recommended.

For the curious, Slashdot (as of September 2001) runs on nine machines: nine webservers (each is Pentium III/600, 1GB RAM, 9GB hard drive), one NFS server (600MHz PIII, 1GB RAM), and three database servers database server (quad 600MHz PIII, 4GB RAM). One database server is live, one is a replicated backup, and a third is for doing live searches and performance-intensive SELECTs by daemons etc.

However, this is certainly overkill for most sites (and possibly even overkill for Slashdot). runs on two web servers and one NFS/database server. Many sites can run fine on just one machine for everything (we use a minimum of two web server machines on every site for load balancing and redundancy).


Each version of slash has a code name, and the files on CVS for that version are tagged with that name. The current release is always MAIN. The versioning scheme is as Linux and Perl are, revision.version.subversion. version is even for releases, and odd for development. The codename applies to the development version and subsequent release.

For example, 1.0.11 is a normal release, while 1.1.0 is the first development release for what will be the next release (either 1.2 or 2.0).

The CVS repository is tagged with version numbers, so to get release 1.0.3, use tag "v1_0_3_0". The last number (in this case a zero) will be incremented during development ("v1_0_3_1", "v1_0_3_2", etc.) until the next release.