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


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

  • 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.
    – harms
    Jun 10, 2010 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, 2010 at 22:01

4 Answers 4


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.

  • 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, 2010 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 :-)
    – Ismael
    Jun 10, 2010 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, 2010 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 3, 2014 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, 2018 at 15:44

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.

  • 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, 2010 at 22:11

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
  • 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 1, 2020 at 19:00
  • 1
    @user001 I don't know. apt-file show is almost as good as man for me these days XD Jan 1, 2020 at 19:54
  • @user001 It's mentioned in the Debian Policy Manual, the section cited/linked in this answer.
    – user54690
    Jun 24, 2021 at 0:04

"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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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