55

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.

6 Answers 6

43

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

1
  • 2
    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
19

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
  • 5
    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
  • 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).

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

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.