Browse Source

support kfreebsd and hurd in the kernel hook

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.
David Kalnischkies 10 years ago
parent
commit
33677a0cdd

+ 5 - 11
debian/apt.auto-removal.sh

@@ -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"

+ 4 - 4
debian/apt.conf.autoremove

@@ -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

+ 1 - 1
test/integration/framework

@@ -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

+ 34 - 10
test/integration/test-kernel-helper-autoremove

@@ -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