Blame | Last modification | View Log | RSS feed
#!/bin/sh## Copyright (c) 2009 The Chromium Authors. All rights reserved.# Use of this source code is governed by a BSD-style license that can be# found in the LICENSE file.## This script is part of the mod-pagespeed package.## It creates the repository configuration file for package updates, since# we cannot do this during the mod-pagespeed installation since the repository# is locked.## This functionality can be controlled by creating the $DEFAULTS_FILE and# setting "repo_add_once" to "true" or "false" as desired. An empty# $DEFAULTS_FILE is the same as setting the value to "false".# System-wide package configuration.DEFAULTS_FILE="/etc/default/mod-pagespeed"# sources.list setting for mod-pagespeed updates.REPOCONFIG="http://dl.google.com/linux/mod-pagespeed/rpm/stable"# Install the repository signing key (see also:# http://www.google.com/linuxrepositories/aboutkey.html)install_rpm_key() {# Check to see if key already exists.rpm -q gpg-pubkey-7fac5991-4615767f > /dev/null 2>&1if [ "$?" -eq "0" ]; then# Key already existsreturn 0fi# This is to work around a bug in RPM 4.7.0. (see http://crbug.com/22312)rpm -q gpg-pubkey-7fac5991-45f06f46 > /dev/null 2>&1if [ "$?" -eq "0" ]; then# Key already existsreturn 0fi# RPM on Mandriva 2009 is dumb and does not understand "rpm --import -"TMPKEY=$(mktemp /tmp/google.sig.XXXXXX)if [ -n "$TMPKEY" ]; thencat > "$TMPKEY" <<KEYDATA-----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v1.4.2.2 (GNU/Linux)mQGiBEXwb0YRBADQva2NLpYXxgjNkbuP0LnPoEXruGmvi3XMIxjEUFuGNCP4Rj/akv2E5VixBP1vcQFDRJ+p1puh8NU0XERlhpyZrVMzzS/RdWdyXf7E5S8oqNXsoD1zfvmI+i9b2EhHAA19Kgw7ifV8vMa4tkwslEmcTiwiw8lyUl28Wh4Et8SxzwCggDcAfeGqtn3PP5YAdD0km4S4XeMEAJjlrqPoPv2Gf//tfznY2UyS9PUqFCPLHgFLe80uQhI2U5jt6jUKN4fHauvR6z3seSAsh1YyzyZCKxJFEKXCCqnrFSoh4WSJsbFNc4PNb0V0SqiTCkWADZyLT5wll8sWuQ5ylTf3z1ENoHf+G3um3/wk/+xmEHvj9HCTBEXP78X0A/0Tqlhc2RBnEf+AqxWvM8sk8LzJI/XGjwBvKfXe+l3rnSR2kEAvGzj5Sg0X4XmfTg4Jl8BNjWyvm2Wmjfet41LPmYJKsux3g0b8yzQxeOA4pQKKAU3Z4+rgzGmfHdwCG5MNT2A5XxD/eDd+L4fRx0HbFkIQoAi1J3YWQSiTk15fw7RMR29vZ2xlLCBJbmMuIExpbnV4IFBhY2thZ2UgU2lnbmluZyBLZXkgPGxpbnV4LXBhY2thZ2VzLWtleW1hc3RlckBnb29nbGUuY29tPohjBBMRAgAjAhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AFAkYVdn8CGQEACgkQoECDD3+sWZHKSgCfdq3HtNYJLv+XZleb6HN4zOcFAJEAniSFbuv8V5FSHxeRimHx25671az+uQINBEXwb0sQCACuA8HT2nr+FM5y/kzIA51ZcC46KFtIDgjQJ31Q3OrkYP8LbxOpKMRIzvOZrsjOlFmDVqitiVc7qj3lYp6UrgNVaFv6Qu4bo2/ctjNHDDBdv6nufmusJUWq/9TwieepM/cwnXd+HMxu1XBKRVk9XyAZ9SvfcW4EtxVgysI+XlptKFa5JCqFM3qJllVohMmr7lMwO8+sxTWTXqxsptJopZeKz+UBEEqPyw7CUIVYGC9ENEtIMFvAvPqnhj1GS96REMpry+5s9WKuLEaclWpdK3krttbDlY1NaeQUCRvBYZ8iAG9YSLHUHMTuI2oea07Rh4dtIAqPwAX8xn36JAYG2vgLAAMFB/wKqaycjWAZwIe98Yt0qHsdkpmIbarD9fGiA6kfkK/UxjL/k7tmS4VmCljrrDZkPSQ/19mpdRcGXtb0NI9+nyM5trweTvtPw+HPkDiJlTaiCcx+izg79Fj9KcofuNb3lPdXZb9tzf5oDnmm/B+4vkeTuEZJ//IFty8cmvCpzvY+DAz1Vo9rA+ZncpWY1n6z6oSS9AsyT/IFlWWBZZ17SpMHu+h4Bxy62+AbPHKGSujEGQhWq8ZRoJATG0KSObnmZ7FwFWu1e9XFoUCt0bSjiJWTIyaObMrWu/LvJ3e9I87HseSJStfw6fki5og9qFEkMrIrBCp3QGuQWBq/rTdMuwNFiEkEGBECAAkFAkXwb0sCGwwACgkQoECDD3+sWZF/WACfeNAu1/1hwZtUo1bR+MWiCjpvHtwAnA1R3IHqFLQ2X3xJ40XPuAyY/FJG=Quqp-----END PGP PUBLIC KEY BLOCK----------BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG 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dmoF-----END PGP PUBLIC KEY BLOCK-----KEYDATArpm --import "$TMPKEY"rc=$?rm -f "$TMPKEY"if [ "$rc" -eq "0" ]; thenreturn 0fifireturn 1}determine_rpm_package_manager() {local RELEASELSB_RELEASE="$(which lsb_release 2> /dev/null)"if [ -x "$LSB_RELEASE" ]; thenRELEASE=$(lsb_release -i 2> /dev/null)case $DISTRIB_ID in"Fedora")PACKAGEMANAGER=yum;;"MandrivaLinux")PACKAGEMANAGER=urpmi;;"SUSE LINUX")PACKAGEMANAGER=yast;;esacfiif [ "$PACKAGEMANAGER" ]; thenreturnfi# Fallback methods that are probably unnecessary on modern systems.if [ -f "/etc/lsb-release" ]; then# file missing on Fedora, does not contain DISTRIB_ID on OpenSUSE.eval $(sed -e '/DISTRIB_ID/!d' /etc/lsb-release)case $DISTRIB_ID inMandrivaLinux)PACKAGEMANAGER=urpmi;;esacfiif [ "$PACKAGEMANAGER" ]; thenreturnfiif [ -f "/etc/fedora-release" ] || [ -f "/etc/redhat-release" ]; thenPACKAGEMANAGER=yumelif [ -f "/etc/system-release" ] && \grep -q "Amazon Linux AMI" /etc/system-release ; thenPACKAGEMANAGER=yumelif [ -f "/etc/SuSE-release" ]; thenPACKAGEMANAGER=yastelif [ -f "/etc/mandriva-release" ]; thenPACKAGEMANAGER=urpmifi}DEFAULT_ARCH="x86_64"YUM_REPO_FILE="/etc/yum.repos.d/mod-pagespeed.repo"ZYPPER_REPO_FILE="/etc/zypp/repos.d/mod-pagespeed.repo"URPMI_REPO_FILE="/etc/urpmi/urpmi.cfg"install_yum() {install_rpm_keyif [ ! "$REPOCONFIG" ]; thenreturn 0fiif [ -d "/etc/yum.repos.d" ]; thencat > "$YUM_REPO_FILE" << REPOCONTENT[mod-pagespeed]name=mod-pagespeedbaseurl=$REPOCONFIG/$DEFAULT_ARCHenabled=1gpgcheck=1REPOCONTENTfi}# This is called by the cron job, rather than in the RPM postinstall.# We cannot do this during the install when urpmi is running due to# database locking. We also need to enable the repository, and we can# only do that while we are online.# see: https://qa.mandriva.com/show_bug.cgi?id=31893configure_urpmi() {if [ ! "$REPOCONFIG" ]; thenreturn 0fiurpmq --list-media | grep -q -s "^mod-pagespeed$"if [ "$?" -eq "0" ]; then# Repository already configuredreturn 0fiurpmi.addmedia --update \"mod-pagespeed" "$REPOCONFIG/$DEFAULT_ARCH"}install_urpmi() {# urpmi not smart enough to pull media_info/pubkey from the repository?install_rpm_key# Defer urpmi.addmedia to configure_urpmi() in the cron job.# See comment there.## urpmi.addmedia --update \# "mod-pagespeed" "$REPOCONFIG/$DEFAULT_ARCH"}install_yast() {if [ ! "$REPOCONFIG" ]; thenreturn 0fi# We defer adding the key to later. See comment in the cron job.# Ideally, we would run: zypper addrepo -t YUM -f \# "$REPOCONFIG/$DEFAULT_ARCH" "mod-pagespeed"# but that does not work when zypper is running.if [ -d "/etc/zypp/repos.d" ]; thencat > "$ZYPPER_REPO_FILE" << REPOCONTENT[mod-pagespeed]name=mod-pagespeedenabled=1autorefresh=1baseurl=$REPOCONFIG/$DEFAULT_ARCHtype=rpm-mdkeeppackages=0REPOCONTENTfi}# Check if the automatic repository configuration is done, so we know when to# stop trying.verify_install() {# It's probably enough to see that the repo configs have been created. If they# aren't configured properly, update_bad_repo should catch that when it's run.case $1 in"yum")[ -f "$YUM_REPO_FILE" ];;"yast")[ -f "$ZYPPER_REPO_FILE" ];;"urpmi")urpmq --list-url | grep -q -s "\bmod-pagespeed\b";;esac}# Update the Google repository if it's not set correctly.update_bad_repo() {if [ ! "$REPOCONFIG" ]; thenreturn 0fidetermine_rpm_package_managercase $PACKAGEMANAGER in"yum")update_repo_file "$YUM_REPO_FILE";;"yast")update_repo_file "$ZYPPER_REPO_FILE";;"urpmi")update_urpmi_cfg;;esac}update_repo_file() {REPO_FILE="$1"# Don't do anything if the file isn't there, since that probably means the# user disabled it.if [ ! -r "$REPO_FILE" ]; thenreturn 0fi# Check if the correct repository configuration is in there.REPOMATCH=$(grep "^baseurl=$REPOCONFIG/$DEFAULT_ARCH" "$REPO_FILE" \2>/dev/null)# If it's there, nothing to doif [ "$REPOMATCH" ]; thenreturn 0fi# Check if it's there but disabled by commenting out (as opposed to using the# 'enabled' setting).MATCH_DISABLED=$(grep "^[[:space:]]*#.*baseurl=$REPOCONFIG/$DEFAULT_ARCH" \"$REPO_FILE" 2>/dev/null)if [ "$MATCH_DISABLED" ]; then# It's OK for it to be disabled, as long as nothing bogus is enabled in its# place.ACTIVECONFIGS=$(grep "^baseurl=.*" "$REPO_FILE" 2>/dev/null)if [ ! "$ACTIVECONFIGS" ]; thenreturn 0fifi# If we get here, the correct repository wasn't found, or something else is# active, so fix it. This assumes there is a 'baseurl' setting, but if not,# then that's just another way of disabling, so we won't try to add it.sed -i -e "s,^baseurl=.*,baseurl=$REPOCONFIG/$DEFAULT_ARCH," "$REPO_FILE"}update_urpmi_cfg() {REPOCFG=$(urpmq --list-url | grep "\bmod-pagespeed\b")if [ ! "$REPOCFG" ]; then# Don't do anything if the repo isn't there, since that probably means the# user deleted it.return 0fi# See if it's the right repo URLREPOMATCH=$(echo "$REPOCFG" | grep "\b$REPOCONFIG/$DEFAULT_ARCH\b")# If so, nothing to doif [ "$REPOMATCH" ]; thenreturn 0fi# Looks like it's the wrong URL, so recreate it.urpmi.removemedia "mod-pagespeed" && \urpmi.addmedia --update "mod-pagespeed" "$REPOCONFIG/$DEFAULT_ARCH"}# We only remove the repository configuration during a purge. Since RPM has# no equivalent to dpkg --purge, the code below is actually never used. We# keep it only for reference purposes, should we ever need it.##remove_yum() {# rm -f "$YUM_REPO_FILE"#}##remove_urpmi() {# # Ideally, we would run: urpmi.removemedia "mod-pagespeed"# # but that does not work when urpmi is running.# # Sentinel comment text does not work either because urpmi.update removes# # all comments. So we just delete the entry that matches what we originally# # inserted. If such an entry was added manually, that's tough luck.# if [ -f "$URPMI_REPO_FILE" ]; then# sed -i '\_^mod-pagespeed $REPOCONFIG/$DEFAULT_ARCH {$_,/^}$/d' "$URPMI_REPO_FILE"# fi#}##remove_yast() {# # Ideally, we would run: zypper removerepo "mod-pagespeed"# # but that does not work when zypper is running.# rm -f /etc/zypp/repos.d/mod-pagespeed.repo#}## MAIN ##DEFAULTS_FILE="/etc/default/mod-pagespeed"if [ -r "$DEFAULTS_FILE" ]; then. "$DEFAULTS_FILE"fiif [ "$repo_add_once" = "true" ]; thendetermine_rpm_package_managercase $PACKAGEMANAGER in"urpmi")# We need to configure urpmi after the install has finished.# See configure_urpmi() for details.configure_urpmi;;"yast")# It looks as though yast/zypper has a lock on the RPM DB during# postinstall, so we cannot add the signing key with install_rpm_key().# Instead, we attempt to do this here. If the user attempt to update before# the cron job imports the key, Yast will grab the key from our server and# prompt the user to accept the key.install_rpm_key;;esacif [ $? -eq 0 ]; then# Before we quit auto-configuration, check that everything looks sane, since# part of this happened during package install and we don't have the return# value of that process.verify_install $PACKAGEMANAGERif [ $? -eq 0 ]; thensed -i -e 's/[[:space:]]*repo_add_once=.*/repo_add_once="false"/' \"$DEFAULTS_FILE"fifielseupdate_bad_repofi