From 6b0b482d16d0b14e9bb63ce3fe4515d773287cd5 Mon Sep 17 00:00:00 2001 From: Joe Lawrence Date: Mon, 23 May 2022 08:47:18 -0400 Subject: [PATCH 1/5] test/integration/lib.sh: tweak epel URL for rhel-major EPEL ships an epel-release-latest-X.noarch.rpm per rhel-X major release. Install the package matching the system release. Signed-off-by: Joe Lawrence --- test/integration/lib.sh | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/test/integration/lib.sh b/test/integration/lib.sh index f18114936..81108dc17 100644 --- a/test/integration/lib.sh +++ b/test/integration/lib.sh @@ -91,17 +91,24 @@ kpatch_rhel_dependencies() ;; esac - sudo yum install -y "https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm" - sudo yum install -y ccache - sudo yum remove -y epel-release + # ccache + if ! command -v ccache &> /dev/null; then + if ! sudo yum install -y ccache; then + sudo yum install -y "https://dl.fedoraproject.org/pub/epel/epel-release-latest-${rhel_major}.noarch.rpm" && \ + sudo yum install -y ccache && \ + sudo yum remove -y epel-release + fi + fi } kpatch_centos_dependencies() { local kernel_version local arch + local rhel_major kernel_version=$(uname -r) arch=$(uname -m) + rhel_major=${VERSION_ID%%.*} sudo yum install -y gcc gcc-c++ "kernel-devel-${kernel_version%.*}" elfutils elfutils-devel sudo yum install -y yum-utils zlib-devel binutils-devel newt-devel \ @@ -111,9 +118,14 @@ kpatch_centos_dependencies() sudo yum-builddep -y "kernel-${kernel_version%.*}" sudo debuginfo-install -y "kernel-${kernel_version%.*}" - sudo yum install -y "https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm" - sudo yum install -y ccache - sudo yum remove -y epel-release + # ccache + if ! command -v ccache &> /dev/null; then + if ! sudo yum install -y ccache; then + sudo yum install -y "https://dl.fedoraproject.org/pub/epel/epel-release-latest-${rhel_major}.noarch.rpm" && \ + sudo yum install -y ccache && \ + sudo yum remove -y epel-release + fi + fi } kpatch_openEuler_dependencies() From e72b876f971a8138e838c1a854e1655bfc4fa629 Mon Sep 17 00:00:00 2001 From: Joe Lawrence Date: Mon, 23 May 2022 08:47:18 -0400 Subject: [PATCH 2/5] test/integration/lib.sh: fix kernel build dependencies The yum-builddep utility doesn't always install all the kernel build dependencies. Using the --skip-unavailable flag (rhel8+) lets us skip over packages that it can't find, but continue to install the ones it can. (Unavailable packages are usually platform-specific or not strictly necessary for kpatch-build's kernel build invocation.) Signed-off-by: Joe Lawrence --- test/integration/lib.sh | 47 ++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/test/integration/lib.sh b/test/integration/lib.sh index 81108dc17..543a0aabb 100644 --- a/test/integration/lib.sh +++ b/test/integration/lib.sh @@ -58,38 +58,33 @@ kpatch_rhel_dependencies() local kernel_version local arch local rhel_major - local py_version + local yum_utils_version kernel_version=$(uname -r) arch=$(uname -m) rhel_major=${VERSION_ID%%.*} - if [ "${rhel_major}" -ge 8 ]; then - py_version="3" - else - py_version="2" - fi - - sudo yum install -y git gcc gcc-c++ "kernel-devel-${kernel_version%.*}" elfutils elfutils-devel - sudo yum install -y yum-utils zlib-devel binutils-devel newt-devel \ - python${py_version}-devel perl-ExtUtils-Embed audit-libs-devel numactl-devel \ - pciutils-devel bison ncurses-devel rpm-build java-devel - sudo yum-builddep -y "kernel-${kernel_version%.*}" + # kpatch-build dependencies + sudo yum install -y \ + elfutils \ + elfutils-devel \ + gcc \ + gcc-c++ \ + git \ + "kernel-devel-${kernel_version%.*}" \ + rpm-build \ + wget \ + yum-utils sudo debuginfo-install -y "kernel-${kernel_version%.*}" + [[ "$arch" == "ppc64le" ]] && sudo yum install -y gcc-plugin-devel - case "${arch}" in - "x86_64") - sudo yum install -y pesign - ;; - "ppc64le") - sudo yum install -y gcc-plugin-devel - if [ "${rhel_major}" -ge 8 ]; then - # yum-builddep doesn't provide everything we need :( - sudo yum install -y flex openssl-devel - fi - ;; - *) - ;; - esac + # kernel dependencies + yum_utils_version=$(rpm -q --queryformat="%{version}" yum-utils) + if [[ "${yum_utils_version}" = "$(echo -e "${yum_utils_version}\\n4.0.12" | sort -rV | head -n1)" ]]; then + sudo yum-builddep -y --skip-unavailable "kernel-${kernel_version%.*}" + else + sudo yum-builddep -y "kernel-${kernel_version%.*}" + fi + [[ "$arch" == "x86_64" ]] && sudo yum install -y pesign # ccache if ! command -v ccache &> /dev/null; then From b6abf449d65563322e8a1d63bbaea66ada8b790a Mon Sep 17 00:00:00 2001 From: Joe Lawrence Date: Mon, 23 May 2022 08:47:18 -0400 Subject: [PATCH 3/5] test/integration/lib.sh: combine Fedora, CentOS with RHEL dependencies All three distributions work more or less the same, so just combine their dependency installs. Signed-off-by: Joe Lawrence --- test/integration/lib.sh | 44 +++++------------------------------------ 1 file changed, 5 insertions(+), 39 deletions(-) diff --git a/test/integration/lib.sh b/test/integration/lib.sh index 543a0aabb..4ab2c92a2 100644 --- a/test/integration/lib.sh +++ b/test/integration/lib.sh @@ -7,23 +7,6 @@ kpatch_set_ccache_max_size() ccache --max-size="${ccache_max_size}" } -kpatch_fedora_dependencies() -{ - local kernel_version - kernel_version=$(uname -r) - - sudo dnf install -y gcc "kernel-devel-${kernel_version%.*}" elfutils elfutils-devel - sudo dnf install -y pesign yum-utils openssl wget numactl-devel - sudo dnf builddep -y "kernel-${kernel_version%.*}" - sudo dnf debuginfo-install -y "kernel-${kernel_version%.*}" - - sudo dnf install -y ccache - - if [[ "$(uname -m)" == "ppc64le" ]]; then - sudo yum install -y gcc-plugin-devel - fi -} - kpatch_ubuntu_dependencies() { sudo sed -i 's/# deb-src/deb-src/' /etc/apt/sources.list @@ -98,29 +81,12 @@ kpatch_rhel_dependencies() kpatch_centos_dependencies() { - local kernel_version - local arch - local rhel_major - kernel_version=$(uname -r) - arch=$(uname -m) - rhel_major=${VERSION_ID%%.*} - - sudo yum install -y gcc gcc-c++ "kernel-devel-${kernel_version%.*}" elfutils elfutils-devel - sudo yum install -y yum-utils zlib-devel binutils-devel newt-devel \ - python-devel perl-ExtUtils-Embed audit-libs-devel numactl-devel \ - pciutils-devel bison ncurses-devel rpm-build java-devel pesign - sudo yum-config-manager --enable debug - sudo yum-builddep -y "kernel-${kernel_version%.*}" - sudo debuginfo-install -y "kernel-${kernel_version%.*}" + kpatch_rhel_dependencies +} - # ccache - if ! command -v ccache &> /dev/null; then - if ! sudo yum install -y ccache; then - sudo yum install -y "https://dl.fedoraproject.org/pub/epel/epel-release-latest-${rhel_major}.noarch.rpm" && \ - sudo yum install -y ccache && \ - sudo yum remove -y epel-release - fi - fi +kpatch_fedora_dependencies() +{ + kpatch_rhel_dependencies } kpatch_openEuler_dependencies() From b6b650a0062aef988b71a3faf0ce6b405058e97b Mon Sep 17 00:00:00 2001 From: Joe Lawrence Date: Mon, 23 May 2022 08:47:18 -0400 Subject: [PATCH 4/5] Makefile: add dependencies target Installing the dependencies should be a one-step operation for the user. Signed-off-by: Joe Lawrence --- Makefile | 6 +++++- doc/INSTALL.md | 10 ++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 1153492ac..7c251c690 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ UNITTEST_DIR = test/unit INTEGRATION_DIR = test/integration CLEAN_DIRS += clean-$(UNITTEST_DIR) -.PHONY: all install uninstall clean check unit +.PHONY: all dependencies install uninstall clean check unit .PHONY: $(SUBDIRS) $(BUILD_DIRS) $(INSTALL_DIRS) $(CLEAN_DIRS) .PHONY: integration integration-slow integration-quick .PHONY: vagrant-integration-slow vagrant-integration-quick vagrant-integration @@ -21,6 +21,10 @@ all: $(BUILD_DIRS) $(BUILD_DIRS): $(MAKE) -C $(@:build-%=%) +dependencies: SHELL:=/bin/bash +dependencies: + source test/integration/lib.sh && kpatch_dependencies + install: $(INSTALL_DIRS) $(INSTALL_DIRS): $(MAKE) -C $(@:install-%=%) install diff --git a/doc/INSTALL.md b/doc/INSTALL.md index 2094f177b..3b2fdb7bb 100644 --- a/doc/INSTALL.md +++ b/doc/INSTALL.md @@ -32,9 +32,8 @@ architecture is supported. Install the dependencies for compiling kpatch and running kpatch-build: ```bash -source test/integration/lib.sh # Will request root privileges -kpatch_dependencies +make dependencies ``` ### Oracle Linux 7 @@ -78,12 +77,12 @@ ccache --max-size=5G Install the dependencies for compiling kpatch and running kpatch-build ```bash -source test/integration/lib.sh # required on ppc64le # e.g., on Ubuntu 18.04 for gcc-7.3 apt-get install gcc-7-plugin-dev + # Will request root privileges -kpatch_dependencies +make dependencies ``` ### Debian 9 (Stretch) @@ -200,9 +199,8 @@ to see its documents. This document describes how to run mainline kpatch in open Install the dependencies for compiling kpatch and running kpatch-build: ```bash -source test/integration/lib.sh # Will request root privileges -kpatch_dependencies +make dependencies ``` Before running kpatch-build, two more things need to be checked: From 02306e62ae6ade2b4e00f9e2e7b3cae3657f3e0d Mon Sep 17 00:00:00 2001 From: Joe Lawrence Date: Mon, 23 May 2022 08:47:18 -0400 Subject: [PATCH 5/5] Makefile: add make help We've got a lot of top level Makefile targets, help out the user. Signed-off-by: Joe Lawrence --- Makefile | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Makefile b/Makefile index 7c251c690..37ab1e892 100644 --- a/Makefile +++ b/Makefile @@ -15,6 +15,7 @@ CLEAN_DIRS += clean-$(UNITTEST_DIR) .PHONY: integration integration-slow integration-quick .PHONY: vagrant-integration-slow vagrant-integration-quick vagrant-integration .PHONY: vagrant-install +.PHONY: help all: $(BUILD_DIRS) @@ -71,3 +72,24 @@ check: test/integration/lib.sh test/integration/rebase-patches \ test/integration/test-vagrant \ test/integration/vm-integration-run + +help: + @echo "kpatch Makefile" + @echo + @echo "Targets:" + @echo " make dependencies install build dependencies [1]" + @echo " make all build entire project" + @echo " make install install programs to system [1]" + @echo " make uninstall remove programs from system [1]" + @echo " make clean clean build files" + @echo + @echo "Test targets:" + @echo " make check run static code analyzers" + @echo " make integration build and run integration tests [2]" + @echo " make integration-slow build and run integration tests [2]" + @echo " make integration-quick build and run integration tests [2]" + @echo " make unit run unit tests" + @echo + @echo "[1] requires admin privileges" + @echo "[2] installs test kpatch kernel modules, run at your own risk" + @echo