| OLD | NEW |
| (Empty) | |
| 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 "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_F
ILE" |
| 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 } |
| OLD | NEW |