The RPM is compiled file package which is easy to use. The problem is some RPMs need much dependencies which is annoying. I have to search and download the dependency RPMs.

Alternatively, I can download the source code, and use './configure' -> 'make' -> 'make install' to do the installation. The 'make' process is a little troublesome compared with RPM, but 'make' solves the dependency problem.

Could you tell me the difference between RPM install and 'make' source code from installation perspective? Thank you!

EDIT: For example, I am installing RabbitMQ in RH. I failed to install it from RPM, as it needs much dependencies. But I managed to install it by 'make' source code. So the difference confuses me.

  • Any vote-down comment? – AJ09 Sep 15 '13 at 10:18
  • 2
    You were probably voted down because your question makes no sense. The method of installation (rpm vs make) does not impact dependencies at all. If the software requires an external binary or library, you still have to install it regardless of the method. Package managers can handle dependencies for you, and package managers generally work with precompiled binary packages like rpms (Gentoo's portage being one notable exception). You may be getting mixed up with statically vs dynamically linked libraries where sometimes the library is distributed with the source. – Alex Forbes Sep 15 '13 at 10:20
  • @al4 I edited by question. I think your point is source code include dependencies sometimes, right? – AJ09 Sep 15 '13 at 10:27
  • RabbitMQ is packaged in EPEL, there is no need to install from source. – Sven Sep 15 '13 at 10:33
  • It sounds like the packager was a dunce and added dependencies that were not required. It would generally be better in this case to submit a bug to the distribution and fix the package. – Falcon Momot Sep 15 '13 at 13:11

Assuming RHEL/CentOS, try yum local install, it will pull down the rependencies for you while rpm -Uvh will not.

To answer your question, makefiles generally compile and install from source code, whereas rpm packages are precompiled binaries. Make will not "solve" dependency problems for you, however it is possible that the source package includes some dependencies which a distribution package may not.

This is because packages compiled for a specific OS are expected to use distribution packages where they are available. For example Debian will often reject a package when it includes its own version of a library that is provided by the system. This is to reduce the maintenance burden, encourage good software development practices and avoid dependency hell - where you have multiple conflicting versions of the same package on one system.

A generic linux package has no idea what system it will be installed on, thus it will either include more dependencies, or provide a list of dependencies which you will also have to make install. The latter case is more common, and you can see how this could get unwieldly.

When you install Rabbitmq with rpm, you are not installing any of its dependencies. You need to use the package manager (e.g. yum on CentOS), which will manage the dependencies for you.

I strongly suggest using the rpm package.


Maintaining software handled by configure, make, make install is impossible to maintain. You don't see it's there, you don't know which files belong to it, often you can't delete it and upgrading it is a pain (you have to remember it, check the site for updates and do all this over again and again).

Whenever possible, use packages in your distributions repositories or 3rd party repos, and if that's not possible build your own RPM files and install those. If you use repo packages, you don't have to worry a second about dependencies, they got pulled in automatically, and updates are as easy as yum update and you are done.

Also, if you install software from source that has certain dependencies in RPM form and you don't satisfy those when installing from source, you might end up with missing functions that the maintainer of the package thought important enough to warrant a dependency. As an example, you can build a database CLI interface like mysql or psql without readline installed, but then you miss all the history and edit functionality this library provides. In many/most cases the build will fail though, as the dependency isn't optional but mandatory.

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