Преглед на файлове

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 преди 12 години
родител
ревизия
33677a0cdd
променени са 4 файла, в които са добавени 44 реда и са изтрити 26 реда
  1. 5 11
      debian/apt.auto-removal.sh
  2. 4 4
      debian/apt.conf.autoremove
  3. 1 1
      test/integration/framework
  4. 34 10
      test/integration/test-kernel-helper-autoremove

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

@@ -1,5 +1,4 @@
 #!/bin/sh
 #!/bin/sh
-
 set -e
 set -e
 
 
 # Author: Steve Langasek <steve.langasek@canonical.com>
 # Author: Steve Langasek <steve.langasek@canonical.com>
@@ -42,7 +41,7 @@ version_test_gt ()
 	return "$?"
 	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=""
 latest_version=""
 previous_version=""
 previous_version=""
@@ -74,21 +73,16 @@ EOF
 
 
 generateconfig() {
 generateconfig() {
 	cat <<EOF
 	cat <<EOF
-// File autogenerated by $0, do not edit
-APT
+// DO NOT EDIT! File autogenerated by $0
+APT::NeverAutoRemove
 {
 {
-  NeverAutoRemove
-  {
 EOF
 EOF
 	apt-config dump --no-empty --format '%v%n' 'APT::VersionedKernelPackages' | while read package; do
 	apt-config dump --no-empty --format '%v%n' 'APT::VersionedKernelPackages' | while read package; do
 		for kernel in $kernels; do
 		for kernel in $kernels; do
-			echo "    \"^${package}-${kernel}$\";"
+			echo "   \"^${package}-${kernel}$\";"
 		done
 		done
 	done
 	done
-	cat <<EOF
-  };
-};
-EOF
+	echo '};'
 }
 }
 generateconfig > "${config_file}.dpkg-new"
 generateconfig > "${config_file}.dpkg-new"
 mv "${config_file}.dpkg-new" "$config_file"
 mv "${config_file}.dpkg-new" "$config_file"

+ 4 - 4
debian/apt.conf.autoremove

@@ -4,18 +4,18 @@ APT
   {
   {
 	"^firmware-linux.*";
 	"^firmware-linux.*";
 	"^linux-firmware$";
 	"^linux-firmware$";
-	"^kfreebsd-image.*";
-	"^gnumach$";
-	"^gnumach-image.*";
   };
   };
 
 
   VersionedKernelPackages
   VersionedKernelPackages
   {
   {
 	"linux-image";
 	"linux-image";
+	"linux-headers";
 	"linux-image-extra";
 	"linux-image-extra";
 	"linux-signed-image";
 	"linux-signed-image";
 	"linux-backports-modules-.*";
 	"linux-backports-modules-.*";
-	"linux-headers";
+	"kfreebsd-image";
+	"kfreebsd-headers";
+	"gnumach-image";
   };
   };
 
 
   Never-MarkAuto-Sections
   Never-MarkAuto-Sections

+ 1 - 1
test/integration/framework

@@ -194,7 +194,7 @@ setupenvironment() {
 	mkdir rootdir aptarchive keys
 	mkdir rootdir aptarchive keys
 	cd rootdir
 	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 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
 	mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers
 	touch var/lib/dpkg/available
 	touch var/lib/dpkg/available
 	mkdir -p usr/lib/apt
 	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=$(readlink -f $(dirname $0))
 . $TESTDIR/framework
 . $TESTDIR/framework
 setupenvironment
 setupenvironment
-configarchitecture 'native'
+configarchitecture 'amd64'
 
 
 # the executed script would use the installed apt-config,
 # the executed script would use the installed apt-config,
 # which is outside of our control
 # which is outside of our control
@@ -16,21 +16,21 @@ else
 	exit 0
 	exit 0
 fi
 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
 cat > ./fake-dpkg <<EOF
 #!/bin/sh
 #!/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
 EOF
 chmod +x ./fake-dpkg
 chmod +x ./fake-dpkg
 echo 'Dir::Bin::dpkg "./fake-dpkg";' > rootdir/etc/apt/apt.conf.d/99fakedpkg
 echo 'Dir::Bin::dpkg "./fake-dpkg";' > rootdir/etc/apt/apt.conf.d/99fakedpkg
 
 
+# install fake-dpkg into it
 catfail() {
 catfail() {
 	echo >&2
 	echo >&2
 	echo >&2 '### List of protected kernels:'
 	echo >&2 '### List of protected kernels:'
@@ -59,10 +59,34 @@ testprotected() {
 	grep -q "^\\^linux-image-$(uname -r)\\\$\$" protected.list && msgpass || catfail
 	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
 testprotected
 msgtest 'Check kernel autoremoval protection list does not include' 'old kernel'
 msgtest 'Check kernel autoremoval protection list does not include' 'old kernel'
 grep -q '^\^linux-image-1\.0\.0-2-generic\$$' protected.list && catfail || msgpass
 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
 testprotected 1.0.0-2-generic
 msgtest 'Check kernel autoremoval protection list includes' 'installed kernel'
 msgtest 'Check kernel autoremoval protection list includes' 'installed kernel'
 grep -q '^\^linux-image-1\.0\.0-2-generic\$$' protected.list && msgpass || catfail
 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