-->
Page 41
By using --test in conjunction with -vv, it's easy to see exactly what RPM would do during an actual erase.
It's likely that one day while erasing a package, you'll see something like this:
# rpm -e bother removing these packages would break dependencies: bother >= 3.1 is needed by blather-7.9-1 #
What happened? The problem is that one or more of the packages installed on your system require the package you're trying to erase. Without it, they won't work properly. In our example, the blather package won't work properly unless the bother package (and more specifically, bother version 3.1 or later) is installed. Since we're trying to erase bother, RPM aborted the erasure.
Now, 99 times out of 100, this is exactly the right thing for RPM to do. After all, if the package is needed by other packages, why try to erase it? As with everything else in life, there are exceptions to the rule. And that is why there is a --nodeps option.
Adding the --nodeps options to an erase command directs RPM to ignore any dependency-related problems and to erase the package. Going back to our previous example, let's add the
--nodeps option to the command line and see what happens:
# rpm -e --nodeps bother #
The package was erased without a peep. Whether the blather package will work properly is another matter. In general, it's not a good idea to use --nodeps to get around dependency problems. The package builders included the dependency requirements for a reason, and it's best not to second-guess them.
In section 3.2.1 we used the -vv option to see what RPM was actually doing when it erased a package. We noted that there were two scripts, a preuninstall and a postuninstall, that were used to execute commands required during the process of erasing a package.
Page 42
The --noscripts option prevents these scripts from being executed during an erase. This is a very dangerous thing to do! The --noscripts option is really meant for package builders to use during the development of their packages. By preventing the pre- and postuninstall scripts from running, a package builder can keep a buggy package from bringing down his development system. After the bugs are found and eliminated, there's very little need to prevent these scripts from running; in fact, doing so can cause problems!
The --rcfile option is used to specify a file containing default settings for RPM. Normally, this option is not needed. By default, RPM uses /etc/rpmrc and a file named .rpmrc located in your login directory.
This option would be used if there were a need to switch between several sets of RPM defaults. Software developers and package builders will normally be the only people using the --rcfile option. For more information on rpmrc files, see Appendix B, "The rpmrc File."
Adding --root <path> to an erase command forces RPM to assume that the directory specified by <path> is actually the root directory. The --root option affects every aspect of the erase process, so pre- and postuninstall scripts are run with <path> as their root directory (using chroot(2), if you must know). In addition, RPM expects its database to reside in the directory specified by the dbpath rpmrc file entry, relative to <path>.
Normally this option is only used during an initial system install, or when a system has been booted off a rescue disk and some packages need to be re-installed.
In order for RPM to do its work, it needs access to an RPM database. Normally, this database exists in the directory specified by the rpmrc file entry, dbpath. By default, dbpath is set to /var/lib/rpm.
Although the dbpath entry can be modified in the appropriate rpmrc file, the --dbpath option is probably a better choice when the database path needs to be changed temporarily. An example of a time the --dbpath option would come in handy is when it's necessary to examine an RPM database copied from another system. Granted, it's not a common occurrence, but it's difficult to handle any other way.
Page 43
If you've made changes to a configuration file that was originally installed by RPM, your changes won't be lost if you erase the package. Say, for example, that we've made changes to /etc/skel/.bashrc (a config file), which was installed as part of the etcskel package. Later, we remove etcskel:
# rpm -e etcskel #
But if we take a look in /etc/skel, here's what we see:
# ls -al total 5 drwxr-xr-x 3 root root 1024 Jun 17 22:01 . drwxr-xr-x 8 root root 2048 Jun 17 19:01 .. -rw-r--r-- 1 root root 152 Jun 17 21:54 .bashrc.rpmsave drwxr-xr-x 2 root root 1024 May 13 13:18 .xfm #
Sure enough, .bashrc.rpmsave is a copy of your modified .bashrc file! Remember, however, that this feature only works with config files. Not sure how to determine which files RPM thinks are config files? Chapter 5, "Getting Information About Packages," specifically section 5.2.2, shows you how.
RPM takes most of the work out of removing software from your system, and that's great. But of course there's a downside. RPM also makes it easy to erase packages that are critical to your system's continued operation. Here are some examples of packages not to erase:
In many cases, RPM's dependency processing will prevent inadvertent erasures from causing massive problems. However, if you're not sure, use rpm -q to get more information about the package you'd like to erase. (See Chapter 5 for more information on rpm -q.)