X-Git-Url: http://git.onelab.eu/?p=yum.git;a=blobdiff_plain;f=yum-3.2.28-chroot.patch;fp=yum-3.2.28-chroot.patch;h=c45b9c0e8c596953d92c4159a890fdb47b0c6c0c;hp=0000000000000000000000000000000000000000;hb=c8770428112d04e8fbbfe86de2c1d93d423044d3;hpb=6c56152ddd1877b26f99ed2b4a32d55d225814f2 diff --git a/yum-3.2.28-chroot.patch b/yum-3.2.28-chroot.patch new file mode 100644 index 0000000..c45b9c0 --- /dev/null +++ b/yum-3.2.28-chroot.patch @@ -0,0 +1,118 @@ +diff -ur yum-3.2.28.orig/cli.py yum-3.2.28/cli.py +--- yum-3.2.28.orig/cli.py 2010-07-07 14:46:08.000000000 -0400 ++++ yum-3.2.28/cli.py 2010-10-18 14:05:51.919642477 -0400 +@@ -1409,13 +1409,15 @@ + 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 is 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 = '/' +@@ -1456,7 +1458,7 @@ + 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', ++ default=None, + help=_("config file location"), metavar='[config file]') + group.add_option("-R", "--randomwait", dest="sleeptime", type='int', + default=None, +diff -ur yum-3.2.28.orig/yum/config.py yum-3.2.28/yum/config.py +--- yum-3.2.28.orig/yum/config.py 2010-10-18 13:59:40.165820228 -0400 ++++ yum-3.2.28/yum/config.py 2010-10-18 14:05:51.919642477 -0400 +@@ -623,7 +623,27 @@ + syslog_facility = Option('LOG_USER') + syslog_device = Option('/dev/log') + persistdir = Option('/var/lib/yum') +- ++ ++ def getRootedPath(self, path, enforce_default=False, defaults_to_host=False): ++ instroot = self.installroot ++ if instroot is 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. +@@ -637,6 +657,7 @@ + + 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() +@@ -888,7 +909,7 @@ + # Apply the installroot to directory options + def _apply_installroot(yumconf, option): + 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) +@@ -912,7 +933,7 @@ + yumvars[fsvar] = val + + # These can use the above FS yumvars +- for option in ('cachedir', 'logfile', 'persistdir'): ++ for option in ('cachedir', 'logfile', 'lockfile', 'persistdir'): + _apply_installroot(yumconf, option) + + # Add in some extra attributes which aren't actually configuration values +diff -ur yum-3.2.28.orig/yum/__init__.py yum-3.2.28/yum/__init__.py +--- yum-3.2.28.orig/yum/__init__.py 2010-10-18 13:59:40.173818661 -0400 ++++ yum-3.2.28/yum/__init__.py 2010-10-18 14:05:51.920642052 -0400 +@@ -429,8 +429,7 @@ + # 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)): +@@ -1585,10 +1584,8 @@ + 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): + try: