Patch for yum-3.2.27-14.el6_0.1 diff --git a/cli.py b/cli.py index cebbae3..cdb0129 100644 --- a/cli.py +++ b/cli.py @@ -1347,13 +1347,14 @@ class YumOptionParser(OptionParser): def getRoot(self,opts): # If the conf file is inside the installroot - use that. # otherwise look for it in the normal root + if opts.conffile==None: + opts.conffile = '/etc/yum/yum.conf' + if opts.installroot: + if os.access(opts.installroot+opts.conffile, os.R_OK): + opts.conffile = opts.installroot+opts.conffile + elif os.access(opts.installroot+'/etc/yum.conf', os.R_OK): + opts.conffile = opts.installroot+'/etc/yum.conf' if opts.installroot: - if os.access(opts.installroot+'/'+opts.conffile, os.R_OK): - opts.conffile = opts.installroot+'/'+opts.conffile - elif opts.conffile == '/etc/yum/yum.conf': - # check if /installroot/etc/yum.conf exists. - if os.access(opts.installroot+'/etc/yum.conf', os.R_OK): - opts.conffile = opts.installroot+'/etc/yum.conf' root=opts.installroot else: root = '/' @@ -1394,7 +1395,6 @@ class YumOptionParser(OptionParser): action="store_true", help=_("run entirely from system cache, don't update cache")) group.add_option("-c", "--config", dest="conffile", - default='/etc/yum/yum.conf', help=_("config file location"), metavar='[config file]') group.add_option("-R", "--randomwait", dest="sleeptime", type='int', default=None, diff --git a/yum/__init__.py b/yum/__init__.py index 978815d..916c8d6 100644 --- a/yum/__init__.py +++ b/yum/__init__.py @@ -399,8 +399,7 @@ class YumBase(depsolve.Depsolve): # this check makes sure that our dirs exist properly. # if they aren't in the installroot then don't prepend the installroot path # if we don't do this then anaconda likes to not work. - if os.path.exists(self.conf.installroot+'/'+reposdir): - reposdir = self.conf.installroot + '/' + reposdir + reposdir = self.conf.getRootedPath(reposdir) if os.path.isdir(reposdir): for repofn in sorted(glob.glob('%s/*.repo' % reposdir)): @@ -1379,9 +1378,7 @@ class YumBase(depsolve.Depsolve): if self.conf.uid != 0: return - root = self.conf.installroot - lockfile = root + '/' + lockfile # lock in the chroot - lockfile = os.path.normpath(lockfile) # get rid of silly preceding extra / + lockfile = self.conf.lockfile mypid=str(os.getpid()) while not self._lock(lockfile, mypid, 0644): diff --git a/yum/config.py b/yum/config.py index 975172a..603aacc 100644 --- a/yum/config.py +++ b/yum/config.py @@ -604,6 +604,26 @@ class StartupConf(BaseConfig): syslog_facility = Option('LOG_DAEMON') persistdir = Option('/var/lib/yum') + def getRootedPath(self, path, enforce_default=False, defaults_to_host=False): + instroot = getattr(self, 'installroot', None) + if instroot==None: + return path + + if path.startswith('hostfs://'): res = path[9:] + elif path.startswith('chrootfs://'): res = instroot + '/' + path[11:] + else: + tmp = instroot + '/' + path + + if enforce_default: + if defaults_to_host: res = path + else: res = tmp + else: + if os.path.exists(tmp): res = tmp + elif defaults_to_host: res = path + else: res = tmp + + return res + class YumConf(StartupConf): ''' Configuration option definitions for yum.conf\'s [main] section. @@ -617,6 +637,7 @@ class YumConf(StartupConf): keepcache = BoolOption(True) logfile = Option('/var/log/yum.log') + lockfile = Option('/var/run/yum.pid') reposdir = ListOption(['/etc/yum/repos.d', '/etc/yum.repos.d']) commands = ListOption() @@ -832,7 +853,10 @@ def readStartupConfig(configfile, root): # Stuff this here to avoid later re-parsing startupconf._parser = parser # setup the release ver here - startupconf.releasever = _getsysver(startupconf.installroot, startupconf.distroverpkg) + try: + startupconf.releasever = _getsysver(startupconf.installroot, startupconf.distroverpkg) + except: + startupconf.releasever = "" uuidfile = '%s/%s/uuid' % (startupconf.installroot, startupconf.persistdir) startupconf.uuid = get_uuid(uuidfile) @@ -859,9 +883,9 @@ def readMainConfig(startupconf): yumconf.populate(startupconf._parser, 'main') # Apply the installroot to directory options - for option in ('cachedir', 'logfile', 'persistdir'): + for option in ('cachedir', 'logfile', 'persistdir', 'lockfile'): path = getattr(yumconf, option) - ir_path = yumconf.installroot + path + ir_path = yumconf.getRootedPath(path) ir_path = ir_path.replace('//', '/') # os.path.normpath won't fix this and # it annoys me ir_path = varReplace(ir_path, yumvars) diff --git a/yum/history.py b/yum/history.py index 32eed2c..64b6695 100644 --- a/yum/history.py +++ b/yum/history.py @@ -176,10 +176,7 @@ class YumHistory: self._conn = None self.conf = yum.misc.GenericHolder() - if not os.path.normpath(db_path).startswith(root): - self.conf.db_path = os.path.normpath(root + '/' + db_path) - else: - self.conf.db_path = os.path.normpath('/' + db_path) + self.conf.db_path = db_path self.conf.writable = False if not os.path.exists(self.conf.db_path): diff --git a/yum/rpmsack.py b/yum/rpmsack.py index 878e8d4..1938f1a 100644 --- a/yum/rpmsack.py +++ b/yum/rpmsack.py @@ -151,13 +151,8 @@ class RPMDBPackageSack(PackageSackBase): self._get_pro_cache = {} self._get_req_cache = {} self._loaded_gpg_keys = False - if cachedir is None: - cachedir = misc.getCacheDir() - self.setCacheDir(cachedir) - if not os.path.normpath(persistdir).startswith(self.root): - self._persistdir = root + '/' + persistdir - else: - self._persistdir = persistdir + self._cachedir = persistdir + "/rpmdb-indexes" + self._persistdir = persistdir self._have_cached_rpmdbv_data = None self._cached_conflicts_data = None # Store the result of what happens, if a transaction completes. @@ -217,14 +212,6 @@ class RPMDBPackageSack(PackageSackBase): self._have_cached_rpmdbv_data = None self._cached_conflicts_data = None - def setCacheDir(self, cachedir): - """ Sets the internal cachedir value for the rpmdb, to be the - "installed" directory from this parent. """ - if not os.path.normpath(cachedir).startswith(self.root): - self._cachedir = self.root + '/' + cachedir + "/installed/" - else: - self._cachedir = '/' + cachedir + "/installed/" - def readOnlyTS(self): if not self.ts: self.ts = initReadOnlyTransaction(root=self.root) @@ -861,7 +848,7 @@ class RPMDBPackageSack(PackageSackBase): # http://lists.rpm.org/pipermail/rpm-maint/2007-November/001719.html # ...if anything gets implemented, we should change. rpmdbvfname = self._cachedir + "/version" - rpmdbfname = self.root + "/var/lib/rpm/Packages" + rpmdbfname = self.root + rpm.expandMacro("%_dbpath/Packages") if os.path.exists(rpmdbvfname) and os.path.exists(rpmdbfname): # See if rpmdb has "changed" ... diff --git a/yum/rpmtrans.py b/yum/rpmtrans.py index 0340153..a544b9c 100644 --- a/yum/rpmtrans.py +++ b/yum/rpmtrans.py @@ -243,7 +243,10 @@ class RPMTransaction: def _scriptout(self, data): msgs = self._scriptOutput() self.display.scriptout(data, msgs) - self.base.history.log_scriptlet_output(data, msgs) + try: + self.base.history.log_scriptlet_output(data, msgs) + except: + self.display.errorlog('could not log scriptlet output') def __del__(self): self._shutdownOutputLogging()