Difference in conflict resolving between yum and rpm installs

Hi Guys,

I am trying to test installation of a local rpm to my RHEL5 server. I am expecting it to fail as a previous version of the same package name exists. On using rpm -i this behaves as expected but yum install does not pick up the conflict. Here is the element of my SPEC file with the conflict logic -

Conflicts:    BCCAWAAE113v1_DEV <= 1-8, BCCAWAAE113v1_UAT <= 1-8, BCCAWAAE113v1_PRD <= 1-8
 
root@ldnpsr36282 PROD # rpm -qa | grep -i cawaae
BCCAWAAE113v1_DEV-1-8
root@ldnpsr36282 PROD # rpm -i BCCAWAAE113v1_DEV-1-9.noarch.rpm
error: Failed dependencies:
        BCCAWAAE113v1_DEV <= 1-8 conflicts with BCCAWAAE113v1_DEV-1-9.noarch
root@ldnpsr36282 PROD # yum install BCCAWAAE113v1_DEV-1-9.noarch.rpm
Loaded plugins: downloadonly, security
Setting up Install Process
Examining BCCAWAAE113v1_DEV-1-9.noarch.rpm: BCCAWAAE113v1_DEV-1-9.noarch
Marking BCCAWAAE113v1_DEV-1-9.noarch.rpm as an update to BCCAWAAE113v1_DEV-1-8.noarch
Resolving Dependencies
--> Running transaction check
---> Package BCCAWAAE113v1_DEV.noarch 0:1-9 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================================================================================
 Package                                    Arch                            Version                        Repository                                              Size
========================================================================================================================================================================
Updating:
 BCCAWAAE113v1_DEV                          noarch                          1-9                            /BCCAWAAE113v1_DEV-1-9.noarch                          273 M
Transaction Summary
========================================================================================================================================================================
Install       0 Package(s)
Upgrade       1 Package(s)
Total size: 273 M
Is this ok [y/N]:

Any ideas why yum install works? This is what our platform team use to deploy. I am expecting a failed dependency. Is it something to do with me trying to install the rpm locally? I have been going round in circles with this and just can't work out why they are behaving differently.

Thanks.
G.

That is the expected behavior for rpm. You were trying to install the package over an existing package. Try the rpm -U or -F options and see the difference.

Thanks for your reply.

I am not questioning the behaviour for rpm -i as I would expect that to fail, given a previous version is already installed but why is 'yum install' allowing the package to install when the previous version is already there? I thought it would fail in the same fashion as 'rpm -i' given the previous version is already installed and I have it declared as a conflict also.

Thanks again.
G.

You are telling yum to install a particular version ( -localinstall) - hence that is what it is going to do, i.e. resolve the dependencies if possible and install package.

Just to point out, yum install by default will install if no package present and update if it is present.

This has found it does not need to install only update:

Install       0 Package(s) Upgrade       1 Package(s)

Thanks Guys, that is really helpful but here is my issue.

I need to find away (within the package - not yum.conf) of preventing an install upgrading my package via yum install if a previous version exists.

Basically, I can have a DEV, UAT and PRD package installed on the same server at one time and they have many shared files so upgrading DEV, would break UAT and PRD at the older version. My preference would be for it to abort and advise that all packages need to be removed (DEV/UAT/PRD) before the new version is installed.

Is there an easy way to achieve this? Can I just do an rpm -qa packagname and exit 1 in the pre section or is there a simpler way?

Alternatively, is there a way in the spec file to ensure that if I upgrade DEV, that UAT and PRD get updated at the same time.

Thanks for everyone's help.