debian-faq.en
debian-faq.en
Permission is granted to make and distribute verbatim copies of this document provided the copyright
notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this document under the conditions
for verbatim copying, provided that the entire resulting derived work is distributed under the terms of
a permission notice identical to this one.
Permission is granted to copy and distribute translations of this document into another language, under
the above conditions for modified versions, except that this permission notice may be included in
translations approved by the Free Software Foundation instead of in the original English.
ii
Contents
iii
CONTENTS
4 Compatibility issues 17
4.1 On what hardware architectures/systems does Debian GNU/Linux run? . . . . . . . . . . 17
4.2 What kernels does Debian GNU/Linux run? . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 How compatible is Debian with other distributions of Linux? . . . . . . . . . . . . . . . . 18
4.4 How source code compatible is Debian with other Unix systems? . . . . . . . . . . . . . . 18
4.5 Can I use Debian packages (”.deb” files) on my Red Hat/Slackware/... Linux system? Can
I use Red Hat packages (”.rpm” files) on my Debian GNU/Linux system? . . . . . . . . . . 19
4.6 How should I install a non-Debian program? . . . . . . . . . . . . . . . . . . . . . . . . . 19
iv
CONTENTS
v
CONTENTS
vi
Abstract
This document answers questions frequently asked about Debian GNU/Linux.
Chapter 1
• full featured: Debian includes more than 64961 software packages at present. Users can se-
lect which packages to install; Debian provides a tool for this purpose. You can find a list
and descriptions of the packages currently available in Debian at any of the Debian mirror sites
(https://www.debian.org/distrib/ftplist).
• free to use and redistribute: There is no consortium membership or payment required to partici-
pate in its distribution and development. All packages that are formally part of Debian GNU/Linux
are free to redistribute, usually under terms specified by the GNU General Public License.
The Debian archives also carry approximately 1082 software packages (in the non-free and
contrib sections), which are distributable under specific terms included with each package.
• dynamic: With about 1629 volunteers constantly contributing new and improved code, Debian
is evolving rapidly. The archives are updated twice every day.
Most Linux users run a specific distribution of Linux, like Debian GNU/Linux. However, in principle,
users could obtain the Linux kernel via the Internet or from elsewhere, and compile it themselves. They
could then obtain source code for many applications in the same way, compile the programs, then install
them into their systems. For complicated programs, this process can be not only time-consuming but
error-prone. To avoid it, users often choose to obtain the operating system and the application packages
from one of the Linux distributors. What distinguishes the various Linux distributors are the software,
protocols, and practices they use for packaging, installing, and tracking applications packages on users’
systems, combined with installation and maintenance tools, documentation, and other services.
Debian GNU/Linux is the result of a volunteer effort to create a free, high-quality Unix-compatible
operating system, complete with a suite of applications. The idea of a free Unix-like system originates
from the GNU project, and many of the applications that make Debian GNU/Linux so useful were de-
veloped by the GNU project.
For Debian, free has the GNUish meaning (see the Debian Free Software Guidelines (https://www.
debian.org/social_contract#guidelines)). When we speak of free software, we are referring
1
CHAPTER 1. DEFINITIONS AND OVERVIEW 1.3. OK, NOW I KNOW WHAT DEBIAN IS... …
to freedom, not price. Free software means that you have the freedom to distribute copies of free
software, that you receive source code or can get it if you want it, that you can change the software or
use pieces of it in new free programs; and that you know you can do these things.
The Debian Project was created by Ian Murdock in 1993, initially under the sponsorship of the Free
Software Foundation’s GNU project. Today, Debian’s developers think of it as a direct descendent of the
GNU project.
Although Debian GNU/Linux itself is free software, it is a base upon which value-added Linux dis-
tributions can be built. By providing a reliable, full-featured base system, Debian provides Linux users
with increased compatibility, and allows Linux distribution creators to eliminate duplication of effort
and focus on the things that make their distribution special. See Section 14.3 for more information.
• a file system that follows the Linux Filesystem Hierarchy Standard https://www.pathname.
com/fhs.
• a wide range of Unix utilities, many of which have been developed by the GNU project and the
Free Software Foundation.
The combination of the Linux kernel, the file system, the GNU and FSF utilities, and the other utilities
are designed to achieve compliance with the POSIX (IEEE 1003.1) standard; see Section 4.4.
For more information about Linux, see What is Linux (https://www.linux.org/info/) by Linux
Online (https://www.linux.org/).
2
CHAPTER 1. DEFINITIONS AND OVERVIEW 1.6. HOW DOES THE DEBIAN PROJECT FIT IN …
package maintenance system; the Debian package maintenance system is unique and particularly
robust (see Chapter 7).
Open development: Whereas many other Linux distributions are developed by individuals, small,
closed groups, or commercial vendors, Debian is a major Linux distribution that is being developed
by an association of individuals who have made common cause to create a free operating system,
in the same spirit as Linux and other free software.
More than 1120 volunteer package maintainers are working on over 64961 packages and im-
proving Debian GNU/Linux. The Debian developers contribute to the project not by writing new
applications (in most cases), but by packaging existing software according to the standards of
the project, by communicating bug reports to upstream developers, and by providing user sup-
port. Additionally, more than 509 volunteer in the project doing other tasks. Examples of these
tasks include: creating documentation, contributing to the website translating. See also additional
information on how to become a contributor in Chapter 13.
The Universal Operating System: Debian comes with more than 64961 packages (https://packages.
debian.org/stable/) and runs on 9 architectures (https://www.debian.org/ports/).
This is far more than is available for any other GNU/Linux distribution. See Section 5.1 for an
overview of the provided software and see Section 4.1 for a description of the supported hardware
platforms.
The Bug Tracking System: The geographical dispersion of the Debian developers required sophisti-
cated tools and quick communication of bugs and bug-fixes to accelerate the development of the
system. Users are encouraged to send bugs in a formal style, which are quickly accessible by WWW
archives or via e-mail. See additional information in this FAQ on the management of the bug log
in Section 12.4.
The Debian Policy: Debian has an extensive specification of our standards of quality, the Debian Pol-
icy. This document defines the qualities and standards to which we hold Debian packages.
For additional information about this, please see our web page about reasons to choose Debian
(https://www.debian.org/intro/why_debian).
1.6 How does the Debian project fit in or compare with the Free
Software Foundation’s GNU project?
The Debian system builds on the ideals of free software first championed by the Free Software Founda-
tion (https://www.gnu.org/) and in particular by Richard Stallman (https://www.stallman.
org/). FSF’s powerful system development tools, utilities, and applications are also a key part of the
Debian system.
The Debian Project is a separate entity from the FSF, however we communicate regularly and coop-
erate on various projects. The FSF explicitly requested that we call our system ”Debian GNU/Linux”,
and we are happy to comply with that request.
The FSF’s long-standing objective is to develop a new operating system called GNU, based on Hurd
(https://www.gnu.org/software/hurd). Debian is working with FSF on this system, called De-
bian GNU/Hurd (https://www.debian.org/ports/hurd/).
1.7 How does one pronounce Debian and what does this word
mean?
The project name is pronounced Deb’-ee-en, with a short e in Deb, and emphasis on the first syllable. This
word is a contraction of the names of Debra and Ian Murdock, who founded the project. (Dictionaries
seem to offer some ambiguity in the pronunciation of Ian (!), but Ian prefers ee’-en.)
3
Chapter 2
The official document giving installation instructions is the Debian GNU/Linux Installation Guide (https:
//www.debian.org/releases/stable/installmanual). We’ll give some additional notes about
getting and installing Debian GNU/Linux here.
Users that wish to run updated versions of the software in stable have the option to use ”back-
ports”. Backports are recompiled packages from testing (mostly) and unstable (in a few cases only, e.g.
security updates), so they will run without new libraries (wherever it is possible) on a stable Debian
5
CHAPTER 2. GETTING AND INSTALLING … 2.3. WHERE/HOW CAN I GET THE DEBIAN …
distribution. Users can configure their system to use the backports repository and download specific
software. However, it is recommended to pick out single backports which fit the specific needs, and
not to use all backports available. For more information read the Wiki entry describing sofware avail-
able to Debian users (https://wiki.debian.org/DebianSoftware) and Wiki entry on backports
(https://wiki.debian.org/Backports).
Security updates serve one purpose: to supply a fix for a security vulnerability. They are not a
method for sneaking additional changes into the stable release without going through normal point
release procedure. Consequently, fixes for packages with security issues will not upgrade the software.
The Debian Security Team will backport the necessary fixes to the version of the software distributed in
”stable” instead.
For more information related to security support please read the Security FAQ (https://www.
debian.org/security/faq) or the Debian Security Manual (https://www.debian.org/doc/
manuals/securing-debian-howto/).
2.5 Why does the official stable released CD-ROM contain sym-
links for ”frozen” and ”unstable”? I thought this CD contains
just ”stable”!
Official Debian CD images indeed contain symlinks like:
/dists/frozen -> bookworm/
/dists/stable -> bookworm/
/dists/testing -> bookworm/
/dists/unstable -> bookworm/
.
The fact these symlinks are present does not mean the image is ”unstable” or ”testing” or anything.
Read the CD label in /.disk/info to find out which Debian version it contains. This information is
also present in /README.txt on the CD.
Read https://www.debian.org/releases to find out what the current ”stable” and ”testing”
releases are.
2.6 Can I get and install Debian directly from a remote Internet
site?
Yes. You can boot the Debian installation system from a set of files you can download from our archive
site and its mirrors.
6
CHAPTER 2. GETTING AND INSTALLING … 2.7. ARE THERE ANY ALTERNATIVE …
You can download a small CD image file, create a bootable CD from it, install the basic system from
it and the rest over the network. For more information please see https://www.debian.org/CD/
netinst/.
2.7 Are there any alternative strategies for booting the system in-
staller?
Yes. Apart from CD or DVD, you can install Debian GNU/Linux by booting from USB memory stick,
directly from hard disk, or using TFTP net booting. For installing on multiple computers it’s possible to
do fully automatic installations. NB: not all methods are supported by all computer architectures. Once
the installer has booted, the rest of the system can be downloaded over the network, or installed from
local media. See the Debian GNU/Linux Installation Guide (https://www.debian.org/releases/
stable/installmanual) for more information.
7
Chapter 3
There are many different Debian distributions. Choosing the proper Debian distribution is an important
decision. This section covers some information useful for users that want to make the choice best suited
for their system and also answers possible questions that might be arising during the process. It does
not deal with ”why you should choose Debian” but rather ”which distribution of Debian”.
For more information on the available distributions read Section 6.1.
• If security or stability are at all important for you: install stable. period. This is the most preferred
way.
• If you are a new user installing to a desktop machine, start with stable. Some of the software
is quite old, but it’s the least buggy environment to work in. You can easily switch to the more
modern unstable (or testing) once you are a little more confident.
• If you are a desktop user with a lot of experience in the operating system and do not mind facing
the odd bug now and then, or even full system breakage, use unstable. It has all the latest and
greatest software, and bugs are usually fixed swiftly.
• If you are running a server, especially one that has strong stability requirements or is exposed to
the Internet, install stable. This is by far the strongest and safest choice.
The following questions (hopefully) provide more detail on these choices. After reading this whole
FAQ, if you still could not make a decision, stick with the stable distribution.
3.1.1 You asked me to install stable, but in stable so and so hardware is not
detected/working. What should I do?
Try to search the web using a search engine and see if someone else is able to get it working in stable.
Most of the hardware should work fine with stable. But if you have some state-of-the-art, cutting edge
hardware, it might not work with stable. If this is the case, you might want to install/upgrade to either
testing or unstable.
For laptops, https://www.linux-on-laptops.com/ is a very good website to see if someone
else is able to get it to work under Linux. The website is not specific to Debian, but is nevertheless a
tremendous resource. I am not aware of any such website for desktops.
Another option would be to ask in the debian-user mailing list by sending an email to debian-
[email protected]. Messages can be posted to the list even without subscribing. The archives can be
read through https://lists.debian.org/debian-user/. Information regarding subscribing to
the list can be found at the location of archives. You are strongly encouraged to post your questions on
9
CHAPTER 3. CHOOSING A DEBIAN … 3.1. WHICH DEBIAN DISTRIBUTION …
3.1.3 The stable distributions really contains outdated packages. Just look at
Kde, Gnome, Xorg or even the kernel. They are very old. Why is it so?
Well, you might be correct. The age of the packages at stable depends on when the last release was made.
Since there is typically over 1 year between releases you might find that stable contains old versions of
packages. However, they have been tested in and out. One can confidently say that the packages do not
have any known severe bugs, security holes etc., in them. The packages in stable integrate seamlessly
with other stable packages. These characteristics are very important for production servers which have
to work 24 hours a day, 7 days a week.
On the other hand, packages in testing or unstable can have hidden bugs, security holes etc. More-
over, some packages in testing and unstable might not be working as intended. Usually people working
on a single desktop prefer having the latest and most modern set of packages. Unstable is the solution
for this group of people.
As you can see, stability and novelty are two opposing ends of the spectrum. If stability is required:
install stable distribution. If you want to work with the latest packages, then install unstable.
• Stable is rock solid. It does not break and has full security support. But it not might have support
for the latest hardware.
• Testing has more up-to-date software than Stable, and it breaks less often than Unstable. But when
it breaks, it might take a long time for things to get rectified. Sometimes this could be days and it
could be months at times. It also does not have permanent security support.
• Unstable has the latest software and changes a lot. Consequently, it can break at any point.
However, fixes get rectified in many occasions in a couple of days and it always has the latest
releases of software packaged for Debian.
When deciding between testing and unstable bear in mind that there might be times when tracking
testing would be beneficial as opposed to unstable. One of this document’s authors experienced such
situation due to the gcc transition from gcc3 to gcc4. He was trying to install the labplot package on
a machine tracking unstable and it could not be installed in unstable as some of its dependencies have
undergone gcc4 transition and some have not. But the package in testing was installable on a testing
machine as the gcc4 transitioned packages had not ”trickled down” to testing.
10
CHAPTER 3. CHOOSING A DEBIAN … 3.1. WHICH DEBIAN DISTRIBUTION …
3.1.6 You are talking about testing being broken. What do you mean by that?
Sometimes, a package might not be installable through package management tools. Sometimes, a pack-
age might not be available at all, maybe it was (temporarily) removed due to bugs or unmet dependen-
cies. Sometimes, a package installs but does not behave in the proper way.
When these things happen, the distribution is said to be broken (at least for this package).
3.1.7 Why is it that testing could be broken for months? Won’t the fixes intro-
duced in unstable flow directly down into testing?
The bug fixes and improvements introduced in the unstable distribution trickle down to testing after
a certain number of days. Let’s say this threshold is 5 days. The packages in unstable go into testing
only when there are no RC-bugs reported against them. If there is a RC-bug filed against a package in
unstable, it will not go into testing after the 5 days.
The idea is that, if the package has any problems, it would be discovered by people using unstable
and will be fixed before it enters testing. This keeps testing in a usable state for most of the time. Overall
a brilliant concept, if you ask me. But things aren’t always that simple. Consider the following situation:
The situation can get much more complicated, if say, XYZ depends on 4 other packages. This could
in turn lead to an unusable testing distribution for months. While the scenario above is imaginary,
similar things can occur in real life, though they are rare.
11
CHAPTER 3. CHOOSING A DEBIAN … 3.1. WHICH DEBIAN DISTRIBUTION …
• Packages constantly migrate from sid to testing (i.e. trixie). But packages in stable (i.e. bookworm)
remain the same except for security updates.
• After some time testing becomes frozen. But it will still be called testing. At this point no new
packages from unstable can migrate to testing unless they include release-critical (RC) bug fixes.
• When testing is frozen, all the new bugfixes introduced have to be manually checked by the mem-
bers of the release team. This is done to ensure that there won’t be any unknown severe problems
in the frozen testing.
• RC bugs in ’frozen testing’ are reduced to either zero or, if greater than zero, the bugs are either
marked as ignored for the release or are deferred for a point release.
• The ’frozen testing’ with no rc-bugs will be released as the new stable version. In our example,
this new stable release will be called trixie.
• At this stage oldstable = bookworm, stable = trixie. The contents of stable and ’frozen testing’
are same at this point.
• Packages start coming down from sid to testing and the Debian community will be working towards
making the next stable release.
The third field (’unstable’ in the above example) indicates the Debian distribution the system is
currently tracking.
You can also use lsb_release (available in the lsb-release package). If you run this program in
an unstable system you will get:
$ lsb_release -a
LSB Version: core-2.0-noarch:core-3.0-noarch:core-3.1-noarch:core-2.0-ia32: ←-
core-3.0-ia32:core-3.1-ia32
Distributor ID: Debian
Description: Debian GNU/Linux unstable (sid)
Release: unstable
Codename: sid
However, this is not always that easy. Some systems might have sources.list files with multiple
entries corresponding to different distributions. This could happen if the administrator is tracking dif-
ferent packages from different Debian distributions. This is frequently referred to as apt-pinning. These
systems might run a mixture of distributions.
12
CHAPTER 3. CHOOSING A DEBIAN … 3.1. WHICH DEBIAN DISTRIBUTION …
3.1.11 I am currently using the stable version. Can I change to testing or un-
stable? If so, how?
First of all, please bear in mind that the stable version is the one recommended for servers as well as for
desktop computers, not only you will get security updates if you are running stable but also there are
less changes which could potentially break the system or your setup.
If you are currently running stable, then in the /etc/apt/sources.list file the third field will
be either ’bookworm’ or ’stable’. If you want to change to a different version, you need to change
this to the distribution you want to run. If you want to run testing, then change the third field of
/etc/apt/sources.list to ’testing’. If you want to run unstable, then change the third field to
’unstable’.
Currently testing is called trixie. So, if you change the third field of /etc/apt/sources.list to
’trixie’, then also you will be running testing. But even when trixie becomes stable, you will still be
tracking trixie.
Unstable is always called Sid. So if you change the third field of /etc/apt/sources.list to ’sid’,
then you will be tracking unstable.
Currently Debian offers does not offer security updates for testing nor for unstable. The Debian Secu-
rity Team (https://security-team.debian.org/) focus their work on stable and old-stable. Nev-
ertheless, just like any other type of fixes, security fixes in unstable are directly made to the main archive
and trickle down to testing in due course. So if you are running unstable make sure that you remove the
lines relating to security updates in /etc/apt/sources.list. If you are interested in knowing what
known security bugs exist in these versions of the distributions, you will this information in the list
of vulnerable source packages in testing (https://security-tracker.debian.org/tracker/
status/release/testing), and unstable (https://security-tracker.debian.org/tracker/
status/release/unstable).
If there is a release notes document available for the distribution you are upgrading to (even though
it has not yet been released) it would be wise to review it, as it might provide information on how you
should upgrade to it. You will always find the Release Notes for testing (https://www.debian.org/
releases/testing/releasenotes) available at the Debian website but depending on how close
the testing version is to release the document might not cover all the potential changes or pitfalls.
Nevertheless, once you make the above changes, you can run aptitude update and then install
the packages that you want. Notice that installing a package from a different distribution might auto-
matically upgrade half of your system. If you install individual packages you will end up with a system
running mixed distributions.
It might be best in some situations to just fully upgrade to the new distribution running apt full-
upgrade, aptitude safe-upgrade or aptitude full-upgrade. Read apt’s and aptitude’s manual pages
for more information.
The Debian reference manual provides more insight on running testing and unstable in its sec-
tion Life with eternal upgrades (https://www.debian.org/doc/manuals/debian-reference/
ch02.en.html#_life_with_eternal_upgrades).
3.1.12 I am currently tracking testing (trixie). What will happen when a release
is made? Will I still be tracking testing or will my machine be running
the new stable distribution?
It depends on the entries in the /etc/apt/sources.list file. If you are currently tracking testing,
these entries are similar to either:
deb http://deb.debian.org/debian/ testing main
or
deb http://deb.debian.org/debian/ trixie main
If the third field in /etc/apt/sources.list is ’testing’ then you will be tracking testing even
after a release is made. So after trixie is released, you will be running a new Debian distribution which
will have a different codename. Changes might not be apparent at first but will be evident as soon as
new packages from unstable go over to the testing distribution.
But if the third field contains ’trixie’ then you will be tracking stable (since trixie will then be the
new stable distribution).
13
CHAPTER 3. CHOOSING A DEBIAN … 3.2. BUT WHAT ABOUT KALI, KNOPPIX, …
3.2 But what about Kali, Knoppix, Linux Mint, Ubuntu, and oth-
ers?
These distributions are not Debian; they are Debian-based. Though there are many similarities and
commonalities between them, there are also crucial differences.
Over the years, many distributions have been developed over time reusing and/or rebuilding Debian
packages and also adding custom packages on their own. Most of the distributions have been created
for specific audiences or purposes. According to Distrowatch, Debian has spawned more than 420 deriva-
tives (https://distrowatch.com/search.php?basedon=Debian&status=All#distrosearch)
and more than 120 of them are active at the time of writing.
All these distributions have their own merits and are suited to some specific set of users. For more in-
formation, read Debian derivatives (https://www.debian.org/misc/children-distros) avail-
able at the Debian website. You can find a complete list of Debian derivatives, including those that are
no longer under active development at the Debian derivate Census (https://wiki.debian.org/
Derivatives/Census) in the Wiki.
14
CHAPTER 3. CHOOSING A DEBIAN … 3.2. BUT WHAT ABOUT KALI, KNOPPIX, …
from scratch. You should not attempt to ”upgrade” to Debian using the package management tools as
you might end up with an unusable system.
If all your user data (i.e. your /home) is under a separate partition migrating to Debian is actually
quite simple, you just have to tell the installation system to mount (but not reformat) that partition
when reinstalling. Making backups of your data, as well as your previous system’s configuration (i.e.
/etc/ and, maybe, /var/) is still encouraged.
15
Chapter 4
Compatibility issues
• amd64: this covers systems based on AMD 64bit CPUs with AMD64 extension and all Intel CPUs
with EM64T extension, and a common 64bit userspace.
• i386: this covers systems based on Intel and compatible processors, including Intel’s 386, 486, Pen-
tium, Pentium Pro, Pentium II (both Klamath and Celeron), and Pentium III, and most compatible
processors by AMD, Cyrix and others.
• mips: SGI’s big-endian MIPS systems, Indy and Indigo2; mipsel: little-endian MIPS machines, Dig-
ital DECstations.
• powerpc: this covers some IBM/Motorola PowerPC machines, including the Apple Macintosh Pow-
erMac models, and the CHRP and PReP open architecture machines.
• ppc64el: 64-bit little-endian PowerPC port, supports several recent PowerPC/POWER processors.
The development of binary distributions of Debian for hurd-i386 (for GNU Hurd kernel on i386 32-
bit PCs), mipsel64 (for 64 bit MIPS in little-endian mode), powerpcspe (port for the ”Signal Processing
Engine” hardware), sparc64 (for 64 bit SPARC processors), sh (for Hitachi SuperH processors), and x32
(for amd64/x86_64 CPUs using 32-bit pointers) is currently underway.
Support for the m68k architecture was dropped in the Etch (Debian 4.0) release, because it did
not meet the criteria set by the Debian Release Managers. This architecture covers Amigas and ATARIs
having a Motorola 680x0 processor for x>=2; with MMU. However, the port is still active and available
for installation even if not a part of this official stable release and might be reactivated for future releases.
Support for the hppa (Hewlett-Packard’s PA-RISC machines) and alpha (Compaq/Digital’s Alpha sys-
tems) were dropped in the Squeeze (Debian 6.0) release for similar reasons. The arm was dropped too
in this release, as it was superseded by the armel architecture.
17
CHAPTER 4. COMPATIBILITY ISSUES 4.2. WHAT KERNELS DOES DEBIAN …
Support for the 32-bit s390 port (s390) was discontinued and replaced with s390x in Jessie (Debian
8). In addition, the ports to IA-64 and Sparc had to be removed from this release due to insufficient
developer support.
For more information on the available ports see the ports pages at the website (https://www.
debian.org/ports/).
For further information on booting, partitioning your drive, enabling PCMCIA (PC Card) devices and
similar issues please follow the instructions given in the Installation Manual, which is available from
our WWW site at https://www.debian.org/releases/stable/installmanual.
• FreeBSD: provided through the kfreebsd-amd64 and kfreebsd-i386 ports, for 64-bit PCs and 32-bit
PCs respectively. These ports were first released in Debian 6.0 Squeeze as a technology preview.
However they were not part of the Debian 8 Jessie release.
There were attempts to port the distribution to the NetBSD kernel, providing netbsd-i386 (for 32-
bit PCs) and netbsd-alpha (for Alpha machines) but these ports were never released and are currently
abandoned.
For more information on the available ports see the ports pages at the website (https://www.
debian.org/ports/).
4.4 How source code compatible is Debian with other Unix sys-
tems?
For most applications Linux source code is compatible with other Unix systems. It supports almost
everything that is available in System V Unix systems and the free and commercial BSD-derived systems.
However in the Unix business such claim has nearly no value because there is no way to prove it. In the
software development area complete compatibility is required instead of compatibility in ”about most”
cases. So years ago the need for standards arose, and nowadays POSIX.1 (IEEE Standard 1003.1-1990)
is one of the major standards for source code compatibility in Unix-like operating systems.
Linux is intended to adhere to POSIX.1, but the POSIX standards cost real money and the POSIX.1
(and FIPS 151-2) certification is quite expensive; this made it more difficult for the Linux developers to
work on complete POSIX conformance. The certification costs make it unlikely that Debian will get an
1The Linux Standard Base (https://wiki.linuxfoundation.org/lsb/start/) is a specification for allowing the
same binary package to be used on multiple distributions. After Jessie (Debian 8) was released, Debian abandoned (https:
//sources.debian.org/src/lsb/9.20170808/debian/README.Debian/) the pursuit of LSB compatibility. See this
July 3, 2015 message from Didier Raboud (https://lists.debian.org/4526217.myWFlvm1rM@gyllingar) and the fol-
lowing discussion for background information.
18
CHAPTER 4. COMPATIBILITY ISSUES 4.5. CAN I USE DEBIAN PACKAGES (”.DEB” …
official conformance certification even if it completely passed the validation suite. (The validation suite
is now freely available, so it is expected that more people will work on POSIX.1 issues.)
Unifix GmbH (Braunschweig, Germany) developed a Linux system that has been certified to conform
to FIPS 151-2 (a superset of POSIX.1). This technology was available in Unifix’ own distribution called
Unifix Linux 2.0 and in Lasermoon’s Linux-FT.
You probably can: A program to unpack a Debian package onto a Linux host that is been built from a
”foreign” distribution is available, and will generally work, in the sense that files will be unpacked.
The converse is probably also true, that is, a program to unpack a Red Hat or Slackware package
on a host that is based on Debian GNU/Linux will probably succeed in unpacking the package and
placing most files in their intended directories. This is largely a consequence of the existence (and
broad adherence to) the Linux Filesystem Hierarchy Standard. The Alien (https://packages.
debian.org/alien) package is used to convert between different package formats.
You probably do not want to: Most package managers write administrative files when they are used
to unpack an archive. These administrative files are generally not standardized. Therefore, the
effect of unpacking a Debian package on a ”foreign” host will have unpredictable (certainly not
useful) effects on the package manager on that system. Likewise, utilities from other distributions
might succeed in unpacking their archives on Debian systems, but will probably cause the Debian
package management system to fail when the time comes to upgrade or remove some packages,
or even simply to report exactly what packages are present on a system.
A better way: The Linux File System Standard (and therefore Debian GNU/Linux) requires that subdi-
rectories under /usr/local/ be entirely under the user’s discretion. Therefore, users can unpack
”foreign” packages into this directory, and then manage their configuration, upgrade and removal
individually.
In any case, if you obtain a package whose copyright allows redistribution, you should consider
making a Debian package of it, and uploading it for the Debian system. Guidelines for becoming a
package developer are included in the Debian Policy manual (see Section 12.1).
19
Chapter 5
• the major GNU applications for software development, file manipulation, and text processing,
including gcc, g++, make, texinfo, Emacs, the Bash shell and numerous upgraded Unix utilities,
• Perl, Python, Tcl/Tk and various related programs, modules and libraries for each of them,
• TeX (LaTeX) and Lyx, dvips, Ghostscript,
• the Xorg windowing system, which provides a networked graphical user interface for Linux, and
countless X applications including the GNOME, KDE and Xfce desktop environments,
• a full suite of networking applications, including servers for Internet protocols such as HTTP
(WWW), FTP, NNTP (news), SMTP and POP (mail) and DNS (name servers); relational databases
like PostgreSQL, MySQL; also provided are web browsers including the various Mozilla products,
• a complete set of office applications, including the LibreOffice productivity suite, Gnumeric and
other spreadsheets, WYSIWYG editors, calendars.
More than 63879 packages, ranging from news servers and readers to sound support, FAX programs,
database and spreadsheet programs, image processing programs, communications, net, and mail utili-
ties, Web servers, and even ham-radio programs are included in the distribution. Other 1082 software
suites are available as Debian packages, but are not formally part of Debian due to license restrictions.
5.3 How can I get a current list of programs that have been pack-
aged for Debian?
A complete list is available from any of the Debian mirrors (https://www.debian.org/distrib/
ftplist), in the file indices/Maintainers. That file includes the package names and the names
and e-mails of their respective maintainers.
21
CHAPTER 5. SOFTWARE AVAILABLE IN THE … 5.4. HOW CAN I INSTALL A DEVELOPER’S …
Notice that if you want to build the Linux kernels distributed by Debian you will want to install also
the kernel-package package. For more information see Section 10.2.
5.6 Why do I get ”ld: cannot find -lfoo” messages when compil-
ing programs? Why aren’t there any libfoo.so files in Debian
library packages?
Debian Policy requires that such symbolic links (to libfoo.so.x.y.z or similar) are placed in separate,
development packages. Those packages are usually named libfoo-dev or libfooX-dev (presuming the
library package is named libfooX, and X is a whole number).
5.8 How can I check that I am using a Debian system, and what
version it is?
In order to make sure that your system has been installed from the real Debian base disks, use the
22
CHAPTER 5. SOFTWARE AVAILABLE IN THE … 5.9. HOW DOES DEBIAN SUPPORT …
lsb_release -a
command. It will display the name of the distribution (in Distributor ID field) and the version of the
system (in Release and Codename fields). The following is an example run in a Debian system:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 7.4 (wheezy)
Release: 7.4
Codename: wheezy
You can also check for the existence of /etc/debian_version file, which contains a single one-
line entry giving the version number of the release, as defined by the package base-files.
Users should be aware, however, that the Debian system consists of many parts, each of which can be
updated (almost) independently. Each Debian ”release” contains well defined and unchanging contents.
Updates are separately available. For a one-line description of the installation status of package foo,
use the command dpkg --list foo. For a more verbose description, use:
dpkg --status foo
Note that the existence of the program dpkg shows that you should be able to install Debian packages
on your system. However, since the program has been ported to many other operating systems and
architectures, this is no longer a reliable method of determining if a system is Debian GNU/Linux.
• Nearly all of the software in Debian supports UTF-8 as character set. Legacy character sets, such
as ISO-8859-1 or ISO-8859-2, should be considered obsolete.
• Currently, support for German-, Spanish-, French-, Hungarian-, Italian-, Japanese-, Korean-, Dutch-
, Polish-, Portuguese-, Russian-, Turkish-, and Chinese-language manual pages is provided through
the manpages-LANG packages (where LANG is the two-letter ISO country code). To access an NLS
manual page, the user must set the shell LC_MESSAGES variable to the appropriate string.
For example, in the case of the Italian-language manual pages, LC_MESSAGES needs to be set to
’italian’. The man program will then search for Italian manual pages under /usr/share/man/it/.
23
CHAPTER 5. SOFTWARE AVAILABLE IN THE … 5.11. WHERE IS A PLAYER FOR FLASH (SWF)?
5.15 I have a wireless network card which doesn’t work with Linux.
What should I do?
Buy one which does :)
Alternatively, use ndiswrapper to use a driver for Windows (if you have one) on your Linux sys-
tem. See the Debian Wiki ndiswrapper page (https://wiki.debian.org/NdisWrapper) for more
information.
24
Chapter 6
6.2 What are all those names like etch, lenny, etc.?
They are just ”codenames”. When a Debian distribution is in the development stage, it has no version
number but a codename. The purpose of these codenames is to make easier the mirroring of the Debian
distributions (if a real directory like unstable suddenly changed its name to stable, a lot of stuff
would have to be needlessly downloaded again).
Currently, stable is a symbolic link to bookworm (i.e. Debian GNU/Linux 12) and testing is a
symbolic link to trixie. This means that bookworm is the current stable distribution and trixie is
the current testing distribution.
unstable is a permanent symbolic link to sid, as sid is always the unstable distribution (see
Section 6.3).
• bo (Debian 1.3) was Bo Peep, the girl who took care of the sheep,
25
CHAPTER 6. THE DEBIAN ARCHIVES 6.3. WHAT ABOUT ”SID”?
• sarge (Debian 3.1) was the sergeant of the Green Plastic Army Men,
• wheezy (Debian 7) was the rubber toy penguin with a red bow tie,
• stretch (Debian 9) was the rubber toy octopus with suckers on her eight long arms.
• bookworm (Debian 12) was a green toy worm with a built-in flashlight who loves reading books.
• sid was the evil neighbor kid next door who broke all toys.
26
CHAPTER 6. THE DEBIAN ARCHIVES 6.5. WHAT DOES THE TESTING …
• stable/non-free/: This directory contains packages distribution of which is restricted in a way that
requires that distributors take careful account of the specified copyright requirements.
For example, some packages have licenses which prohibit commercial distribution. Others can be
redistributed but are in fact shareware and not free software. The licenses of each of these packages
must be studied, and possibly negotiated, before the packages are included in any redistribution
(e.g., in a CD-ROM).
• stable/contrib/: This directory contains packages which are DFSG-free and freely distributable
themselves, but somehow depend on a package that is not freely distributable and thus available
only in the non-free section.
27
CHAPTER 6. THE DEBIAN ARCHIVES 6.7. WHAT ARE ALL THOSE DIRECTORIES AT …
28
CHAPTER 6. THE DEBIAN ARCHIVES 6.11. WHAT IS ”INCOMING”?
Additionally, since there are so many lib* packages, these are treated specially: for instance, lib-
paper packages are stored in pool/main/libp/libpaper/.
3
3Historically, packages were kept in the subdirectory of dists corresponding to which distribution contained them. This
turned out to cause various problems, such as large bandwidth consumption on mirrors when major changes were made. This
was fixed with the introduction of the package pool.
The dists directories are still used for the index files used by programs like apt.
29
Chapter 7
This chapter touches on some lower level internals of Debian package management. If you’re interested
mainly in usage of the relevant tools, skip to chapters Chapter 8 and/or Chapter 9.
31
CHAPTER 7. BASICS OF THE DEBIAN PACKAGE … 7.3. WHY ARE DEBIAN PACKAGE FILE NAMES …
The internals of this Debian binary packages format are described in the deb(5) manual page. This
internal format is subject to change (between major releases of Debian GNU/Linux), therefore please
always use dpkg-deb(1) if you need to do lowlevel manipulations on .deb files.
• inspect the ”Packages” file in the directory where it was stored at a Debian archive site. This
file contains a stanza describing each package; the first field in each stanza is the formal package
name.
• use the command dpkg --info PPP_VVV-RRR_AAA.deb (where PPP, VVV, RRR and AAA are
the package name, version, revision and architecture of the package in question, respectively).
This displays, among other things, the package name corresponding to the archive file being un-
packed.
The VVV component is the version number specified by the upstream developer. There are no stan-
dards in place here, so the version number may have formats as different as ”19990513” and ”1.3.8pre1”.
The RRR component is the Debian revision number, and is specified by the Debian developer (or
a user who chooses to rebuild the package locally). This number corresponds to the revision level
of the Debian package, thus, a new revision level usually signifies changes in the Debian Makefile
(debian/rules), the Debian control file (debian/control), the installation or removal scripts (debian/p*),
or in the configuration files used with the package.
The AAA component identifies the processor for which the package was built. This is commonly
amd64, which refers to AMD64, Intel 64 or VIA Nano chips. For other possibilities review Debian’s
archive directory structure at Section 6.7. For details, see the description of ”Debian architecture” in
the manual page dpkg-architecture(1).
32
CHAPTER 7. BASICS OF THE DEBIAN PACKAGE … 7.5. WHAT IS A DEBIAN CONFFILE?
The Package field gives the package name. This is the name by which the package can be manipulated
by the package tools, and usually similar to but not necessarily the same as the first component string
in the Debian archive file name.
The Version field gives both the upstream developer’s version number and (in the last component)
the revision level of the Debian package of this program as explained in Section 7.3.
The Architecture field specifies the chip for which this particular binary was compiled.
The Depends field gives a list of packages that have to be installed in order to install this package
successfully.
The Installed-Size indicates how much disk space the installed package will consume. This is in-
tended to be used by installation front-ends in order to show whether there is enough disk space avail-
able to install the program.
The Section line gives the ”section” where this Debian package is stored at the Debian archive sites.
The Priority indicates how important is this package for installation, so that semi-intelligent software
like apt or aptitude can sort the package into a category of e.g. packages optionally installed. See
Section 7.7.
The Maintainer field gives the e-mail address of the person who is currently responsible for main-
taining this package.
The Description field gives a brief summary of the package’s features.
For more information about all possible fields a package can have, please see the Debian Policy
Manual, section 5, ”Control files and their fields”, see Section 12.1.
preinst This script is executed before the package it belongs to is unpacked from its Debian archive
(”.deb”) file. Many ’preinst’ scripts stop services for packages which are being upgraded until their
installation or upgrade is completed (following the successful execution of the ’postinst’ script).
postinst This script typically completes any required configuration of the package foo once foo has
been unpacked from its Debian archive (”.deb”) file. Many ’postinst’ scripts execute any commands
necessary to start or restart a service once a new package has been installed or upgraded.
prerm This script typically stops any daemons which are associated with a package. It is executed
before the removal of files associated with the package.
postrm This script typically modifies links or other files associated with foo, and/or removes files
created by the package. (Also see Section 7.8.)
Currently all of the control files can be found in the directory /var/lib/dpkg/info. The files
relevant to package foo begin with the name ”foo” and have file extensions of ”preinst”, ”postinst”,
etc., as appropriate. The file foo.list in that directory lists all of the files that were installed with the
package foo. (Note that the location of these files is a dpkg internal; you should not rely on it.)
33
CHAPTER 7. BASICS OF THE DEBIAN PACKAGE … 7.7. WHAT IS AN ESSENTIAL, REQUIRED, …
• Required: packages that are necessary for the proper functioning of the system.
This includes all tools that are necessary to repair system defects. You must not remove these
packages or your system may become totally broken and you may probably not even be able to
use dpkg to put things back. Systems with only the Required packages are probably unusable, but
they do have enough functionality to allow the sysadmin to boot and install more software.
• Standard packages are standard on any Linux system, including a reasonably small but not too
limited character-mode system. Tools are included to be able to send e-mail (with mutt) and
download files from archive servers.
This is what will be installed by default if users do not select anything else. It does not include
many large applications, but it does include the Python interpreter and some server software like
OpenSSH (for remote administration) and Exim (for mail delivery, although it can be configured
for local delivery only). It also includes some common generic documentation that most users will
find helpful.
• Optional packages include all those that you might reasonably want to install if you do not know
what they are, or that do not have specialized requirements.
This includes X, a full TeX distribution, and lots of applications.
• Extra: packages that either conflict with others with higher priorities, are only likely to be useful
if you already know what they are, or have specialized requirements that make them unsuitable
for ”Optional”.
If you do a default Debian installation all the packages of priority Standard or higher will be installed
in your system. If you select pre-defined tasks you will get lower priority packages too.
Additionally, some packages are marked as Essential since they are absolutely necessary for the
proper functioning of the system. The package management tools will refuse to remove these.
34
CHAPTER 7. BASICS OF THE DEBIAN PACKAGE … 7.9. WHAT IS MEANT BY SAYING THAT A …
• Package A depends on Package B if B absolutely must be installed in order to run A. In some cases,
A depends not only on B, but on a version of B. In this case, the version dependency is usually
a lower limit, in the sense that A depends on any version of B more recent than some specified
version.
• Package A recommends Package B, if the package maintainer judges that most users would not
want A without also having the functionality provided by B.
• Package A suggests Package B if B contains files that are related to (and usually enhance) the
functionality of A.
• Package A conflicts with Package B when A will not operate if B is installed on the system. Most
often, conflicts are cases where A contains files which are an improvement over those in B. ”Con-
flicts” are often combined with ”replaces”.
• Package A replaces Package B when files installed by B are removed and (in some cases) over-
written by files in A.
• Package A breaks Package B when both packages cannot be simultaneously configured in a system.
The package management system will refuse to install one if the other one is already installed and
configured in the system.
• Package A provides Package B when all of the files and functionality of B are incorporated into
A. This mechanism provides a way for users with constrained disk space to get only that part of
package A which they really need.
More detailed information on the use of each of these terms can be found in the Debian Policy
manual, section 7.2, ”Binary Dependencies”, see Section 12.1.
35
CHAPTER 7. BASICS OF THE DEBIAN PACKAGE … 7.12. HOW DO I PUT A PACKAGE ON HOLD?
• unknown - the user has never indicated whether the package is wanted.
• remove - the user wants the package removed, but does not want to remove any existing configu-
ration file.
• purge - the user wants the package to be removed completely, including its configuration files.
• hold - the user wants this package not to be processed, i.e. wants to keep the current version with
the current status whatever that is.
Then edit the resulting file selections.txt, change the line containing the package you wish to
hold, e.g. libc6, from this:
libc6 install
to this:
libc6 hold
To help you in actually building the source package, Debian source packages provide the so-called
build-dependencies mechanism. This means that the source package maintainer keeps a list of other
packages that are required to build their package. To see how this is useful, run
apt-get build-dep foo
36
CHAPTER 7. BASICS OF THE DEBIAN PACKAGE … 7.14. HOW DO I BUILD BINARY PACKAGES …
Then create a dedicated version of your own build (so that you won’t get confused later when Debian
itself releases a new version):
dch -l local ’Blah blah blah’
If everything worked out fine, you should now be able to install your package by running
sudo dpkg -i ../*.deb
If you prefer to do things manually, and don’t want to use devscripts, follow this procedure:
You will need all of foo_*.dsc, foo_*.tar.gz and foo_*.debian.tar.xz to compile the source (note: there
is no .debian.tar.xz for some packages that are native to Debian).
Once you have them (Section 7.13) and if you have the dpkg-dev package installed, the following
command:
dpkg-source -x foo_version-revision.dsc
to build the package (note that this also requires the fakeroot package), and then
dpkg -i ../foo_version-revision_arch.deb
37
Chapter 8
8.1 What programs does Debian provide for managing its pack-
ages?
There are multiple tools that are used to manage Debian packages, from graphic or text-based interfaces
to the low level tools used to install packages. All the available tools rely on the lower level tools to
properly work and are presented here in decreasing complexity level.
It is important to understand that the higher level package management tools such as aptitude or
synaptic rely on apt which, itself, relies on dpkg to manage the packages in the system.
See Chapter 2. Debian package management (https://www.debian.org/doc/manuals/debian-referenc
ch02.en.html) of the Debian reference (https://www.debian.org/doc/manuals/debian-reference/)
for more information about the Debian package management utilities. This document is available in
various languages and formats, see the Debian Reference entry in the DDP Users’ Manuals overview
(https://www.debian.org/doc/user-manuals#quick-reference).
8.1.1 dpkg
This is the main package management program. dpkg can be invoked with many options. Some common
uses are:
• Print out the control file (and other information) for a specified package: dpkg --info foo_VVV-RRR.deb.
• Install a package (including unpacking and configuring) onto the file system of the hard disk:
dpkg --install foo_VVV-RRR.deb.
• Unpack (but do not configure) a Debian archive into the file system of the hard disk: dpkg
--unpack foo_VVV-RRR.deb. Note that this operation does not necessarily leave the pack-
age in a usable state; some files may need further customization to run properly. This command
removes any already-installed version of the program and runs the preinst (see Section 7.6) script
associated with the package.
• Configure a package that already has been unpacked: dpkg --configure foo. Among other
things, this action runs the postinst (see Section 7.6) script associated with the package. It also
updates the files listed in the conffiles for this package. Notice that the ’configure’ operation
takes as its argument a package name (e.g., foo), not the name of a Debian archive file (e.g.,
foo_VVV-RRR.deb).
• Extract a single file named ”blurf” (or a group of files named ”blurf*”) from a Debian archive:
dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf - ’blurf*’.
• Remove a package (but not its configuration files): dpkg --remove foo.
39
CHAPTER 8. THE DEBIAN PACKAGE … 8.1. WHAT PROGRAMS DOES DEBIAN …
• List the installation status of packages containing the string (or regular expression) ”foo*”: dpkg
--list ’foo*’.
8.1.2 APT
APT is the Advanced Package Tool, an advanced interface to the Debian packaging system which provides
the apt-get program. It provides commandline tools for searching and managing packages, and for
querying information about them, as well as low-level access to all features of the libapt-pkg library. For
more information, see the User’s Guide in /usr/share/doc/apt-doc/guide.html/index.html
(you will have to install the apt-doc package).
Starting with Debian Jessie, some frequently used apt-get and apt-cache commands have an equiv-
alent via the new apt binary. This means some popular commands like apt-get update, apt-get install,
apt-get remove, apt-cache search, or apt-cache show now can also be called simply via apt, say apt
update, apt install, apt remove, apt search, or apt show. The following is an overview of the old
and new commands:
apt-get update -> apt update
apt-get upgrade -> apt upgrade
apt-get dist-upgrade -> apt full-upgrade
apt-get install package -> apt install package
apt-get remove package -> apt remove package
apt-get autoremove -> apt autoremove
apt-cache search string -> apt search string
apt-cache policy package -> apt list -a package
apt-cache show package -> apt show package
apt-cache showpkg package -> apt show -a package
The apt tool merges functionality of apt-get and apt-cache and by default has a fancier colored output
format, making it more pleasant for humans. For usage in scripts or advanced use cases, apt-get is still
preferable or needed.
apt-get provides a simple way to retrieve and install packages from multiple sources using the com-
mand line. Unlike dpkg, apt-get does not understand .deb files, it works with the packages proper name
and can only install .deb archives from a source specified in /etc/apt/sources.list. apt-get will
call dpkg directly after downloading the .deb archives1 from the configured sources.
Some common ways to use apt-get are:
• To update the list of packages known by your system, you can run:
apt update
• To remove the foo package and its configuration files from your system, run:
apt purge foo
• To list all packages for which newer versions are available, run:
apt list --upgradable
1Notice that there are ports that make this tool available with other package management systems, like Red Hat package
manager, also known as rpm
40
CHAPTER 8. THE DEBIAN PACKAGE … 8.1. WHAT PROGRAMS DOES DEBIAN …
• To upgrade all the packages on your system (without installing extra packages or removing pack-
ages), run:
apt upgrade
• To upgrade all the packages on your system, and, if needed for a package upgrade, installing extra
packages or removing packages, run:
apt full-upgrade
(The command upgrade keeps a package at its installed obsolete version if upgrading would
need an extra package to be installed, for a new dependency to be satisfied. The full-upgrade
command is less conservative.)
Note that you must be logged in as root to perform any commands that modify packages.
Note that apt-get now also installs recommended packages as default, and thanks to its robustness
it’s the preferred program for package management from console to perform system installation and
major system upgrades.
The apt tool suite also includes the apt-cache tool to query the package lists. You can use it to find
packages providing specific functionality through simple text or regular expression queries and through
queries of dependencies in the package management system. Some common ways to use apt-cache are:
• To print detailed information on the versions available for a package and the packages that reverse-
depends on it:
apt-cache showpkg package
For more information, install the apt package and read apt(8), apt-get(8), sources.list(5) and install
the apt-doc package and read /usr/share/doc/apt-doc/guide.html/index.html.
8.1.3 aptitude
aptitude is a package manager for Debian GNU/Linux systems that provides a frontend to the apt
package management infrastructure. aptitude is a text-based interface using the curses library. Actions
may be performed from a visual interface or from the command-line.
aptitude can be used to perform management tasks in a fast and easy way. It allows the user to
view the list of packages and to perform package management tasks such as installing, upgrading, and
removing packages.
aptitude provides the functionality of apt-get, as well as many additional features:
• aptitude makes it easy to keep track of obsolete software by listing it under ”Obsolete and Locally
Created Packages”.
• aptitude includes a fairly powerful system for searching particular packages and limiting the
package display. Users familiar with mutt will pick up quickly, as mutt was the inspiration for
the expression syntax.
41
CHAPTER 8. THE DEBIAN PACKAGE … 8.2. DEBIAN CLAIMS TO BE ABLE TO UPDATE …
• aptitude can be used to install the predefined tasks available. For more information see Sec-
tion 8.1.5.
• aptitude in full screen mode has su functionality embedded and can be run by a normal user. It
will call su (and ask for the root password, if any) when you really need administrative privileges.
You can use aptitude through a visual interface (simply run aptitude) or directly from the com-
mand line. The command line syntax used is very similar to the one used in apt-get. For example, to
install the foo package, you can run aptitude install foo.
Note that aptitude is the preferred program for daily package management from the console.
For more information, read the manual page aptitude(8) and install the aptitude-doc package.
8.1.4 synaptic
synaptic is a graphical package manager. It enables you to install, upgrade and remove software pack-
ages in a user friendly way. Along with most of the features offered by aptitude, it also has a feature
for editing the list of used repositories, and supports browsing all available documentation related to a
package. See the Synaptic Website (https://www.nongnu.org/synaptic/) for more information.
8.1.5 tasksel
When you want to perform a specific task it might be difficult to find the appropiate suite of packages
that fill your need. The Debian developers have defined tasks, a task is a collection of several individual
Debian packages all related to a specific activity. Tasks can be installed through the tasksel program
or through aptitude.
Typically, the Debian installer will automatically install the task associated with a standard system
and a desktop environment. The specific desktop environment installed will depend on the CD/DVD
media used, most commonly it will be the GNOME desktop (gnome-desktop task). Also, depending
on your selections throughout the installation process, tasks might be automatically installed in your
system. For example, if you selected a language other than English, the task associated with it will be
installed automatically too.
• Determine what files are contained in a Debian archive file: dpkg-deb --contents foo_VVV-RRR.deb
• Extract the files contained in a named Debian archive into a user specified directory: dpkg-deb
--extract foo_VVV-RRR.deb tmp extracts each of the files in foo_VVV-RRR.deb into the
directory tmp/. This is convenient for examining the contents of a package in a localized directory,
without installing the package into the root file system.
• Extract the control information files from a package: dpkg-deb --control foo_VVV-RRR.deb
tmp.
Note that any packages that were merely unpacked using dpkg-deb --extract will be incorrectly
installed, you should use dpkg --install instead.
More information is given in the manual page dpkg-deb(1).
42
CHAPTER 8. THE DEBIAN PACKAGE … 8.3. HOW CAN I TELL WHAT PACKAGES ARE …
We also provide a program called start-stop-daemon which is used to start daemons at boot time
or to stop daemons when the runlevel is changed (e.g., from multi-user to single-user or to halt). The
same program is used by installation scripts when a new package containing a daemon is installed, to
stop running daemons, and restart them as necessary.
8.3 How can I tell what packages are already installed on a Debian
system?
To learn the status of all the packages installed on a Debian system, execute the command
dpkg --list
This prints out a one-line summary for each package, giving a 2-letter status symbol (explained in
the header), the package name, the version which is installed, and a brief description.
To learn the status of packages whose names match any pattern beginning with ”foo”, run the com-
mand:
dpkg --list ’foo*’
To get a more verbose report for a particular package, execute the command:
dpkg --status packagename
Note that the files created by the installation scripts aren’t displayed.
8.5 How can I find out what package produced a particular file?
To identify the package that produced the file named foo execute either:
43
CHAPTER 8. THE DEBIAN PACKAGE … 8.6. WHY IS ”FOO-DATA” NOT REMOVED …
44
Chapter 9
One of Debian’s goals is to provide a consistent upgrade path and a secure upgrade process. We always
do our best to make upgrading to new releases a smooth procedure. In case there’s some important note
to add to the upgrade process, the packages will alert the user, and often provide a solution to a possible
problem.
You should also read the Release Notes document that describes the details of specific upgrades. It is
available on the Debian website at https://www.debian.org/releases/stable/releasenotes
and is also shipped on the Debian CDs, DVDs and Blu-ray discs.
9.1.1 aptitude
aptitude is the recommended package manager for Debian GNU/Linux systems, and is described in
Section 8.1.3.
Before you can use aptitude to make an upgrade, you’ll have to edit the /etc/apt/sources.list
file to set it up. If you wish to upgrade to the latest stable version of Debian, you’ll probably want to
use a source like this one:
http://deb.debian.org/debian stable main contrib
45
CHAPTER 9. KEEPING YOUR DEBIAN SYSTEM … 9.2. MUST I GO INTO SINGLE USER MODE IN …
aptitude update
followed by
aptitude full-upgrade
Answer any questions that might come up, and your system will be upgraded.
Note that aptitude is not the recommended tool for doing upgrades from one Debian GNU/Linux
release to another. Use apt-get instead. For upgrades between releases you should read the Release
Notes (https://www.debian.org/releases/stable/releasenotes). This document describes
in detail the recommended steps for upgrades from previous releases as well as known issues you should
consider before upgrading.
For details, see the manual page aptitude(8), and the file /usr/share/aptitude/README.
followed by
apt-get dist-upgrade
Answer any questions that might come up, and your system will be upgraded. See also the apt-get(8)
manual page, as well as Section 8.1.2.
If you want to use CDs/DVDs/BDs to install packages, you can use apt-cdrom. For details, please
see the Release Notes, section ”Adding APT sources from optical media”.
Please note that when you get and install the packages, you’ll still have them kept in your /var
directory hierarchy. To keep your partition from overflowing, remember to delete extra files using
apt-get clean and apt-get autoclean, or to move them someplace else (hint: use apt-move).
9.4 How can I keep a log of the packages I added to the system?
I’d like to know when upgrades and removals have occurred
and on which packages!
Passing the --log-option to dpkg makes dpkg log status change updates and actions. It logs both the
dpkg-invokation (e.g.
2005-12-30 18:10:33 install hello 1.3.18 2.1.1-4
46
CHAPTER 9. KEEPING YOUR DEBIAN SYSTEM … 9.5. CAN I AUTOMATICALLY UPDATE THE …
) If you’d like to log all your dpkg invocations (even those done using frontends like aptitude), you
could add
log /var/log/dpkg.log
to your /etc/dpkg/dpkg.cfg. Be sure the created logfile gets rotated periodically. If you’re using
logrotate, this can be achieved by creating a file /etc/logrotate.d/dpkg with the following lines
/var/log/dpkg {
missingok
notifempty
}
More details on dpkg logging can be found in the dpkg(1) manual page.
aptitude logs the package installations, removals, and upgrades that it intends to perform to /var/
log/aptitude. Note that the results of those actions are not recorded in this file!
Another way to record your actions is to run your package management session within the script(1)
program.
9.6 I have several machines; how can I download the updates only
one time?
If you have more than one Debian machine on your network, it is useful to use apt-cacher to keep all
of your Debian systems up-to-date.
apt-cacher reduces the bandwidth requirements of Debian mirrors by restricting the frequency of
Packages, Releases and Sources file updates from the back end and only doing a single fetch for any file,
independently of the actual request from the proxy. apt-cacher automatically builds a Debian HTTP
mirror based on requests which pass through the proxy.
Of course, you can get the same benefit if you are already using a standard caching proxy and all
your systems are configured to use it.
47
Chapter 10
The new kernel package will be created in the directory one level above the kernel source tree, and
it may be installed using dpkg -i.
Users must separately download the source code for the most recent kernel (or the kernel of their
choice) from their favorite Linux archive site, unless a linux-source-version package is available
(where version stands for the kernel version).
10.4 Can I safely de-install an old kernel package, and if so, how?
Yes. The linux-image-NNN .prerm script checks to see whether the kernel you are currently running is
the same as the kernel you are trying to de-install. Therefore you can remove unwanted kernel image
packages using this command:
dpkg --purge linux-image-NNN
(replace NNN with your kernel version and revision number, of course)
49
CHAPTER 10. DEBIAN AND THE KERNEL 10.5. WHERE CAN I GET MORE …
10.5 Where can I get more information about Linux packages for
Debian?
Further information is maintained in the Debian Linux Kernel Handbook (https://kernel-team.
pages.debian.net/kernel-handbook/).
50
Chapter 11
11.1 How can I ensure that all programs use the same paper size?
Install the libpaper1 package, and it will ask you for a system-wide default paper size. This setting
will be kept in the file /etc/papersize.
Users can override the paper size setting using the PAPERSIZE environment variable. For details,
see the manual page papersize(5).
This way you won’t have to change the file permissions on the device.
If you do this from within a user’s shell or a GUI environment you have to logout and login again to
become an effective member of that group. To check which groups you belong to run groups.
Notice that, since the introduction of udev if you change the permissions of a hardware periph-
eral, they might be adjusted for some devices when the system starts; if this happens to the hardware
peripherals you are interested in, you will have to adjust the rules at /etc/udev.
51
CHAPTER 11. CUSTOMIZING YOUR DEBIAN … 11.6. AND HOW ABOUT DEBIAN AND …
During boot-up, systemd starts the services or other targets listed in the default target file /lib/systemd/system/defa
The files for these services and targets are installed and the service is enabled during Debian package
installation. If you specifically wish not to start a service during boot-up, instead of removing the
corresponding package, you can run the command
systemctl disable service.service
using the name of the service file installed in /lib/systemd/system (usually based on the name
of the package).
The service file /lib/systemd/system/rc-local.service provides an easy way to run cus-
tomized scripts in the file /etc/rc.local after boot-up, similar to what’s offered on Debian systems
running System-V style init. Beware: this script will fail if it tries to interact with the console such as
asking for a user password or trying to clear the screen.
You can check the status of any service by the command
service package status
and
service package stop
. The service command works with any init system supported on a Debian system, not just with
systemd. If you however prefer to use the same command on any systemd-supported Linux system, for
checking the status run
systemctl status package.service
52
CHAPTER 11. CUSTOMIZING YOUR DEBIAN … 11.7. AND ARE THERE YET OTHER WAYS OF …
• 1 (single-user mode),
• 2 through 5 (various multi-user modes), and
• 6 (reboot the system).
Debian systems come with id=2, which indicates that the default runlevel will be ’2’ when the
multi-user state is entered, and the scripts in /etc/rc2.d/ will be run.
Debian uses dependency-based boot ordering through insserv, using the LSB headers in each script
under /etc/init.d/, as well as parallel concurrent booting through the use of startpar to speed up
the boot process.
The scripts in any of the directories, /etc/rcN.d/ are just symbolic links back to scripts in /etc/init.d/.
However, the names of the files in each of the /etc/rcN.d/ directories are selected to indicate the way
the scripts in /etc/init.d/ will be run. Specifically, before entering any runlevel, all the scripts
beginning with ’K’ are run; these scripts kill services. Then all the scripts beginning with ’S’ are run;
these scripts start services. The two-digit number following the ’K’ or ’S’ indicates the order in which
the script is run. Lower numbered scripts are executed first.
This approach works because the scripts in /etc/init.d/ all take an argument which can be either
”start”, ”stop”, ”reload”, ”restart” or ”force-reload” and will then do the task indicated by the argument.
These scripts can be used even after a system has been booted, to control various processes.
For example, with the argument ”reload” the command
/etc/init.d/sendmail reload
11.7 And are there yet other ways of booting a Debian system?
If you do like System V init, but don’t like the /etc/rc?.d/* links, you could install the file-rc package.
That will convert the links into one single configuration file /etc/runlevel.conf instead.
If you like neither System V nor systemd, you might like openrc or runit or daemontools.
11.8 How does the package management system deal with pack-
ages that contain configuration files for other packages?
Some users wish to create, for example, a new server by installing a group of Debian packages and a
locally generated package consisting of configuration files. This is not generally a good idea, because
dpkg will not know about those configuration files if they are in a different package, and may write
conflicting configurations when one of the initial ”group” of packages is upgraded.
Instead, create a local package that modifies the configuration files of the ”group” of Debian packages
of interest. Then dpkg and the rest of the package management system will see that the files have been
modified by the local ”sysadmin” and will not try to overwrite them when those packages are upgraded.
The package management system will not know about this change, and will simply overwrite your
custom /bin/login whenever login (or any package that provides /bin/login) is installed or
updated.
Rather, do
53
CHAPTER 11. CUSTOMIZING YOUR DEBIAN … 11.10. HOW CAN I HAVE MY LOCALLY-BUILT …
• Execute:
dpkg-divert --divert /bin/login.debian /bin/login
in order to cause all future installations of the Debian login package to write the file /bin/login
to /bin/login.debian instead.
• Then execute:
cp login-local /bin/login
Run dpkg-divert --list to see which diversions are currently active on your system.
Details are given in the manual page dpkg-divert(8).
where:
• BIN-DIR is a directory where Debian archive files (which usually have an extension of ”.deb”) are
stored.
• OVERRIDE_FILE is a file that is edited by the distribution maintainers and is usually stored on a
Debian archive at indices/override.main.gz for the Debian packages in the ”main” distri-
bution. You can ignore this for local packages.
• PATHPREFIX is an optional string that can be prepended to the my_Packages file being produced.
Once you have built the file my_Packages, tell the package management system about it by using
the command:
dpkg --merge-avail my_Packages
If you are using APT, you can add the local repository to your sources.list(5) file, too.
11.11 Some users like mawk, others like gawk; some like vim,
others like elvis; some like trn, others like tin; how does
Debian support diversity?
There are several cases where two packages provide two different versions of a program, both of which
provide the same core functionality. Users might prefer one over another out of habit, or because the
user interface of one package is somehow more pleasing than the interface of another. Other users on
the same system might make a different choice.
Debian uses a ”virtual” package system to allow system administrators to choose (or let users choose)
their favorite tools when there are two or more that provide the same basic functionality, yet satisfy
package dependency requirements without specifying a particular package.
For example, there might exist two different versions of newsreaders on a system. The news server
package might ’recommend’ that there exist some news reader on the system, but the choice of tin or
trn is left up to the individual user. This is satisfied by having both the tin and trn packages provide
the virtual package news-reader. Which program is invoked is determined by a link pointing from
a file with the virtual package name /etc/alternatives/news-reader to the selected file, e.g.,
/usr/bin/trn.
54
CHAPTER 11. CUSTOMIZING YOUR DEBIAN … 11.11. SOME USERS LIKE MAWK, OTHERS …
A single link is insufficient to support full use of an alternate program; normally, manual pages,
and possibly other supporting files must be selected as well. The Perl script update-alternatives
provides a way of ensuring that all the files associated with a specified package are selected as a system
default.
For example, to check what executables provide ”x-window-manager”, run:
update-alternatives --display x-window-manager
And follow the instructions on the screen (basically, press the number next to the entry you’d like
better).
If a package doesn’t register itself as a window manager for some reason (file a bug if it’s in error),
or if you use a window manager from /usr/local directory, the selections on screen won’t contain your
preferred entry. You can update the link through command line options, like this:
update-alternatives --install /usr/bin/x-window-manager \
x-window-manager /usr/local/bin/wmaker-cvs 50
The first argument to ”--install” option is the symlink that points to /etc/alternatives/NAME, where
NAME is the second argument. The third argument is the program to which /etc/alternatives/NAME
should point to, and the fourth argument is the priority (larger value means the alternative will more
probably get picked automatically).
To remove an alternative you added, simply run:
update-alternatives --remove x-window-manager /usr/local/bin/wmaker-cvs
55
Chapter 12
• The Debian GNU/Linux reference covers many aspects of system administration through shell-
command examples. Basic tutorials, tips, and other information are provided for many different
topics ranging from system administration to programming.
Get it from the debian-reference package, or at https://www.debian.org/doc/user-manuals#
quick-reference.
• The Debian Policy manual documents the policy requirements for the distribution, i.e. the struc-
ture and contents of the Debian archive, several design issues of the operating system etc. It also
includes the technical requirements that each package must satisfy to be included in the distribu-
tion, and documents the basic technical aspects of Debian binary and source packages.
Get it from the debian-policy package, or at https://www.debian.org/doc/devel-manuals#
policy.
• Documentation on installed Debian packages: Most packages have files that are unpacked into
/usr/share/doc/PACKAGE.
• Documentation on the Linux project: The Debian package doc-linux installs all of the most
recent versions of the HOWTOs and mini-HOWTOs from the Linux Documentation Project (http:
//www.tldp.org/).
• Unix-style ”man” pages: Most commands have manual pages written in the style of the original
Unix ”man” files. For instance, to see the manual page for the command ”ls”, execute man ls.
Execute man man for more information on finding and viewing manual pages.
New Debian users should note that the ’man’ pages of many general system commands are not
available until they install these packages:
– man-db, which contains the man program itself, and other programs for manipulating the
manual pages.
– manpages, which contains the system manual pages. (see Section 5.9).
57
CHAPTER 12. GETTING SUPPORT FOR DEBIAN … 12.2. ARE THERE ANY ON-LINE RESOURCES …
• GNU-style ”info” pages: User documentation for many commands, particularly GNU tools, is avail-
able not in ”man” pages, but in ”info” files which can be read by the GNU tool info, by running
M-x info within GNU Emacs, or with some other Info page viewer.
Its main advantage over the original ”man” pages is that it is a hypertext system. It does not
require the WWW, however; info can be run from a plain text console. It was designed by
Richard Stallman and preceded the WWW.
Note that you may access a lot of documentation on your system by using a WWW browser, through
dwww, dhelp or doccentral commands, found in respective packages, or by using yelp.
• Do not send spam. See the Debian mailing list advertising policy (https://www.debian.org/
MailingLists/#ads).
• Do not flame; it is not polite. The people developing Debian are all volunteers, donating their
time, energy and money in an attempt to bring the Debian project together.
• Do not use foul language; besides, some people receive the lists via packet radio, where swearing
is illegal.
• Make sure that you are using the proper list. Never post your (un)subscription requests to the
mailing list itself.1
58
CHAPTER 12. GETTING SUPPORT FOR DEBIAN … 12.3. IS THERE A QUICK WAY TO SEARCH …
12.2.3 Wiki
Solutions to common problems, howtos, guides, tips and other documentation can be found at the
constantly changing Debian Wiki (https://wiki.debian.org/).
12.2.4 Maintainers
Users can address questions to individual package maintainers using e-mail. To reach a maintainer of a
package called xyz, send e-mail to [email protected].
59
CHAPTER 12. GETTING SUPPORT FOR DEBIAN … 12.5. HOW DO I REPORT A BUG IN DEBIAN?
You can use the package reportbug that will guide you through the reporting process and mail the
message to the proper address, with some extra details about your system added automatically. It will
also show you a list of bugs already reported to the package you are reporting against in case your bug
has been reported previously, so that you can add additional information to the existing bug report.
Expect to get an automatic acknowledgement of your bug report. It will also be automatically given
a bug tracking number, entered into the bug log and forwarded to the debian-bugs-dist mailing list.
60
Chapter 13
• Debian contributors participate in many tasks, such as: writing documentation, maintaining the
website, translating, supporting users, reviewing bug reprots, or participating in different teams.
It is an unofficial role and it is usually the starting point for many people.
• Debian maintainers maintain one or more specific packages and can upload these packages directly
to the archive without requiring another Debian developer (or maintainer) to sponsor them.
• Debian developers is the full membership role in Debian. A developer can participate in Debian
elections, can log into most of the systems Debian manages, and can upload any package to the
archive. This role is provided after a strict and thorough process.
The website provides more information on how to join the project (https://www.debian.org/
devel/join/). The description of becoming a Debian maintainer can be found at the New Member’s
Corner (https://www.debian.org/devel/join/newmaint) at the Debian web site.
Debian uses Salsa (salsa.debian.org (https://salsa.debian.org/)), a GitLab instance, for col-
laborative development where anyone can sign up and send Merge Requests.
61
CHAPTER 13. CONTRIBUTING TO THE DEBIAN … 13.3. HOW CAN I CONTRIBUTE FINANCIALLY …
62
Chapter 14
63
CHAPTER 14. REDISTRIBUTING DEBIAN … 14.4. CAN I PUT MY COMMERCIAL PROGRAM …
64
Chapter 15
With each new release, the Debian project tries to focus on a set of topics. These are known as ”Release
Goals” and they are all described in https://wiki.debian.org/ReleaseGoals/. Please note that
the following sections might not be fully up-to-date, please refer to the Wiki for more information and
the up-to-date status of these goals.
• Improve programs’ security by compiling them with Security Hardening Build Flags (https:
//wiki.debian.org/ReleaseGoals/SecurityHardeningBuildFlags) in order to enable
various protections against known security issues,
• Improve the default system configuration to make it less vulnerable to attacks (both local or re-
mote),
All of these are done in an ongoing basis. For the first item, a set of security hardening build flags that
try to prevent known attacks such as stack smashing, predictable locations of values in memory, etc. is
used. The target is to cover at least all packages that are part of the basic installation as well as packages
that had to be updated through a Security Advisory since 2006. As of this writing, around 400 packages
have been modified since this effort was first started. All the issues are tracked in the BTS (https://
bugs.debian.org/cgi-bin/pkgreport.cgi?tag=goal-hardening;users=hardening-discuss@
lists.alioth.debian.org).
65
CHAPTER 15. CHANGES EXPECTED IN THE … 15.3. IMPROVEMENTS IN THE DEBIAN …
• I18n support in all debconf-using packages: Packages using the Debian configuration management
must allow for translation of all messages displayed to the user during package configuration.
• I18n support for package descriptions: Update package management frontends to use the trans-
lated descriptions of packages.
• UTF-8 debian/changelog and debian/control. This way, e.g. names of people from asian countries
can get typeset the right way in changelogs.
• I18n support in the Debian Installer including full support for some languages that require the use
of the graphical interface.
66
Chapter 16
16.1 Authors
The first edition of this FAQ was made and maintained by J.H.M. Dassen (Ray) and Chuck Stickelman.
Authors of the rewritten Debian GNU/Linux FAQ are Susan G. Kleinmann and Sven Rudolph. After
them, the FAQ was maintained by Santiago Vila and, later, by Josip Rodin. The current maintainer is
Javier Fernandez-Sanguino.
Parts of the information came from:
• The Debian-1.1 release announcement, by Bruce Perens (https://perens.com/),
• the Linux FAQ, by Ian Jackson (https://www.chiark.greenend.org.uk/~ijackson/),
• Debian Mailing Lists Archives (https://lists.debian.org/),
• the dpkg programmers’ manual and the Debian Policy manual (see Section 12.1),
• many developers, volunteers, and beta testers,
• the flaky memories of its authors. :-)
• and the Choosing a Debian distribution FAQ (http://KamarajuKusumanchi.github.io/
choosing_debian_distribution/choosing_debian_distribution.html), which Ka-
maraju Kusumanchi graciously released under the GPL, so it could be included as a new chapter
(see Chapter 3).
The authors would like to thank all those who helped make this document possible.
All warranties are disclaimed. All trademarks are property of their respective trademark owners.
16.2 Feedback
Comments and additions to this document are always welcome. Please send e-mail to [email protected]
or submit a wishlist bug report against the debian-faq (https://bugs.debian.org/debian-faq)
package.
16.3 Availability
The latest version of this document can be viewed on the Debian WWW pages at https://www.
debian.org/doc/FAQ/.
It is also available for download in plain text, HTML, and PDF formats at https://www.debian.
org/doc/user-manuals#faq. Also, there are several translations there.
This document is available in the debian-faq package. Translations are available in debian-faq-de,
debian-faq-fr and other packages.
The original XML files used to create this document are also available in debian-faq’s source
package, or on Salsa (salsa.debian.org), Debian’s GitLab instance for collaborative development, at:
https://salsa.debian.org/ddp-team/debian-faq.git. You can browse the repository at
https://salsa.debian.org/ddp-team/debian-faq.
67
CHAPTER 16. GENERAL INFORMATION … 16.4. DOCUMENT FORMAT
68