support kfreebsd and hurd in the kernel hook
authorDavid Kalnischkies <david@kalnischkies.de>
Mon, 10 Mar 2014 19:57:07 +0000 (20:57 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Thu, 13 Mar 2014 12:58:46 +0000 (13:58 +0100)
kfreebsd as well as hurd kernel packages call the postinst script as
well so we just need to enable the correct parsing for installed
packages and disable the "protect every version" hammer for them.

debian/apt.auto-removal.sh
debian/apt.conf.autoremove
test/integration/framework
test/integration/test-kernel-helper-autoremove

index 9c4a415..ab82018 100644 (file)
@@ -1,5 +1,4 @@
 #!/bin/sh
-
 set -e
 
 # Author: Steve Langasek <steve.langasek@canonical.com>
@@ -42,7 +41,7 @@ version_test_gt ()
        return "$?"
 }
 
-list=$(${DPKG} -l 'linux-image-[0-9]*'|awk '/^ii/ && $2 !~ /-dbg$/ { print $2 }' | sed -e's/linux-image-//')
+list="$(${DPKG} -l | awk '/^ii[ ]+(linux|kfreebsd|gnumach)-image-[0-9]*/ && $2 !~ /-dbg$/ { print $2 }' | sed -e 's#\(linux\|kfreebsd\|gnumach\)-image-##')"
 
 latest_version=""
 previous_version=""
@@ -74,21 +73,16 @@ EOF
 
 generateconfig() {
        cat <<EOF
-// File autogenerated by $0, do not edit
-APT
+// DO NOT EDIT! File autogenerated by $0
+APT::NeverAutoRemove
 {
-  NeverAutoRemove
-  {
 EOF
        apt-config dump --no-empty --format '%v%n' 'APT::VersionedKernelPackages' | while read package; do
                for kernel in $kernels; do
-                       echo "    \"^${package}-${kernel}$\";"
+                       echo "   \"^${package}-${kernel}$\";"
                done
        done
-       cat <<EOF
-  };
-};
-EOF
+       echo '};'
 }
 generateconfig > "${config_file}.dpkg-new"
 mv "${config_file}.dpkg-new" "$config_file"
index ea68f88..5b958c7 100644 (file)
@@ -4,18 +4,18 @@ APT
   {
        "^firmware-linux.*";
        "^linux-firmware$";
-       "^kfreebsd-image.*";
-       "^gnumach$";
-       "^gnumach-image.*";
   };
 
   VersionedKernelPackages
   {
        "linux-image";
+       "linux-headers";
        "linux-image-extra";
        "linux-signed-image";
        "linux-backports-modules-.*";
-       "linux-headers";
+       "kfreebsd-image";
+       "kfreebsd-headers";
+       "gnumach-image";
   };
 
   Never-MarkAuto-Sections
index dad8c99..6502dba 100644 (file)
@@ -194,7 +194,7 @@ setupenvironment() {
        mkdir rootdir aptarchive keys
        cd rootdir
        mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d
-       mkdir -p var/cache var/lib var/log tmp
+       mkdir -p var/cache var/lib/apt var/log tmp
        mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers
        touch var/lib/dpkg/available
        mkdir -p usr/lib/apt
index be30c6f..cb1c54e 100755 (executable)
@@ -4,7 +4,7 @@ set -e
 TESTDIR=$(readlink -f $(dirname $0))
 . $TESTDIR/framework
 setupenvironment
-configarchitecture 'native'
+configarchitecture 'amd64'
 
 # the executed script would use the installed apt-config,
 # which is outside of our control
@@ -16,21 +16,21 @@ else
        exit 0
 fi
 
-# install fake-dpkg into it
+CURRENTKERNEL="linux-image-$(uname -r)"
+insertinstalledpackage "$CURRENTKERNEL" 'amd64' '1'
+insertinstalledpackage 'linux-image-1.0.0-2-generic' 'amd64' '1.0.0-2'
+insertinstalledpackage 'linux-image-100.0.0-1-generic' 'amd64' '100.0.0-1'
+
+testsuccess aptmark auto "$CURRENTKERNEL" 'linux-image-1.0.0-2-generic' 'linux-image-100.0.0-1-generic'
+
 cat > ./fake-dpkg <<EOF
 #!/bin/sh
-set -e
-if [ "\$1" = "-l" ]; then
-    echo "ii  linux-image-1.0.0-2-generic  1.0.0-2  amd64"
-    echo "ii  linux-image-\$(uname -r)  not-used  amd64"
-    echo "ii linux-image-100.0.0-1-generic  100.0.0.1-1  amd64"
-else
-    dpkg "\$@"
-fi
+exec $(aptconfig dump --no-empty --format='%v ' 'DPKG::options') "\$@"
 EOF
 chmod +x ./fake-dpkg
 echo 'Dir::Bin::dpkg "./fake-dpkg";' > rootdir/etc/apt/apt.conf.d/99fakedpkg
 
+# install fake-dpkg into it
 catfail() {
        echo >&2
        echo >&2 '### List of protected kernels:'
@@ -59,10 +59,34 @@ testprotected() {
        grep -q "^\\^linux-image-$(uname -r)\\\$\$" protected.list && msgpass || catfail
 }
 
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+   linux-image-1.0.0-2-generic (1.0.0-2)
+   linux-image-100.0.0-1-generic (100.0.0-1)
+   $CURRENTKERNEL (1)
+0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
+Remv linux-image-1.0.0-2-generic [1.0.0-2]
+Remv linux-image-100.0.0-1-generic [100.0.0-1]
+Remv $CURRENTKERNEL [1]" aptget autoremove -sV
+
 testprotected
 msgtest 'Check kernel autoremoval protection list does not include' 'old kernel'
 grep -q '^\^linux-image-1\.0\.0-2-generic\$$' protected.list && catfail || msgpass
 
+testequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+  linux-image-1.0.0-2-generic
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv linux-image-1.0.0-2-generic [1.0.0-2]' aptget autoremove -s
+
 testprotected 1.0.0-2-generic
 msgtest 'Check kernel autoremoval protection list includes' 'installed kernel'
 grep -q '^\^linux-image-1\.0\.0-2-generic\$$' protected.list && msgpass || catfail
+testequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget autoremove -s