Solve Conflicts in RPM installation

Problem

I want to offline install some rpms for an application, I put all dependencies for that application in a dedicated directory. The problem is it will cause conflicts with the old installed ones, I also want to keep old existing rpms because they may needed by other packages. For example, I offline install bind-utils use command:

yum --disablerepo=* install -y ./bind-utils/*.rpm

Error output:

...
Error: Package: 1:openssl-1.0.2k-12.el7.x86_64 (@anaconda/7.5)
           Requires: openssl-libs(x86-64) = 1:1.0.2k-12.el7
           Removing: 1:openssl-libs-1.0.2k-12.el7.x86_64 (@anaconda/7.5)
               openssl-libs(x86-64) = 1:1.0.2k-12.el7
           Updated By: 1:openssl-libs-1.0.2k-16.el7.x86_64 (/openssl-libs-1.0.2k-16.el7.x86_64)
               openssl-libs(x86-64) = 1:1.0.2k-16.el7
...
You could try using --skip-broken to work around the problem
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:
mokutil-15-1.el7.x86_64 is a duplicate with mokutil-12-1.el7.x86_64

This error shows that yum try to update old rpm with new one but this breaks the dependency chain. Option --skip-broken won't work here, it will skip the dependency-problem rpm which include exactly what I need:

# skipped
bind-utils.x86_64 32:9.9.4-73.el7_6

Then I try to use:

rpm -ivh ./bind-utils/*.rpm

still bad with conflicts:

...
file /usr/lib64/openssl/engines/libcapi.so from install of openssl-libs-1:1.0.2k-16.el7.x86_64 conflicts with file from package openssl-libs-1:1.0.2k-12.el7.x86_64
...

Solution

After doing research I find some rpm options may help:

rpm {-i|--install} [install-options] PACKAGE_FILE ...

       This installs a new package.

       The general form of an rpm upgrade command is

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

       This upgrades or installs the package currently installed to a newer version.  This is the same as  install,
       except all other version(s) of the package are removed after the new package is installed.

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

       This will upgrade packages, but only ones for which an earlier version is installed.
...
--force
              Same as using --replacepkgs, --replacefiles, and --oldpackage.
--replacepkgs
              Install the packages even if some of them are already installed on this system.
--replacefiles
              Install the packages even if they replace files from other, already installed, packages.
--oldpackage
              Allow an upgrade to replace a newer package with an older one.

Let's add --force flag and try again, this works and the old rpms are still there:

rpm --force -ivh ./bind-utils/*.rpm
rpm -qa | grep openssl-libs
openssl-libs-1.0.2k-12.el7.x86_64
openssl-libs-1.0.2k-16.el7.x86_64
上一篇:LNK1104:无法打开文件“LIBS.obj”


下一篇:IDEA如何打包可运行jar,外部引用jar包版