[Yum-devel] yumdownloader (1.1.2/3.1.6) with --installroot

Tim Lauridsen tla at rasmil.dk
Fri Apr 13 06:55:39 UTC 2007


Charlie Brady wrote:
>
> First off, excuse my ignorance of much of yum and python. New 
> territory for me.
>
> I'm investigating use of yumdownloader to marshall a coherent set of 
> RPMs for a small CentOS based iso image. Although my target is 
> CentOS5, my development platform is FC6, so I started with yum-3.0.5-2 
> and yum-utils-1.0.3. I was able to patch yumdownloader to take a 
> --installroot arg (see end of post).
>
> This gave me something that ran, but not to completion:
>
> $ ./yumdownloader-1.0.3  -c yum.conf --installroot installroot 
> --destdir RPMS.x --resolve bash
> smeos                     100% |=========================|  951 B    
> 00:00
> smetest                   100% |=========================|  951 B    
> 00:00
> c5                        100% |=========================|  951 B    
> 00:00
>
> Traceback (most recent call last):
>   File "./yumdownloader-1.0.3", line 199, in ?
>     main()
>   File "./yumdownloader-1.0.3", line 167, in main
>     if not pkg in toDownload:
>   File "/usr/lib/python2.4/site-packages/yum/packages.py", line 191, 
> in __eq__
>     if other == None:
>   File "/usr/lib/python2.4/site-packages/yum/transactioninfo.py", line 
> 403, in __cmp__
>     if self.name > other.name:
> AttributeError: 'NoneType' object has no attribute 'name'
>
> This patch to /usr/lib/python2.4/site-packages/yum/packages.py fixed 
> that little problem:
>
>     def __eq__(self, other):
> #        if other == None:
> #            return False
>         if comparePoEVR(self, other) == 0 and self.arch == other.arch 
> and self.name == other.name:
>             return True
>         return False
>
> OK, now it runs, but it doesn't "resolve" a very complete RPM set:
>
> $ ls RPMS.x/
> bash-3.1-16.1.i386.rpm
> $
>
> No glibc, etc.
>
> So now I'm trying again, but with yum-3.1.6 and yum-install-1.1.2. I 
> now find that yumdownloader requires various things to already exist 
> in the installroot which it was happy and able to create in the 
> earlier version. Specifically it expects the installroot to already 
> include an rpmdb and cache directories for each repository (both of 
> which I've found workarounds for), and then also demands to find a 
> pre-cached repomd.xml file per repository.
>
> Are these intentional changes of behaviour, or are they regressions 
> which I can help to debug?
This is not intentional :-)
>
> Here's the --installroot patch for yum-utils-1.0.3:
>
>
> -def initYum(yumconfigfile):
> +def initYum(opts):
>      global logger
>      my = yum.YumBase()
> -    my.doConfigSetup(fn=yumconfigfile,init_plugins=False) # init yum, 
> without plugins
> +    my.doConfigSetup(fn=opts.config,init_plugins=False) # init yum, 
> without plugins
>      my.conf.uid = os.geteuid()
>      if my.conf.uid != 0:
>          cachedir = getCacheDir()
> @@ -62,6 +62,8 @@
>        help='operate on source packages')
>      parser.add_option("-e","--enablerepo", default=[], 
> action="append", dest="repo",
>        help='enable repository')
> +    parser.add_option("", "--installroot", default="/",
> +        help="set install root")
>
>      (opts, args) = parser.parse_args()
>      if len(args) < 1:
> @@ -73,7 +75,13 @@
>      global logger
>      logger = logging.getLogger("yum.verbose.yumdownloader")
>      (opts, args) = parseArgs()
> -    my = initYum(opts.config)
> +    my = initYum(opts)
>
>
>
> _______________________________________________
> Yum-devel mailing list
> Yum-devel at linux.duke.edu
> https://lists.dulug.duke.edu/mailman/listinfo/yum-devel
yumdownloader in yum-utils 1.1.x has been redesigned to inherit to 
options from the yum-cli, it look like it have introduced some regressions.
You installroot patches look fine to me, if no one have any objections, 
i  will add the patches.

Tim




More information about the Yum-devel mailing list