From af5a78b9f6dd4c605a03129a584493c9f47e8b90 Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Thu, 17 May 2018 00:22:01 -0700 Subject: Apt.installedBackport replaced with Apt.backportInstalled Apt.installedBackport would do this: apt-get install -t stretch-backports foo bar Apt.backportInstalled does this: apt-get install foo/stretch-backports bar/stretch-backports The Apt.installedBackport behaviour can install the dependencies of foo and bar from stretch-backports even when the versions in stretch will satisfy the dependencies of the backports of foo and bar. So this property can result in very many more backports being installed on the host when intended. But the number of installed backports should always be minimised. Worse, whether this happens is highly dependent on the system state, and the order in which other properties get ensured. For example, & Apt.installed ["dgit"] & Apt.installedBackport ["dgit"] will install only dgit from stretch-backports, but unless debhelper and devscripts happen to already be installed, & Apt.installedBackport ["dgit"] & Apt.installed ["dgit"] will install dgit, debhelper, devscripts and maybe more from backports. This is surprising, difficult to debug, and breaks the expectation that when the order in which properties are ensured is not specified with connectives like `requires` and `before`, ensuring them in any order will produce the same result. Property renamed because user configs should not silently break, as they would if they did not list dependencies that must be installed from stable-backports. Signed-off-by: Sean Whitton --- src/Propellor/Property/Apt.hs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/Propellor/Property/Apt.hs') diff --git a/src/Propellor/Property/Apt.hs b/src/Propellor/Property/Apt.hs index 5080b1e2..064221f9 100644 --- a/src/Propellor/Property/Apt.hs +++ b/src/Propellor/Property/Apt.hs @@ -247,12 +247,17 @@ installed' params ps = robustly $ check (not <$> isInstalled' ps) go where go = runApt (params ++ ["install"] ++ ps) -installedBackport :: [Package] -> Property Debian -installedBackport ps = withOS desc $ \w o -> case o of +-- | Install packages from the stable-backports suite. +-- +-- If installing the backport requires installing versions of a package's +-- dependencies from stable-backports too, you will need to include those +-- dependencies in the list of packages passed to this function. +backportInstalled :: [Package] -> Property Debian +backportInstalled ps = withOS desc $ \w o -> case o of (Just (System (Debian _ suite) _)) -> case backportSuite suite of Nothing -> unsupportedOS' Just bs -> ensureProperty w $ - runApt (["install", "-t", bs, "-y"] ++ ps) + runApt (["install", "-y"] ++ ((++ '/':bs) <$> ps)) `changesFile` dpkgStatus _ -> unsupportedOS' where -- cgit v1.2.3