From 3fdda358483a4c772383a5b7313982ab9ecbb93b Mon Sep 17 00:00:00 2001 From: Wardenjohn Date: Sat, 9 Dec 2023 17:26:43 +0800 Subject: [PATCH] Support Anolis OS in a more elegant way This is a combination of 2 commits. This is the 1st commit message: Support Anolis OS in a more elegant way There are many different distribution of linux kernel. However, it may not be good to support one new distribution just by adding a judgment condition. Therefore, I move it into a function. In the future, if a new distribution need to be supported, it may be more elegant. This is the commit message #2: fix the bug of wrong shell condition and contains more distro This commit fix the fowlling problem: 1. move SUPPORTED_DISTRO to SUPPORTED_RPM_DISTROS 2. fix the wrong ID of "Anolis" to "anolis" in SUPPORTED_RPM_DISTROS 3. change distro in function to local variable 4. rename is_supported_distro to is_supported_rpm_distro; print_supported_distro to print_supported_rpm_distro 5. fix the bug of return value of is_supported_rpm_distro 6. contains ubuntu and debian release in print_supported_rpm_distro, and adjust the vmlinux search logic at the same time. --- kpatch-build/kpatch-build | 71 ++++++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 23 deletions(-) diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build index 5e02faafc..bfcdccd2a 100755 --- a/kpatch-build/kpatch-build +++ b/kpatch-build/kpatch-build @@ -65,6 +65,17 @@ LLD="${CROSS_COMPILE:-}ld.lld" READELF="${CROSS_COMPILE:-}readelf" OBJCOPY="${CROSS_COMPILE:-}objcopy" +SUPPORTED_RPM_DISTROS=" + fedora + rhel + centos + openEuler + photon + anolis + ubuntu + debian +" + warn() { echo "ERROR: $1" >&2 } @@ -649,6 +660,28 @@ module_name_string() { echo "${1//[^a-zA-Z0-9_-]/-}" | cut -c 1-55 } +is_supported_rpm_distro(){ + local distro=$1 + for each_distro in ${SUPPORTED_RPM_DISTROS}; do + if [[ $distro = "$each_distro" ]]; then + return 0 + fi + done + return 1 +} + +print_supported_rpm_distro(){ + [[ "$DISTRO" = fedora ]] && echo "Fedora distribution detected" + [[ "$DISTRO" = rhel ]] && echo "RHEL distribution detected" + [[ "$DISTRO" = ol ]] && echo "Oracle Linux distribution detected" + [[ "$DISTRO" = centos ]] && echo "CentOS distribution detected" + [[ "$DISTRO" = openEuler ]] && echo "OpenEuler distribution detected" + [[ "$DISTRO" = photon ]] && echo "Photon OS distribution detected" + [[ "$DISTRO" = anolis ]] && echo "Anolis OS distribution detected" + [[ "$DISTRO" = ubuntu ]] && echo "Ubuntu OS distribution detected" + [[ "$DISTRO" = debian ]] && echo "Debian OS distribution detected" +} + usage() { echo "usage: $(basename "$0") [options] " >&2 echo " patchN Input patchfile(s)" >&2 @@ -865,26 +898,23 @@ fi [[ -z "$TARGETS" ]] && TARGETS="vmlinux modules" -if [[ "$DISTRO" = fedora ]] || [[ "$DISTRO" = rhel ]] || [[ "$DISTRO" = ol ]] || - [[ "$DISTRO" = centos ]] || [[ "$DISTRO" = openEuler ]] || - [[ "$DISTRO" = photon ]]; then - - [[ -z "$VMLINUX" ]] && VMLINUX="/usr/lib/debug/lib/modules/$ARCHVERSION/vmlinux" - [[ -e "$VMLINUX" ]] || die "kernel-debuginfo-$ARCHVERSION not installed" +if is_supported_rpm_distro "$DISTRO"; then - export PATH="/usr/lib64/ccache:$PATH" + if [[ "$DISTRO" = ubuntu ]] || [[ "$DISTRO" = debian ]]; then + [[ -z "$VMLINUX" ]] && VMLINUX="/usr/lib/debug/boot/vmlinux-$ARCHVERSION" -elif [[ "$DISTRO" = ubuntu ]] || [[ "$DISTRO" = debian ]]; then - [[ -z "$VMLINUX" ]] && VMLINUX="/usr/lib/debug/boot/vmlinux-$ARCHVERSION" + if [[ "$DISTRO" = ubuntu ]]; then + [[ -e "$VMLINUX" ]] || die "linux-image-$ARCHVERSION-dbgsym not installed" - if [[ "$DISTRO" = ubuntu ]]; then - [[ -e "$VMLINUX" ]] || die "linux-image-$ARCHVERSION-dbgsym not installed" + elif [[ "$DISTRO" = debian ]]; then + [[ -e "$VMLINUX" ]] || die "linux-image-$ARCHVERSION-dbg not installed" + fi + else + [[ -z "$VMLINUX" ]] && VMLINUX="/usr/lib/debug/lib/modules/$ARCHVERSION/vmlinux" + [[ -e "$VMLINUX" ]] || die "kernel-debuginfo-$ARCHVERSION not installed" - elif [[ "$DISTRO" = debian ]]; then - [[ -e "$VMLINUX" ]] || die "linux-image-$ARCHVERSION-dbg not installed" + export PATH="/usr/lib64/ccache:$PATH" fi - - export PATH="/usr/lib/ccache:$PATH" fi save_env @@ -906,14 +936,9 @@ elif [[ -e "$KERNEL_SRCDIR"/.config ]] && [[ -e "$VERSIONFILE" ]] && [[ "$(cat " echo "Using cache at $KERNEL_SRCDIR" else - if [[ "$DISTRO" = fedora ]] || [[ "$DISTRO" = rhel ]] || [[ "$DISTRO" = ol ]] || [[ "$DISTRO" = centos ]] || [[ "$DISTRO" = openEuler ]] || [[ "$DISTRO" = photon ]]; then - - [[ "$DISTRO" = fedora ]] && echo "Fedora distribution detected" - [[ "$DISTRO" = rhel ]] && echo "RHEL distribution detected" - [[ "$DISTRO" = ol ]] && echo "Oracle Linux distribution detected" - [[ "$DISTRO" = centos ]] && echo "CentOS distribution detected" - [[ "$DISTRO" = openEuler ]] && echo "OpenEuler distribution detected" - [[ "$DISTRO" = photon ]] && echo "Photon OS distribution detected" + if is_supported_rpm_distro "$DISTRO"; then + + print_supported_rpm_distro "$DISTRO" clean_cache