]> git.saurik.com Git - apt.git/log
apt.git
8 years agosupport "install ./foo.changes"
David Kalnischkies [Fri, 8 Jul 2016 13:59:23 +0000 (15:59 +0200)] 
support "install ./foo.changes"

We support installing ./foo.deb (and ./foo.dsc for source) for a while
now, but it can be a bit clunky to work with those directly if you e.g.
build packages locally in a 'central' build-area.

The changes files also include hashsums and can be signed, so this can
also be considered an enhancement in terms of security as a user "just"
has to verify the signature on the changes file then rather than
checking all deb files individually in these manual installation
procedures.

8 years agoallow arch=all to override No-Support-for-Architecture-all
David Kalnischkies [Wed, 20 Jul 2016 07:03:09 +0000 (09:03 +0200)] 
allow arch=all to override No-Support-for-Architecture-all

If a user explicitly requests the download of arch:all apt shouldn't get
in the way and perform its detection dance if arch:all packages are
(also) in arch:any files or not.

This e.g. allows setting arch=all on a source with such a field (or one
which doesn't support all at all, but has the arch:all files like Debian
itself ATM) to get only the arch:all packages from there instead of
behaving like a no-op.

Reported-By: Helmut Grohne on IRC
8 years agorefactor plus/minus sources.list option handling
David Kalnischkies [Tue, 19 Jul 2016 21:06:20 +0000 (23:06 +0200)] 
refactor plus/minus sources.list option handling

Moving code around into some more dedicated methods, no effective code
change itself.

Gbp-Dch: Ignore

8 years agodon't hardcode /var/lib/dpkg/status as dir::state::status
David Kalnischkies [Tue, 19 Jul 2016 16:20:38 +0000 (18:20 +0200)] 
don't hardcode /var/lib/dpkg/status as dir::state::status

Theoretically it should be enough to change the Dir setting and have apt
pick the dpkg/status file from that. Also, it should be consistently
effected by RootDir. Both wasn't really the case through, so a user had
to explicitly set it too (or ignore it and have or not have expected
sideeffects caused by it).

This commit tries to guess better the location of the dpkg/status file
by setting dir::state::status to a naive "../dpkg/status", just that
this setting would be interpreted as relative to the CWD and not
relative to the dir::state directory. Also, the status file isn't really
relative to the state files apt has in /var/lib/apt/ as evident if we
consider that apt/ could be a symlink to someplace else and "../dpkg"
not effected by it, so what we do here is an explicit replace on apt/
– similar to how we create directories if it ends in apt/ – with dpkg/.

As this is a change it has the potential to cause regressions in so far
as the dpkg/status file of the "host" system is no longer used if you
set a "chroot" system via the Dir setting – but that tends to be
intended and causes people to painfully figure out that they had to set
this explicitly before, so that it now works more in terms of how the
other Dir settings work (aka "as expected"). If using the host status
file is really intended it is in fact easier to set this explicitely
compared to setting the new "magic" location explicitely.

8 years agoensure Cnf::FindFile doesn't return files below /dev/null
David Kalnischkies [Tue, 19 Jul 2016 16:05:13 +0000 (18:05 +0200)] 
ensure Cnf::FindFile doesn't return files below /dev/null

Very unlikely, but if the parent is /dev/null, the child empty and the
grandchild a value we returned /dev/null/value which doesn't exist, so
hardly a problem, but for best operability we should be consistent in
our work and return /dev/null always.

8 years agotests: activate dpkg multi-arch even if test is single arch
David Kalnischkies [Fri, 15 Jul 2016 19:17:11 +0000 (21:17 +0200)] 
tests: activate dpkg multi-arch even if test is single arch

Most tests are either multiarch, do not care for the specific
architecture or do not interact with dpkg, so really effect by this is
only test-external-installation-planner-protocol, but its a general
issue that while APT can be told to treat any architecture as native
dpkg has the native architecture hardcoded so if we run tests we must
make sure that dpkg knows about the architecture we will treat as
"native" in apt as otherwise dpkg will refuse to install packages from
such an architecture.

This reverts f883d2c3675eae2700e4cd1532c1a236cae69a4e as it complicates
the test slightly for no practical gain after the generic fix.

8 years agoUse native arch in test-external-installation-planner-protocol
Julian Andres Klode [Fri, 15 Jul 2016 12:15:59 +0000 (14:15 +0200)] 
Use native arch in test-external-installation-planner-protocol

Hardcoding amd64 broke the tests.

8 years agoRelease 1.3~pre2 1.3_pre2
Julian Andres Klode [Fri, 8 Jul 2016 12:33:44 +0000 (14:33 +0200)] 
Release 1.3~pre2

Yes, we might still add new features to 1.3 or break some more
stuff. Stay tuned!

8 years agotests: fix external solver/planner directory setup
David Kalnischkies [Fri, 8 Jul 2016 09:57:56 +0000 (11:57 +0200)] 
tests: fix external solver/planner directory setup

The setup didn't prepare the directories as expected by newer version of
tthe external tests in an autopkgtests environment.

8 years agoadd Testsuite-Triggers to tagfile-order
David Kalnischkies [Fri, 8 Jul 2016 09:49:36 +0000 (11:49 +0200)] 
add Testsuite-Triggers to tagfile-order

Added in dpkg in commit 90324cfa942ba23d5d44b28b1087fbd510340502.

8 years agoAdd kernels with "+" in the package name to APT::NeverAutoRemove
Andrew Patterson [Wed, 6 Jul 2016 19:40:16 +0000 (13:40 -0600)] 
Add kernels with "+" in the package name to APT::NeverAutoRemove

Escape "+" in kernel package names when generating APT::NeverAutoRemove
list so it is not treated as a regular expression meta-character.

[Changed by David Kalnischkies: let test actually test the change]

Closes: #830159
8 years agoRelease 1.3~pre1 1.3_pre1
Julian Andres Klode [Thu, 7 Jul 2016 18:38:00 +0000 (20:38 +0200)] 
Release 1.3~pre1

8 years agoapt-key.8: Put (deprecated) into the term tag
Julian Andres Klode [Thu, 7 Jul 2016 18:20:44 +0000 (20:20 +0200)] 
apt-key.8: Put (deprecated) into the term tag

Now post-build script should no longer complain...

Gbp-Dch: ignore

8 years agokeep trying with next if connection to a SRV host failed
David Kalnischkies [Wed, 6 Jul 2016 12:49:39 +0000 (14:49 +0200)] 
keep trying with next if connection to a SRV host failed

Instead of only trying the first host we get via SRV, we try them all as
we are supposed to and if that isn't working we try to connect to the
host itself as if we hadn't seen any SRV records. This was already the
intend of the old code, but it failed to hide earlier problems for the
next call, which would unconditionally fail then resulting in an all
around failure to connect. With proper stacking we can also keep the
error messages of each call around (and in the order tried) so if the
entire connection fails we can report all the things we have tried while
we discard the entire stack if something works out in the end.

8 years agoreport all instead of first error up the acquire chain
David Kalnischkies [Wed, 6 Jul 2016 13:10:52 +0000 (15:10 +0200)] 
report all instead of first error up the acquire chain

If we don't give a specific error to report up it is likely that all
error currently in the error stack are equally important, so reporting
just one could turn out to be confusing e.g. if name resolution failed
in a SRV record list.

8 years agodon't change owner/perms/times through file:// symlinks
David Kalnischkies [Tue, 5 Jul 2016 18:04:27 +0000 (20:04 +0200)] 
don't change owner/perms/times through file:// symlinks

If we have files in partial/ from a previous invocation or similar such
those could be symlinks created by file:// sources. The code is
expecting only real files through and happily changes owner,
modification times and permission on the file the symlink points to
which tend to be files we have no business in touching in this way.
Permissions of symlinks shouldn't be changed, changing owner is usually
pointless to, but just to be sure we pick the easy way out and use
lchown, check for symlinks before chmod/utimes.

Reported-By: Mattia Rizzolo on IRC
8 years agotests: disable EIPP logging in test-compressed-indexes
David Kalnischkies [Tue, 5 Jul 2016 18:36:15 +0000 (20:36 +0200)] 
tests: disable EIPP logging in test-compressed-indexes

The test makes heavy use of disabling compression types which are
usually available some way or another like xz which is how the EIPP
logs are compressed by default. Instead of changing this test to change
the filename according to the compression we want to test we just
disable EIPP logging for this test as that is easier and has the same
practical effect.

Gbp-Dch: Ignore

8 years agoEIPP/EDSP log can't be written is a warning, not an error
David Kalnischkies [Tue, 5 Jul 2016 13:44:53 +0000 (15:44 +0200)] 
EIPP/EDSP log can't be written is a warning, not an error

If other logs can't be written this is a warning to,
so for consistency sake translate the errors to warnings.

8 years agoreport write errors in EDSP/EIPP properly back to caller
David Kalnischkies [Tue, 5 Jul 2016 13:40:23 +0000 (15:40 +0200)] 
report write errors in EDSP/EIPP properly back to caller

Unlikely to happen in practice and I wonder more how I could miss these
in earlier reviews, but okay, lets fix it for consistency now.

8 years agogive a descriptive error for pipe tries with 'false'
David Kalnischkies [Tue, 5 Jul 2016 13:05:56 +0000 (15:05 +0200)] 
give a descriptive error for pipe tries with 'false'

If libapt has builtin support for a compression type it will create a
dummy compressor struct with the Binary set to 'false' as it will catch
these before using the generic pipe implementation which uses the
Binary. The catching happens based on configured Names through, so you
can actually force apt to use the external binaries even if it would
usually use the builtin support. That logic fails through if you don't
happen to have these external binaries installed as it will fallback to
calling 'false', which will end in confusing 'Write error's.
So, this is again something you only encounter in constructed testing.

Gbp-Dch: Ignore

8 years agodon't add default compressors two times if disabled
David Kalnischkies [Tue, 5 Jul 2016 12:46:39 +0000 (14:46 +0200)] 
don't add default compressors two times if disabled

This is in so far pointless as the first match will deal with the
extension, so we don't actually ever use these second instances –
probably for the better as most need arguments to behave as epected &
more importantly: the point of the exercise disabling their use for
testing proposes.

Gbp-Dch: Ignore

8 years agouse the right key for compressor configuration dump
David Kalnischkies [Tue, 5 Jul 2016 12:08:57 +0000 (14:08 +0200)] 
use the right key for compressor configuration dump

The generated dump output is incorrect in sofar as it uses the name as
the key for this compressor, but they don't need to be equal as is the
case if you force some of the inbuilt ones to be disabled as our testing
framework does it at times.

This is hidden from changelog as nobody will actually notice while
describing it in a few words make it sound like an important change…

Git-Dch: Ignore

8 years agoavoid 416 response teardown binding to null pointer
David Kalnischkies [Tue, 5 Jul 2016 11:07:29 +0000 (13:07 +0200)] 
avoid 416 response teardown binding to null pointer

methods/http.cc:640:13: runtime error: reference binding to null pointer
of type 'struct FileFd'

This reference is never used in the cases it has a nullptr, so the
practical difference is non-existent, but its a bug still.

Reported-By: gcc -fsanitize=undefined
8 years agotests: allow setting environment in extra file
David Kalnischkies [Sun, 3 Jul 2016 08:54:25 +0000 (10:54 +0200)] 
tests: allow setting environment in extra file

It can be handy to set apt options for the testcases which shouldn't be
accidentally committed like external planner testing or workarounds for
local setups.

Gbp-Dch: Ignore

8 years agoMake the test case executable
Julian Andres Klode [Tue, 5 Jul 2016 06:28:01 +0000 (08:28 +0200)] 
Make the test case executable

Gbp-Dch: ignore

8 years agoindextargets: Check that cache could be built before using it
Julian Andres Klode [Tue, 5 Jul 2016 06:21:28 +0000 (08:21 +0200)] 
indextargets: Check that cache could be built before using it

This caused a crash because the cache was a nullptr.

Closes: #829651
8 years agouse +0000 instead of UTC by default as timezone in output
David Kalnischkies [Sat, 2 Jul 2016 09:28:42 +0000 (11:28 +0200)] 
use +0000 instead of UTC by default as timezone in output

All apt versions support numeric as well as 3-character timezones just
fine and its actually hard to write code which doesn't "accidently"
accepts it. So why change? Documenting the Date/Valid-Until fields in
the Release file is easy to do in terms of referencing the
datetime format used e.g. in the Debian changelogs (policy §4.4). This
format specifies only the numeric timezones through, not the nowadays
obsolete 3-character ones, so in the interest of least surprise we should
use the same format even through it carries a small risk of regression
in other clients (which encounter repositories created with
apt-ftparchive).

In case it is really regressing in practice, the hidden option
  -o APT::FTPArchive::Release::NumericTimezone=0
can be used to go back to good old UTC as timezone.

The EDSP and EIPP protocols use this 'new' format, the text interface
used to communicate with the acquire methods does not for compatibility
reasons even if none of our methods would be effected and I doubt any
other would (in these instances the timezone is 'GMT' as that is what
HTTP/1.1 requires). Note that this is only true for apt talking to
methods, (libapt-based) methods talking to apt will respond with the
'new' format.  It is therefore strongly adviced to support both also in
method input.

8 years agodeprecate 'apt-key update' and no-op it in Debian
David Kalnischkies [Fri, 1 Jul 2016 21:44:37 +0000 (23:44 +0200)] 
deprecate 'apt-key update' and no-op it in Debian

Debian isn't using 'update' anymore for years and the command is in
direct conflict with our goal of not requiring gnupg anymore, so it
is high time to officially declare this command as deprecated.

8 years agowarn if apt-key is used in scripts/its output parsed
David Kalnischkies [Fri, 1 Jul 2016 20:00:52 +0000 (22:00 +0200)] 
warn if apt-key is used in scripts/its output parsed

apt-key needs gnupg for most of its operations, but depending on it
isn't very efficient as apt-key is hardly used by users – and scripts
shouldn't use it to begin with as it is just a silly wrapper. To draw
more attention on the fact that e.g. 'apt-key add' should not be used in
favor of "just" dropping a keyring file into the trusted.gpg.d
directory this commit implements the display of warnings.

8 years agoalias apt-key list to finger
David Kalnischkies [Fri, 1 Jul 2016 14:40:36 +0000 (16:40 +0200)] 
alias apt-key list to finger

There is no real point in having two commands which roughly do the same
thing, especially if the difference is just in the display of the
fingerprint and hence security sensitive information.

Closes: 829232
8 years agodo not treat same-version local debs as downgrade
David Kalnischkies [Fri, 1 Jul 2016 12:00:47 +0000 (14:00 +0200)] 
do not treat same-version local debs as downgrade

As the volatile sources are parsed last they were sorted behind the
dpkg/status file and hence are treated as a downgrade, which isn't
really what you want to happen as from a user POV its an upgrade.

8 years agoreinstalling local deb file is no downgrade
David Kalnischkies [Fri, 1 Jul 2016 11:17:03 +0000 (13:17 +0200)] 
reinstalling local deb file is no downgrade

If we have a (e.g. locally built) deb file installed and do try to
install it again apt complained about this being a downgrade, but it
wasn't as it is the very same version… it was just confused into not
merging the versions together which looks like a downgrade then.

The same size assumption is usually good, but given that volatile files
are parsed last (even after the status file) the base assumption no
longer holds, but is easy to adept without actually changing anything in
practice.

8 years agoprotect only the latest same-source providers from autoremove
David Kalnischkies [Fri, 1 Jul 2016 08:06:53 +0000 (10:06 +0200)] 
protect only the latest same-source providers from autoremove

Traditionally all providers are protected providing something as apt
can't know which of them is actually really providing the functionality
for the user ensuring that we don't propose the removal of used stuff,
but that is of course also keeping stuff around which could be removed.

That can cause the collection of multiple old providers until the
provided package is itself no longer needed (e.g. out-of-tree kernel
modules). We combat this by marking providers only from the newest
source package version so that old providers built by older versions of
the same source package can be garbage collected.

8 years agomore explicit MarkRequired algorithm code (part 2)
David Kalnischkies [Sat, 9 Apr 2016 11:30:59 +0000 (13:30 +0200)] 
more explicit MarkRequired algorithm code (part 2)

As the previous commit, this shouldn't change behavior at all, but
beside being more explicit and perhaps faster its also considerably
shorter (granted, mostly by if0-block elimination).

Gbp-Dch: Ignore

8 years agomore explicit MarkRequired algorithm code
David Kalnischkies [Fri, 8 Apr 2016 11:03:05 +0000 (13:03 +0200)] 
more explicit MarkRequired algorithm code

Piling everything in a single if statement always made my head wobble,
but it hasn't even a benefit as the most common case of a package which
isn't installed passes all of the old if and lands in the non-existent
else-part of the inner if. So beside a subjective cleanup of what goes
on this implementation should also be a bit faster.

No change in behavior should be present.

Gbp-Dch: Ignore

8 years agotests: deduplicate package creation framework code
David Kalnischkies [Thu, 30 Jun 2016 16:10:19 +0000 (18:10 +0200)] 
tests: deduplicate package creation framework code

Gbp-Dch: Ignore

8 years agowrite auto-bits before calling dpkg & again after if needed
David Kalnischkies [Wed, 29 Jun 2016 14:10:12 +0000 (16:10 +0200)] 
write auto-bits before calling dpkg & again after if needed

Writing first means that even in the event of a power-failure the
autobit is saved for future processing instead of "forgotten" so that
the package is treated as manually installed.

In some cases we have to re-run the writing after dpkg is done through
as dpkg can let packages disappear and in such cases apt will move
autobits around (or in that case non-autobits) which we need to store.

8 years agoif reading of autobit state failed, let write fail
David Kalnischkies [Wed, 29 Jun 2016 12:57:00 +0000 (14:57 +0200)] 
if reading of autobit state failed, let write fail

If we can't read the old file we can't just move forward as that would
discard potentially discard old data (especially other fields). We let
it fail only after we are done writing the new file so a user has the
chance to look into and merge the new data (which is otherwise
discarded).

8 years agodon't do atomic overrides with failed files
David Kalnischkies [Wed, 29 Jun 2016 12:46:34 +0000 (14:46 +0200)] 
don't do atomic overrides with failed files

We deploy atomic renames for some files, but these renames also happen
if something about the file failed which isn't really the point of the
exercise…

Closes: 828908
8 years agoRevert "travis: use gcc-5 instead of gcc(-4.8)"
David Kalnischkies [Wed, 29 Jun 2016 09:00:04 +0000 (11:00 +0200)] 
Revert "travis: use gcc-5 instead of gcc(-4.8)"

This reverts commit 2b8221d66a8284042fc53c7bbb14bb9750e9137f.

Avoiding the use of GCC >= 5 stuff lets use go back to 4.8 simplifying
the travis setup again as well as reducing the backport requirements in
general.

This is possible because the std::get_time use requiring GCC >= 5 in
9febc2b238e1e322dce1f94ecbed46d595893b52 was replaced by handrolling it
in 1d742e01470bba27715a8191c50adde4b39c2f19, so the remaining uses are
just small conviniences we can do without.

Gbp-Dch: Ignore

8 years agoif conf unset, don't read / as conf/pref/sources dir
David Kalnischkies [Wed, 29 Jun 2016 08:16:14 +0000 (10:16 +0200)] 
if conf unset, don't read / as conf/pref/sources dir

Usually these config options are set to sensible values, but if init
isn't run or the user interferes with configuration clearing or similar
the options could indeed carry an empty value, which will result in
FindDir returning a '/'. That feels kinda wrong, but as a public
interface there isn't much we can do about it and instead make it so
that we get the special file /dev/null back we know how to deal with in
such cases.

8 years agoeipp: let apt make a plan, not make stuff plane
David Kalnischkies [Wed, 29 Jun 2016 07:16:53 +0000 (09:16 +0200)] 
eipp: let apt make a plan, not make stuff plane

Julian noticed on IRC that I fall victim to a lovely false friend by
calling referring to a 'planer' all the time even through these are
machines to e.g. remove splinters from woodwork ("make stuff plane").
The term I meant is written in german in this way (= with a single n)
but in english there are two, aka: 'planner'.

As that is unreleased code switching all instances without any
transitional provisions. Also the reason why its skipped in changelog.

Thanks: Julian Andres Klode
Gbp-Dch: Ignore

8 years agocache: Bump minor version to 6
Julian Andres Klode [Tue, 28 Jun 2016 15:54:31 +0000 (17:54 +0200)] 
cache: Bump minor version to 6

Needed for the previous change

8 years agoFix buffer overflow in debListParser::VersionHash()
Julian Andres Klode [Tue, 28 Jun 2016 08:24:11 +0000 (10:24 +0200)] 
Fix buffer overflow in debListParser::VersionHash()

If a package file is formatted in a way that that no space
follows a deprecated "<", we would reformat it to "<=" and
increase the length of the output by 1, which can break.

Under normal circumstances with "<=" this should not be an
issue.

Closes: #828812
8 years agoeipp: enable xz-compressed scenario logging
David Kalnischkies [Sun, 26 Jun 2016 11:20:19 +0000 (13:20 +0200)] 
eipp: enable xz-compressed scenario logging

In 385d9f2f23057bc5808b5e013e77ba16d1c94da4 I implemented the storage of
scenario files based on enabling this by default for EIPP, but I
implemented it first optionally for EDSP to have it independent.

The reasons mentioned in the earlier commit (debugging and bugreports)
obviously apply here, especially as EIPP solutions aren't user approved,
nearly impossible to verify before starting the execution and at the
time of error the scenario has changed already, so that reproducing the
issue becomes hard(er).

8 years agoeipp: rename stanza 'Install' to 'Unpack'
David Kalnischkies [Sat, 25 Jun 2016 17:53:58 +0000 (19:53 +0200)] 
eipp: rename stanza 'Install' to 'Unpack'

Freeing 'Install' for future use as an interface for "dpkg --install",
which is currently not used by any existent planer, so the
implementation of it itself will be delayed until then.

8 years agoeipp: add Allow-Temporary-Remove-of-Essentials
David Kalnischkies [Mon, 6 Jun 2016 15:58:00 +0000 (17:58 +0200)] 
eipp: add Allow-Temporary-Remove-of-Essentials

A rather special need option, but the internal planer supports this and
we have a testcase for it & sometimes it is hit (as a bug through). The
option itself mostly serves as a reminder for implementors that they
should be careful with removes and especially temporary removes if they
perform any.

8 years agoeipp: include global errors in reported error
David Kalnischkies [Mon, 6 Jun 2016 15:56:08 +0000 (17:56 +0200)] 
eipp: include global errors in reported error

Git-Dch: Ignore

8 years agoeipp: implement Immediate-Configuration flag
David Kalnischkies [Mon, 6 Jun 2016 13:04:42 +0000 (15:04 +0200)] 
eipp: implement Immediate-Configuration flag

APT has 3 modes: no immediate configuration, all packages are configured
immediately and its default mode of configuring essentials and
pseudo-essentials immediately only. While this seems like a job of
different planers at first, it might be handy to have it as an option,
too, in case a planer (like apts internal one) supports different modes
where the introduction of individual planers would be counter intuitive.

8 years agoeipp: properly handle arch-specific provides
David Kalnischkies [Fri, 3 Jun 2016 12:40:06 +0000 (14:40 +0200)] 
eipp: properly handle arch-specific provides

The generation of the EIPP request was a bit to strict not generation
what would actually be needed to be part of the scenario.

8 years agoeipp: make no difference between remove & purge
David Kalnischkies [Fri, 3 Jun 2016 11:09:13 +0000 (13:09 +0200)] 
eipp: make no difference between remove & purge

For the order there is no inherent difference between delete or purge,
so we don't tell the planer about this and instead decide in apt if a
package should be purged or not which also allows us to not tell the
planer about rc-only purges as we can trivially do this on our on as
there is no need to plan such purges.

8 years agoeipp: provide the internal planer as an external one
David Kalnischkies [Sat, 28 May 2016 13:40:59 +0000 (15:40 +0200)] 
eipp: provide the internal planer as an external one

Testing the current implementation can benefit from being able to be
feed an EIPP request and produce a fully compliant response. It is also
a great test for EIPP in general.

8 years agoeipp: output at most two versions per package
David Kalnischkies [Sat, 14 May 2016 21:52:47 +0000 (23:52 +0200)] 
eipp: output at most two versions per package

We can trim generation time and size of the EIPP scenario considerable
if we we avoid telling the planers about "uninteresting" packages.

This is one of the simpler but already very effective reductions:
Do not tell planers about versions which are neither installed nor are
to be installed as they have no effect on the plan we don't need to tell
the planer about them. EDSP solvers need to know about all versions for
better choice and error messages, but planers really don't.

Git-Dch: Ignore

8 years agoeipp: implement version 0.1 of the protocol
David Kalnischkies [Sat, 14 May 2016 16:07:12 +0000 (18:07 +0200)] 
eipp: implement version 0.1 of the protocol

The very first step in introducing the "external installation planer
protocol" (short: EIPP) as part of my GSoC2016 project.

The description reads: APT-based tools like apt-get, aptitude, synaptic,
… work with the user to figure out how their system should look like
after they are done installing/removing packages and their dependencies.
The actual installation/removal of packages is done by dpkg with the
constrain that dependencies must be fulfilled at any point in time (e.g.
to run maintainer scripts).

Historically APT has a super micro-management approach to this task
which hasn't aged that well over the years mostly ignoring changes in
dpkg and growing into an unmaintainable mess hardly anyone can debug and
everyone fears to touch – especially as more and more requirements are
tacked onto it like handling cycles and triggers, dealing with
"important" packages first, package sources on removable media, touch
minimal groups to be able to interrupt the process if needed (e.g.
unattended-upgrades) which not only sky-rocket complexity but also can
be mutually exclusive as you e.g. can't have minimal groups and minimal
trigger executions at the same time.

8 years agoadd myself to Uploaders
David Kalnischkies [Mon, 27 Jun 2016 06:52:47 +0000 (08:52 +0200)] 
add myself to Uploaders

8 years agoclose server if parsing of header field failed
David Kalnischkies [Sat, 25 Jun 2016 10:32:11 +0000 (12:32 +0200)] 
close server if parsing of header field failed

Seen in #828011 if we fail to parse a header field like Last-Modified we
end up interpreting the data as response header for coming requests in
case we don't rotate to a new server in DNS rotation.

8 years agotests: add epoch-packages to try clean with epochs
David Kalnischkies [Sat, 25 Jun 2016 10:20:52 +0000 (12:20 +0200)] 
tests: add epoch-packages to try clean with epochs

Git-Dch: Ignore

8 years agoimbue .diff/Index parsing with C.UTF-8 as well
David Kalnischkies [Sat, 25 Jun 2016 08:20:35 +0000 (10:20 +0200)] 
imbue .diff/Index parsing with C.UTF-8 as well

In 3bdff17c894d0c3d0f813d358fc45d7a263f3552 we did it for the datetime
parsing, but we use the same style in the parsing for pdiff (where the
size of the file is in the middle of the three fields) so imbueing here
as well is a good idea.

8 years agoAdd a apt suggests powermgmt-base
Nicolas Le Cam [Wed, 22 Jun 2016 18:55:18 +0000 (20:55 +0200)] 
Add a apt suggests powermgmt-base

debian/apt.apt-compat.cron.daily is using on_ac_power utility

8 years agoUse the ConditionACPower feature of systemd in the apt-daily service
Nicolas Le Cam [Wed, 22 Jun 2016 19:39:38 +0000 (21:39 +0200)] 
Use the ConditionACPower feature of systemd in the apt-daily service

.. instead of hardcoding the functionnality in the apt.systemd.daily
script.

Also make the compatibility cron job provide the same functionnality
for systems that do not use systemd.

Closes: #827930
8 years agomethods/ftp: Cope with weird PASV responses
Julian Andres Klode [Mon, 27 Jun 2016 08:54:26 +0000 (10:54 +0200)] 
methods/ftp: Cope with weird PASV responses

