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.
set -e
# Author: Steve Langasek <steve.langasek@canonical.com>
set -e
# Author: Steve Langasek <steve.langasek@canonical.com>
-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=""
latest_version=""
previous_version=""
generateconfig() {
cat <<EOF
generateconfig() {
cat <<EOF
-// File autogenerated by $0, do not edit
-APT
+// DO NOT EDIT! File autogenerated by $0
+APT::NeverAutoRemove
EOF
apt-config dump --no-empty --format '%v%n' 'APT::VersionedKernelPackages' | while read package; do
for kernel in $kernels; do
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}$\";"
- cat <<EOF
- };
-};
-EOF
}
generateconfig > "${config_file}.dpkg-new"
mv "${config_file}.dpkg-new" "$config_file"
}
generateconfig > "${config_file}.dpkg-new"
mv "${config_file}.dpkg-new" "$config_file"
{
"^firmware-linux.*";
"^linux-firmware$";
{
"^firmware-linux.*";
"^linux-firmware$";
- "^kfreebsd-image.*";
- "^gnumach$";
- "^gnumach-image.*";
};
VersionedKernelPackages
{
"linux-image";
};
VersionedKernelPackages
{
"linux-image";
"linux-image-extra";
"linux-signed-image";
"linux-backports-modules-.*";
"linux-image-extra";
"linux-signed-image";
"linux-backports-modules-.*";
+ "kfreebsd-image";
+ "kfreebsd-headers";
+ "gnumach-image";
};
Never-MarkAuto-Sections
};
Never-MarkAuto-Sections
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 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
mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers
touch var/lib/dpkg/available
mkdir -p usr/lib/apt
TESTDIR=$(readlink -f $(dirname $0))
. $TESTDIR/framework
setupenvironment
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
# the executed script would use the installed apt-config,
# which is outside of our control
-# 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
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
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:'
catfail() {
echo >&2
echo >&2 '### List of protected kernels:'
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
msgtest 'Check kernel autoremoval protection list does not include' 'old kernel'
grep -q '^\^linux-image-1\.0\.0-2-generic\$$' protected.list && catfail || msgpass
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
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