Compare commits

...

23 Commits

Author SHA1 Message Date
Jeff Kaufman f867347b5a update mps 2016-12-19 10:47:46 -05:00
Jeff Kaufman 5bd8c93d39 ngx_pagespeed depends on luuid 2016-12-16 15:35:25 -05:00
Jeff Kaufman d85b22afe6 update mps 2016-12-16 14:42:26 -05:00
Jeff Kaufman 0456450fd2 update mps 2016-12-16 13:39:16 -05:00
Jeff Kaufman 90386f459a travis: get it building and passing tests
I initially planned to get this working on Ubuntu 12, but decided it wasn't
worth it and switched to Ubuntu 14 (Trusty).  Now it passes tests on Travis, so
I've added other people's emails back to the set of people to send emails to.

Also update mps while we're at it.
2016-12-16 12:40:54 -05:00
Jeff Kaufman 80c4b7e97b config: use Release binaries when building with --with-debug if that's all that's available (#1332)
* config: use Release binaries when building with --with-debug if that's all that's available

* prompt the user before going ahead and using release binaries

* exit 1, reword message
2016-12-14 10:13:45 -05:00
Jeff Kaufman 0c7d64221c licensing: correct bash license comments (#1336)
A few bash files were missing license comments
2016-12-12 13:40:41 -05:00
Jeff Kaufman 68185b8605 installer: allow --dynamic-module to be used with tags (#1334)
* installer: allow --dynamic-module to be used with tags

A user-friendly check with dynamic module building tries to warn people early if the version of ngx_pagespeed they're building is too old to be compiled as a dynamic module, but this can't work with tags.  If we're given something other than a numeric version number, don't try to perform this check.

Fixes https://github.com/pagespeed/mod_pagespeed/issues/1443
2016-12-08 15:14:12 -05:00
hillsp 7f225e2e70 Add format_binary_url.sh (#1331) 2016-12-06 13:16:29 -05:00
Jeff Kaufman 4d728fc081 branch-names: now that trunk-tracking is master, update references (#1330) 2016-12-06 12:01:50 -05:00
hillsp a399e04a00 Delete prepare_psol.sh (#1310)
Replaced with install/build_psol.sh  in mod_pagespeed.
2016-12-06 11:43:13 -05:00
Jeff Kaufman 247a821564 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
2016-12-06 09:21:42 -05:00
hillsp f7502b1b40 Mark CentralControllerPort as Experimental (#1326) 2016-11-30 14:43:55 -05:00
Joshua Marantz 617f0e6bee Add a new server-name to help test a repro for broken pagespeed resources (#1324)
after ipro-recorded optimations.

for https://github.com/pagespeed/mod_pagespeed/issues/1145
and https://github.com/pagespeed/ngx_pagespeed/issues/1319 .
2016-11-21 14:11:56 -05:00
hillsp 42115f54da Need clone --recursive 2016-11-21 10:49:59 -05:00
hillsp 3d9f2aee37 First pass at modernising travis.yml 2016-11-21 10:38:05 -05:00
Joshua Marantz d77c7eac17 test config for disabling rewriters in ajax (#1320) 2016-11-14 08:09:44 -05:00
Jeff Kaufman 97134d951e test: run_tests.sh should just assume 8050 and 8051 (#1315)
Right now run_tests.sh assumes it has 8053 and 9991 without causing any
problems.  Start assuming we have 8050 and 8051 as well instead of
requiring people to pass them in.
2016-11-03 14:58:05 -04:00
Jeff Kaufman 17e4162334 remote-config: renaming paths to be more informative (#1312) 2016-11-03 07:03:31 -04:00
Jeff Kaufman d70dcbc4d0 remote-config: use one port for testing, against a new python server (#1293)
* remote-config: use one port for testing, against a new python-based server

* properly reference remote configu urls
2016-11-01 12:29:25 -05:00
Sen Jiang 62c66e2c9c Fix non-zero exit code even if the script succeed (#1302)
The script succeeded but the exit code is 1 because it's not a dryrun so the last command failed.
2016-10-25 09:35:01 -05:00
Jeff Kaufman 09478cac70 installer: reference the --no-deps-check option properly (#1305) 2016-10-24 12:00:27 -05:00
hillsp 14b4723326 Fix sparsehash path (#1300) 2016-10-20 13:55:21 -04:00
19 changed files with 618 additions and 314 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
+23 -52
View File
@@ -1,58 +1,30 @@
language: c++ language: c++
# Remove broken repo, per: https://github.com/travis-ci/travis-ci/issues/6588 env:
# Undo this once the repo is fixed. 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.
#
# TODO(jefftk): once we're running on a server with git 2.8 or later we can have
# --jobs without installing a new git.
git:
submodules: false
before_install: before_install:
- "sudo add-apt-repository --remove 'http://us-central1.gce.archive.ubuntu.com/ubuntu/ main restricted'" - sudo add-apt-repository --yes ppa:git-core/ppa
- "sudo add-apt-repository --remove 'http://us-central1.gce.archive.ubuntu.com/ubuntu/ universe'" - sudo apt-get update
- "sudo add-apt-repository --remove 'http://us-central1.gce.archive.ubuntu.com/ubuntu/ multiverse'" - sudo apt-get install git
- "sudo add-apt-repository http://archive.ubuntu.com/ubuntu/" - git submodule update --init --recursive --jobs=8
- "sudo add-apt-repository 'http://archive.ubuntu.com/ubuntu/ universe'"
- "sudo add-apt-repository 'http://archive.ubuntu.com/ubuntu/ multiverse'"
- "sudo apt-get -qq update"
install: install:
- sudo sh -c 'echo "deb http://opensource.wandisco.com/ubuntu precise svn18" >> /etc/apt/sources.list.d/subversion18.list' scripts/build_ngx_pagespeed.sh --devel --assume-yes
- sudo wget -q http://opensource.wandisco.com/wandisco-debian.gpg -O- | sudo apt-key add -
- sudo apt-get update 2>&1 > /dev/null
- mv $TRAVIS_BUILD_DIR ~/ngxpagespeed
- sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip g++ python subversion gperf make devscripts fakeroot git curl netcat-traditional gcc-mozilla clang-3.4 2>&1 > /dev/null
- sudo mv /bin/nc.traditional /usr/bin/nc
- 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 https://github.com/pagespeed/mod_pagespeed.git src
- cd src
- ~/bin/depot_tools/gclient config https://github.com/pagespeed/mod_pagespeed.git --unmanaged --name=$PWD
- ~/bin/depot_tools/gclient sync --force --jobs=1
- cd ~/mod_pagespeed/src/pagespeed/automatic
- make BUILDTYPE=Release -C ../../pagespeed/automatic AR.host="$PWD/../../build/wrappers/ar.sh" AR.target="$PWD/../../build/wrappers/ar.sh" 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 8050 8051 $HOME/mod_pagespeed/src $HOME/nginx-branches-default/objs selfsigned.modpagespeed.com" dist: trusty
- echo "sudo ./test/run_tests.sh 8050 8051 $HOME/mod_pagespeed $HOME/nginx-branches-default/objs/nginx selfsigned.modpagespeed.com"
sudo: required sudo: required
compiler: compiler:
- gcc - gcc
@@ -63,4 +35,3 @@ notifications:
- morlovich@google.com - morlovich@google.com
- jmarantz@google.com - jmarantz@google.com
- huibao@google.com - huibao@google.com
- jcrowell@google.com
+1 -1
View File
@@ -1,4 +1,4 @@
In a release this file would contain the URL to download the pre-compiled PSOL In a release this file would contain the URL to download the pre-compiled PSOL
binary, but on development branches (like this one) you have to build PSOL from binary, but on development branches (like this one) you have to build PSOL from
source yourself. See: source yourself. See:
https://github.com/pagespeed/ngx_pagespeed/wiki/Building-PSOL-From-Source https://github.com/pagespeed/ngx_pagespeed/wiki/Building-PSOL-From-Source
+1 -1
View File
@@ -1,6 +1,6 @@
![ngx_pagespeed](https://lh6.googleusercontent.com/-qufedJIJq7Y/UXEvVYxyYvI/AAAAAAAADo8/JHDFQhs91_c/s401/04_ngx_pagespeed.png) ![ngx_pagespeed](https://lh6.googleusercontent.com/-qufedJIJq7Y/UXEvVYxyYvI/AAAAAAAADo8/JHDFQhs91_c/s401/04_ngx_pagespeed.png)
[![Build Status](https://travis-ci.org/pagespeed/ngx_pagespeed.svg?branch=trunk-tracking)](https://travis-ci.org/pagespeed/ngx_pagespeed) [![Build Status](https://travis-ci.org/pagespeed/ngx_pagespeed.svg?branch=master)](https://travis-ci.org/pagespeed/ngx_pagespeed)
ngx_pagespeed speeds up your site and reduces page load time by automatically ngx_pagespeed speeds up your site and reduces page load time by automatically
applying web performance best practices to pages and associated assets (CSS, applying web performance best practices to pages and associated assets (CSS,
+22 -3
View File
@@ -26,7 +26,8 @@ if [ "$mod_pagespeed_dir" = "unset" ] ; then
if [ ! -e "$mod_pagespeed_dir" ] ; then if [ ! -e "$mod_pagespeed_dir" ] ; then
echo "ngx_pagespeed: pagespeed optimization library not found:" echo "ngx_pagespeed: pagespeed optimization library not found:"
psol_binary_url="$(cat $ngx_addon_dir/PSOL_BINARY_URL)" psol_binary_url="$($ngx_addon_dir/scripts/format_binary_url.sh \
$ngx_addon_dir/PSOL_BINARY_URL)"
if [[ "$psol_binary_url" != https://* ]]; then if [[ "$psol_binary_url" != https://* ]]; then
echo " echo "
This is a development branch of ngx_pagespeed, which means there is no This is a development branch of ngx_pagespeed, which means there is no
@@ -76,6 +77,8 @@ fi
if [ "$NGX_DEBUG" = "YES" ]; then if [ "$NGX_DEBUG" = "YES" ]; then
buildtype=Debug buildtype=Debug
# If we're using a psol tarball that doesn't contain Debug/ (which is the case
# from 1.12 onward) then this will be overriden to buildtype=Release below.
else else
buildtype=Release buildtype=Release
fi fi
@@ -143,6 +146,22 @@ if [ "$psol_binary" = "unset" ] ; then
psol_binary="\ psol_binary="\
$mod_pagespeed_dir/pagespeed/automatic/pagespeed_automatic.a" $mod_pagespeed_dir/pagespeed/automatic/pagespeed_automatic.a"
else else
if ! [ -d "$ngx_addon_dir/psol/lib/$buildtype" ]; then
echo "
You have set --with-debug for building nginx, but precompiled Debug binaries for
PSOL, which ngx_pagespeed depends on, aren't available. If you're trying to
debug PSOL you need to build it from source. If you just want to run nginx with
debug-level logging you can use the Release binaries."
echo -n "
Use the available Release binaries?"
read -p " [Y/n] " yn
if [[ "$yn" == N* || "$yn" == n* ]]; then
echo "Cancelled."
exit 1
fi
buildtype=Release
fi
psol_library_dir="$ngx_addon_dir/psol/lib/$buildtype/$os_name/$arch_name" psol_library_dir="$ngx_addon_dir/psol/lib/$buildtype/$os_name/$arch_name"
psol_binary="$psol_library_dir/pagespeed_automatic.a" psol_binary="$psol_library_dir/pagespeed_automatic.a"
fi fi
@@ -165,7 +184,7 @@ ngx_feature_incs="
pagespeed_include="\ pagespeed_include="\
$mod_pagespeed_dir \ $mod_pagespeed_dir \
$mod_pagespeed_dir/third_party/chromium/src \ $mod_pagespeed_dir/third_party/chromium/src \
$mod_pagespeed_dir/third_party/google-sparsehash/src \ $mod_pagespeed_dir/third_party/google-sparsehash/src/src \
$mod_pagespeed_dir/third_party/google-sparsehash/gen/arch/$os_name/$arch_name/include \ $mod_pagespeed_dir/third_party/google-sparsehash/gen/arch/$os_name/$arch_name/include \
$mod_pagespeed_dir/third_party/grpc/src/include \ $mod_pagespeed_dir/third_party/grpc/src/include \
$mod_pagespeed_dir/third_party/protobuf/src/src \ $mod_pagespeed_dir/third_party/protobuf/src/src \
@@ -179,7 +198,7 @@ pagespeed_include="\
$mod_pagespeed_dir/url" $mod_pagespeed_dir/url"
ngx_feature_path="$pagespeed_include" ngx_feature_path="$pagespeed_include"
pagespeed_libs="$psol_binary $pagespeed_libs -lrt -pthread -lm" pagespeed_libs="$psol_binary $pagespeed_libs -lrt -pthread -lm -luuid"
ngx_feature_libs="$pagespeed_libs" ngx_feature_libs="$pagespeed_libs"
ngx_feature_test=" ngx_feature_test="
+379 -109
View File
@@ -1,11 +1,34 @@
#!/bin/bash #!/bin/bash
#
# Copyright 2016 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
function usage() { function usage() {
echo " echo "
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 +37,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 master.
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 +63,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 +88,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 +124,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 +137,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 +235,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 +256,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 +302,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 +313,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 +343,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 +374,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="master"
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.
@@ -283,8 +434,15 @@ function build_ngx_pagespeed() {
if "$DYNAMIC_MODULE"; then if "$DYNAMIC_MODULE"; then
# Check that ngx_pagespeed and nginx are recent enough to support dynamic # Check that ngx_pagespeed and nginx are recent enough to support dynamic
# modules. # modules. Unfortunately NPS_VERSION might be a tag, in which case we don't
if version_older_than "$NPS_VERSION" "1.10.33.5"; then # know. If it's not a numeric version number, then assume it's recent
# enough and if it's not they'll get an ugly compilation error later.
# Luckily 1.10.33.5 was a while ago now.
#
# I'd like to use =~ here, but they changed syntax between v3 and v4 (quotes
# moved from mandatory to optional to prohibited).
if [[ "${NPS_VERSION#*[^0-9.]}" = "$NPS_VERSION" ]] &&
version_older_than "$NPS_VERSION" "1.10.33.5"; then
fail " fail "
You're trying to build ngx_pagespeed $NPS_VERSION as a dynamic module, but You're trying to build ngx_pagespeed $NPS_VERSION as a dynamic module, but
ngx_pagespeed didn't add support for dynamic modules until 1.10.33.5." ngx_pagespeed didn't add support for dynamic modules until 1.10.33.5."
@@ -314,16 +472,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 +490,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 +508,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"
@@ -376,11 +534,11 @@ $(cat /etc/redhat-release) Expected 5 or 6."
fail " fail "
This doesn't appear to be a deb-based distro or an rpm-based one. Not going to 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 --depsinstalled." 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 +549,6 @@ with --depsinstalled."
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,53 +556,106 @@ 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
nps_downloaded="$TEMPDIR/$nps_downloaded_fname.zip" install_dir="this-only-makes-sense-in-devel-mode"
run wget "$nps_baseurl/$nps_url_fname.zip" -O "$nps_downloaded" if "$USE_GIT_CHECKOUT"; then
nps_module_dir="$BUILDDIR/$nps_downloaded_fname" # We're either doing a --devel build, or someone is running us from an
delete_if_already_exists "$nps_module_dir" # existing git checkout.
echo "Extracting ngx_pagespeed..." nps_module_dir="$PWD"
run unzip -q "$nps_downloaded" -d "$BUILDDIR" install_dir="$nps_module_dir"
run cd "$nps_module_dir" if "$ALREADY_CHECKED_OUT"; then
run cd "$nps_module_dir"
# Now we need to figure out what precompiled version of PSOL to build else
# ngx_pagespeed against. status "Checking out ngx_pagespeed..."
if "$DRYRUN"; then run git clone "git@github.com:pagespeed/ngx_pagespeed.git" \
psol_url="https://psol.example.com/cant-get-psol-version-in-dry-run.tar.gz" "$nps_module_dir"
elif [ -e PSOL_BINARY_URL ]; then run cd "$nps_module_dir"
# Releases after 1.11.33.4 there is a PSOL_BINARY_URL file that tells us run git checkout "$tag_name"
# where to look. fi
psol_url="$(cat PSOL_BINARY_URL)" submodules_dir="$nps_module_dir/testing-dependencies"
if [[ "$psol_url" != https://* ]]; then if "$DEVEL"; then
fail "Got bad psol binary location information: $psol_url" 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 fi
else else
# For past releases we have to grep it from the config file. The url has nps_baseurl="https://github.com/pagespeed/ngx_pagespeed/archive"
# always looked like this, and the config file has contained it since before nps_downloaded="$TEMPDIR/$nps_downloaded_fname.zip"
# we started tagging our ngx_pagespeed releases. status "Downloading ngx_pagespeed..."
psol_url="$( run wget "$nps_baseurl/$tag_name.zip" -O "$nps_downloaded"
grep -o "https://dl.google.com/dl/page-speed/psol/[0-9.]*.tar.gz" config)" nps_module_dir="$BUILDDIR/$nps_downloaded_fname"
if [ -z "$psol_url" ]; then delete_if_already_exists "$nps_module_dir"
fail "Couldn't find PSOL url in $PWD/config" status "Extracting ngx_pagespeed..."
fi run unzip -q "$nps_downloaded" -d "$BUILDDIR"
run cd "$nps_module_dir"
fi fi
run wget "$psol_url" MOD_PAGESPEED_DIR=""
echo "Extracting PSOL..." PSOL_BINARY=""
run tar -xzf $(basename "$psol_url") # extracts to psol/ 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
# ngx_pagespeed against.
if "$DRYRUN"; then
psol_url="https://psol.example.com/cant-get-psol-version-in-dry-run.tar.gz"
elif [ -e PSOL_BINARY_URL ]; then
# Releases after 1.11.33.4 there is a PSOL_BINARY_URL file that tells us
# where to look.
psol_url="$(scripts/format_binary_url.sh PSOL_BINARY_URL)"
if [[ "$psol_url" != https://* ]]; then
fail "Got bad psol binary location information: $psol_url"
fi
else
# 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 we started tagging our ngx_pagespeed releases.
psol_url="$(grep -o \
"https://dl.google.com/dl/page-speed/psol/[0-9.]*.tar.gz" config)"
if [ -z "$psol_url" ]; then
fail "Couldn't find PSOL url in $PWD/config"
fi
fi
status "Downloading PSOL binary..."
run wget "$psol_url"
status "Extracting 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 +664,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 " $(quote_arguments "${configure_args[@]}")" 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
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,59 +702,99 @@ 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
nginx_leaf="nginx-${NGINX_VERSION}.tar.gz" # Use the nginx we loaded as a submodule
nginx_fname="$TEMPDIR/$nginx_leaf" nginx_dir="$submodules_dir/nginx"
run wget "http://nginx.org/download/$nginx_leaf" -O "$nginx_fname" configure_location="auto"
nginx_dir="$BUILDDIR/nginx-${NGINX_VERSION}/" else
delete_if_already_exists "$nginx_dir" # Download and build the specified nginx version.
echo "Extracting nginx..." nginx_leaf="nginx-${NGINX_VERSION}.tar.gz"
run tar -xzf "$nginx_fname" --directory "$BUILDDIR" nginx_fname="$TEMPDIR/$nginx_leaf"
"$DRYRUN" || cd "$nginx_dir" status "Downloading nginx..."
run wget "http://nginx.org/download/$nginx_leaf" -O "$nginx_fname"
nginx_dir="$BUILDDIR/nginx-${NGINX_VERSION}/"
delete_if_already_exists "$nginx_dir"
status "Extracting nginx..."
run tar -xzf "$nginx_fname" --directory "$BUILDDIR"
configure_location="."
fi
run cd "$nginx_dir"
configure=("./configure" "${configure_args[@]}") configure=("$configure_location/configure" "${configure_args[@]}")
echo "About to build nginx. Do you have any additional ./configure" if ! "$ASSUME_YES"; then
echo "arguments you would like to set? For example, if you would like" echo "About to build nginx. Do you have any additional ./configure"
echo "to build nginx with https support give --with-http_ssl_module" echo "arguments you would like to set? For example, if you would like"
echo "If you don't have any, just press enter." echo "to build nginx with https support give --with-http_ssl_module"
read -p "> " additional_configure_args echo "If you don't have any, just press enter."
if [ -n "$additional_configure_args" ]; then read -p "> " additional_configure_args
# Split additional_configure_args respecting any internal quotation. if [ -n "$additional_configure_args" ]; then
# Otherwise things like --with-cc-opt='-foo -bar' won't work. # Split additional_configure_args respecting any internal quotation.
eval additional_configure_args=("$additional_configure_args") # Otherwise things like --with-cc-opt='-foo -bar' won't work.
configure=("${configure[@]}" "${additional_configure_args[@]}") eval additional_configure_args=("$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?"
run "${configure[@]}" MOD_PAGESPEED_DIR="$MOD_PAGESPEED_DIR" \
PSOL_BINARY="$PSOL_BINARY" \
run "${configure[@]}"
continue_or_exit "Build nginx?" if ! "$DEVEL"; then
continue_or_exit "Build nginx?"
fi
run make run make
continue_or_exit "Install nginx?" if "$DEVEL"; then
run sudo make install run make install
echo status "Nginx installed with ngx_pagespeed, and set up for testing."
if "$DYNAMIC_MODULE"; then # TODO(jefftk): pull these out into separate scripts.
echo "Nginx installed with ngx_pagespeed support available as a" echo "To run tests, pick a pair of ports like 8050 and 8051 and run:"
echo "loadable module." 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
echo "To load the ngx_pagespeed module, you'll need to add:" echo "To rebuild after changes:"
echo " load_module \"modules/ngx_pagespeed.so\";" echo " First, if you change things in PSOL or update it:"
echo "at the top of your main nginx configuration file." 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 else
echo "Nginx installed with ngx_pagespeed support compiled-in." continue_or_exit "Install nginx?"
run sudo make install
echo
if "$DYNAMIC_MODULE"; then
echo "Nginx installed with ngx_pagespeed support available as a"
echo "loadable module."
echo
echo "To load the ngx_pagespeed module, you'll need to add:"
echo " load_module \"modules/ngx_pagespeed.so\";"
echo "at the top of your main nginx configuration file."
else
echo "Nginx installed with ngx_pagespeed support compiled-in."
fi
echo
echo "If this is a new installation you probably need an init script to"
echo "manage starting and stopping the nginx service. See:"
echo " http://wiki.nginx.org/InitScripts"
echo
echo "You'll also need to configure ngx_pagespeed if you haven't yet:"
echo " https://developers.google.com/speed/pagespeed/module/configuration"
fi fi
echo
echo "If this is a new installation you probably need an init script to"
echo "manage starting and stopping the nginx service. See:"
echo " http://wiki.nginx.org/InitScripts"
echo
echo "You'll also need to configure ngx_pagespeed if you haven't yet:"
echo " https://developers.google.com/speed/pagespeed/module/configuration"
fi fi
"$DRYRUN" && echo "[this was a dry run; your system is unchanged]" if "$DRYRUN"; then
echo_color "$YELLOW" "[this was a dry run; your system is unchanged]"
fi
} }
# Start running things from a call at the end so if this script is executed # Start running things from a call at the end so if this script is executed
+38
View File
@@ -0,0 +1,38 @@
#!/bin/bash
#
# Copyright 2016 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -e
set -u
if [ $# -ne 1 ]; then
echo "Usage: $(basename $0) <url_file>" >&2
exit 1
fi
url_file=$1
if [ ! -e "$url_file" ]; then
echo "Url file '$url_file' missing!" >&2
fi
# The size names must match install/build_psol.sh in mod_pagespeed
if [ "$(uname -m)" = x86_64 ]; then
bit_size_name=x64
else
bit_size_name=ia32
fi
sed -e 's/$BIT_SIZE_NAME\b/'$bit_size_name'/g' $url_file
+14
View File
@@ -1,5 +1,19 @@
#!/bin/bash #!/bin/bash
# #
# Copyright 2013 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Converts pagespeed_libraries.conf from Apache-format to Nginx-format, # Converts pagespeed_libraries.conf from Apache-format to Nginx-format,
# supporting the canonicalize_javascript_libraries filter. # supporting the canonicalize_javascript_libraries filter.
# Inspired by https://github.com/pagespeed/ngx_pagespeed/issues/532 # Inspired by https://github.com/pagespeed/ngx_pagespeed/issues/532
-94
View File
@@ -1,94 +0,0 @@
#!/bin/bash
#
# Copyright 2012 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Author: jefftk@google.com (Jeff Kaufman)
#
# Usage:
# scripts/prepare_psol.sh /path/to/mod_pagespeed/src
#
# Creates a directory psol/ and copies headers and a few source files from a
# depot_tools (glient) checkout into psol/include. Along with creating
# binaries, this is a step in preparing psol.tar.gz for distribution.
#
set -u # check for undefined variables
set -e # exit on failed commands
if [ "$(basename "$PWD")" != "ngx_pagespeed" ] ; then
echo "$(basename $0) must be invoked from the ngx_pagespeed directory"
exit 1
fi
if [ $# -ne 1 ] ; then
echo "Usage: $(basename $0) /path/to/mod_pagespeed/src"
exit 1
fi
MOD_PAGESPEED_SRC="$1"
if [ "$(basename "$(dirname "$MOD_PAGESPEED_SRC")")/$( \
basename "$MOD_PAGESPEED_SRC")" != "mod_pagespeed/src" ] ; then
echo "Usage: $(basename $0) /path/to/mod_pagespeed/src"
exit 1
fi
if [ -e psol ] ; then
echo "A psol/ directory already exists. Move it somewhere else and rerun."
exit 1
fi
mkdir psol/
# Copy over the .h files, plus a few selected .cc and .c files.
rsync -arvz "$MOD_PAGESPEED_SRC/" "psol/include/" --prune-empty-dirs \
--exclude=".svn" \
--exclude=".git" \
--include='*.h' \
--include='*/' \
--include="apr_thread_compatible_pool.cc" \
--include="serf_url_async_fetcher.cc" \
--include="apr_mem_cache.cc" \
--include="key_value_codec.cc" \
--include="apr_memcache2.c" \
--include="loopback_route_fetcher.cc" \
--include="add_headers_fetcher.cc" \
--include="console_css_out.cc" \
--include="console_out.cc" \
--include="dense_hash_map" \
--include="dense_hash_set" \
--include="sparse_hash_map" \
--include="sparse_hash_set" \
--include="sparsetable" \
--include="mod_pagespeed_console_out.cc" \
--include="mod_pagespeed_console_css_out.cc" \
--include="mod_pagespeed_console_html_out.cc" \
--exclude='*'
mkdir -p psol/lib/Debug/linux/ia32
mkdir -p psol/lib/Debug/linux/x64
mkdir -p psol/lib/Release/linux/ia32
mkdir -p psol/lib/Release/linux/x64
# Log that we did this.
SVN_REVISION="$(svn info $MOD_PAGESPEED_SRC | grep Revision | awk '{print $2}')"
SVN_TAG="$(svn info $MOD_PAGESPEED_SRC | grep URL | awk -F/ '{print $(NF-1)}')"
DATE="$(date +%F)"
echo "${DATE}: Copied from mod_pagespeed ${SVN_TAG}@r${SVN_REVISION} ($USER)" \
>> psol/include_history.txt
echo
echo "Output is in psol/include. Now put binaries in psol/lib following"
echo "https://github.com/pagespeed/ngx_pagespeed/wiki/Building-Release-Binaries"
echo "and then you can distribute PSOL."
+11 -19
View File
@@ -32,13 +32,7 @@
: ${PRIMARY_PORT:?"Set PRIMARY_PORT"} : ${PRIMARY_PORT:?"Set PRIMARY_PORT"}
: ${SECONDARY_PORT:?"Set SECONDARY_PORT"} : ${SECONDARY_PORT:?"Set SECONDARY_PORT"}
: ${CONTROLLER_PORT:?"Set CONTROLLER_PORT"} : ${CONTROLLER_PORT:?"Set CONTROLLER_PORT"}
: ${RCPORT1:?"Set RCPORT1"} : ${RCPORT:?"Set RCPORT"}
: ${RCPORT2:?"Set RCPORT2"}
: ${RCPORT2:?"Set RCPORT3"}
: ${RCPORT4:?"Set RCPORT4"}
: ${RCPORT5:?"Set RCPORT5"}
: ${RCPORT6:?"Set RCPORT6"}
: ${RCPORT7:?"Set RCPORT7"}
: ${MOD_PAGESPEED_DIR:?"Set MOD_PAGESPEED_DIR"} : ${MOD_PAGESPEED_DIR:?"Set MOD_PAGESPEED_DIR"}
: ${NGINX_EXECUTABLE:?"Set NGINX_EXECUTABLE"} : ${NGINX_EXECUTABLE:?"Set NGINX_EXECUTABLE"}
: ${PAGESPEED_TEST_HOST:?"Set PAGESPEED_TEST_HOST"} : ${PAGESPEED_TEST_HOST:?"Set PAGESPEED_TEST_HOST"}
@@ -55,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"
@@ -197,7 +195,7 @@ else
fi fi
if [ "$RUN_CONTROLLER_TEST" = "on" ]; then if [ "$RUN_CONTROLLER_TEST" = "on" ]; then
CONTROLLER="pagespeed CentralControllerPort $CONTROLLER_PORT;" CONTROLLER="pagespeed ExperimentalCentralControllerPort $CONTROLLER_PORT;"
else else
CONTROLLER="" CONTROLLER=""
fi fi
@@ -229,13 +227,7 @@ cat $PAGESPEED_CONF_TEMPLATE \
| sed 's#@@CONTROLLER@@#'"$CONTROLLER"'#' \ | sed 's#@@CONTROLLER@@#'"$CONTROLLER"'#' \
| sed 's#@@NATIVE_FETCHER@@#'"$NATIVE_FETCHER"'#' \ | sed 's#@@NATIVE_FETCHER@@#'"$NATIVE_FETCHER"'#' \
| sed 's#@@RESOLVER@@#'"$RESOLVER"'#' \ | sed 's#@@RESOLVER@@#'"$RESOLVER"'#' \
| sed 's#@@RCPORT1@@#'"$RCPORT1"'#' \ | sed 's#@@RCPORT@@#'"$RCPORT"'#' \
| sed 's#@@RCPORT2@@#'"$RCPORT2"'#' \
| sed 's#@@RCPORT3@@#'"$RCPORT3"'#' \
| sed 's#@@RCPORT4@@#'"$RCPORT4"'#' \
| sed 's#@@RCPORT5@@#'"$RCPORT5"'#' \
| sed 's#@@RCPORT6@@#'"$RCPORT6"'#' \
| sed 's#@@RCPORT7@@#'"$RCPORT7"'#' \
| sed 's#@@PAGESPEED_TEST_HOST@@#'"$PAGESPEED_TEST_HOST"'#' \ | sed 's#@@PAGESPEED_TEST_HOST@@#'"$PAGESPEED_TEST_HOST"'#' \
>> $PAGESPEED_CONF >> $PAGESPEED_CONF
# make sure we substituted all the variables # make sure we substituted all the variables
@@ -323,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"
@@ -1196,7 +1188,7 @@ OUT=$($WGET_DUMP --header=Host:response-header-disable.example.com $URL)
check_not_from "$OUT" egrep -qi 'addInstrumentationInit' check_not_from "$OUT" egrep -qi 'addInstrumentationInit'
# TODO(jmaessen, jefftk): Port proxying tests, which rely on pointing a # TODO(jmaessen, jefftk): Port proxying tests, which rely on pointing a
# MapProxyDomain construct at a static server. Perhaps localhost:8050 will # MapProxyDomain construct at a static server. Perhaps $HOSTNAME will
# serve, but the tests need to use different urls then. For mod_pagespeed these # serve, but the tests need to use different urls then. For mod_pagespeed these
# tests immediately precede the "scrape_secondary_stat" definition in # tests immediately precede the "scrape_secondary_stat" definition in
# system_test.sh. # system_test.sh.
@@ -1432,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.*" \
+86 -7
View File
@@ -232,7 +232,7 @@ http {
# Block 6: Location block with proxy_cache directives. # Block 6: Location block with proxy_cache directives.
location /mod_pagespeed_test/cachable_rewritten_html/ { location /mod_pagespeed_test/cachable_rewritten_html/ {
# 1: Upstream PageSpeed server is running at localhost:8050. # 1: Upstream PageSpeed server is running at localhost:@@PRIMARY_PORT@@.
proxy_pass http://localhost:@@PRIMARY_PORT@@; proxy_pass http://localhost:@@PRIMARY_PORT@@;
# 2: Use htmlcache as the zone for caching. # 2: Use htmlcache as the zone for caching.
proxy_cache htmlcache; proxy_cache htmlcache;
@@ -372,6 +372,29 @@ http {
"id=1;percent=100;matches_device_type=mobile;enable=recompress_images"; "id=1;percent=100;matches_device_type=mobile;enable=recompress_images";
} }
server {
listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@;
server_name experiment.ajax.example.com;
pagespeed FileCachePath "@@FILE_CACHE@@";
pagespeed RewriteLevel CoreFilters;
pagespeed DisableFilters add_instrumentation;
pagespeed JsInlineMaxBytes 1;
pagespeed RunExperiment on;
pagespeed UseAnalyticsJs false;
pagespeed ExperimentSpec "id=1;percent=100;level=CoreFilters;enable=collapse_whitespace;options=JsInlineMaxBytes=1";
}
server {
listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@;
server_name ajax.example.com;
pagespeed FileCachePath "@@FILE_CACHE@@";
pagespeed RewriteLevel CoreFilters;
pagespeed EnableFilters add_instrumentation;
pagespeed JsInlineMaxBytes 1;
}
server { server {
listen @@SECONDARY_PORT@@; listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@; listen [::]:@@SECONDARY_PORT@@;
@@ -1221,7 +1244,7 @@ http {
listen [::]:@@SECONDARY_PORT@@; listen [::]:@@SECONDARY_PORT@@;
server_name remote-config.example.com; server_name remote-config.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@"; pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT1@@/remote.cfg"; pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/standard";
pagespeed RemoteConfigurationTimeoutMs 1500; pagespeed RemoteConfigurationTimeoutMs 1500;
} }
server { server {
@@ -1229,7 +1252,8 @@ http {
listen [::]:@@SECONDARY_PORT@@; listen [::]:@@SECONDARY_PORT@@;
server_name remote-config-partially-invalid.example.com; server_name remote-config-partially-invalid.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@"; pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT2@@/remote.cfg"; pagespeed RemoteConfigurationUrl
"http://127.0.0.1:@@RCPORT@@/partly-invalid";
pagespeed RemoteConfigurationTimeoutMs 1500; pagespeed RemoteConfigurationTimeoutMs 1500;
} }
server { server {
@@ -1237,7 +1261,7 @@ http {
listen [::]:@@SECONDARY_PORT@@; listen [::]:@@SECONDARY_PORT@@;
server_name remote-config-invalid.example.com; server_name remote-config-invalid.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@"; pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT3@@/remote.cfg"; pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/invalid";
pagespeed RemoteConfigurationTimeoutMs 1500; pagespeed RemoteConfigurationTimeoutMs 1500;
} }
server { server {
@@ -1245,7 +1269,7 @@ http {
listen [::]:@@SECONDARY_PORT@@; listen [::]:@@SECONDARY_PORT@@;
server_name remote-config-failed-fetch.example.com; server_name remote-config-failed-fetch.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@"; pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT5@@/remote.cfg"; pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/fail-future";
pagespeed RemoteConfigurationTimeoutMs 1500; pagespeed RemoteConfigurationTimeoutMs 1500;
} }
server { server {
@@ -1253,7 +1277,7 @@ http {
listen [::]:@@SECONDARY_PORT@@; listen [::]:@@SECONDARY_PORT@@;
server_name remote-config-slow-fetch.example.com; server_name remote-config-slow-fetch.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@"; pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT6@@/remote.cfg"; pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/timeout";
pagespeed RemoteConfigurationTimeoutMs 1500; pagespeed RemoteConfigurationTimeoutMs 1500;
} }
server { server {
@@ -1261,7 +1285,41 @@ http {
listen [::]:@@SECONDARY_PORT@@; listen [::]:@@SECONDARY_PORT@@;
server_name remote-config-experiment.example.com; server_name remote-config-experiment.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@"; pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT7@@/remote.cfg"; pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/experiment";
pagespeed RemoteConfigurationTimeoutMs 1500;
}
server {
listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@;
server_name remote-config-slightly-slow-fetch.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed RemoteConfigurationUrl
"http://127.0.0.1:@@RCPORT@@/slightly-slow";
pagespeed RemoteConfigurationTimeoutMs 1500;
}
server {
listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@;
server_name remote-config-slightly-slow-expired-fetch.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/slow-expired";
pagespeed RemoteConfigurationTimeoutMs 1500;
}
server {
listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@;
server_name remote-config-forbidden.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed RemoteConfigurationUrl "http://127.0.0.1:@@RCPORT@@/forbidden";
pagespeed RemoteConfigurationTimeoutMs 1500;
}
server {
listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@;
server_name remote-config-initially-forbidden.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed RemoteConfigurationUrl
"http://127.0.0.1:@@RCPORT@@/forbidden-once";
pagespeed RemoteConfigurationTimeoutMs 1500; pagespeed RemoteConfigurationTimeoutMs 1500;
} }
@@ -1670,6 +1728,27 @@ http {
pagespeed RewriteLevel PassThrough; pagespeed RewriteLevel PassThrough;
pagespeed EnableFilters debug; pagespeed EnableFilters debug;
} }
server {
pagespeed on;
listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@;
server_name broken-fetch.example.com;
pagespeed FileCachePath "@@FILE_CACHE@@/broken-fetch";
# Set up a fetch proxy that will 404 every request.
pagespeed FetchProxy "brokenfetch.example.com:1111";
# Prevent loopback fetch by explicitly authorizing the domain. Loopback
# fetches would work, and for this test, we're trying to have fetches fail,
# so they are instead picked up by the ipro recorder.
pagespeed Domain http://broken-fetch.example.com;
pagespeed InPlaceResourceOptimization on;
pagespeed RewriteLevel PassThrough;
pagespeed EnableFilters rewrite_javascript;
pagespeed DisableFilters add_instrumentation;
pagespeed CriticalImagesBeaconEnabled false;
}
server { server {
listen @@PRIMARY_PORT@@; listen @@PRIMARY_PORT@@;
listen [::]:@@PRIMARY_PORT@@; listen [::]:@@PRIMARY_PORT@@;
+18 -28
View File
@@ -23,12 +23,12 @@
# Exits with status 2 if command line args are wrong. # Exits with status 2 if command line args are wrong.
# #
# Usage: # Usage:
# ./run_tests.sh primary_port secondary_port mod_pagespeed_dir ngx_binary # ./run_tests.sh /path/to/mod_pagespeed /path/to/nginx/binary
# pagespeed_test_host
# Example:
# ./run_tests.sh 8050 8051 /path/to/mod_pagespeed /path/to/nginx/binary
# selfsigned.modpagespeed.com
# #
# By default the test script uses several ports. If you have a port conflict
# and need to override one you can do that by setting the relevant environment
# variable. For example:
# PRIMARY_PORT=1234 ./run_tests.sh /.../mod_pagespeed /.../nginx/binary
# Normally we test only with the native fetcher off. Set # Normally we test only with the native fetcher off. Set
# TEST_NATIVE_FETCHER=true to also test the native fetcher, set # TEST_NATIVE_FETCHER=true to also test the native fetcher, set
@@ -45,29 +45,25 @@ RUN_TESTS=${RUN_TESTS:-true}
# true. # true.
USE_VALGRIND=${USE_VALGRIND:-false} USE_VALGRIND=${USE_VALGRIND:-false}
if [ "$#" -ne 5 ] ; then if [ "$#" -ne 2 ] ; then
echo "Usage: $0 primary_port secondary_port mod_pagespeed_dir" echo "Usage: $0 mod_pagespeed_dir nginx_executable"
echo " nginx_executable"
exit 2 exit 2
fi fi
PRIMARY_PORT="$1" MOD_PAGESPEED_DIR="$1"
SECONDARY_PORT="$2" NGINX_EXECUTABLE="$2"
MOD_PAGESPEED_DIR="$3"
NGINX_EXECUTABLE="$4" : ${PRIMARY_PORT:=8050}
PAGESPEED_TEST_HOST="$5" : ${SECONDARY_PORT:=8051}
CONTROLLER_PORT=8053 : ${CONTROLLER_PORT:=8053}
RCPORT1=9991 : ${RCPORT:=9991}
RCPORT2=9992 : ${PAGESPEED_TEST_HOST:=selfsigned.modpagespeed.com}
RCPORT3=9993 : ${PHP_PORT:=9000}
RCPORT4=9994
RCPORT5=9995
RCPORT6=9996
RCPORT7=9997
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" \
@@ -76,13 +72,7 @@ function run_test_checking_failure() {
PAGESPEED_TEST_HOST="$PAGESPEED_TEST_HOST" \ PAGESPEED_TEST_HOST="$PAGESPEED_TEST_HOST" \
RUN_TESTS="$RUN_TESTS" \ RUN_TESTS="$RUN_TESTS" \
CONTROLLER_PORT="$CONTROLLER_PORT" \ CONTROLLER_PORT="$CONTROLLER_PORT" \
RCPORT1="$RCPORT1" \ RCPORT="$RCPORT" \
RCPORT2="$RCPORT2" \
RCPORT3="$RCPORT3" \
RCPORT4="$RCPORT4" \
RCPORT5="$RCPORT5" \
RCPORT6="$RCPORT6" \
RCPORT7="$RCPORT7" \
bash "$this_dir/nginx_system_test.sh" bash "$this_dir/nginx_system_test.sh"
STATUS=$? STATUS=$?
echo "With $@ setup." echo "With $@ setup."