6

I am looking for a way to have yum install only dependencies for a given package, something like an --prepare-for-install option so I can take a snapshot of the prepared system and test the rpm setup with different options or rebuilds of the package itself on a clean system without having to rely on the rpm uninstall and without downloading the dependencies each time.

  • 1
    You want to not install the package? That doesn't make a whole lot of sense. What are you really trying to do? – Michael Hampton Sep 17 '12 at 16:27
  • 1
    Hi @Michael, the purpose of not installing the package seems clear to me from the text: preparing a system for package testing. – a1an Sep 17 '12 at 21:02
  • Right, that's why it doesn't make any sense. – Michael Hampton Sep 17 '12 at 21:34
  • 1
    Letting aside the constructiveness of discussing what makes sense to whom, how do you test the rpm you develop then? – a1an Sep 18 '12 at 7:56
7

This might be really dumb but it should work.

PACKAGE=awstats
yum deplist $PACKAGE | grep provider | awk '{print $2}' | sort | uniq | grep -v $PACKAGE | sed ':a;N;$!ba;s/\n/ /g' | xargs yum -y install
  • Works like a charm, who said dumb isn't good :) Would you explain the :a;N;$!ba; part of the sed command for completeness? Thanks – a1an Sep 18 '12 at 10:30
  • I honestly don't know, but I pulled it from here, stackoverflow.com/a/1252191 – ablackhat Sep 18 '12 at 17:35
  • 1
    The sed expression joins the multiple lines returned by yum deplist and the intervening pipeline, transforming it into a single line of space-separated dependencies. It's not actually necessary. You can simplify the above as: yum deplist $PACKAGE | awk '/provider/ {print $2}' | sort -u | xargs yum -y install. – larsks Apr 21 '15 at 13:22
  • 2
    Your solution has an error. Say, if we try to install dependencies for package "mysql" and it has "mysql-common" and "init-mysql" dependencies, we will not see them installed, because they both will be filtered by 'grep -v mysql'. – Nikita Kipriyanov Jan 27 '16 at 13:18
  • 1
    I believe this answer addresses @NikitaKipriyanov's point. – driftcatcher Jan 18 '17 at 3:44
4
yum install $(repoquery --requires <package>)
  • Note that this doesn't account for providers. For instance, I have git18 which provides git; the above command attempts to install git as a dependency anyway. – Aaron Adams Nov 30 '13 at 17:53
  • 1
    I believe this answer addresses the valid concern raised by @AaronAdams, above. – driftcatcher Jan 18 '17 at 3:44
0

Best option I found until now for my packages is to put an "exit 1" into the %pre scriptlet the first time the package is built but I'm looking for cleaner options, not requiring modification of the package itself.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.