60

I have a debian (well technically ubuntu) source package, i.e. the .dsc, the .tar.gz, etc., I want to build this. The dpkg-buildpackage fails, since I don't have all the build dependencies.

Normally I'd use apt-get build-dep, but this package isn't in apt.

Is there a 'clean', 'proper' way to install all the build dependencies, given a source package. I know I could just open the debian/control file, but I'm curious if there's a 'proper' way.

I have installed build-essential, and have all the normal compilers etc., this package requires extra software.

7 Answers 7

47

Use mk-build-deps which is part of devscripts.

1
  • 3
    For those looking to create a source package for normal depends, use equivs-build. This would be the "other half" of mk-build-deps.
    – ayao1337
    Mar 28, 2021 at 5:55
24

Here is an example workflow using ptman's suggestion.

Assuming you have downloaded the .dsc file, the .orig.*z file, and maybe also a .debian.*z file, then unpack the source package with:

dpkg-source -x [package_name]_[package_version].dsc

Move into the extracted source folder and run:

sudo mk-build-deps -i

This will create the file [package_name]-build-deps_[version].deb and install it, and also install all the dependencies it suggests.

Now you should be able to build your package from source:

debuild

When you are finished, you can easily remove the dependencies that were pulled in, by removing the build-deps package which you generated:

sudo apt-get purge --auto-remove [package_name]-build-deps
2
  • 6
    You can also pass -r to sudo mk-build-deps -i to remove the package after installing it. Also, instead of building as root, you can install as root using --root-cmd sudo. In the end, use mk-build-deps --install --root-cmd sudo --remove
    – Lucas
    Nov 8, 2017 at 19:17
  • 1
    Also, you may need to sudo apt install devscripts equivs first. May 31, 2019 at 10:03
11

Actually I can use dpkg-checkbuilddeps which shows the build dependencies. That gets me 99% of what I need

1
  • 4
    oddly enough, the packagename-version.dsc file contains the build dependencies in the line that begins with the string Build-Depends Mar 30, 2010 at 13:46
6

I usually use debuild from devscripts to build packages, and if relevent it prints a line of the missing build-deps.

The "proper" way is to use pbuilder or similar which will build the package in a minimal chroot, and just install any additional build-deps as specified by the package, this also removes a bunch of other potential issues (local installations of non-packaged libraries for example).

1

The annoying bit about dpkg-checkbuilddeps is that it also prints the version constraints and alternatives for the installation, such that its output cannot be directly forwarded to apt-get/apt/debfoster/.. .

I would like to point to "apt-get build-dep" again, but suggest to add the current directory, i.e. root of the source package that features the debian subdirectory, as a package "name", so the invocation is:

sudo apt-get build-dep .
0

The file debian/control lists all the packages that should be installed as build-dependencies. If (for whatever reason) you have installed some of the required software without the apt system, then just remove respective lines from the debian/control file, so dpkg-buildpackage will not know about these packages and not check on them.

Another trick is to execute the build instructions directly, which also circumvents any extra checks by dpkg-buildpackage and that also does not perform the cleaning of the build files (helps with incremental local fixes) by executing fakeroot ./debian/rules binary instead of dpkg-buildpackage.

-7

Try:

apt-get install build-essential
3
  • I have install build-essential. This package requires extra software. Mar 30, 2010 at 11:15
  • And it doesn't explain what requires? maybe libncurses-dev also.
    – Lanselot
    Mar 30, 2010 at 11:33
  • 1
    That's not the point; of course it does. The point is to have a command that actually installs the dependencies, not one that just displays them. Sep 27, 2015 at 17:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .