1 @@include@@variables.include 2 3 # Install the repository signing key (see also: 4 # http://www.google.com/linuxrepositories/aboutkey.html) 5 install_rpm_key() { 6 # Check to see if key already exists. 7 rpm -q gpg-pubkey-7fac5991-4615767f > /dev/null 2>&1 8 if [ "$?" -eq "0" ]; then 9 # Key already exists 10 return 0 11 fi 12 # This is to work around a bug in RPM 4.7.0. (see http://crbug.com/22312) 13 rpm -q gpg-pubkey-7fac5991-45f06f46 > /dev/null 2>&1 14 if [ "$?" -eq "0" ]; then 15 # Key already exists 16 return 0 17 fi 18 19 # RPM on Mandriva 2009 is dumb and does not understand "rpm --import -" 20 TMPKEY=$(mktemp /tmp/google.sig.XXXXXX) 21 if [ -n "$TMPKEY" ]; then 22 cat > "$TMPKEY" <<KEYDATA 23 -----BEGIN PGP PUBLIC KEY BLOCK----- 24 Version: GnuPG v1.4.2.2 (GNU/Linux) 25 26 mQGiBEXwb0YRBADQva2NLpYXxgjNkbuP0LnPoEXruGmvi3XMIxjEUFuGNCP4Rj/a 27 kv2E5VixBP1vcQFDRJ+p1puh8NU0XERlhpyZrVMzzS/RdWdyXf7E5S8oqNXsoD1z 28 fvmI+i9b2EhHAA19Kgw7ifV8vMa4tkwslEmcTiwiw8lyUl28Wh4Et8SxzwCggDcA 29 feGqtn3PP5YAdD0km4S4XeMEAJjlrqPoPv2Gf//tfznY2UyS9PUqFCPLHgFLe80u 30 QhI2U5jt6jUKN4fHauvR6z3seSAsh1YyzyZCKxJFEKXCCqnrFSoh4WSJsbFNc4PN 31 b0V0SqiTCkWADZyLT5wll8sWuQ5ylTf3z1ENoHf+G3um3/wk/+xmEHvj9HCTBEXP 32 78X0A/0Tqlhc2RBnEf+AqxWvM8sk8LzJI/XGjwBvKfXe+l3rnSR2kEAvGzj5Sg0X 33 4XmfTg4Jl8BNjWyvm2Wmjfet41LPmYJKsux3g0b8yzQxeOA4pQKKAU3Z4+rgzGmf 34 HdwCG5MNT2A5XxD/eDd+L4fRx0HbFkIQoAi1J3YWQSiTk15fw7RMR29vZ2xlLCBJ 35 bmMuIExpbnV4IFBhY2thZ2UgU2lnbmluZyBLZXkgPGxpbnV4LXBhY2thZ2VzLWtl 36 eW1hc3RlckBnb29nbGUuY29tPohjBBMRAgAjAhsDBgsJCAcDAgQVAggDBBYCAwEC 37 HgECF4AFAkYVdn8CGQEACgkQoECDD3+sWZHKSgCfdq3HtNYJLv+XZleb6HN4zOcF 38 AJEAniSFbuv8V5FSHxeRimHx25671az+uQINBEXwb0sQCACuA8HT2nr+FM5y/kzI 39 A51ZcC46KFtIDgjQJ31Q3OrkYP8LbxOpKMRIzvOZrsjOlFmDVqitiVc7qj3lYp6U 40 rgNVaFv6Qu4bo2/ctjNHDDBdv6nufmusJUWq/9TwieepM/cwnXd+HMxu1XBKRVk9 41 XyAZ9SvfcW4EtxVgysI+XlptKFa5JCqFM3qJllVohMmr7lMwO8+sxTWTXqxsptJo 42 pZeKz+UBEEqPyw7CUIVYGC9ENEtIMFvAvPqnhj1GS96REMpry+5s9WKuLEaclWpd 43 K3krttbDlY1NaeQUCRvBYZ8iAG9YSLHUHMTuI2oea07Rh4dtIAqPwAX8xn36JAYG 44 2vgLAAMFB/wKqaycjWAZwIe98Yt0qHsdkpmIbarD9fGiA6kfkK/UxjL/k7tmS4Vm 45 CljrrDZkPSQ/19mpdRcGXtb0NI9+nyM5trweTvtPw+HPkDiJlTaiCcx+izg79Fj9 46 KcofuNb3lPdXZb9tzf5oDnmm/B+4vkeTuEZJ//IFty8cmvCpzvY+DAz1Vo9rA+Zn 47 cpWY1n6z6oSS9AsyT/IFlWWBZZ17SpMHu+h4Bxy62+AbPHKGSujEGQhWq8ZRoJAT 48 G0KSObnmZ7FwFWu1e9XFoUCt0bSjiJWTIyaObMrWu/LvJ3e9I87HseSJStfw6fki 49 5og9qFEkMrIrBCp3QGuQWBq/rTdMuwNFiEkEGBECAAkFAkXwb0sCGwwACgkQoECD 50 D3+sWZF/WACfeNAu1/1hwZtUo1bR+MWiCjpvHtwAnA1R3IHqFLQ2X3xJ40XPuAyY 51 /FJG 52 =Quqp 53 -----END PGP PUBLIC KEY BLOCK----- 54 KEYDATA 55 rpm --import "$TMPKEY" 56 rc=$? 57 rm -f "$TMPKEY" 58 if [ "$rc" -eq "0" ]; then 59 return 0 60 fi 61 fi 62 return 1 63 } 64 65 determine_rpm_package_manager() { 66 local RELEASE 67 LSB_RELEASE="$(which lsb_release 2> /dev/null)" 68 if [ -x "$LSB_RELEASE" ]; then 69 RELEASE=$(lsb_release -i 2> /dev/null | sed 's/:\t/:/' | cut -d ':' -f 2-) 70 case $RELEASE in 71 "Fedora") 72 PACKAGEMANAGER=yum 73 ;; 74 "Mageia"|"MandrivaLinux") 75 PACKAGEMANAGER=urpmi 76 ;; 77 "SUSE LINUX") 78 PACKAGEMANAGER=yast 79 ;; 80 esac 81 fi 82 83 if [ "$PACKAGEMANAGER" ]; then 84 return 85 fi 86 87 # Fallback methods that are probably unnecessary on modern systems. 88 if [ -f "/etc/lsb-release" ]; then 89 # file missing on Fedora, does not contain DISTRIB_ID on OpenSUSE. 90 eval $(sed -e '/DISTRIB_ID/!d' /etc/lsb-release) 91 case $DISTRIB_ID in 92 MandrivaLinux) 93 PACKAGEMANAGER=urpmi 94 ;; 95 esac 96 fi 97 98 if [ "$PACKAGEMANAGER" ]; then 99 return 100 fi 101 102 if [ -f "/etc/fedora-release" ] || [ -f "/etc/redhat-release" ]; then 103 PACKAGEMANAGER=yum 104 elif [ -f "/etc/SuSE-release" ]; then 105 PACKAGEMANAGER=yast 106 elif [ -f "/etc/mandriva-release" ]; then 107 PACKAGEMANAGER=urpmi 108 fi 109 } 110 111 DEFAULT_ARCH="@@ARCHITECTURE@@" 112 YUM_REPO_FILE="/etc/yum.repos.d/@@PACKAGE@@.repo" 113 ZYPPER_REPO_FILE="/etc/zypp/repos.d/@@PACKAGE@@.repo" 114 URPMI_REPO_FILE="/etc/urpmi/urpmi.cfg" 115 116 install_yum() { 117 install_rpm_key 118 119 if [ ! "$REPOCONFIG" ]; then 120 return 0 121 fi 122 123 if [ -d "/etc/yum.repos.d" ]; then 124 cat > "$YUM_REPO_FILE" << REPOCONTENT 125 [@@PACKAGE@@] 126 name=@@PACKAGE@@ 127 baseurl=$REPOCONFIG/$DEFAULT_ARCH 128 enabled=1 129 gpgcheck=1 130 REPOCONTENT 131 fi 132 } 133 134 # This is called by the cron job, rather than in the RPM postinstall. 135 # We cannot do this during the install when urpmi is running due to 136 # database locking. We also need to enable the repository, and we can 137 # only do that while we are online. 138 # see: https://qa.mandriva.com/show_bug.cgi?id=31893 139 configure_urpmi() { 140 if [ ! "$REPOCONFIG" ]; then 141 return 0 142 fi 143 144 urpmq --list-media | grep -q -s "^@@PACKAGE@@$" 145 if [ "$?" -eq "0" ]; then 146 # Repository already configured 147 return 0 148 fi 149 urpmi.addmedia --update \ 150 "@@PACKAGE@@" "$REPOCONFIG/$DEFAULT_ARCH" 151 } 152 153 install_urpmi() { 154 # urpmi not smart enough to pull media_info/pubkey from the repository? 155 install_rpm_key 156 157 # Defer urpmi.addmedia to configure_urpmi() in the cron job. 158 # See comment there. 159 # 160 # urpmi.addmedia --update \ 161 # "@@PACKAGE@@" "$REPOCONFIG/$DEFAULT_ARCH" 162 } 163 164 install_yast() { 165 if [ ! "$REPOCONFIG" ]; then 166 return 0 167 fi 168 169 # We defer adding the key to later. See comment in the cron job. 170 171 # Ideally, we would run: zypper addrepo -t YUM -f \ 172 # "$REPOCONFIG/$DEFAULT_ARCH" "@@PACKAGE@@" 173 # but that does not work when zypper is running. 174 if [ -d "/etc/zypp/repos.d" ]; then 175 cat > "$ZYPPER_REPO_FILE" << REPOCONTENT 176 [@@PACKAGE@@] 177 name=@@PACKAGE@@ 178 enabled=1 179 autorefresh=1 180 baseurl=$REPOCONFIG/$DEFAULT_ARCH 181 type=rpm-md 182 keeppackages=0 183 REPOCONTENT 184 fi 185 } 186 187 # Check if the automatic repository configuration is done, so we know when to 188 # stop trying. 189 verify_install() { 190 # It's probably enough to see that the repo configs have been created. If they 191 # aren't configured properly, update_bad_repo should catch that when it's run. 192 case $1 in 193 "yum") 194 [ -f "$YUM_REPO_FILE" ] 195 ;; 196 "yast") 197 [ -f "$ZYPPER_REPO_FILE" ] 198 ;; 199 "urpmi") 200 urpmq --list-url | grep -q -s "\b@@PACKAGE@@\b" 201 ;; 202 esac 203 } 204 205 # Update the Google repository if it's not set correctly. 206 update_bad_repo() { 207 if [ ! "$REPOCONFIG" ]; then 208 return 0 209 fi 210 211 determine_rpm_package_manager 212 213 case $PACKAGEMANAGER in 214 "yum") 215 update_repo_file "$YUM_REPO_FILE" 216 ;; 217 "yast") 218 update_repo_file "$ZYPPER_REPO_FILE" 219 ;; 220 "urpmi") 221 update_urpmi_cfg 222 ;; 223 esac 224 } 225 226 update_repo_file() { 227 REPO_FILE="$1" 228 229 # Don't do anything if the file isn't there, since that probably means the 230 # user disabled it. 231 if [ ! -r "$REPO_FILE" ]; then 232 return 0 233 fi 234 235 # Check if the correct repository configuration is in there. 236 REPOMATCH=$(grep "^baseurl=$REPOCONFIG/$DEFAULT_ARCH" "$REPO_FILE" \ 237 2>/dev/null) 238 # If it's there, nothing to do 239 if [ "$REPOMATCH" ]; then 240 return 0 241 fi 242 243 # Check if it's there but disabled by commenting out (as opposed to using the 244 # 'enabled' setting). 245 MATCH_DISABLED=$(grep "^[[:space:]]*#.*baseurl=$REPOCONFIG/$DEFAULT_ARCH" \ 246 "$REPO_FILE" 2>/dev/null) 247 if [ "$MATCH_DISABLED" ]; then 248 # It's OK for it to be disabled, as long as nothing bogus is enabled in its 249 # place. 250 ACTIVECONFIGS=$(grep "^baseurl=.*" "$REPO_FILE" 2>/dev/null) 251 if [ ! "$ACTIVECONFIGS" ]; then 252 return 0 253 fi 254 fi 255 256 # If we get here, the correct repository wasn't found, or something else is 257 # active, so fix it. This assumes there is a 'baseurl' setting, but if not, 258 # then that's just another way of disabling, so we won't try to add it. 259 sed -i -e "s,^baseurl=.*,baseurl=$REPOCONFIG/$DEFAULT_ARCH," "$REPO_FILE" 260 } 261 262 update_urpmi_cfg() { 263 REPOCFG=$(urpmq --list-url | grep "\b@@PACKAGE@@\b") 264 if [ ! "$REPOCFG" ]; then 265 # Don't do anything if the repo isn't there, since that probably means the 266 # user deleted it. 267 return 0 268 fi 269 270 # See if it's the right repo URL 271 REPOMATCH=$(echo "$REPOCFG" | grep "\b$REPOCONFIG/$DEFAULT_ARCH\b") 272 # If so, nothing to do 273 if [ "$REPOMATCH" ]; then 274 return 0 275 fi 276 277 # Looks like it's the wrong URL, so recreate it. 278 urpmi.removemedia "@@PACKAGE@@" && \ 279 urpmi.addmedia --update "@@PACKAGE@@" "$REPOCONFIG/$DEFAULT_ARCH" 280 } 281 282 # We only remove the repository configuration during a purge. Since RPM has 283 # no equivalent to dpkg --purge, the code below is actually never used. We 284 # keep it only for reference purposes, should we ever need it. 285 # 286 #remove_yum() { 287 # rm -f "$YUM_REPO_FILE" 288 #} 289 # 290 #remove_urpmi() { 291 # # Ideally, we would run: urpmi.removemedia "@@PACKAGE@@" 292 # # but that does not work when urpmi is running. 293 # # Sentinel comment text does not work either because urpmi.update removes 294 # # all comments. So we just delete the entry that matches what we originally 295 # # inserted. If such an entry was added manually, that's tough luck. 296 # if [ -f "$URPMI_REPO_FILE" ]; then 297 # sed -i '\_^@@PACKAGE@@ $REPOCONFIG/$DEFAULT_ARCH {$_,/^}$/d' "$URPMI_REPO_FILE" 298 # fi 299 #} 300 # 301 #remove_yast() { 302 # # Ideally, we would run: zypper removerepo "@@PACKAGE@@" 303 # # but that does not work when zypper is running. 304 # rm -f /etc/zypp/repos.d/@@PACKAGE@@.repo 305 #} 306 307 DEFAULT_ARCH="@@ARCHITECTURE@@" 308 309 get_lib_dir() { 310 if [ "$DEFAULT_ARCH" = "i386" ]; then 311 LIBDIR=lib 312 elif [ "$DEFAULT_ARCH" = "x86_64" ]; then 313 LIBDIR=lib64 314 else 315 echo Unknown CPU Architecture: "$DEFAULT_ARCH" 316 exit 1 317 fi 318 } 319