88

I am researching how to install Ruby 1.9.1 in Xubuntu 10.04 and I came across the command build-essential and build-dep multiple times. Sometimes it is followed by packages and sometimes it is both preceded and post-ceded by packages.

The 2 examples I am looking at are:

sudo apt-get install build-essential zlib1g zlib1g-dev zlibc libruby1.9 libxml2 libxml2-dev libxslt-dev

sudo apt-get build-dep ruby1.9

and

sudo apt-get install ruby irb ri rdoc ruby1.8-dev libzlib-ruby libyaml-ruby libreadline-ruby libncurses-ruby libcurses-ruby libruby libruby-extras libfcgi-ruby1.8 build-essential libopenssl-ruby libdbm-ruby libdbi-ruby libdbd-sqlite3-ruby sqlite3 libsqlite3-dev libsqlite3-ruby libxml-ruby libxml2-dev

classer
  • 3,035
  • 8
  • 29
  • 25
  • 3
    Note that it's not a command, but a package in the Debian package system (APT). You could also acquire the package using GUI tools. –  Jun 10 '10 at 21:14
  • 1
    Thanks. How does it relate to Ruby though? I assume Ruby needs it to run but maybe I am wrong. – classer Jun 10 '10 at 22:01

4 Answers4

77

The command sudo apt-get build-dep packagename means "As root, install all dependencies for 'packagename' so that I can build it". So build-dep is an apt-get command just like install, remove, update, etc.

build-essential is a package which contains references to numerous packages needed for building software in general.

Kleist
  • 871
  • 6
  • 5
  • 2
    Thanks for explaining the 'build-dep' command. So as I understand it, in this case Ruby1.9 has a dependency list attached to it that Linux looks to as a 'To Do/Build List' and one by one builds each of those items. The final infrastructure that gets built allows Ruby1.9 to function properly. What I do not understand is why 'build-essential' ,or all of the other packages in the top line( zlib1g zlib1g-dev zlibc libruby1.9 etc. etc.), would not be included in the 'To Do/Build List' attached to Ruby1.9. Wouldn't it be simpler if there was just one command? – classer Jun 10 '10 at 22:11
67

The build-essential package is a reference for all the packages needed to compile a Debian package. It generally includes the GCC/g++ compilers and libraries and some other utilities.

Check out the documentation here.

Ismael
  • 810
  • 7
  • 4
  • 2
    Ok but that still does not answer my question fully. I understand that 'build-essential' contains an informational list of packages which are essential for creating Debian packages. But what is considered a Debian package? Ruby? gcc/g++ compilers? And how does Debian packages and 'build-essential" relate to Ruby? Is Ruby built on top of the Debian package? Put another way, does Ruby need the build-essential package to run? I really wish to see a visual representation of the relationships between all these parts. – classer Jun 10 '10 at 22:00
  • 3
    To put it simply, if you ( or some other package you want to install ) need a C/C++ compiler, you need to install build-essential. Usually it's the first thing I install in a new Ubuntu installation :-) –  Jun 10 '10 at 23:13
  • 5
    @Adam Since Ruby is an interpreted language, the interpreter needs the C or C++ compiler to build itself to run on your machine. `build-essential` is a metapackage (a package that installs many other packages, like g++ and gcc: the GNU C & C++ compilers). It's required if you want to compile anything from source, and if you want to work with almost any programming language. HTH! – squircle Jun 11 '10 at 20:03
  • 8
    This answer is wrong. The answer below is the correct one. `build-dep` is an apt-get command and `build-essential` is a package. – David Aug 03 '14 at 13:03
  • 2
    This is not the correct answer. The link provided gives no insight or explanation as to what is in the build-essential package. – andDevW Jul 27 '18 at 15:44
  • Cross: *[Errors while compiling with CMake](https://stackoverflow.com/questions/31421327/errors-while-compiling-with-cmake/43008465#43008465)* – Peter Mortensen Aug 31 '18 at 15:56
12

build-essential has one magical property: it does not need to be listed as a build dependency under the Build-Depends control field (debian-packages) of source packages as documented at https://www.debian.org/doc/debian-policy/ch-source.html#s-pkg-relations

You can get a list of the build-essential packages at:

cat /usr/share/doc/build-essential/list

You can also determine if a package is part of build-essential with:

apt-cache show gcc

which says:

Build-Essential: yes
user001
  • 3,474
  • 7
  • 24
  • 32
  • 1
    +1 for pointing out where the list can be found. The `build-essential` package description states that "This package contains an informational list of packages which are considered essential for building Debian packages," but does not mention where that list is. I found `/usr/share/doc/build-essential/list` among the output of `apt-file show build-essential`, but is there a better way to get this information (like a help file or man page for the package)? – user001 Jan 01 '20 at 19:00
  • 1
    @user001 I don't know. `apt-file show` is almost as good as `man` for me these days XD – Ciro Santilli OurBigBook.com Jan 01 '20 at 19:54
  • @user001 It's mentioned in the Debian Policy Manual, the section cited/linked in this answer. – user54690 Jun 24 '21 at 00:04
6

"build-essential" contains tools (like the gcc compiler, make tool, etc) for compiling/building software from source. So you start with (usually C) source files and create executables from them.

If you are just trying to get Ruby installed, I would highly recommend just using RVM (Ruby Version Manager):

Follow the instructions under "Github Repository (recommended)"

Note that you will need the Git version control software installed first. Use apt-get install git-core if you don't have that yet.

ocodo
  • 1,770
  • 1
  • 18
  • 21
Doug
  • 171
  • 3