%global _debugsource_packages 0 %global _debuginfo_packages 0 %global debug_package %{nil} %global corefreq_version 2.0.8 Name: corefreq Version: %{corefreq_version} Release: 25.alpha0%{?dist} Summary: CPU monitoring software with akmod kernel module License: GPL-2.0-only URL: https://github.com/cyring/CoreFreq Source0: %{url}/archive/refs/tags/%{version}.tar.gz#/%{name}-%{version}.tar.gz Source1: corefreqd.service Source2: Makefile.akmod Source3: corefreq-kmod.spec.in Source4: corefreq-module-monitor.service Source5: corefreq-module-monitor.sh # Akmod BuildRequires BuildRequires: kmodtool BuildRequires: akmods BuildRequires: gcc make rpm-build BuildRequires: systemd-rpm-macros BuildRequires: kernel-devel # Runtime Requirements Requires: systemd Suggests: mokutil Requires: %{name}-kmod >= %{version} # Generate akmod metadata %{expand:%(kmodtool --target %{_target_cpu} --kmodname %{name} --pattern ".*" --akmod 2>/dev/null) } %description CoreFreq is a CPU monitoring software designed for 64-bit Processors. This package provides the user-space tools and the akmod source for the 'corefreqk' kernel module with full automation including Secure Boot support. %package -n akmod-%{name} Summary: Akmod package for %{name} kernel module(s) Requires: kmodtool Requires: akmods Provides: %{name}-kmod = %{?epoch:%{epoch}:}%{version}-%{release} Requires: %{name}-kmod-common >= %{?epoch:%{epoch}:}%{version} %description -n akmod-%{name} This package provides the akmod package for the %{name} kernel modules. %package kmod-common Summary: Common files for %{name} kernel module Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release} Provides: %{name}-kmod-common = %{?epoch:%{epoch}:}%{version} %description kmod-common This package provides the common files for the %{name} kernel modules. %prep %autosetup -n CoreFreq-%{version} -p1 cp Makefile Makefile.orig cp %{SOURCE2} Makefile %build # Build userspace tools only make %{?_smp_mflags} userspace %install # --- Install userspace binaries --- install -D -m 0755 build/corefreqd %{buildroot}%{_bindir}/corefreqd install -D -m 0755 build/corefreq-cli %{buildroot}%{_bindir}/corefreq-cli # --- Install systemd services --- install -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/corefreqd.service install -D -m 0644 %{SOURCE4} %{buildroot}%{_unitdir}/corefreq-module-monitor.service # --- Install module monitor script --- install -D -m 0755 %{SOURCE5} %{buildroot}%{_libexecdir}/corefreq-module-monitor.sh # --- Create akmod SRPM --- install -d %{buildroot}%{_usrsrc}/akmods/ SRPM_TOPDIR=$(mktemp -d) mkdir -p "$SRPM_TOPDIR"/{SOURCES,SPECS} sed -e 's|@COREFREQ_VERSION@|%{corefreq_version}|g' \ -e 's|@RELEASE@|1%{?dist}|g' \ %{SOURCE3} > "$SRPM_TOPDIR"/SPECS/corefreq-kmod.spec tar -czf "$SRPM_TOPDIR"/SOURCES/corefreq-kmod-%{version}.tar.gz \ --transform "s|^CoreFreq-%{version}|corefreq-kmod-%{version}|" \ -C %{_builddir} \ CoreFreq-%{version} rpmbuild -bs \ --define "_topdir $SRPM_TOPDIR" \ "$SRPM_TOPDIR"/SPECS/corefreq-kmod.spec install -m 0644 "$SRPM_TOPDIR"/SRPMS/*.src.rpm %{buildroot}%{_usrsrc}/akmods/ SRPM_NAME=$(basename "$SRPM_TOPDIR"/SRPMS/*.src.rpm) ln -s "$SRPM_NAME" %{buildroot}%{_usrsrc}/akmods/%{name}-kmod.latest rm -rf "$SRPM_TOPDIR" %post # Only show MOK enrollment info if needed if [ -d /sys/firmware/efi/efivars ]; then if mokutil --sb-state 2>/dev/null | grep -q "SecureBoot enabled"; then if ! mokutil --list-enrolled 2>/dev/null | grep -q "CN=akmods"; then cat << 'EOF' ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔐 SECURE BOOT DETECTED - MOK ENROLLMENT REQUIRED ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ To use CoreFreq with Secure Boot, enroll the akmods signing key: sudo mokutil --import /etc/pki/akmods/certs/public_key.der Then REBOOT and follow the MOK Manager instructions. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ EOF fi fi fi %systemd_post corefreq-module-monitor.service corefreqd.service # Enable and start the monitor service - it will handle everything systemctl enable corefreq-module-monitor.service >/dev/null 2>&1 || true systemctl start corefreq-module-monitor.service >/dev/null 2>&1 || true echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo " CoreFreq installed and started automatically!" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo " Check status: systemctl status corefreq-module-monitor.service" echo " View logs: journalctl -u corefreq-module-monitor.service" echo " Use CLI: corefreq-cli" echo "" echo " The monitor service manages both the kernel module and daemon." echo "" %preun %systemd_preun corefreq-module-monitor.service corefreqd.service if [ $1 -eq 0 ]; then echo "Stopping CoreFreq services..." # Stop monitor service - it will handle stopping daemon and unloading module systemctl stop corefreq-module-monitor.service >/dev/null 2>&1 || true fi %postun %systemd_postun_with_restart corefreq-module-monitor.service # === KERNEL UPDATE TRIGGERS === %triggerin -- kernel kernel-core kernel-devel kernel-modules kernel-modules-core # Module will rebuild automatically on next monitor service start echo "Kernel update detected. Module will rebuild on next boot." if systemctl is-enabled --quiet corefreq-module-monitor.service; then echo "Or restart now: systemctl restart corefreq-module-monitor.service" fi %post -n akmod-%{name} # Trigger initial build asynchronously if command -v at >/dev/null 2>&1 && systemctl is-active --quiet atd; then echo "%{_bindir}/akmods --akmod %{name} --kernels \"\$(uname -r)\"" | at now + 1 minute 2>/dev/null || { nohup sh -c 'sleep 10; %{_bindir}/akmods --akmod %{name} --kernels "$(uname -r)"' >/dev/null 2>&1 & } else nohup sh -c 'sleep 10; %{_bindir}/akmods --akmod %{name} --kernels "$(uname -r)"' >/dev/null 2>&1 & fi echo "Kernel module compilation scheduled." echo "Monitor status: systemctl status corefreq-module-monitor.service" %preun -n akmod-%{name} if [ $1 -eq 0 ]; then for kver in $(find /lib/modules -name "corefreqk.ko" -exec dirname {} \; 2>/dev/null | sed 's|.*/modules/||;s|/.*||' | sort -u); do rm -rf "/lib/modules/$kver/extra/corefreq" "/lib/modules/$kver/updates/corefreqk.ko" 2>/dev/null || true /sbin/depmod -a "$kver" 2>/dev/null || true done fi %files %license LICENSE %doc README.md %{_bindir}/corefreq-cli %{_bindir}/corefreqd %{_unitdir}/corefreqd.service %{_unitdir}/corefreq-module-monitor.service %{_libexecdir}/corefreq-module-monitor.sh %files -n akmod-%{name} %{_usrsrc}/akmods/corefreq-kmod-%{version}-*.src.rpm %{_usrsrc}/akmods/corefreq-kmod.latest %files kmod-common # Dependency anchor %changelog * Wed Oct 29 2025 Package Maintainer - 2.0.8-24 - Simplified architecture: spec handles installation only - All runtime logic moved to dedicated systemd services - Added corefreq-module-monitor.service for module management - Removed inline scripts and starter helper - Clean separation of concerns between packaging and runtime