Search
j0ke.net Open Build Service
>
Projects
>
Apache
:
Modules
>
apache2-mod_pagespeed
> mod-pagespeed.crondaily
Sign Up
|
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File mod-pagespeed.crondaily of Package apache2-mod_pagespeed (Revision 4)
Currently displaying revision
4
,
show latest
#!/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>&1 if [ "$?" -eq "0" ]; then # Key already exists return 0 fi # 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>&1 if [ "$?" -eq "0" ]; then # Key already exists return 0 fi # RPM on Mandriva 2009 is dumb and does not understand "rpm --import -" TMPKEY=$(mktemp /tmp/google.sig.XXXXXX) if [ -n "$TMPKEY" ]; then cat > "$TMPKEY" <<KEYDATA -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.2.2 (GNU/Linux) mQGiBEXwb0YRBADQva2NLpYXxgjNkbuP0LnPoEXruGmvi3XMIxjEUFuGNCP4Rj/a kv2E5VixBP1vcQFDRJ+p1puh8NU0XERlhpyZrVMzzS/RdWdyXf7E5S8oqNXsoD1z fvmI+i9b2EhHAA19Kgw7ifV8vMa4tkwslEmcTiwiw8lyUl28Wh4Et8SxzwCggDcA feGqtn3PP5YAdD0km4S4XeMEAJjlrqPoPv2Gf//tfznY2UyS9PUqFCPLHgFLe80u QhI2U5jt6jUKN4fHauvR6z3seSAsh1YyzyZCKxJFEKXCCqnrFSoh4WSJsbFNc4PN b0V0SqiTCkWADZyLT5wll8sWuQ5ylTf3z1ENoHf+G3um3/wk/+xmEHvj9HCTBEXP 78X0A/0Tqlhc2RBnEf+AqxWvM8sk8LzJI/XGjwBvKfXe+l3rnSR2kEAvGzj5Sg0X 4XmfTg4Jl8BNjWyvm2Wmjfet41LPmYJKsux3g0b8yzQxeOA4pQKKAU3Z4+rgzGmf HdwCG5MNT2A5XxD/eDd+L4fRx0HbFkIQoAi1J3YWQSiTk15fw7RMR29vZ2xlLCBJ bmMuIExpbnV4IFBhY2thZ2UgU2lnbmluZyBLZXkgPGxpbnV4LXBhY2thZ2VzLWtl eW1hc3RlckBnb29nbGUuY29tPohjBBMRAgAjAhsDBgsJCAcDAgQVAggDBBYCAwEC HgECF4AFAkYVdn8CGQEACgkQoECDD3+sWZHKSgCfdq3HtNYJLv+XZleb6HN4zOcF AJEAniSFbuv8V5FSHxeRimHx25671az+uQINBEXwb0sQCACuA8HT2nr+FM5y/kzI A51ZcC46KFtIDgjQJ31Q3OrkYP8LbxOpKMRIzvOZrsjOlFmDVqitiVc7qj3lYp6U rgNVaFv6Qu4bo2/ctjNHDDBdv6nufmusJUWq/9TwieepM/cwnXd+HMxu1XBKRVk9 XyAZ9SvfcW4EtxVgysI+XlptKFa5JCqFM3qJllVohMmr7lMwO8+sxTWTXqxsptJo pZeKz+UBEEqPyw7CUIVYGC9ENEtIMFvAvPqnhj1GS96REMpry+5s9WKuLEaclWpd K3krttbDlY1NaeQUCRvBYZ8iAG9YSLHUHMTuI2oea07Rh4dtIAqPwAX8xn36JAYG 2vgLAAMFB/wKqaycjWAZwIe98Yt0qHsdkpmIbarD9fGiA6kfkK/UxjL/k7tmS4Vm CljrrDZkPSQ/19mpdRcGXtb0NI9+nyM5trweTvtPw+HPkDiJlTaiCcx+izg79Fj9 KcofuNb3lPdXZb9tzf5oDnmm/B+4vkeTuEZJ//IFty8cmvCpzvY+DAz1Vo9rA+Zn cpWY1n6z6oSS9AsyT/IFlWWBZZ17SpMHu+h4Bxy62+AbPHKGSujEGQhWq8ZRoJAT G0KSObnmZ7FwFWu1e9XFoUCt0bSjiJWTIyaObMrWu/LvJ3e9I87HseSJStfw6fki 5og9qFEkMrIrBCp3QGuQWBq/rTdMuwNFiEkEGBECAAkFAkXwb0sCGwwACgkQoECD D3+sWZF/WACfeNAu1/1hwZtUo1bR+MWiCjpvHtwAnA1R3IHqFLQ2X3xJ40XPuAyY /FJG =Quqp -----END PGP PUBLIC KEY BLOCK----- KEYDATA rpm --import "$TMPKEY" rc=$? rm -f "$TMPKEY" if [ "$rc" -eq "0" ]; then return 0 fi fi return 1 } determine_rpm_package_manager() { local RELEASE LSB_RELEASE="$(which lsb_release 2> /dev/null)" if [ -x "$LSB_RELEASE" ]; then RELEASE=$(lsb_release -i 2> /dev/null) case $DISTRIB_ID in "Fedora") PACKAGEMANAGER=yum ;; "MandrivaLinux") PACKAGEMANAGER=urpmi ;; "SUSE LINUX") PACKAGEMANAGER=yast ;; esac fi if [ "$PACKAGEMANAGER" ]; then return fi # 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 in MandrivaLinux) PACKAGEMANAGER=urpmi ;; esac fi if [ "$PACKAGEMANAGER" ]; then return fi if [ -f "/etc/fedora-release" ] || [ -f "/etc/redhat-release" ]; then PACKAGEMANAGER=yum elif [ -f "/etc/SuSE-release" ]; then PACKAGEMANAGER=yast elif [ -f "/etc/mandriva-release" ]; then PACKAGEMANAGER=urpmi fi } DEFAULT_ARCH="i386" 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_key if [ ! "$REPOCONFIG" ]; then return 0 fi if [ -d "/etc/yum.repos.d" ]; then cat > "$YUM_REPO_FILE" << REPOCONTENT [mod-pagespeed] name=mod-pagespeed baseurl=$REPOCONFIG/$DEFAULT_ARCH enabled=1 gpgcheck=1 REPOCONTENT fi } # 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=31893 configure_urpmi() { if [ ! "$REPOCONFIG" ]; then return 0 fi urpmq --list-media | grep -q -s "^mod-pagespeed$" if [ "$?" -eq "0" ]; then # Repository already configured return 0 fi urpmi.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" ]; then return 0 fi # 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" ]; then cat > "$ZYPPER_REPO_FILE" << REPOCONTENT [mod-pagespeed] name=mod-pagespeed enabled=1 autorefresh=1 baseurl=$REPOCONFIG/$DEFAULT_ARCH type=rpm-md keeppackages=0 REPOCONTENT fi } # 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" ]; then return 0 fi determine_rpm_package_manager case $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" ]; then return 0 fi # 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 do if [ "$REPOMATCH" ]; then return 0 fi # 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" ]; then return 0 fi fi # 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 0 fi # See if it's the right repo URL REPOMATCH=$(echo "$REPOCFG" | grep "\b$REPOCONFIG/$DEFAULT_ARCH\b") # If so, nothing to do if [ "$REPOMATCH" ]; then return 0 fi # 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" fi if [ "$repo_add_once" = "true" ]; then determine_rpm_package_manager case $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 ;; esac if [ $? -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 $PACKAGEMANAGER if [ $? -eq 0 ]; then sed -i -e 's/[[:space:]]*repo_add_once=.*/repo_add_once="false"/' \ "$DEFAULTS_FILE" fi fi else update_bad_repo fi