Build mod_pagespeed From Source
Note: If you're using CentOS, Fedora, RHEL, Debian, Ubuntu, or any other Linux distribution that uses RPM or DEB packages, we recommend that you install mod_pagespeed from binary packages.
The build has been tested on Ubuntu Lucid and CentOS 5.4. It should work elsewhere; if you try it somewhere new, please send a note to our discussion group with your success or failure.
Prerequisites
We require Apache (>= 2.2), Python (>= 2.7), g++
(>= 4.1),
svn
(>= 1.8), git
(>= 1.8), gperf
, and make
.
To install these on Debian or Ubuntu run:
sudo apt-get install apache2 g++ python subversion gperf make devscripts fakeroot git curl zlib1g-dev uuid-dev
On CentOS, run:
sudo yum install httpd gcc-c++ python subversion gperf make rpm-build git curl zlib-devel libuuid-devel
CentOS 5 does not include git in its repositories. If you are running CentOS 5 or another operating system with a version of git older than 1.8, to install git 1.8 or higher, you must build it from source.
sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel wget https://www.kernel.org/pub/software/scm/git/git-2.0.4.tar.gz tar -xf git-2.0.4.tar.gz cd git-2.0.4/ ./configure make sudo make install
To build on CentOS 5, or on older versions of Debian or Ubuntu, you can install Python 2.7 from source.
wget http://www.python.org/ftp/python/2.7/Python-2.7.tgz tar xzf Python-2.7.tgz cd Python-2.7 ./configure --prefix=/usr/local make -j >make.log sudo make install
Install the Chromium Depot Tools
We require the Chromium depot_tools
, which are used to build
open-source projects with dependencies on other open-source projects. Download
it with:
mkdir -p ~/bin cd ~/bin git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --depth=1
You will need to add the depot_tools
to your
path. In bash
you would run:
export PATH=$PATH:~/bin/depot_tools
Check out mod_pagespeed and dependencies
For building version 1.12 and later:
git clone -b latest-stable --recursive https://github.com/apache/incubator-pagespeed-mod.git --depth=1 cd incubator-pagespeed-mod python build/gyp_chromium --depth=. make BUILDTYPE=Release mod_pagespeed_test pagespeed_automatic_test
For version 1.11.x and older, the build system is different:
You need to download the source code for mod_pagespeed and all of its dependenceies. Thegclient
command (which is one of
the depot_tools
) will do this for you.
mkdir ~/mod_pagespeed # Any directory is fine. cd ~/mod_pagespeed gclient config https://github.com/apache/incubator-pagespeed-mod.git --unmanaged --name=src git clone https://github.com/apache/incubator-pagespeed-mod.git src --depth=1 cd src git checkout latest-stable cd .. gclient sync --force --jobs=1 cd src make AR.host=`pwd`/build/wrappers/ar.sh AR.target=`pwd`/build/wrappers/ar.sh \ BUILDTYPE=Release mod_pagespeed_test pagespeed_automatic_test
Build & Run Tests
To make sure mod_pagespeed will work on your system we provide some automated tests. To run the tests:
./out/Release/mod_pagespeed_test ./out/Release/pagespeed_automatic_test
To successfully pass the HTTPS fetching tests, you may need to first set environment variables to find the certificate files. On Ubuntu, the test binaries should have the correct paths by default. On CentOS, these settings should work:
export SSL_CERT_DIR=/etc/pki/tls/certs export SSL_CERT_FILE=/etc/pki/tls/cert.pem
If you get any other errors while running tests, report a bug or write to our discussion group.
Compile
To compile mod_pagespeed, run the commands below. You should to omit the AR arguments for latest-beta.
cd ~/mod_pagespeed/src make AR.host=`pwd`/build/wrappers/ar.sh AR.target=`pwd`/build/wrappers/ar.sh BUILDTYPE=Release
To see the actual g++
commands, you can
add V=1
to the above command. If you ran the tests
above, this step should complete quickly.
Install
For RPM/DEB platforms, you can use the packaging instructions in the Building Packages section below. For other platforms you can use the custom installer documented here:
cd install
If you built and installed the Apache web server from source (as opposed to
installing using a RPM/DEB package manager), you can use
the install_apxs.sh
script:
./install_apxs.sh
The script will infer the proper installation locations for your system, based
on information gathered from the Apache apxs
tool. These defaults
can be overridden on the command line by specifying environment variables. See
the contents of the install_apxs.sh
script for specific details on
these environment variables. If you installed Apache in a non-default location,
you may need to tell the script where to find the apxs
tool, like
so:
# Specify the path to your apxs binary APXS_BIN=/usr/local/exampleapache/bin/apxs ./install_apxs.sh
Alternatively, if you already know all of the installation details for your system, then you can run the Makefile with custom parameters for:
APACHE_ROOT=/etc/httpd APACHE_MODULES=/etc/httpd/modules APACHE_CONTROL_PROGRAM=/etc/init.d/httpd APACHE_USER=www-data APACHE_DOC_ROOT=/var/www/html ... # see Makefile for more options
Run:
make APACHE_ROOT=... ... staging sudo make ... install # Use make ... -n install to see the commands without executing sudo make ... stop start # Restart your apache server
For the common configurations of Ubuntu and CentOS, we have included simple installer wrappers ubuntu.sh and centos.sh for your convenience. You can use these as examples to build scripts for your custom environment and then run them as:
./ubuntu.sh staging sudo ./ubuntu.sh install sudo ./ubuntu.sh stop start
Update
You can repeat the install process at any time to re-install mod_pagespeed and update it to the latest version.
To update to the latest version, first checkout the latest tag:
git pull --tags # pulls tags and all required commits git checkout latest-beta git cherry-pick 651a2503f81 # The gyp dependency moved after we released.
Then sync your client:
gclient sync --force --jobs=1
Now you can re-build and install using the instructions above.
Build Packages
You can build RPM or DEB packages using the following commands:
python build/gyp_chromium -Dchannel=beta make BUILDTYPE=Release AR.host=`pwd`/build/wrappers/ar.sh AR.target=`pwd`/build/wrappers/ar.sh linux_package_rpm
or
python build/gyp_chromium -Dchannel=beta make BUILDTYPE=Release AR.host=`pwd`/build/wrappers/ar.sh AR.target=`pwd`/build/wrappers/ar.sh linux_package_deb
The resulting package file will be in the out/Release
directory.
Note: These packages will only work if you
installed Apache using RPM or DEB packages as well. Notably, if you installed
Apache using cPanel, these packages will not work. Instead you must follow the
installation instructions above. See also:
FAQ:
I installed Apache 2.2 using cPanel, and can't get mod_pagespeed to work when I
install from the .deb
or .rpm
.
Standalone CSS Minification
The PageSpeed CSS minifier can be built as a stand-alone command-line program.
To build it, in the same directory that you ran the other make commands above
(~/mod_pagespeed/src
in the example), run:
make AR.host=`pwd`/build/wrappers/ar.sh AR.target=`pwd`/build/wrappers/ar.sh BUILDTYPE=Release css_minify_main
You can run it as:
./out/Release/css_minify_main FILENAME.css > FILENAME-MINIFIED.css
Previously we recommended using the standlone CSS minifier for locating CSS constructs that PageSpeed had difficulty handling, but as of 1.9.32.1 we recommend using the debug filter instead.
This will print the parsing errors encountered
to stderr
. css_minify_main
also prints the minified
CSS to stdout
, but because we are interested only in finding
parsing errors we redirect that to /dev/null
.
Standalone JS Minification
A command-line JavaScript minifier is now installed when you install mod_pagespeed. This generates the same minified code as mod_pagespeed itself. It can be used as follows:
pagespeed_js_minify myfile.js > myfile.min.js
The minifier can also be used to generate metadata for JavaScript library canonicalization, as described in the documentation for that filter.
Other Systems
An installation guide for
for mod_pagespeed
on Gentoo was contributed by nikola.derikonjic
,
and openSUSE
packages are maintained by Robert Munteanu. If you know of any other
resources, please let us know by writing to
our discussion group.