How *.dsc files are related to *.deb and source code files
The workflow usually goes approximately like this:
- Someone not affiliated with Debian writes some source code and posts it as a package on the web, for example, splint-3.1.2.tar.gz
Someone at Debian downloads the source code, and writes
A set of patch files to make the source build on Debian and conform to Debian guidelines. Run
curl -s 'http://archive.ubuntu.com/ubuntu/pool/universe/s/splint/splint_3.1.2.dfsg1-2.diff.gz' | gunzip -dc | less
to see this for the example package.
- A textual metadata file describing the package—this is the
.dsc
file anddebian/control
file. “DSC” is an acronym for Debian Source Control.
- Binary
.deb
packages are built for each architecture from the original upstream source code with the Debian-specific patches applied. Here is one such file. The Debian Binary Package Building HOWTO explains the format of these files and how to inspect them.
The .dsc
file is not used for build logic, it is more for metadata. However many tools along the way require it. For example, the Build-Depends:
field is used to install required build dependencies.
It's actually much more complicated than that. The idea behind Debian packages is that they contain all the information needed to buld a page. Usually, the source is modified to include a debian
directory that includes a control
file describing the dependencies of that package and other packages that it interacts with (e.g, breaks, replaces, provides virtual package). A rules
file explains how to build and install the package. There are also descriptions of how to package since a single source package can become many binary packages (e.g., foo-utils
, libfoo0
, libfoo-dev
). debuild
actually reads this information, does the compilation, and produces the binary packages. A subtlety: if foo
uses libbar-dev
, I may not actually know/care what version of the libbar
binary package I use. pbuilder
runs debuild
in a clean environment so there is no chance of compiling against things you have not explicitly specified.
Consult the Debian New Maintainers' Guide for details.