wu-ftpd sends the response without parens, whereas we expect
them.

I did not test the patch, but it should work. I added another
return true if Pos is still npos after the second find to make
sure we don't add npos to the string.

Thanks: Lukasz Stelmach for the initial patch
Closes: #420940
8 years agozh_CN.po: update simplified chinese translation
Zhou Mo [Mon, 27 Jun 2016 08:57:14 +0000 (08:57 +0000)] 
zh_CN.po: update simplified chinese translation

8 years agoimbue datetime parsing with C.UTF-8 locale
David Kalnischkies [Sat, 25 Jun 2016 07:02:07 +0000 (09:02 +0200)] 
imbue datetime parsing with C.UTF-8 locale

Rewritten in 9febc2b238e1e322dce1f94ecbed46d595893b52 for c++ locales
usage and rewritten again in 1d742e01470bba27715a8191c50adde4b39c2f19 to
avoid a currently present stdlibc++6 bug in the std::get_time
implementation. The later implementation uses still stringstreams for
parsing, but forgot to explicitly reset the locale to something sane
(for parsing english dates that is), so date and especially the parsing
of a number is depending on the locale. Turns out, the French (among
others) format their numbers with space as thousand separator so for
some reason the stdlibc++6 thinks its a good idea to interpret the
entire datetime string as a single number instead of realizing that in
"25 Jun …" the later parts can't reasonably be part of that number even
through there are spaces there…

Workaround is hence: LC_NUMERIC=C.UTF-8

Closes: 828011
8 years agoshow right binary name in simulation notice
David Kalnischkies [Thu, 23 Jun 2016 06:56:22 +0000 (08:56 +0200)] 
show right binary name in simulation notice

Closes: 825216
8 years agoRelease 1.3~exp3 1.3_exp3
Julian Andres Klode [Wed, 22 Jun 2016 12:51:31 +0000 (14:51 +0200)] 
Release 1.3~exp3

Quite a huge churn of new strings.

8 years agoadd insecure (and weak) allow-options for sources.list
David Kalnischkies [Mon, 20 Jun 2016 18:50:43 +0000 (20:50 +0200)] 
add insecure (and weak) allow-options for sources.list

Weak had no dedicated option before and Insecure and Downgrade were both
global options, which given the effect they all have on security is
rather bad. Setting them for individual repositories only isn't great
but at least slightly better and also more consistent with other
settings for repositories.

8 years agoensure filesize of deb is included in the hashes list
David Kalnischkies [Sat, 18 Jun 2016 14:27:04 +0000 (16:27 +0200)] 
ensure filesize of deb is included in the hashes list

Filesize is a silly hash all by itself, but in combination with others
it can be a strong opponent, so ensuring that it is in the list of
hashes and hence checked by the normal course of action the acquire
process takes is a good thing.

8 years agoadd [weak] tag to hash errors to indicate insufficiency
David Kalnischkies [Sat, 18 Jun 2016 13:15:27 +0000 (15:15 +0200)] 
add [weak] tag to hash errors to indicate insufficiency

For "Hash Sum mismatch" that info doesn't make a whole lot of
difference, but for the new insufficient info message an indicator that
while this hashes are there and even match, they aren't enough from a
security standpoint.

8 years agobetter error message for insufficient hashsums
David Kalnischkies [Sat, 18 Jun 2016 11:55:39 +0000 (13:55 +0200)] 
better error message for insufficient hashsums

Downloading and saying "Hash Sum mismatch" isn't very friendly from a
user POV, so with this change we try to detect such cases early on and
report it, preferably before download even started.

Closes: 827758
8 years agosource: if download is skipped, don't try to unpack
David Kalnischkies [Sat, 18 Jun 2016 07:59:08 +0000 (09:59 +0200)] 
source: if download is skipped, don't try to unpack

If apt decides it can't download a file it is relatively pointless to
try to tell dpkg-source to unpack it.

8 years agoforbid insecure repositories by default expect in apt-get
David Kalnischkies [Fri, 18 Mar 2016 13:46:24 +0000 (14:46 +0100)] 
forbid insecure repositories by default expect in apt-get

With this commit all APT-based clients default to refusing to work with
unsigned or otherwise insufficently secured repositories. In terms of
apt and apt-get this changes nothing, but it effects all tools using
libapt like aptitude, synaptic or packagekit.

The exception remains apt-get for stretch for now as this might break
too many scripts/usecases too quickly.

The documentation is updated and extended to reflect how to opt out or
in on this behaviour change.

Closes: 808367
8 years agogeneralize secure->insecure downgrade protection
David Kalnischkies [Fri, 18 Mar 2016 11:50:02 +0000 (12:50 +0100)] 
generalize secure->insecure downgrade protection

Handling the extra check (and force requirement) for downgrades in
security in our AllowInsecureRepositories checker helps in having this
check everywhere instead of just in the most common place and requiring
a little extra force in such cases is always good.

8 years agohandle weak-security repositories as unauthenticated
David Kalnischkies [Thu, 17 Mar 2016 15:36:14 +0000 (16:36 +0100)] 
handle weak-security repositories as unauthenticated

APT can be forced to deal with repositories which have no security
features whatsoever, so just giving up on repositories which "just" fail
our current criteria of good security features is the wrong incentive.

Of course, repositories are better of fixing their setup to provide the
minimum of security features, but sometimes this isn't possible:
Historic repositories for example which do not change (anymore).

That also fixes problem with repositories which are marked as trusted,
but are providing only weak security features which would fail the
parsing of the Release file.

Closes: 827364
8 years agorun update post-invokes even on (partial) failures
David Kalnischkies [Thu, 16 Jun 2016 21:13:26 +0000 (23:13 +0200)] 
run update post-invokes even on (partial) failures

Unsecure repositories result in error messages by default which causes
the acquire run to fail hard, but non-failing repositories are still
updated just like in the slightly less hard-failures which got this
behaviour in 35664152e47a1d4d712fd52e0f0a2dc8ed359d32.

8 years agozh_CN.po: update simplified chinese translation
Zhou Mo [Tue, 21 Jun 2016 03:29:53 +0000 (03:29 +0000)] 
zh_CN.po: update simplified chinese translation

8 years agoMerge pull request Debian/apt#16 from dombenson/master
Julian Andres Klode [Mon, 20 Jun 2016 15:12:41 +0000 (17:12 +0200)] 
Merge pull request Debian/apt#16 from dombenson/master

Reinstate caching of file hashes in apt-ftparchive

8 years agoCheck for cached hash entries to determine which (if any) hash types
Dominic Benson [Mon, 20 Jun 2016 12:47:46 +0000 (13:47 +0100)] 
Check for cached hash entries to determine which (if any) hash types
need to be generated for the current file.
In 1.0.9, each hash type was handled by a separate method, each of
which checked the cache. It looks like when these code paths were
unified (in a311fb96b84757ef8628e6a754232614a53b7891) the cache
checks were not incorporated into the new method.

8 years agoimplement and document DIRECT for auto-detect-proxy
David Kalnischkies [Mon, 20 Jun 2016 11:49:31 +0000 (13:49 +0200)] 
implement and document DIRECT for auto-detect-proxy

There is a subtile difference between an empty setting and "DIRECT" in
the configuration as the later overrides the generic settings while the
earlier does not. Also, non-zero exitcodes should really be reported as
an error rather than silently discarded.

8 years agodo not error if auto-detect-proxy cmd has no output
David Kalnischkies [Mon, 20 Jun 2016 09:23:09 +0000 (11:23 +0200)] 
do not error if auto-detect-proxy cmd has no output

Regression introduced in 8f858d560e3b7b475c623c4e242d1edce246025a.

Commands are probably better of always having output through as the
fall through to the generic proxy settings is likely not intended. As
documenting and implementing this more consistently is kind of a
regression through, it is split off into the next commit.

Closes: 827713
8 years agoavoid std::get_time usage to sidestep libstdc++6 bug
David Kalnischkies [Fri, 17 Jun 2016 15:56:45 +0000 (17:56 +0200)] 
avoid std::get_time usage to sidestep libstdc++6 bug

As reported upstream in
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71556
the implementation of std::get_time is currently not as accepting as
strptime is, especially in how hours should be formatted.

Just reverting 9febc2b238e1e322dce1f94ecbed46d595893b52 would be
possible, but then we would reopen the problems fixed by it, so instead
I opted here for a rewrite of the parsing logic which makes this method
a lot longer, but at least it provides the same benefits as the rewrite
in std::get_time was intended to give us and decouples us from the fix
of the issue in the standard library implementation of GCC.

LP: 1593583

8 years agomerge sources.list lines based on Release filename
David Kalnischkies [Fri, 17 Jun 2016 11:27:34 +0000 (13:27 +0200)] 
merge sources.list lines based on Release filename

Merging by URI means that having sources lines with different URI
methods results in 'strange' warning and error messages, which aren't
very friendly from a user point of view as not encoding the method in
the filename is effectivly an implementation detail.

Merging by filename removes these messages and makes everything "work"
even if it isn't working the way it is configured as the indexes aren't
acquired over the method given, but over the first method for this
release file (which argueably is an implementation detail stemming from
the filename encoding, too).

So either direction isn't perfectly "right", but personally I prefer
"magic" over strange error messages (and doing a full-circle detection
of this with its own messages which would need to be translated feels
like way too much effort for dubious gain).

Closes: 826944
8 years agohttp: don't hang on redirect with length + connection close
David Kalnischkies [Wed, 15 Jun 2016 10:45:07 +0000 (12:45 +0200)] 
http: don't hang on redirect with length + connection close

Most servers who close the connection do not send a content-length as
this is redundant information usually, but some might and while testing
with our server and with 'aptwebserver::response-header::Connection' set
to 'close' I noticed that http hangs after a redirect in such cases, so
if we have the information, just use it instead of discarding it.

8 years agodon't use FindFile for external Dir::Bin commands
David Kalnischkies [Tue, 14 Jun 2016 12:32:14 +0000 (14:32 +0200)] 
don't use FindFile for external Dir::Bin commands

We usually use absolute paths to specific the location of dpkg, apt-key
and the like, but there is nothing wrong with using just the command
name and instead let exec(3) make the lookup in PATH.

We had a wild mixture before, so opting for the more accepting option
out of the two seems about right especially as it makes no difference in
the default case as apt uses absolute paths.

8 years agoapt-key: don't search PATH if command is a path already
David Kalnischkies [Tue, 14 Jun 2016 11:55:33 +0000 (13:55 +0200)] 
apt-key: don't search PATH if command is a path already

8 years agoNorwegian Bokmål program translation update
Petter Reinholdtsen [Mon, 13 Jun 2016 09:48:36 +0000 (11:48 +0200)] 
Norwegian Bokmål program translation update

Closes: 827067
8 years agoRelease 1.3~exp2 1.3_exp2
Julian Andres Klode [Sat, 11 Jun 2016 15:24:13 +0000 (17:24 +0200)] 
Release 1.3~exp2

8 years agodon't leak FD in AutoProxyDetect command return parsing
David Kalnischkies [Thu, 9 Jun 2016 22:01:46 +0000 (00:01 +0200)] 
don't leak FD in AutoProxyDetect command return parsing

Just closing the fd would be enough, but while we are at it we can also
use the Popen interface to have an easier time with this.

8 years agodon't leak dpkg statusfd pipe in debugging
David Kalnischkies [Thu, 9 Jun 2016 21:18:10 +0000 (23:18 +0200)] 
don't leak dpkg statusfd pipe in debugging

Not a big deal to leak fds in debugging mode, but for completeness.

Git-Dch: Ignore

8 years agodon't leak EDSP solver output fd
David Kalnischkies [Thu, 9 Jun 2016 20:58:06 +0000 (22:58 +0200)] 
don't leak EDSP solver output fd

8 years agodon't leak an FD in lz4 (de)compression
David Kalnischkies [Thu, 9 Jun 2016 19:06:48 +0000 (21:06 +0200)] 
don't leak an FD in lz4 (de)compression

Seen first in #826783, but as this buglog also shows leaked uncompressed
files as well we don't close it just yet.

8 years agodo not hang on piped input in PipedFileFdPrivate
David Kalnischkies [Thu, 9 Jun 2016 18:41:58 +0000 (20:41 +0200)] 
do not hang on piped input in PipedFileFdPrivate

This effects only compressors configured on the fly (rather then the
inbuilt ones as they use a library).

8 years agoremove racy_pselect fallback
David Kalnischkies [Thu, 9 Jun 2016 10:23:59 +0000 (12:23 +0200)] 
remove racy_pselect fallback

The comment says it should have been removed with Lenny+1 which is a
small while ago already, so it seems like a good time now…

And as this is a cleanup commit it also gets right of spurious
whitespace at the end of lines, adds missing fold markers and similar
busy work.

Git-Dch: Ignore

8 years agodrop Dpkg::MaxArgs in favor of Dpkg::MaxArgsBytes
David Kalnischkies [Wed, 8 Jun 2016 20:40:53 +0000 (22:40 +0200)] 
drop Dpkg::MaxArgs in favor of Dpkg::MaxArgsBytes

We had an old FIXME saying that it is probably pointless to do this if
we limit by length of the commandline already and I completely agree.
The splitting is bad enough if it must be done, so we should only do it
if we have to (as in absolute length of commandline) and, but that is
just a remark, it is unlikely that we ever have/had a call triggering
this as the default value was ~32000 items…

8 years agodon't explicitly configure the last round of packages
David Kalnischkies [Wed, 8 Jun 2016 15:31:45 +0000 (17:31 +0200)] 
don't explicitly configure the last round of packages

We end our operation by calling "dpkg --configure -a", so instead of
running a (big) configure run with all packages mentioned explicitly
before this, we simply skip them and let them be handled by this call
implicitly.

There isn't really an observeable gain to be had here from a speed
point, but it helps in avoiding an (uncommon) problem of having a too
long commandline passed to dpkg, which we would split up (probably
incorrectly).

8 years agoedsp: drop privileges before executing solvers
David Kalnischkies [Wed, 8 Jun 2016 11:44:29 +0000 (13:44 +0200)] 
edsp: drop privileges before executing solvers

Most (if not all) solvers should be able to run perfectly fine without
root privileges as they get the entire state they are supposed to work
on via stdin and do not perform any action directly, but just pass
suggestions on via stdout.

The new default is to run them all as _apt hence, but each solver can
configure another user if it chooses/must. The security benefits are
minimal at best, but it helps preventing silly mistakes (see
35f3ed061f10a25a3fb28bc988fddbb976344c4d) and that is always good.

Note that our 'apt' and 'dump' solver already dropped privileges if they
had them.

8 years agoedsp: if logging is requested, do it for internal, too
David Kalnischkies [Wed, 8 Jun 2016 09:34:53 +0000 (11:34 +0200)] 
edsp: if logging is requested, do it for internal, too

Create and log the EDSP(like) request even if we use the internal
resolver.

8 years agoedsp: if internal is used, keep this decision
David Kalnischkies [Wed, 8 Jun 2016 08:56:14 +0000 (10:56 +0200)] 
edsp: if internal is used, keep this decision

It wasn't noticeable before, but now with the (optional) logging it can
be observed that we decide in the internal path two times if an internal
or external solver should be used (and hence with logging, it is
attempted twice), so if we are in the internal path call the internal
resolver directly, which means those internal methods need to be public
– but we can hide them based on the symbol at least.

8 years agomove 'dump' solver from apt-utils to apt package
David Kalnischkies [Tue, 7 Jun 2016 18:08:27 +0000 (20:08 +0200)] 
move 'dump' solver from apt-utils to apt package

8 years agoedsp: optionally store a compressed copy of the last scenario
David Kalnischkies [Tue, 7 Jun 2016 15:01:33 +0000 (17:01 +0200)] 
edsp: optionally store a compressed copy of the last scenario

For bugreports and co it could be handy to have the scenario and all the
settings used in it around later for inspection for EDSP like protocols.
EDSP might not be the most interesting as the user can still interrupt
the process before the solution is applied and users tend to have an
opinion on the "rightness" of a solution, so it is disabled by default.

8 years agoedsp: prevent it from trying to write a cache
David Kalnischkies [Mon, 6 Jun 2016 13:54:06 +0000 (15:54 +0200)] 
edsp: prevent it from trying to write a cache

EDSP(-like) protocols are one-shot processes working on data which
exists only as long as they run (as they get feed via a pipe), so trying
to write a cache for it is pretty pointless, especially as it will
usually fail as the cache files tend to be owned by root, but the
process is run as a unpriviledged user (either _apt if called by root,
otherwise the user of the caller).

So this was in fact only observeable with our testcases which run as
non-root and the worst which happens is that a valid cache is overridden
with an invalid one which the next run will detect and not use.

Git-Dch: Ignore