]> git.saurik.com Git - apt.git/blame_incremental - README.md
fileutl: simple_buffer: Add write() and full() methods
[apt.git] / README.md
... / ...
CommitLineData
1APT
2===
3
4apt is the main commandline package manager for Debian and its derivatives.
5It provides commandline tools for searching and managing as well as querying
6information about packages as well as low-level access to all features
7provided by the libapt-pkg and libapt-inst libraries which higher-level
8package managers can depend upon.
9
10Included tools are:
11
12* apt-get for retrieval of packages and information about them
13 from authenticated sources and for installation, upgrade and
14 removal of packages together with their dependencies
15* apt-cache for querying available information about installed
16 as well as installable packages
17* apt-cdrom to use removable media as a source for packages
18* apt-config as an interface to the configuration settings
19* apt-key as an interface to manage authentication keys
20* apt-extracttemplates to be used by debconf to prompt for configuration
21 questions before installation.
22* apt-ftparchive creates Packages and other index files
23 needed to publish an archive of debian packages
24* apt-sortpkgs is a Packages/Sources file normalizer.
25
26The libraries libapt-pkg and libapt-inst are also maintained as part of this project,
27alongside various additional binaries like the acquire-methods used by them.
28Bindings for Python ([python-apt](https://tracker.debian.org/pkg/python-apt)) and
29Perl ([libapt-pkg-perl](https://tracker.debian.org/pkg/libapt-pkg-perl)) are available as separated projects.
30
31Discussion happens mostly on [the mailinglist](mailto:deity@lists.debian.org) ([archive](https://lists.debian.org/deity/)) and on [IRC](irc://irc.oftc.net/debian-apt).
32Our bugtracker as well as a general overview can be found at the [Debian Tracker page](https://tracker.debian.org/pkg/apt).
33
34
35Contributing
36------------
37APT is maintained in git, the official repository being located at
38`git://anonscm.debian.org/apt/apt.git` ([webgit](http://anonscm.debian.org/gitweb/?p=apt/apt.git)),
39but also available at other locations like [GitHub](https://github.com/Debian/apt).
40
41The default branch is `master`, other branches targeted at different
42derivatives and releases being used as needed. Various topic branches in
43different stages of completion might be branched of from those, which you
44are encouraged to do as well.
45
46### Coding
47
48APT uses its own autoconf based build system, see [README.make](http://anonscm.debian.org/gitweb/?p=apt/apt.git;a=blob;f=README.make)
49for the glory details, but to get started, just run:
50
51 $ make
52
53from a fresh git checkout.
54
55The source code uses in most parts a relatively uncommon indent convention,
56namely 3 spaces with 8 space tab (see [doc/style.txt](http://anonscm.debian.org/gitweb/?p=apt/apt.git;a=blob;f=doc/style.txt) for more on this).
57Adhering to it avoids unnecessary code-churn destroying history (aka: `git blame`)
58and you are therefore encouraged to write patches in this style.
59Your editor can surely help you with this, for vim the settings would be
60`setlocal shiftwidth=3 noexpandtab tabstop=8`
61(the later two are the default configuration and could therefore be omitted).
62
63### Translations
64
65While we welcome contributions here, we highly encourage you to contact the [Debian Internationalization (i18n) team](https://wiki.debian.org/Teams/I18n).
66Various language teams have formed which can help you creating, maintaining
67and improving a translation, while we could only do a basic syntax check of the
68file format…
69
70Further more, Translating APT is split into two independent parts:
71The program translation, meaning the messages printed by the tools,
72as well as the manpages and other documentation shipped with APT.
73
74### Bug triage
75
76Software tools like APT which are used by thousands of users every
77day have a steady flow of incoming bugreports. Not all of them are really
78bugs in APT: It can be packaging bugs like failing maintainer scripts a
79user reports against apt, because apt was the command he executed leading
80to this failure or various wishlist items for new features. Given enough time
81also the occasional duplicate enters the system.
82Our bugtracker is therefore full with open bugreports which are waiting for you! ;)
83
84Testing
85-------
86
87### Manual execution
88
89When you make changes and want to run them manually, make sure your
90`$LD_LIBRARY_PATH` points to the libraries you have built, e.g. via:
91
92 $ export LD_LIBRARY_PATH=$(pwd)/build/bin
93 $ ./build/bin/apt-get moo
94
95
96### Integration tests
97
98There is a extensive integration testsuite available which can be run via:
99
100 $ ./test/integration/run-tests
101
102While these tests are not executed at package build-time as they require additional
103dependencies, the repository contains the configuration needed to run them on [Travis CI](https://travis-ci.org/)
104as well as via autopkgtests e.g. on [Debian Continuous Integration](http://ci.debian.net/?q=apt#package/apt).
105
106A testcase here is a shellscript embedded in a framework creating an environment in which
107apt tools can be used naturally without root-rights to test every aspect of its behavior
108itself as well as in conjunction with dpkg and other tools while working with packages.
109
110
111### Unit tests
112
113These tests are gtest-dev based, reside in `./test/libapt` and can be run with `make test`.
114They are executed at package build-time, but not by `make`.
115
116Debugging
117---------
118
119APT does many things, so there is no central debug mode which could be
120activated. It uses instead various config-options to activate debug output
121in certain areas. The following describes some common scenarios and generally
122useful options, but is in no way exhaustive.
123
124Note that you should *NEVER* use these settings as root to avoid accidents.
125Similation mode (`-s`) is usually sufficient to help you run apt as a non-root user.
126
127### Using different state files
128
129If a dependency solver bug is reported, but can't be reproduced by the
130triager easily, it is beneficial to ask the reporter for the
131`/var/lib/dpkg/status` file, which includes the packages installed on the
132system and in which version. Such a file can then be used via the option
133`dir::state::status`. Beware of different architecture settings!
134Bugreports usually include this information in the template. Assuming you
135already have the `Packages` files for the architecture (see `sources.list`
136manpage for the `arch=` option) you can change to a different architecture
137with a config file like:
138
139 APT::Architecture "arch1";
140 #clear APT::Architectures;
141 APT:: Architectures { "arch1"; "arch2"; }
142
143If a certain mirror state is needed, see if you can reproduce it with [snapshot.debian.org](http://snapshot.debian.org/).
144Your sources.list file (`dir::etc::sourcelist`) has to be correctly mention the repository,
145but if it does, you can use different downloaded archive state files via `dir::state::lists`.
146
147In case manually vs. automatically installed matters, you can ask the reporter for
148the `/var/lib/apt/extended_states` file and use it with `dir::state::extended_states`.
149
150### Dependency resolution
151
152APT works in its internal resolver in two stages: First all packages are visited
153and marked for installation, keep back or removal. Option `Debug::pkgDepCache::Marker`
154shows this. This also decides which packages are to be installed to satisfy dependencies,
155which can be seen by `Debug::pkgDepCache::AutoInstall`. After this is done, we might
156be in a situation in which two packages want to be installed, but only on of them can be.
157It is the job of the pkgProblemResolver to decide which of two packages 'wins' and can
158therefore decide what has to happen. You can see the contenders as well as their fight and
159the resulting resolution with `Debug::pkgProblemResolver`.
160
161### Downloading files
162
163Various binaries (called 'methods') are tasked with downloading files. The Acquire system
164talks to them via simple text protocol. Depending on which side you want to see, either
165`Debug::pkgAcquire::Worker` or `Debug::Acquire::http` (or similar) will show the messages.
166
167The integration tests use a simple self-built webserver which also logs. If you find that
168the http(s) methods do not behave like they should be try to implement this behavior in the
169webserver for simpler and more controlled testing.
170
171### Installation order
172
173Dependencies are solved, packages downloaded: Everything read for the installation!
174The last step in the chain is often forgotten, but still very important:
175Packages have to be installed in a particular order so that their dependencies are
176satisfied, but at the same time you don't want to install very important and optional
177packages at the same time if possible, so that a broken optional package does not
178block the correct installation of very important packages. Which option to use depends on
179if you are interested in the topology sorting (`Debug::pkgOrderList`), the dependency-aware
180cycle and unconfigured prevention (`Debug::pkgPackageManager`) or the actual calls
181to dpkg (`Debug::pkgDpkgPm`).