diff --git a/SOURCES/BZ-1477574-update-honor-multilib-policy-for-obsoletes.patch b/SOURCES/BZ-1477574-update-honor-multilib-policy-for-obsoletes.patch new file mode 100644 index 0000000..259fc77 --- /dev/null +++ b/SOURCES/BZ-1477574-update-honor-multilib-policy-for-obsoletes.patch @@ -0,0 +1,127 @@ +commit 25a1cf0a8f0002b16d6ef9c24d530019fd88fd64 +Author: Michal Domonkos +Date: Wed May 16 17:40:22 2018 +0200 + + update(): honor multilib_policy for obsoletes. BZ 1477574 + + When a package migrates from noarch to arch during an update, we usually + don't want to install all the newly available multilib arches. + + For "yum install", this is already controlled by multilib_policy, even + if the noarch package is already installed (since yum will try to update + it). However, with "yum update", multilib_policy isn't checked. + + This commit adds the check to update() so that "yum update" works the + same as "yum install" in the noarch->arch scenario. + + Tests calling "update" without arguments now need to specify + multilib_policy='all'. + +diff --git a/test/simpleobsoletestests.py b/test/simpleobsoletestests.py +index 6cede1e0..a26a5d42 100644 +--- a/test/simpleobsoletestests.py ++++ b/test/simpleobsoletestests.py +@@ -38,7 +38,8 @@ class SimpleObsoletesTests(OperationsTests): + + def testObsoletenoarchToi386(self): + p = self.pkgs +- res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_i386]) ++ res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_i386], ++ {'multilib_policy': 'all'}) + self.assert_(res=='ok', msg) + self.assertResult((p.obsoletes_i386,)) + def testObsoletenoarchToi386ForDependency(self): +@@ -50,7 +51,8 @@ class SimpleObsoletesTests(OperationsTests): + + def testObsoletenoarchTox86_64(self): + p = self.pkgs +- res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_x86_64]) ++ res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_x86_64], ++ {'multilib_policy': 'all'}) + self.assert_(res=='ok', msg) + self.assertResult((p.obsoletes_x86_64,)) + def testObsoletenoarchTox86_64ForDependency(self): +@@ -62,7 +64,8 @@ class SimpleObsoletesTests(OperationsTests): + + def testObsoletenoarchToMultiarch(self): + p = self.pkgs +- res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_i386, p.obsoletes_x86_64]) ++ res, msg = self.runOperation(['update'], [p.installed_noarch], [p.obsoletes_i386, p.obsoletes_x86_64], ++ {'multilib_policy': 'all'}) + self.assert_(res=='ok', msg) + if new_behavior: + self.assertResult((p.obsoletes_x86_64,), (p.obsoletes_i386,)) +diff --git a/yum/__init__.py b/yum/__init__.py +index a156a6a6..7b7293f3 100644 +--- a/yum/__init__.py ++++ b/yum/__init__.py +@@ -4779,6 +4779,21 @@ much more problems). + return False + return True + ++ def _valid_obsoleter_arch(self, obsoleter, obsoletee): ++ """Return whether this obsoleter meets multilib_policy in case we are ++ dealing with the noarch->arch obsoletion case.""" ++ if not self.arch.multilib or self.conf.multilib_policy != 'best': ++ # Install everything ++ return True ++ if obsoletee.arch != 'noarch' or obsoleter.arch == 'noarch': ++ # We do respect any arch->(no)arch obsoletions (having ++ # obsoletee.i386 installed on x86_64, you'd still expect ++ # obsoleter.i386 to replace it, even if you have ++ # multilib_policy=best). ++ return True ++ # noarch->arch case ++ return obsoleter.arch in self.arch.legit_multi_arches ++ + def install(self, po=None, **kwargs): + """Mark the specified item for installation. If a package + object is given, mark it for installation. Otherwise, mark +@@ -5146,10 +5161,12 @@ much more problems). + allow_missing=True) + if obsoleting_pkg is None: + continue ++ installed_pkg = self.getInstalledPackageObject(installed) ++ if not self._valid_obsoleter_arch(obsoleting_pkg, installed_pkg): ++ continue + topkg = self._test_loop(obsoleting_pkg, self._pkg2obspkg) + if topkg is not None: + obsoleting_pkg = topkg +- installed_pkg = self.getInstalledPackageObject(installed) + txmbr = self.tsInfo.addObsoleting(obsoleting_pkg, installed_pkg) + self.tsInfo.addObsoleted(installed_pkg, obsoleting_pkg) + if requiringPo: +@@ -5183,6 +5200,7 @@ much more problems). + + instpkgs = [] + availpkgs = [] ++ arch_specified = True + if po: # just a po + if po.repoid == 'installed': + instpkgs.append(po) +@@ -5244,6 +5262,8 @@ much more problems). + self.logger.critical(_('No Match for argument: %s') % to_unicode(arg)) + if not self.conf.skip_missing_names_on_update: + raise Errors.UpdateMissingNameError, _('Not tolerating missing names on update, stopping.') ++ ++ arch_specified = '.' in kwargs['pattern'] + + else: # we have kwargs, sort them out. + nevra_dict = self._nevra_kwarg_parse(kwargs) +@@ -5296,12 +5316,16 @@ much more problems). + allow_missing=True) + if obsoleting_pkg is None: + continue ++ if not arch_specified and not self._valid_obsoleter_arch(obsoleting_pkg, installed_pkg): ++ continue + obs_pkgs.append(obsoleting_pkg) + # NOTE: Broekn wrt. repoid + for obsoleting_pkg in packagesNewestByName(obs_pkgs): + tx_return.extend(self.install(po=obsoleting_pkg)) + for available_pkg in availpkgs: + for obsoleted_pkg in self._find_obsoletees(available_pkg): ++ if not arch_specified and not self._valid_obsoleter_arch(available_pkg, obsoleted_pkg): ++ continue + obsoleted = obsoleted_pkg.pkgtup + txmbr = self.tsInfo.addObsoleting(available_pkg, obsoleted_pkg) + if requiringPo: diff --git a/SOURCES/BZ-1480065-depsolve-filter-conflicting-provider.patch b/SOURCES/BZ-1480065-depsolve-filter-conflicting-provider.patch new file mode 100644 index 0000000..7a4867f --- /dev/null +++ b/SOURCES/BZ-1480065-depsolve-filter-conflicting-provider.patch @@ -0,0 +1,39 @@ +commit ae2d51ba77db4a4855912d9c33565ef2f4203803 +Author: Michal Domonkos +Date: Wed Jun 20 17:43:44 2018 +0200 + + depsolve: filter out conflicting provider. BZ 1480065 + + When there are multiple providers available for a requirement, yum would + happily pick the one that the requiring package also has a "Conflicts:" + on (via another virtual provide), failing to resolve the transaction. + + Example: + - foo requires bar and conflicts my-bar + - bax provides bar + - bay provides bar, my-bar + + Yum might decide to pick bay, only to fail due to the conflict with foo + later in the process. + + This commit fixes that by dropping such a provider from the candidate + list when depsolving. + +diff --git a/yum/depsolve.py b/yum/depsolve.py +index 3453456c..26369b7b 100644 +--- a/yum/depsolve.py ++++ b/yum/depsolve.py +@@ -1556,6 +1556,13 @@ class Depsolve(object): + continue + unique_nevra_pkgs[pkg.pkgtup] = pkg + pkgs = unique_nevra_pkgs.values() ++ ++ # Do a conflict filtering; get rid of those pkgs that reqpo conflicts ++ # with ++ if reqpo is not None: ++ pkgs = [pkg for pkg in pkgs ++ if not any(pkg.checkPrco('provides', conflict) ++ for conflict in reqpo.conflicts)] + + pkgresults = {} + diff --git a/SOURCES/BZ-1481220-print-disk-usage-on-yum-clean-all.patch b/SOURCES/BZ-1481220-print-disk-usage-on-yum-clean-all.patch new file mode 100644 index 0000000..1653229 --- /dev/null +++ b/SOURCES/BZ-1481220-print-disk-usage-on-yum-clean-all.patch @@ -0,0 +1,202 @@ +diff --git a/cli.py b/cli.py +index 5d9791bc..403a92f9 100755 +--- a/cli.py ++++ b/cli.py +@@ -29,6 +29,7 @@ import math + from optparse import OptionParser,OptionGroup,SUPPRESS_HELP + import rpm + import ctypes ++import glob + + from weakref import proxy as weakref + +@@ -1748,26 +1749,10 @@ class YumBaseCli(yum.YumBase, output.YumOutput): + msg = self.fmtKeyValFill(_('Cleaning repos: '), + ' '.join([ x.id for x in self.repos.listEnabled()])) + self.verbose_logger.log(yum.logginglevels.INFO_2, msg) ++ msg = (_('Operating on %s (see CLEAN OPTIONS in yum(8) for details)') ++ % self.conf.cachedir) ++ self.verbose_logger.log(yum.logginglevels.DEBUG_3, msg) + if 'all' in userlist: +- self.verbose_logger.log(yum.logginglevels.INFO_2, +- _('Cleaning up everything')) +- +- # Print a "maybe you want rm -rf" hint to compensate for the fact +- # that yum clean all is often misunderstood. Don't do that, +- # however, if cachedir is non-default as we would have to replace +- # arbitrary yum vars with * and that could produce a harmful +- # command, e.g. for /mydata/$myvar we would say rm -rf /mydata/* +- cachedir = self.conf.cachedir +- if cachedir.startswith(('/var/cache/yum', '/var/tmp/yum-')): +- # Take just the first 3 path components +- rmdir = '/'.join(cachedir.split('/')[:4]) +- self.verbose_logger.log( +- yum.logginglevels.INFO_2, +- _('Maybe you want: rm -rf %s, to also free up space taken ' +- 'by orphaned data from disabled or removed repos' +- % rmdir), +- ) +- + pkgcode, pkgresults = self.cleanPackages() + hdrcode, hdrresults = self.cleanHeaders() + xmlcode, xmlresults = self.cleanMetadata() +@@ -1780,6 +1765,67 @@ class YumBaseCli(yum.YumBase, output.YumOutput): + rpmresults) + for msg in results: + self.logger.debug(msg) ++ ++ # Walk the cachedir, look for any leftovers and categorize them ++ cacheglob = self.getCachedirGlob(['basearch', 'releasever']) ++ paths = glob.glob(cacheglob + '/*') ++ table = ([], [], [], []) # (enabled, disabled, untracked, other) ++ repos = self.repos.repos ++ for path in paths: ++ base = os.path.basename(path) ++ if os.path.isdir(path): ++ # Repodir ++ if base not in repos: ++ col = 2 ++ elif repos[base].enabled: ++ col = 0 ++ else: ++ col = 1 ++ # Recursively gather all files in this repodir ++ files = yum.misc.getFileList(path, '', []) ++ else: ++ # Ordinary file (such as timedhosts) ++ col = 3 ++ files = [path] ++ usage = sum(map(os.path.getsize, files)) ++ if usage > 0: ++ table[col].append((usage, path)) ++ ++ # Print the table (verbose mode only) ++ lines = [_('Disk usage of %s after cleanup:') % cacheglob] ++ headers = ('enabled repos', 'disabled repos', 'untracked repos', ++ 'other data') ++ totals = [0, 0, 0, 0] ++ for col, header in enumerate(headers): ++ rows = [] ++ total = 0 ++ # Start with the biggest items ++ for usage, path in sorted(table[col], key=lambda x:x[0], ++ reverse=True): ++ rows.append(' %-5s %s' ++ % (self.format_number(usage), path)) ++ total += usage ++ colon = ':' if rows else '' ++ lines += ['%-5s %s%s' ++ % (self.format_number(total), _(header), colon)] ++ lines += rows ++ totals[col] = total ++ lines += [_('%-5s total') % self.format_number(sum(totals))] ++ msg = '\n'.join(lines) ++ self.verbose_logger.log(yum.logginglevels.DEBUG_3, msg) ++ ++ # Print a short hint for leftover repos specifically (non-verbose ++ # mode only) ++ total = sum(totals[:3]) ++ if self.conf.debuglevel == 6 or not total: ++ return code, [] ++ total = self.format_number(total) ++ if total[-1] == ' ': ++ total = total[:-1] + 'bytes' ++ msg = (_('Other repos take up %s of disk space ' ++ '(use --verbose for details)') % total) ++ self.verbose_logger.log(yum.logginglevels.INFO_2, msg) ++ + return code, [] + + if 'headers' in userlist: +diff --git a/docs/yum.8 b/docs/yum.8 +index e3f1d32a..34a27f53 100644 +--- a/docs/yum.8 ++++ b/docs/yum.8 +@@ -1031,11 +1031,37 @@ Or: \fByum list available 'foo*'\fP + .IP + .PP + .SH "CLEAN OPTIONS" +-The following are the ways which you can invoke \fByum\fP in clean +-mode. Note that "all files" in the commands below means +-"all files in currently enabled repositories". +-If you want to also clean any (temporarily) disabled repositories you need to +-use \fB\-\-enablerepo='*'\fP option. ++The following are the ways which you can invoke \fByum\fP in clean mode. ++ ++Note that these commands only operate on files in currently enabled ++repositories. ++If you use substitution variables (such as $releasever) in your \fBcachedir\fP ++configuration, the operation is further restricted to the current values of ++those variables. ++ ++For fine-grained control over what is being cleaned, you can use ++\fB\-\-enablerepo\fP, \fB\-\-disablerepo\fP and \fB\-\-releasever\fP as ++desired. ++Note, however, that you cannot use \fB\-\-releasever='*'\fP to do the cleaning ++for all values previously used. ++Also note that untracked (no longer configured) repositories will not be ++automatically cleaned. ++ ++To purge the entire cache in one go, the easiest way is to delete the files ++manually. ++Depending on your \fBcachedir\fP configuration, this usually means treating any ++variables as shell wildcards and recursively removing matching directories. ++For example, if your \fBcachedir\fP is /var/cache/yum/$basearch/$releasever, ++then the whole /var/cache/yum directory has to be removed. ++If you do this, \fByum\fP will rebuild the cache as required the next time it ++is run (this may take a while). ++ ++As a convenience, when you run \fByum clean all\fP, a recursive lookup will be ++done to detect any repositories not cleaned due to the above restrictions. ++If some are found, a message will be printed stating how much disk space they ++occupy and thus how much you can reclaim by cleaning them. ++If you also supply \fB\-\-verbose\fP, a more detailed breakdown will be ++printed. + + .IP "\fByum clean expire-cache\fP" + Eliminate the local data saying when the metadata and mirrorlists were downloaded for each repo. This means yum will revalidate the cache for each repo. next time it is used. However if the cache is still valid, nothing significant was deleted. +diff --git a/yum/__init__.py b/yum/__init__.py +index a156a6a6..c6ced7d5 100644 +--- a/yum/__init__.py ++++ b/yum/__init__.py +@@ -2890,6 +2890,16 @@ much more problems). + filelist = misc.getFileList(cachedir, '', []) + return self._cleanFilelist('rpmdb', filelist) + ++ def getCachedirGlob(self, dynvar): ++ """Return a glob matching all dirs where yum stores cache files, based ++ on cachedir and the given list of dynamic vars.""" ++ yumvar = self.conf.yumvar.copy() ++ for d in dynvar: ++ yumvar[d] = '*' ++ instroot = config.varReplace(self.conf.installroot, self.conf.yumvar) ++ cachedir = config.varReplace(self.conf._pristine_cachedir, yumvar) ++ return (instroot + cachedir).replace('//', '/') ++ + def _cleanFiles(self, exts, pathattr, filetype): + filelist = [] + for ext in exts: +diff --git a/yum/config.py b/yum/config.py +index 5eac325e..76128fa5 100644 +--- a/yum/config.py ++++ b/yum/config.py +@@ -945,6 +945,9 @@ class YumConf(StartupConf): + + _reposlist = [] + ++ # cachedir before variable substitutions ++ _pristine_cachedir = None ++ + def dump(self): + """Return a string representing the values of all the + configuration options. +@@ -1147,6 +1150,9 @@ def readMainConfig(startupconf): + yumconf = YumConf() + yumconf.populate(startupconf._parser, 'main') + ++ # Store the original cachedir (for later reference in clean commands) ++ yumconf._pristine_cachedir = yumconf.cachedir ++ + # Apply the installroot to directory options + def _apply_installroot(yumconf, option): + path = getattr(yumconf, option) diff --git a/SOURCES/BZ-1506890-logrotate-change-size-to-maxsize.patch b/SOURCES/BZ-1506890-logrotate-change-size-to-maxsize.patch new file mode 100644 index 0000000..ae874d3 --- /dev/null +++ b/SOURCES/BZ-1506890-logrotate-change-size-to-maxsize.patch @@ -0,0 +1,19 @@ +commit d0ec7d920c1c84f70840d653770417310c397309 +Author: Valentina Mukhamedzhanova +Date: Thu Apr 3 10:03:12 2014 +0200 + + Change 'size' option to 'maxsize' in yum.logrotate. BZ 1005879 + +diff --git a/etc/yum.logrotate b/etc/yum.logrotate +index e587f968..e716c01e 100644 +--- a/etc/yum.logrotate ++++ b/etc/yum.logrotate +@@ -1,7 +1,7 @@ + /var/log/yum.log { + missingok + notifempty +- size 30k ++ maxsize 30k + yearly + create 0600 root root + } diff --git a/SOURCES/BZ-1509831-baseurl-clarify-multiple-urls.patch b/SOURCES/BZ-1509831-baseurl-clarify-multiple-urls.patch new file mode 100644 index 0000000..9c8dd10 --- /dev/null +++ b/SOURCES/BZ-1509831-baseurl-clarify-multiple-urls.patch @@ -0,0 +1,36 @@ +commit 98c6fbf4a338239ce7e54bdd48e25e8b294359db +Author: Michal Domonkos +Date: Wed Jun 13 17:19:27 2018 +0200 + + docs: baseurl: clarify multiple URLs + +diff --git a/docs/yum.conf.5 b/docs/yum.conf.5 +index 5d9ab61a..0f77d913 100644 +--- a/docs/yum.conf.5 ++++ b/docs/yum.conf.5 +@@ -1032,8 +1032,10 @@ A human readable string describing the repository. + .IP + \fBbaseurl\fR + Must be a URL to the directory where the yum repository's `repodata' directory +-lives. Can be an http://, ftp:// or file:// URL. You can specify multiple URLs +-in one baseurl statement. The best way to do this is like this: ++lives. Can be an http://, ftp:// or file:// URL. ++ ++You can specify multiple URLs in one baseurl statement. The best way to do this ++is like this: + .br + [repositoryid] + .br +@@ -1046,6 +1048,12 @@ baseurl=url://server1/path/to/repository/ + url://server3/path/to/repository/ + .br + ++The URLs listed are considered different locations (mirrors) of the same ++repository. ++That means, if one URL fails, another one is tried, and so on. ++The order in which the URLs are tried is determined by the \fBfailovermethod\fR ++option. ++ + If you list more than one baseurl= statement in a repository you will find + yum will ignore the earlier ones and probably act bizarrely. Don't do this, + you've been warned. diff --git a/SOURCES/BZ-1520454-gpgkey-retry-broken-redirects.patch b/SOURCES/BZ-1520454-gpgkey-retry-broken-redirects.patch new file mode 100644 index 0000000..f2852a9 --- /dev/null +++ b/SOURCES/BZ-1520454-gpgkey-retry-broken-redirects.patch @@ -0,0 +1,71 @@ +commit a7d50db151a2bfef09b3004c7afae5e1eed651e3 +Author: Michal Domonkos +Date: Tue Jun 19 10:08:47 2018 +0200 + + gpgkey: retry on broken redirects. BZ 1520454 + + This adds support for MirrorManager2 URLs in gpgkey (see the docstring + for details). + +diff --git a/yum/__init__.py b/yum/__init__.py +index a156a6a6..a2965a2d 100644 +--- a/yum/__init__.py ++++ b/yum/__init__.py +@@ -6116,6 +6116,31 @@ much more problems). + self.conf.obsoletes = old_conf_obs + return done + ++ def redirect_failure_callback(self, data): ++ """Failure callback for urlgrabber to force a retry if we time out ++ (code 12) or error out (code 14) after being redirected (since these ++ codes are not in opts.retrycodes). ++ ++ This allows for failovers if the URL points to a MirrorManager2 (such ++ as download.fedoraproject.org). If the mirror it redirects to is down ++ for some reason, this will ensure that we try again, hopefully getting ++ a mirror that works. ++ """ ++ e = data.exception ++ url_initial = data.url ++ url_actual = e.url ++ if (e.errno not in (12, 14) or url_initial == url_actual): ++ # Not a timeout/HTTPError, or there was no redirect, so leave it up ++ # to urlgrabber ++ return ++ if e.errno == 12: ++ msg = _('Timeout on %s, trying again') % url_actual ++ else: ++ msg = _('Could not retrieve %s: %s, trying again') % (url_actual, e) ++ # Force a retry by hacking the errno so that it falls within retrycodes ++ e.errno = -1 ++ self.logger.error(msg) ++ + def _retrievePublicKey(self, keyurl, repo=None, getSig=True): + """ + Retrieve a key file +@@ -6123,6 +6148,7 @@ much more problems). + Returns a list of dicts with all the keyinfo + """ + key_installed = False ++ cb = self.redirect_failure_callback + + msg = _('Retrieving key from %s') % keyurl + self.verbose_logger.log(logginglevels.INFO_2, msg) +@@ -6139,7 +6165,7 @@ much more problems). + # external callers should just update. + opts = repo._default_grabopts() + text = repo.id + '/gpgkey' +- rawkey = urlgrabber.urlread(url, **opts) ++ rawkey = urlgrabber.urlread(url, failure_callback=cb, **opts) + + except urlgrabber.grabber.URLGrabError, e: + raise Errors.YumBaseError(_('GPG key retrieval failed: ') + +@@ -6155,7 +6181,7 @@ much more problems). + url = misc.to_utf8(keyurl + '.asc') + opts = repo._default_grabopts() + text = repo.id + '/gpgkeysig' +- sigfile = urlgrabber.urlopen(url, **opts) ++ sigfile = urlgrabber.urlopen(url, failure_callback=cb, **opts) + + except urlgrabber.grabber.URLGrabError, e: + sigfile = None diff --git a/SOURCES/BZ-1528608-updateinfo-preload-pkgsack.patch b/SOURCES/BZ-1528608-updateinfo-preload-pkgsack.patch new file mode 100644 index 0000000..daf1f37 --- /dev/null +++ b/SOURCES/BZ-1528608-updateinfo-preload-pkgsack.patch @@ -0,0 +1,22 @@ +commit 0ee2b5e245d04e8b376b0191e086c40d0b80e87e +Author: Michal Domonkos +Date: Thu Jun 14 11:38:07 2018 +0200 + + updateinfo: preload pkgSack. BZ 1528608 + + This ensures that we honor the skip_if_unavailable option and disable + unavailable repos when initializing the upinfo object (such as when + running "yum updateinfo" or "yum check-update --security"). + +diff --git a/yum/__init__.py b/yum/__init__.py +index 451b2b81..a156a6a6 100644 +--- a/yum/__init__.py ++++ b/yum/__init__.py +@@ -1037,6 +1037,7 @@ class YumBase(depsolve.Depsolve): + self._upinfo = update_md.UpdateMetadata(logger=logger, + vlogger=vlogger) + ++ self.pkgSack # Preload the sack now, to honor skip_if_unavailable + for repo in self.repos.listEnabled(): + if 'updateinfo' not in repo.repoXML.fileTypes(): + continue diff --git a/SOURCES/centos-branding-yum.patch b/SOURCES/centos-branding-yum.patch deleted file mode 100644 index f100222..0000000 --- a/SOURCES/centos-branding-yum.patch +++ /dev/null @@ -1,37 +0,0 @@ -diff -uNrp yum-3.4.3.orig/yum/constants.py yum-3.4.3/yum/constants.py ---- yum-3.4.3.orig/yum/constants.py 2018-01-30 11:17:56.961899488 +0000 -+++ yum-3.4.3/yum/constants.py 2018-01-30 11:41:57.421866122 +0000 -@@ -123,22 +123,22 @@ REPO_PROBLEM_PACKAGE=5 - - - ERRORS_TO_KBASE_ARTICLES = { -- 404: """To address this issue please refer to the below knowledge base article -+ 404: """To address this issue please refer to the below wiki article - --https://access.redhat.com/articles/1320623 -+https://wiki.centos.org/yum-errors - --If above article doesn't help to resolve this issue please open a ticket with Red Hat Support. -+If above article doesn't help to resolve this issue please use https://bugs.centos.org/. - """, -- 403: """To address this issue please refer to the below knowledge base article -+ 403: """To address this issue please refer to the below wiki article - --https://access.redhat.com/solutions/69319 -+https://wiki.centos.org/yum-errors - --If above article doesn't help to resolve this issue please open a ticket with Red Hat Support. -+If above article doesn't help to resolve this issue please use https://bugs.centos.org/. - """, -- 60: """It was impossible to connect to the Red Hat servers. -+ 60: """It was impossible to connect to the CentOS servers. - This could mean a connectivity issue in your environment, such as the requirement to configure a proxy, - or a transparent proxy that tampers with TLS security, or an incorrect system clock. --Please collect information about the specific failure that occurs in your environment, --using the instructions in: https://access.redhat.com/solutions/1527033 and open a ticket with Red Hat Support. -+You can try to solve this issue by using the instructions on https://wiki.centos.org/yum-errors -+If above article doesn't help to resolve this issue please use https://bugs.centos.org/. - """ --} -\ No newline at end of file -+} diff --git a/SOURCES/yum.conf.centos b/SOURCES/yum.conf.centos deleted file mode 100644 index 367126f..0000000 --- a/SOURCES/yum.conf.centos +++ /dev/null @@ -1,26 +0,0 @@ -[main] -cachedir=/var/cache/yum/$basearch/$releasever -keepcache=0 -debuglevel=2 -logfile=/var/log/yum.log -exactarch=1 -obsoletes=1 -gpgcheck=1 -plugins=1 -installonly_limit=5 -bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum -distroverpkg=centos-release - - -# This is the default, if you make this bigger yum won't see if the metadata -# is newer on the remote and so you'll "gain" the bandwidth of not having to -# download the new metadata and "pay" for it by yum not having correct -# information. -# It is esp. important, to have correct metadata, for distributions like -# Fedora which don't keep old packages around. If you don't like this checking -# interupting your command line usage, it's much better to have something -# manually check the metadata once an hour (yum-updatesd will do this). -# metadata_expire=90m - -# PUT YOUR REPOS HERE OR IN separate files named file.repo -# in /etc/yum.repos.d diff --git a/SPECS/yum.spec b/SPECS/yum.spec index 8e8359f..d6894f4 100644 --- a/SPECS/yum.spec +++ b/SPECS/yum.spec @@ -32,11 +32,11 @@ Summary: RPM package installer/updater/manager Name: yum Version: 3.4.3 -Release: 158%{?dist} +Release: 161%{?dist} License: GPLv2+ Group: System Environment/Base Source0: http://yum.baseurl.org/download/3.4/%{name}-%{version}.tar.gz -Source1: yum.conf.centos +Source1: yum.conf.fedora Source2: yum-updatesd.conf.fedora Patch1: yum-distro-configs.patch Patch5: geode-arch.patch @@ -159,8 +159,14 @@ Patch288: BZ-1432319-add-usercache-opt.patch Patch289: BZ-1411692-docs-conf-var-naming-rules.patch Patch290: BZ-1278333-yum-shell-support-exit-status.patch -#CentOS Branding -Patch1000: centos-branding-yum.patch +# rhel-7.6 +Patch310: BZ-1520454-gpgkey-retry-broken-redirects.patch +Patch311: BZ-1509831-baseurl-clarify-multiple-urls.patch +Patch312: BZ-1528608-updateinfo-preload-pkgsack.patch +Patch313: BZ-1477574-update-honor-multilib-policy-for-obsoletes.patch +Patch314: BZ-1481220-print-disk-usage-on-yum-clean-all.patch +Patch315: BZ-1480065-depsolve-filter-conflicting-provider.patch +Patch316: BZ-1506890-logrotate-change-size-to-maxsize.patch URL: http://yum.baseurl.org/ BuildArchitectures: noarch @@ -179,7 +185,6 @@ BuildRequires: pygpgme # End of CheckRequires Conflicts: pirut < 1.1.4 Requires: python >= 2.4 -Requires: yum-plugin-fastestmirror Requires: rpm-python, rpm >= 0:4.11.3-22 Requires: python-iniparse Requires: python-sqlite @@ -404,7 +409,14 @@ Install this package if you want auto yum updates nightly via cron. %patch289 -p1 %patch290 -p1 -%patch1000 -p1 +# rhel-7.6 +%patch310 -p1 +%patch311 -p1 +%patch312 -p1 +%patch313 -p1 +%patch314 -p1 +%patch315 -p1 +%patch316 -p1 # Do distro config. changes after everything else. %patch1 -p1 @@ -636,12 +648,29 @@ exit 0 %endif %changelog -* Tue Apr 10 2018 CentOS Sources - 3.4.3-158.el7.centos -- CentOS yum config -- use the CentOS bug tracker url -- retain installonly limit of 5 -- ensure distrover is always from centos-release -- Make yum require yum-plugin-fastestmirror +* Wed Aug 15 2018 Michal Domonkos - 3.4.3-161 +- Improve retry logic for gpg keys +- Resolves: bug#1520454 + +* Mon Jul 16 2018 Michal Domonkos - 3.4.3-160 +- Only print full disk usage in verbose mode on "yum clean all" +- Resolves: bug#1481220 + +* Fri Jun 22 2018 Michal Domonkos - 3.4.3-159 +- Retry on gpgkey timeout from MirrorManager +- Resolves: bug#1520454 +- docs: baseurl: clarify multiple URLs +- Resolves: bug#1509831 +- updateinfo: preload pkgSack +- Resolves: bug#1528608 +- update(): honor multilib_policy for obsoletes +- Resolves: bug#1477574 +- Print a disk usage summary on "yum clean all" and clarify docs +- Resolves: bug#1481220 +- depsolve: filter out conflicting provider +- Resolves: bug#1480065 +- Change 'size' option to 'maxsize' in yum.logrotate +- Resolves: bug#1506890 * Sun Nov 26 2017 Valentina Mukhamedzhanova - 3.4.3-158 - Add support for yum-shell exit status.