From 34dadfffcdb822dee1dd6b2d4344c98a28a92f0b Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Sat, 26 Sep 2026 18:39:24 +0200 Subject: [PATCH 1/2] rpm: Do not require kernel to be installed for building the package The kernel-devel is sufficient for just building an RPM. Signed-off-by: Robert Baldyga --- tools/pckgen.d/rpm/CAS_NAME.spec | 9 ++++++++- tools/pckgen.sh | 15 +++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/tools/pckgen.d/rpm/CAS_NAME.spec b/tools/pckgen.d/rpm/CAS_NAME.spec index 33ae53641..2f2338950 100644 --- a/tools/pckgen.d/rpm/CAS_NAME.spec +++ b/tools/pckgen.d/rpm/CAS_NAME.spec @@ -122,7 +122,14 @@ the kernels installed there, so no prebuilt kernel modules are shipped here. %build %if %{without dkms} -export KERNEL_DIR=/lib/modules/%{kver}/build/ +if [ -e /lib/modules/%{kver}/build/Makefile ]; then + export KERNEL_DIR=/lib/modules/%{kver}/build/ +elif [ -e /usr/src/kernels/%{kver}/Makefile ]; then + export KERNEL_DIR=/usr/src/kernels/%{kver}/ +else + echo "Kernel build tree for %{kver} not found" >&2 + exit 1 +fi ./configure --kernel-dir $KERNEL_DIR %else diff --git a/tools/pckgen.sh b/tools/pckgen.sh index 17159c17b..6e294397b 100755 --- a/tools/pckgen.sh +++ b/tools/pckgen.sh @@ -29,7 +29,6 @@ DEB_CONTROL_FILES_DIR="$SCRIPT_BASE_DIR/${THIS%.*}.d/deb/debian" PACKAGE_MAINTAINER="Robert Baldyga " PACKAGE_DATE="$(date -R)" TEMP_TEMPLATE="opencas-${THIS}" -RHEL_KERNEL_PKG_NAME="kernel" RHEL_KERNEL_DEVEL_PKG_NAME="kernel-devel" RHEL_LIBELF_PKG_NAME="elfutils-libelf-devel" RHEL_UTIL_PKG_NAME="util-linux" @@ -87,8 +86,8 @@ print_help() { echo " if --kernel-version is provided, list only matching versions" echo " -k, --kernel-version build packages for specific kernel version" echo " (RPM only; DEB uses DKMS to build modules during install);" - echo " sources with headers for this kernel must be" - echo " available in /lib/modules/, or if used with --mock" + echo " sources with headers for this kernel must be available" + echo " in /lib/modules/ or /usr/src/kernels/, or if used with --mock" echo " specific kernel version will be installed automatically" echo " if available in repo" echo " (NOTE: if given version matches more than one available" @@ -227,9 +226,9 @@ check_kernel_version() { echo -e "--- Building in mock environment '$MOCK_CFG' for kernel version: \e[33m$KVER_FULL\e[0m" else if [ "$KVER" ]; then - KVER_FULL=$(find /lib/modules/* -maxdepth 0 -type d -name "$KVER*" -printf "%f\n" | sort -V | tail -n 1) + KVER_FULL=$(find /lib/modules/* /usr/src/kernels/* -maxdepth 0 -type d -name "$KVER*" -printf "%f\n" 2>/dev/null | sort -V | tail -n 1) if [ ! "$KVER_FULL" ]; then - error "kernel version matching '$KVER' not found in /lib/modules/" + error "kernel version matching '$KVER' not found in /lib/modules/ nor /usr/src/kernels/" fi fi @@ -308,7 +307,7 @@ list_kernels() { else echo "--- Listing available local kernel versions" - local KVER_LIST=$(find /lib/modules/* -maxdepth 0 -type d ${KVER:+-name "$KVER*"} -printf "%f\n" | sort -V) + local KVER_LIST=$(find /lib/modules/* /usr/src/kernels/* -maxdepth 0 -type d ${KVER:+-name "$KVER*"} -printf "%f\n" 2>/dev/null | sort -uV) fi echo -e "\nAvailable kernel versions${MOCK_CFG:+ in '$MOCK_CFG'}${KVER:+ matching '$KVER'}:\n${KVER_LIST[@]}" @@ -431,7 +430,7 @@ rpm_spec_prepare() { # counting on that there will be only one kernel sources installed. # Odds are much more in favor of this scenario, than of the rare case of # having a match between kernel package version and the actual kernel version. - sed -i "/export KERNEL_DIR/s/%{kver}/*/g" "$RPM_SPECS_DIR/$CAS_NAME.spec" + sed -i "/^%build/,/--kernel-dir/s/%{kver}/*/g" "$RPM_SPECS_DIR/$CAS_NAME.spec" fi sed -i "s//$SUSE_KERNEL_PKG_NAME/g" "$RPM_SPECS_DIR/$CAS_NAME.spec" @@ -439,7 +438,7 @@ rpm_spec_prepare() { sed -i "s//$SUSE_LIBELF_PKG_NAME/g" "$RPM_SPECS_DIR/$CAS_NAME.spec" sed -i "s//$SUSE_UTIL_PKG_NAME/g" "$RPM_SPECS_DIR/$CAS_NAME.spec" else - sed -i "s//$RHEL_KERNEL_PKG_NAME/g" "$RPM_SPECS_DIR/$CAS_NAME.spec" + sed -i "/^BuildRequires: /d" "$RPM_SPECS_DIR/$CAS_NAME.spec" sed -i "s//$RHEL_KERNEL_DEVEL_PKG_NAME/g" "$RPM_SPECS_DIR/$CAS_NAME.spec" sed -i "s//$RHEL_LIBELF_PKG_NAME/g" "$RPM_SPECS_DIR/$CAS_NAME.spec" sed -i "s//$RHEL_UTIL_PKG_NAME/g" "$RPM_SPECS_DIR/$CAS_NAME.spec" From df4ec634be0e18536cd28d45334f8e2c575d718c Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Sat, 26 Sep 2026 18:45:01 +0200 Subject: [PATCH 2/2] rpm: Run depmod only for the target kernel Signed-off-by: Robert Baldyga --- tools/pckgen.d/rpm/CAS_NAME.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/pckgen.d/rpm/CAS_NAME.spec b/tools/pckgen.d/rpm/CAS_NAME.spec index 2f2338950..4cbcda96c 100644 --- a/tools/pckgen.d/rpm/CAS_NAME.spec +++ b/tools/pckgen.d/rpm/CAS_NAME.spec @@ -221,7 +221,7 @@ fi %if %{without dkms} %post modules_%{kver_filename} -depmod +depmod -a %{kver} . /etc/os-release # Determine the exact location of installed modules to add them to weak-modules for file in $(rpm -ql $(rpm -qa | grep -modules)); do @@ -258,7 +258,10 @@ if [ $1 -eq 0 ]; then rm -f /var/run/rpm--modules printf "%s\n" "${modules[@]}" | weak-modules --no-initramfs --remove-modules fi - depmod + # The kernel package may have been uninstalled before Open CAS RPM + if [ -e /lib/modules/%{kver}/modules.dep ]; then + depmod -a %{kver} + fi fi %else %posttrans dkms