blob: 78d549ea4c0827e28af91e7bc91c7351b1101376 [file] [log] [blame]
#!/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.
#
# Author: cheesy@google.com (Steve Hill)
#
# Install packages required for building mod_pagespeed.
if [ "$UID" -ne 0 ]; then
echo Root is required to run this. Re-execing with sudo
exec sudo $0 "$@"
exit 1 # NOTREACHED
fi
additional_dev_packages=false
if [ "${1:-}" = "--additional_dev_packages" ]; then
additional_dev_packages=true
shift
fi
if [ $# -ne 0 ]; then
echo "Usage: $(basename $0) [--additional_dev_packages]" >&2
exit 1
fi
binary_packages=(subversion httpd gcc-c++ gperf make rpm-build
glibc-devel at curl-devel expat-devel gettext-devel openssl-devel zlib-devel
libevent-devel rsync redhat-lsb)
src_packages=()
if "$additional_dev_packages"; then
binary_packages+=(php php-mbstring autoconf libtool valgrind pcre-devel libuuid-devel)
src_packages+=(redis-server)
fi
# Which distribution of Scientific Linux gcc to install (5 or 6).
install_sl_gcc=
if version_compare "$(lsb_release -rs)" -ge 7; then
binary_packages+=(python wget git)
if "$additional_dev_packages"; then
binary_packages+=(memcached)
fi
elif version_compare "$(lsb_release -rs)" -ge 6; then
install_sl_gcc=6
binary_packages+=(python wget)
# gyp runs "git rev-list --all --count" which the CentOS 6 package is too old
# for.
src_packages+=(git)
if "$additional_dev_packages"; then
binary_packages+=(memcached)
fi
else
install_sl_gcc=5
# Note that wget of git doesn't work on CentOS 5 due to it having an ancient
# OpenSSL. You need to manually scp up the contents of $GIT_SRC_URL from
# shell_utils.sh.
src_packages+=(python2.7 wget git)
if "$additional_dev_packages"; then
src_packages+=(memcached)
fi
fi
# Are we installing gcc from Scientific Linux?
if [ -n "$install_sl_gcc" ]; then
# The signing cert is the same for all versions.
curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-cern \
https://linux.web.cern.ch/linux/scientific6/docs/repository/cern/slc6X/i386/RPM-GPG-KEY-cern
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-cern
# We have to use curl; wget can't parse their SAN.
curl -o /etc/yum.repos.d/slc${install_sl_gcc}-devtoolset.repo \
https://linux.web.cern.ch/linux/scientific${install_sl_gcc}/docs/repository/cern/devtoolset/slc${install_sl_gcc}-devtoolset.repo
binary_packages+=(devtoolset-2-gcc-c++ devtoolset-2-binutils)
fi
yum -y install "${binary_packages[@]}"
# Make sure atd started after installation.
/etc/init.d/atd start || true
# To build on Centos 5/6 we need gcc 4.8 from Scientific Linux. We can't
# export CC and CXX because some steps still use a literal "g++", but #$%^
# devtoolset includes its own sudo, and we don't want that because it doesn't
# support -E, so rename it if it exists.
DEVTOOLSET_BIN=/opt/rh/devtoolset-2/root/usr/bin/
if [ -e "$DEVTOOLSET_BIN/sudo" ]; then
mv "$DEVTOOLSET_BIN/sudo" "$DEVTOOLSET_BIN/sudo.ignored"
fi
# At least CentOS 5 puts the Include directives before it sets the LogLevel,
# but we set LogLevel in pagespeed.conf because some of our tests depend on it.
# If httpd.conf sets LogLevel after any includes, move the LogLevel before the
# first Include.
httpd_conf=/etc/httpd/conf/httpd.conf
include_line_number="$(grep -En '^Include[[:space:]]' $httpd_conf | cut -d: -f 1 | head -n 1)"
loglevel_plus_line_number="$(grep -En '^LogLevel[[:space:]]' $httpd_conf | tail -n 1)"
loglevel_line_number="${loglevel_plus_line_number%%:*}"
if [ -n "$include_line_number" -a -n "$loglevel_line_number" ] && \
[ "$include_line_number" -lt "$loglevel_line_number" ]; then
loglevel_line="${loglevel_plus_line_number#*:}"
# Comment out all LoglLevel lines but insert the last one found before the first Include.
sed -i.pagespeed_bak "s/^LogLevel[[:space:]]/#&/; 0,/^Include/s//$loglevel_line\\n&/" $httpd_conf
fi
# src_packages might be empty. The below placates set -u, see:
# http://stackoverflow.com/questions/7577052/bash-empty-array-expansion-with-set-u
install_from_src ${src_packages[@]+"${src_packages[@]}"}
# Start memcached if it was installed from source
# TODO(cheesy): This should probably happen as part of the test setup, though
# the tests expect it to have been started by initscripts.
if [ -e /usr/local/bin/memcached ]; then
/usr/local/bin/memcached -d -u nobody -m 512 -p 11211 127.0.0.1
fi