Package: linux-base Version: 4.6 Severity: normal Tags: patch Hi,
The perf wrapper script in Debian requires the perf binary of the running kernel. However, there's not really a good reason for this; perf has a stable ABI, and even though it's distributed and built with the kernel, you can freely mix and match versions (I've done so, a lot). There may still be reasons why people prefer to keep the versions matched, but perf shouldn't just give up and die if it can't find the right version. I've made a patch that makes this a bit more flexible; it first tries to find a matching version, and if it doesn't exist, it simply picks the newest one it can find. (If that's older than the kernel, it gives a warning, since there may be new features the user would want to upgrade for, but it doesn't die.) Hopefully this should be safe, while being a lot less annoying when running a newer or self-compiled kernel. :-) --- linux-base-4.6.orig/bin/perf 2018-07-20 03:35:21.000000000 +0200 +++ linux-base-4.6/bin/perf 2021-06-22 00:15:59.618443368 +0200 @@ -10,9 +10,11 @@ ;; esac shopt -s execfail -exec "perf_$version" "$@" +if [ -x "/usr/bin/perf_$version" ]; then + exec "perf_$version" "$@" +fi -# Not found? Tell the user which package to install. +# Not found? Find out which version to install. case "$version" in 3.* | 4.0 | 4.0.*) package=linux-tools-$version @@ -21,5 +23,16 @@ package=linux-perf-$version ;; esac + +# See if we have a usable alternative available. +perfversion="$( linux-version sort --reverse $( echo /usr/bin/perf_* | sed "s,/usr/bin/perf_,,g" ) | head -n 1 )" +if [ -x "/usr/bin/perf_$perfversion" ]; then + if linux-version compare "$perfversion" lt "$version"; then + echo >&2 "W: perf_$perfversion is older than the running kernel, consider installing $package." + fi + exec "perf_$perfversion" "$@" +fi + +# Still nothing? Tell the user. echo >&2 "E: $package is not installed." exit 1 -- System Information: Debian Release: 11.0 APT prefers stable-debug APT policy: (500, 'stable-debug'), (500, 'testing'), (500, 'oldstable'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 5.12.8 (SMP w/40 CPU threads) Locale: LANG=en_DK.UTF-8, LC_CTYPE=en_DK.UTF-8 (charmap=UTF-8), LANGUAGE=en_NO:en_US:en_GB:en Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages linux-base depends on: ii debconf [debconf-2.0] 1.5.75 linux-base recommends no packages. linux-base suggests no packages. -- debconf-show failed