install: add support for building psol from source and setting up for development (#1313)

* adds support for `--psol-from-source` so you don't need binary modules, and `--devel` so you can run our tests without going and getting all our dependencies
* adds submodules for testing: mod_pagespeed, ngx_cache_purge etc
* adds support for running as:
```
git clone git@github.com:pagespeed/ngx_pagespeed.git
cd ngx_pagespeed/
git checkout <branch>
scripts/build_ngx_pagespeed.sh [options]
```
* depends on the scripts @hillsp is working on so that we can just check out mod_pagespeed and ask it to build and rebuild itself
* adds colors to output to make it easier to read
This commit is contained in:
Jeff Kaufman
2016-12-06 09:21:42 -05:00
committed by GitHub
parent f7502b1b40
commit 247a821564
12 changed files with 407 additions and 150 deletions
+1
View File
@@ -2,3 +2,4 @@ test/tmp
psol/ psol/
psol-*.tar.gz psol-*.tar.gz
*.*.*.*.tar.gz *.*.*.*.tar.gz
nginx
+18
View File
@@ -0,0 +1,18 @@
[submodule "testing-dependencies/mod_pagespeed"]
path = testing-dependencies/mod_pagespeed
url = https://github.com/pagespeed/mod_pagespeed.git
[submodule "testing-dependencies/ngx_cache_purge"]
path = testing-dependencies/ngx_cache_purge
url = https://github.com/FRiCKLE/ngx_cache_purge.git
[submodule "testing-dependencies/nginx"]
path = testing-dependencies/nginx
url = https://github.com/nginx/nginx.git
[submodule "testing-dependencies/set-misc-nginx-module"]
path = testing-dependencies/set-misc-nginx-module
url = https://github.com/openresty/set-misc-nginx-module
[submodule "testing-dependencies/ngx_devel_kit"]
path = testing-dependencies/ngx_devel_kit
url = https://github.com/simpl/ngx_devel_kit
[submodule "testing-dependencies/headers-more-nginx-module"]
path = testing-dependencies/headers-more-nginx-module
url = https://github.com/openresty/headers-more-nginx-module
+20 -41
View File
@@ -1,50 +1,29 @@
language: c++ language: c++
env:
global:
- MAKEFLAGS=-j3
# By default travis loads submodules serially, but we can load them in parallel
# if we install an updated git and use --jobs. Some timing numbers:
# serial: 257s
# jobs=4: 182s (29s to install new git, 153s to run the downloads)
# jobs=8: 179s (29s to install new git, 150s to run the downloads)
# We can't use --depth=1, though, because github doesn't have
# allowReachableSHA1InWant set.
git:
submodules: false
before_install:
- sudo add-apt-repository --yes ppa:git-core/ppa
- sudo apt-get update
- sudo apt-get install git
- git submodule update --init --recursive --jobs=8
install: install:
- mv $TRAVIS_BUILD_DIR ~/ngxpagespeed scripts/build_ngx_pagespeed.sh --devel --assume-yes
- sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip g++ python gperf make devscripts fakeroot git curl netcat-traditional gcc-mozilla clang-3.4 2>&1 > /dev/null
- export PATH=/usr/lib/gcc-mozilla/bin:$PATH
- sudo ln -sf /usr/lib/gcc-mozilla/lib/libstdc++.so.6 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
# - sudo sh -c 'echo "image/webp webp" >> /etc/mime.types'
# - mkdir -p ~/bin
# - cd ~/bin
# - git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
- mkdir ~/mod_pagespeed
- cd ~/mod_pagespeed
- git clone --recursive https://github.com/pagespeed/mod_pagespeed.git src
- cd src
- python build/gyp_chromium --depth=.
- cd ~/mod_pagespeed/src/pagespeed/automatic
- make BUILDTYPE=Release -C ../../pagespeed/automatic all
- cd ~
- git clone https://github.com/FRiCKLE/ngx_cache_purge.git
- NGX_CACHE_PURGE=$PWD/ngx_cache_purge
- wget https://openresty.org/download/ngx_openresty-1.9.7.2.tar.gz
- tar xzf ngx_openresty-*.tar.gz
- cd ngx_openresty-*/
- ./configure --with-luajit
- make
- NGX_DEVEL_KIT=$(echo $HOME/ngx_openresty-*/build/ngx_devel_kit-*/)
- SET_MISC_MODULE=$(echo $HOME/ngx_openresty-*/build/set-misc-nginx-module-*/)
- HEADERS_MORE_MODULE=$(echo $HOME/ngx_openresty-*/build/headers-more-nginx-module-*/)
- cd ~
- wget https://github.com/nginx/nginx/archive/branches/default.zip
- unzip default.zip
- cd nginx-branches-default
- MOD_PAGESPEED_DIR="$HOME/mod_pagespeed/src" ./auto/configure --add-module=$HOME/ngxpagespeed --add-module="$NGX_CACHE_PURGE" --add-module="$NGX_DEVEL_KIT" --add-module="$SET_MISC_MODULE" --add-module="$HEADERS_MORE_MODULE" --with-ipv6
- make
- sudo make install
script: script:
- echo "build successful" test/run_tests.sh $PWD/testing-dependencies/mod_pagespeed/ \
- echo "cd ~/ngxpagespeed" $PWD/nginx/sbin/nginx
- echo "sudo ./test/run_tests.sh $HOME/mod_pagespeed $HOME/nginx-branches-default/objs/nginx"
sudo: required sudo: required
compiler: compiler:
- gcc - gcc
notifications: notifications:
email: email:
- cheesy@google.com
- jefftk@google.com - jefftk@google.com
- morlovich@google.com
- jmarantz@google.com
- huibao@google.com
- jcrowell@google.com
+295 -48
View File
@@ -5,7 +5,16 @@ function usage() {
Usage: build_ngx_pagespeed.sh [options] Usage: build_ngx_pagespeed.sh [options]
Installs ngx_pagespeed and its dependencies. Can optionally build and install Installs ngx_pagespeed and its dependencies. Can optionally build and install
nginx as well. nginx as well. Can be run either as:
bash <(curl -f -L -sS https://ngxpagespeed.com/install) [options]
Or:
git clone git@github.com:pagespeed/ngx_pagespeed.git
cd ngx_pagespeed/
git checkout <branch>
scripts/build_ngx_pagespeed.sh [options]
Options: Options:
-v, --ngx-pagespeed-version <ngx_pagespeed version> -v, --ngx-pagespeed-version <ngx_pagespeed version>
@@ -14,7 +23,11 @@ Options:
* latest-stable * latest-stable
* a version number, such as 1.11.33.4 * a version number, such as 1.11.33.4
If you don't specify a version, defaults to latest-stable. If you don't specify a version, defaults to latest-stable unless --devel
is specified, in which case it defaults to trunk-tracking.
This option doesn't make sense if we're running within an existing
ngx_pagespeed checkout.
-n, --nginx-version <nginx version> -n, --nginx-version <nginx version>
What version of nginx to build. If not set, this script only prepares the What version of nginx to build. If not set, this script only prepares the
@@ -36,6 +49,23 @@ Options:
non-deb non-rpm system, this won't work. In that case, install the non-deb non-rpm system, this won't work. In that case, install the
dependencies yourself and pass --no-deps-check. dependencies yourself and pass --no-deps-check.
-s, --psol-from-source
Build PSOL from source instead of downloading a pre-built binary module.
-l, --devel
Sets up a development environment in ngx_pagespeed/nginx, building with
testing-only dependencies. Includes --psol-from-source, conflicts with
--nginx-version. Uses a 'git clone' checkout for ngx_pagespeed and nginx
instead of downloading a tarball.
-t, --build-type
When building PSOL from source, what to tell it for BUILD_TYPE. Defaults
to 'Release' unless --devel is set in which case it defaults to 'Debug'.
-y, --assume-yes
Assume the answer to all prompts is 'yes, please continue'. Intended for
automated usage, such as buildbots.
-d, --dryrun -d, --dryrun
Don't make any changes to the system, just print what changes you Don't make any changes to the system, just print what changes you
would have made. would have made.
@@ -44,10 +74,34 @@ Options:
Print this message and exit." Print this message and exit."
} }
RED=31
GREEN=32
YELLOW=33
function begin_color() {
color="$1"
echo -e -n "\e[${color}m"
}
function end_color() {
echo -e -n "\e[0m"
}
function echo_color() {
color="$1"
shift
begin_color "$color"
echo "$@"
end_color
}
function error() {
local error_message="$@"
echo_color "$RED" -n "Error: " >&2
echo "$@" >&2
}
# Prints an error message and exits with an error code. # Prints an error message and exits with an error code.
function fail() { function fail() {
local error_message="$@" error "$@"
echo "$@" >&2
# Normally I'd use $0 in "usage" here, but since most people will be running # Normally I'd use $0 in "usage" here, but since most people will be running
# this via curl, that wouldn't actually give something useful. # this via curl, that wouldn't actually give something useful.
@@ -56,6 +110,11 @@ function fail() {
exit 1 exit 1
} }
function status() {
echo_color "$GREEN" "$@"
}
# Intended to be called as: # Intended to be called as:
# bash <(curl dl.google.com/.../build_ngx_pagespeed.sh) <args> # bash <(curl dl.google.com/.../build_ngx_pagespeed.sh) <args>
@@ -64,12 +123,19 @@ function fail() {
# The run function handles exit-status checking for system-changing commands. # The run function handles exit-status checking for system-changing commands.
# Additionally, this allows us to easily have a dryrun mode where we don't # Additionally, this allows us to easily have a dryrun mode where we don't
# actually make any changes. # actually make any changes.
INITIAL_ENV=$(printenv | sort)
function run() { function run() {
if "$DRYRUN"; then if "$DRYRUN"; then
echo "would run $@" echo_color "$YELLOW" -n "would run"
echo " $@"
env_differences=$(comm -13 <(echo "$INITIAL_ENV") <(printenv | sort))
if [ -n "$env_differences" ]; then
echo " with the following additional environment variables:"
echo "$env_differences" | sed 's/^/ /'
fi
else else
if ! "$@"; then if ! "$@"; then
echo "Failure running $@, exiting." error "Failure running '$@', exiting."
exit 1 exit 1
fi fi
fi fi
@@ -155,9 +221,9 @@ function install_dependencies() {
fi fi
done done
if [ -n "$missing_dependencies" ]; then if [ -n "$missing_dependencies" ]; then
echo "Detected that we're missing the following depencencies:" status "Detected that we're missing the following depencencies:"
echo " $missing_dependencies" echo " $missing_dependencies"
echo "Installing them:" status "Installing them:"
run sudo $install_pkg_cmd $missing_dependencies run sudo $install_pkg_cmd $missing_dependencies
fi fi
} }
@@ -176,8 +242,13 @@ function gcc_too_old() {
} }
function continue_or_exit() { function continue_or_exit() {
if "$ASSUME_YES"; then
return
fi
local prompt="$1" local prompt="$1"
read -p "$prompt [Y/n] " yn echo_color "$YELLOW" -n "$prompt"
read -p " [Y/n] " yn
if [[ "$yn" == N* || "$yn" == n* ]]; then if [[ "$yn" == N* || "$yn" == n* ]]; then
echo "Cancelled." echo "Cancelled."
exit 0 exit 0
@@ -217,9 +288,10 @@ function build_ngx_pagespeed() {
fail "Your version of getopt is too old. Exiting with no changes made." fail "Your version of getopt is too old. Exiting with no changes made."
fi fi
opts=$(getopt -o v:n:mb:pdh \ opts=$(getopt -o v:n:mb:pslt:ydh \
--longoptions ngx-pagespeed-version:,nginx-version:,dynamic-module \ --longoptions ngx-pagespeed-version:,nginx-version:,dynamic-module \
--longoptions buildir:,no-deps-check,dryrun,help \ --longoptions buildir:,no-deps-check,psol-from-source,devel,build-type: \
--longoptions assume-yes,dryrun,help \
-n "$(basename "$0")" -- "$@") -n "$(basename "$0")" -- "$@")
if [ $? != 0 ]; then if [ $? != 0 ]; then
usage usage
@@ -227,10 +299,14 @@ function build_ngx_pagespeed() {
fi fi
eval set -- "$opts" eval set -- "$opts"
NPS_VERSION="latest-stable" NPS_VERSION="DEFAULT"
NGINX_VERSION="" NGINX_VERSION=""
BUILDDIR="$HOME" BUILDDIR="$HOME"
DO_DEPS_CHECK=true DO_DEPS_CHECK=true
PSOL_FROM_SOURCE=false
DEVEL=false
BUILD_TYPE=""
ASSUME_YES=false
DRYRUN=false DRYRUN=false
DYNAMIC_MODULE=false DYNAMIC_MODULE=false
while true; do while true; do
@@ -253,6 +329,19 @@ function build_ngx_pagespeed() {
-p | --no-deps-check) shift -p | --no-deps-check) shift
DO_DEPS_CHECK=false DO_DEPS_CHECK=false
;; ;;
-s | --psol-from-source) shift
PSOL_FROM_SOURCE=true
;;
-l | --devel) shift
DEVEL=true
;;
-t | --build-type) shift
BUILD_TYPE="$1"
shift
;;
-y | --assume-yes) shift
ASSUME_YES="true"
;;
-d | --dryrun) shift -d | --dryrun) shift
DRYRUN="true" DRYRUN="true"
;; ;;
@@ -271,10 +360,58 @@ function build_ngx_pagespeed() {
esac esac
done done
USE_GIT_CHECKOUT="$DEVEL"
ALREADY_CHECKED_OUT=false
if [ -e PSOL_BINARY_URL ]; then
status "Detected that we're running in an existing ngx_pagespeed checkout."
USE_GIT_CHECKOUT=true
ALREADY_CHECKED_OUT=true
fi
if "$ALREADY_CHECKED_OUT"; then
if [ "$NPS_VERSION" != "DEFAULT" ]; then
fail \
"The --ngx-pagespeed-version argument doesn't make sense when running within an existing checkout."
fi
elif [ "$NPS_VERSION" = "DEFAULT" ]; then
if "$DEVEL"; then
NPS_VERSION="trunk-tracking"
else
NPS_VERSION="latest-stable"
fi
fi
if [ ! -d "$BUILDDIR" ]; then if [ ! -d "$BUILDDIR" ]; then
fail "Told to build in $BUILDDIR, but that directory doesn't exist." fail "Told to build in $BUILDDIR, but that directory doesn't exist."
fi fi
BUILD_NGINX=false
if [ -n "$NGINX_VERSION" ]; then
BUILD_NGINX=true
fi
if "$DEVEL"; then
PSOL_FROM_SOURCE=true
BUILD_NGINX=true
if [ -n "$NGINX_VERSION" ]; then
fail \
"The --devel argument conflicts with --nginx. In devel mode we use the version of nginx that's included as a submodule."
fi
if "$DYNAMIC_MODULE"; then
fail "Can't currently build a dynamic module in --devel mode."
fi
fi
if "$PSOL_FROM_SOURCE" && [ -z "$BUILD_TYPE" ]; then
if "$DEVEL"; then
BUILD_TYPE="Debug"
else
BUILD_TYPE="Release"
fi
elif [ -n "$BUILD_TYPE" ]; then
fail "Setting --build-type requires --psol-from-source or --devel."
fi
if [ "$NGINX_VERSION" = "latest" ]; then if [ "$NGINX_VERSION" = "latest" ]; then
# When this function fails it prints the debugging information needed first # When this function fails it prints the debugging information needed first
# to stderr. # to stderr.
@@ -314,16 +451,16 @@ add support for dynamic modules in a way compatible with ngx_pagespeed until
# Now make sure our dependencies are installed. # Now make sure our dependencies are installed.
if "$DO_DEPS_CHECK"; then if "$DO_DEPS_CHECK"; then
if [ -f /etc/debian_version ]; then if [ -f /etc/debian_version ]; then
echo "Detected debian-based distro." status "Detected debian-based distro."
install_dependencies "apt-get install" debian_is_installed \ install_dependencies "apt-get install" debian_is_installed \
"build-essential zlib1g-dev libpcre3 libpcre3-dev unzip" "build-essential zlib1g-dev libpcre3 libpcre3-dev unzip"
if gcc_too_old; then if gcc_too_old; then
if [ ! -e /usr/lib/gcc-mozilla/bin/gcc ]; then if [ ! -e /usr/lib/gcc-mozilla/bin/gcc ]; then
echo "Detected that gcc is older than 4.8. Installing gcc-mozilla" status "Detected that gcc is older than 4.8. Installing gcc-mozilla"
echo "which installs gcc-4.8 into /usr/lib/gcc-mozilla/ and doesn't" status "which installs gcc-4.8 into /usr/lib/gcc-mozilla/ and doesn't"
echo "affect your global gcc installation." status "affect your global gcc installation."
run sudo apt-get install gcc-mozilla run sudo apt-get install gcc-mozilla
fi fi
@@ -332,7 +469,7 @@ add support for dynamic modules in a way compatible with ngx_pagespeed until
fi fi
elif [ -f /etc/redhat-release ]; then elif [ -f /etc/redhat-release ]; then
echo "Detected redhat-based distro." status "Detected redhat-based distro."
install_dependencies "yum install" redhat_is_installed \ install_dependencies "yum install" redhat_is_installed \
"gcc-c++ pcre-devel zlib-devel make unzip wget" "gcc-c++ pcre-devel zlib-devel make unzip wget"
@@ -350,9 +487,9 @@ Unexpected major version $redhat_major_version in /etc/redhat-release:
$(cat /etc/redhat-release) Expected 5 or 6." $(cat /etc/redhat-release) Expected 5 or 6."
fi fi
echo "Detected that gcc is older than 4.8. Scientific Linux provides" status "Detected that gcc is older than 4.8. Scientific Linux"
echo "a gcc package that installs gcc-4.8 into /opt/ and doesn't" status "provides a gcc package that installs gcc-4.8 into /opt/ and"
echo "affect your global gcc installation." status "doesn't affect your global gcc installation."
slc_key="https://linux.web.cern.ch/linux/scientific6/docs/repository/" slc_key="https://linux.web.cern.ch/linux/scientific6/docs/repository/"
slc_key+="cern/slc6X/i386/RPM-GPG-KEY-cern" slc_key+="cern/slc6X/i386/RPM-GPG-KEY-cern"
slc_key_out="$TEMPDIR/RPM-GPG-KEY-cern" slc_key_out="$TEMPDIR/RPM-GPG-KEY-cern"
@@ -378,9 +515,9 @@ This doesn't appear to be a deb-based distro or an rpm-based one. Not going to
be able to install dependencies. Please install dependencies manually and rerun be able to install dependencies. Please install dependencies manually and rerun
with --no-deps-check." with --no-deps-check."
fi fi
echo "Dependencies are all set." status "Operating system dependencies are all set."
else else
echo "Not checking whether dependencies are installed." status "Not checking whether operating system dependencies are installed."
fi fi
function delete_if_already_exists() { function delete_if_already_exists() {
@@ -391,7 +528,6 @@ with --no-deps-check."
if [ ${#directory} -lt 8 ]; then if [ ${#directory} -lt 8 ]; then
fail " fail "
Not deleting $directory; name is suspiciously short. Something is wrong." Not deleting $directory; name is suspiciously short. Something is wrong."
exit 1
fi fi
continue_or_exit "OK to delete $directory?" continue_or_exit "OK to delete $directory?"
@@ -399,28 +535,78 @@ Not deleting $directory; name is suspiciously short. Something is wrong."
fi fi
} }
nps_baseurl="https://github.com/pagespeed/ngx_pagespeed/archive"
# In general, the zip github builds for tag foo unzips to ngx_pagespeed-foo, # In general, the zip github builds for tag foo unzips to ngx_pagespeed-foo,
# but it looks like they special case vVERSION tags to ngx_pagespeed-VERSION. # but it looks like they special case vVERSION tags to ngx_pagespeed-VERSION
if [[ "$NPS_VERSION" =~ ^[0-9]*[.][0-9]*[.][0-9]*[.][0-9]*$ ]]; then if [[ "$NPS_VERSION" =~ ^[0-9]*[.][0-9]*[.][0-9]*[.][0-9]*$ ]]; then
# We've been given a numeric version number. This has an associated tag in # We've been given a numeric version number. This has an associated tag
# the form vVERSION-beta. # in the form vVERSION-beta.
nps_url_fname="v${NPS_VERSION}-beta" tag_name="v${NPS_VERSION}-beta"
nps_downloaded_fname="ngx_pagespeed-${NPS_VERSION}-beta" nps_downloaded_fname="ngx_pagespeed-${NPS_VERSION}-beta"
else else
# We've been given a tag name, like latest-beta. Download that directly. # We've been given a tag name, like latest-beta. Download that directly.
nps_url_fname="$NPS_VERSION" tag_name="$NPS_VERSION"
nps_downloaded_fname="ngx_pagespeed-${NPS_VERSION}" nps_downloaded_fname="ngx_pagespeed-${NPS_VERSION}"
fi fi
install_dir="this-only-makes-sense-in-devel-mode"
if "$USE_GIT_CHECKOUT"; then
# We're either doing a --devel build, or someone is running us from an
# existing git checkout.
nps_module_dir="$PWD"
install_dir="$nps_module_dir"
if "$ALREADY_CHECKED_OUT"; then
run cd "$nps_module_dir"
else
status "Checking out ngx_pagespeed..."
run git clone "git@github.com:pagespeed/ngx_pagespeed.git" \
"$nps_module_dir"
run cd "$nps_module_dir"
run git checkout "$tag_name"
fi
submodules_dir="$nps_module_dir/testing-dependencies"
if "$DEVEL"; then
status "Downloading dependencies..."
run git submodule update --init --recursive
if [[ "$CONTINUOUS_INTEGRATION" != true ]]; then
status "Switching submodules over to git protocol."
# This lets us push to github by public key.
for config in $(find .git/ -name config) ; do
run sed -i s~https://github.com/~git@github.com:~ $config ;
done
fi
fi
else
nps_baseurl="https://github.com/pagespeed/ngx_pagespeed/archive"
nps_downloaded="$TEMPDIR/$nps_downloaded_fname.zip" nps_downloaded="$TEMPDIR/$nps_downloaded_fname.zip"
run wget "$nps_baseurl/$nps_url_fname.zip" -O "$nps_downloaded" status "Downloading ngx_pagespeed..."
run wget "$nps_baseurl/$tag_name.zip" -O "$nps_downloaded"
nps_module_dir="$BUILDDIR/$nps_downloaded_fname" nps_module_dir="$BUILDDIR/$nps_downloaded_fname"
delete_if_already_exists "$nps_module_dir" delete_if_already_exists "$nps_module_dir"
echo "Extracting ngx_pagespeed..." status "Extracting ngx_pagespeed..."
run unzip -q "$nps_downloaded" -d "$BUILDDIR" run unzip -q "$nps_downloaded" -d "$BUILDDIR"
run cd "$nps_module_dir" run cd "$nps_module_dir"
fi
MOD_PAGESPEED_DIR=""
PSOL_BINARY=""
if "$PSOL_FROM_SOURCE"; then
MOD_PAGESPEED_DIR="$PWD/testing-dependencies/mod_pagespeed"
git submodule update --init --recursive -- "$MOD_PAGESPEED_DIR"
run pushd "$MOD_PAGESPEED_DIR"
if "$DEVEL"; then
if [ ! -d "$HOME/apache2" ]; then
run install/build_development_apache.sh 2.2 prefork
fi
cd devel
run make apache_debug_psol
PSOL_BINARY="$MOD_PAGESPEED_DIR/out/$BUILD_TYPE/pagespeed_automatic.a"
else
run install/build_psol.sh --skip_tests --skip_packaging
PSOL_BINARY="$MOD_PAGESPEED_DIR/pagespeed/automatic/pagespeed_automatic.a"
fi
run popd
else
# Now we need to figure out what precompiled version of PSOL to build # Now we need to figure out what precompiled version of PSOL to build
# ngx_pagespeed against. # ngx_pagespeed against.
if "$DRYRUN"; then if "$DRYRUN"; then
@@ -434,18 +620,21 @@ Not deleting $directory; name is suspiciously short. Something is wrong."
fi fi
else else
# For past releases we have to grep it from the config file. The url has # For past releases we have to grep it from the config file. The url has
# always looked like this, and the config file has contained it since before # always looked like this, and the config file has contained it since
# we started tagging our ngx_pagespeed releases. # before we started tagging our ngx_pagespeed releases.
psol_url="$( psol_url="$(grep -o \
grep -o "https://dl.google.com/dl/page-speed/psol/[0-9.]*.tar.gz" config)" "https://dl.google.com/dl/page-speed/psol/[0-9.]*.tar.gz" config)"
if [ -z "$psol_url" ]; then if [ -z "$psol_url" ]; then
fail "Couldn't find PSOL url in $PWD/config" fail "Couldn't find PSOL url in $PWD/config"
fi fi
fi fi
status "Downloading PSOL binary..."
run wget "$psol_url" run wget "$psol_url"
echo "Extracting PSOL..."
status "Extracting PSOL..."
run tar -xzf $(basename "$psol_url") # extracts to psol/ run tar -xzf $(basename "$psol_url") # extracts to psol/
fi
if "$DYNAMIC_MODULE"; then if "$DYNAMIC_MODULE"; then
add_module="--add-dynamic-module=$nps_module_dir" add_module="--add-dynamic-module=$nps_module_dir"
@@ -454,17 +643,37 @@ Not deleting $directory; name is suspiciously short. Something is wrong."
fi fi
configure_args=("$add_module" "${extra_flags[@]}") configure_args=("$add_module" "${extra_flags[@]}")
if "$DEVEL"; then
configure_args=("${configure_args[@]}"
"--prefix=$install_dir/nginx"
"--add-module=$submodules_dir/ngx_cache_purge"
"--add-module=$submodules_dir/ngx_devel_kit"
"--add-module=$submodules_dir/set-misc-nginx-module"
"--add-module=$submodules_dir/headers-more-nginx-module"
"--with-ipv6"
"--with-http_v2_module")
if [ "$BUILD_TYPE" = "Debug" ]; then
configure_args=("${configure_args[@]}" "--with-debug")
fi
fi
echo echo
if [ -z "$NGINX_VERSION" ]; then if ! "$BUILD_NGINX"; then
# They didn't specify an nginx version, so we're just preparing the # Just prepare the module for them to install.
# module for them to install. status "ngx_pagespeed is ready to be built against nginx."
echo "ngx_pagespeed is ready to be built against nginx." echo "When running ./configure:"
echo "When running ./configure pass in:" if "$PSOL_FROM_SOURCE"; then
echo " Set the following environment variables:"
echo " MOD_PAGESPEED_DIR=$MOD_PAGESPEED_DIR"
echo " PSOL_BINARY=$PSOL_BINARY"
fi
echo " Give ./configure the following arguments:"
echo " $(quote_arguments "${configure_args[@]}")" echo " $(quote_arguments "${configure_args[@]}")"
echo
if [ ${#extra_flags[@]} -eq 0 ]; then if [ ${#extra_flags[@]} -eq 0 ]; then
echo "If this is for integration with an already-built nginx, make sure" echo "If this is for integration with an already-built nginx, make sure"
echo "to include any other arguments you originally passed to ./configure" echo "to include any other arguments you originally passed to"
echo "You can see these with 'nginx -V'." echo "./configure. You can see these with 'nginx -V'."
else else
echo "Note: because we need to set $(quote_arguments "${extra_flags[@]}")" echo "Note: because we need to set $(quote_arguments "${extra_flags[@]}")"
echo "on this platform, if you want to integrate ngx_pagespeed with an" echo "on this platform, if you want to integrate ngx_pagespeed with an"
@@ -472,17 +681,26 @@ Not deleting $directory; name is suspiciously short. Something is wrong."
echo "those flags set." echo "those flags set."
fi fi
else else
# Download and build nginx. if "$DEVEL"; then
# Use the nginx we loaded as a submodule
nginx_dir="$submodules_dir/nginx"
configure_location="auto"
else
# Download and build the specified nginx version.
nginx_leaf="nginx-${NGINX_VERSION}.tar.gz" nginx_leaf="nginx-${NGINX_VERSION}.tar.gz"
nginx_fname="$TEMPDIR/$nginx_leaf" nginx_fname="$TEMPDIR/$nginx_leaf"
status "Downloading nginx..."
run wget "http://nginx.org/download/$nginx_leaf" -O "$nginx_fname" run wget "http://nginx.org/download/$nginx_leaf" -O "$nginx_fname"
nginx_dir="$BUILDDIR/nginx-${NGINX_VERSION}/" nginx_dir="$BUILDDIR/nginx-${NGINX_VERSION}/"
delete_if_already_exists "$nginx_dir" delete_if_already_exists "$nginx_dir"
echo "Extracting nginx..." status "Extracting nginx..."
run tar -xzf "$nginx_fname" --directory "$BUILDDIR" run tar -xzf "$nginx_fname" --directory "$BUILDDIR"
"$DRYRUN" || cd "$nginx_dir" configure_location="."
fi
run cd "$nginx_dir"
configure=("./configure" "${configure_args[@]}") configure=("$configure_location/configure" "${configure_args[@]}")
if ! "$ASSUME_YES"; then
echo "About to build nginx. Do you have any additional ./configure" echo "About to build nginx. Do you have any additional ./configure"
echo "arguments you would like to set? For example, if you would like" echo "arguments you would like to set? For example, if you would like"
echo "to build nginx with https support give --with-http_ssl_module" echo "to build nginx with https support give --with-http_ssl_module"
@@ -494,14 +712,42 @@ Not deleting $directory; name is suspiciously short. Something is wrong."
eval additional_configure_args=("$additional_configure_args") eval additional_configure_args=("$additional_configure_args")
configure=("${configure[@]}" "${additional_configure_args[@]}") configure=("${configure[@]}" "${additional_configure_args[@]}")
fi fi
fi
echo "About to configure nginx with:" echo "About to configure nginx with:"
echo " $(quote_arguments "${configure[@]}")" echo " $(quote_arguments "${configure[@]}")"
continue_or_exit "Does this look right?" continue_or_exit "Does this look right?"
MOD_PAGESPEED_DIR="$MOD_PAGESPEED_DIR" \
PSOL_BINARY="$PSOL_BINARY" \
run "${configure[@]}" run "${configure[@]}"
if ! "$DEVEL"; then
continue_or_exit "Build nginx?" continue_or_exit "Build nginx?"
fi
run make run make
if "$DEVEL"; then
run make install
status "Nginx installed with ngx_pagespeed, and set up for testing."
# TODO(jefftk): pull these out into separate scripts.
echo "To run tests, pick a pair of ports like 8050 and 8051 and run:"
echo " cd $nps_module_dir"
echo " RUN_TESTS=true \\"
echo " USE_VALGRIND=false \\"
echo " TEST_NATIVE_FETCHER=false \\"
echo " TEST_SERF_FETCHER=true \\"
echo " test/run_tests.sh \\"
echo " $MOD_PAGESPEED_DIR \\"
echo " $install_dir/nginx/sbin/nginx"
echo
echo "To rebuild after changes:"
echo " First, if you change things in PSOL or update it:"
echo " cd $MOD_PAGESPEED_DIR/devel"
echo " make apache_debug_psol"
echo " Then, whether or not you updated PSOL, rebuild nginx:"
echo " cd $install_dir/nginx"
echo " make && make install"
else
continue_or_exit "Install nginx?" continue_or_exit "Install nginx?"
run sudo make install run sudo make install
@@ -524,8 +770,9 @@ Not deleting $directory; name is suspiciously short. Something is wrong."
echo "You'll also need to configure ngx_pagespeed if you haven't yet:" echo "You'll also need to configure ngx_pagespeed if you haven't yet:"
echo " https://developers.google.com/speed/pagespeed/module/configuration" echo " https://developers.google.com/speed/pagespeed/module/configuration"
fi fi
fi
if "$DRYRUN"; then if "$DRYRUN"; then
echo "[this was a dry run; your system is unchanged]" echo_color "$YELLOW" "[this was a dry run; your system is unchanged]"
fi fi
} }
+7 -3
View File
@@ -49,7 +49,11 @@ rm -rf "$TEST_TMP"
mkdir -p "$TEST_TMP" mkdir -p "$TEST_TMP"
echo TEST_TMP=$TEST_TMP echo TEST_TMP=$TEST_TMP
APACHE_DOC_SRC="$MOD_PAGESPEED_DIR/src/install/" if [ -d "$MOD_PAGESPEED_DIR/src" ]; then
MOD_PAGESPEED_DIR+="/src"
fi
APACHE_DOC_SRC="$MOD_PAGESPEED_DIR/install/"
SERVER_ROOT="$TEST_TMP/root" SERVER_ROOT="$TEST_TMP/root"
echo SERVER_ROOT=$SERVER_ROOT echo SERVER_ROOT=$SERVER_ROOT
rm -rf "$SERVER_ROOT" rm -rf "$SERVER_ROOT"
@@ -311,7 +315,7 @@ SERVER_NAME=nginx
RUN_CONTROLLER_TEST=${RUN_CONTROLLER_TEST:-off} RUN_CONTROLLER_TEST=${RUN_CONTROLLER_TEST:-off}
# run generic system tests # run generic system tests
PAGESPEED_DIR="$MOD_PAGESPEED_DIR/src/pagespeed" PAGESPEED_DIR="$MOD_PAGESPEED_DIR/pagespeed"
SYSTEM_TEST_FILE="$PAGESPEED_DIR/system/system_test.sh" SYSTEM_TEST_FILE="$PAGESPEED_DIR/system/system_test.sh"
REMOTE_CONFIG_TEST_FILE="$PAGESPEED_DIR/system/remote_config_test.sh" REMOTE_CONFIG_TEST_FILE="$PAGESPEED_DIR/system/remote_config_test.sh"
@@ -1420,7 +1424,7 @@ OUT=$(cat "$ERROR_LOG" \
| grep -v "\\[error\\].*forbidden.example.com*" \ | grep -v "\\[error\\].*forbidden.example.com*" \
| grep -v "\\[error\\].*custom-paths.example.com*" \ | grep -v "\\[error\\].*custom-paths.example.com*" \
| grep -v "\\[error\\].*bogus_format*" \ | grep -v "\\[error\\].*bogus_format*" \
| grep -v "\\[error\\].*src/install/foo*" \ | grep -v "\\[error\\].*/install/foo*" \
| grep -v "\\[error\\].*recv() failed*" \ | grep -v "\\[error\\].*recv() failed*" \
| grep -v "\\[error\\].*send() failed*" \ | grep -v "\\[error\\].*send() failed*" \
| grep -v "\\[error\\].*Invalid url requested: js_defer.js.*" \ | grep -v "\\[error\\].*Invalid url requested: js_defer.js.*" \
+2
View File
@@ -58,10 +58,12 @@ NGINX_EXECUTABLE="$2"
: ${CONTROLLER_PORT:=8053} : ${CONTROLLER_PORT:=8053}
: ${RCPORT:=9991} : ${RCPORT:=9991}
: ${PAGESPEED_TEST_HOST:=selfsigned.modpagespeed.com} : ${PAGESPEED_TEST_HOST:=selfsigned.modpagespeed.com}
: ${PHP_PORT:=9000}
this_dir="$( cd $(dirname "$0") && pwd)" this_dir="$( cd $(dirname "$0") && pwd)"
function run_test_checking_failure() { function run_test_checking_failure() {
"$MOD_PAGESPEED_DIR/install/start_php.sh" "$PHP_PORT"
USE_VALGRIND="$USE_VALGRIND" \ USE_VALGRIND="$USE_VALGRIND" \
PRIMARY_PORT="$PRIMARY_PORT" \ PRIMARY_PORT="$PRIMARY_PORT" \
SECONDARY_PORT="$SECONDARY_PORT" \ SECONDARY_PORT="$SECONDARY_PORT" \