Merge branch 'pm-tools'

Merge a cpupower utility update for 6.16-rc1 that adds a systemd service
to run cpupower and changes binding's Makefile to use -lcpupower (John B.
Wyatt IV, Francesco Poli).

* pm-tools:
  cpupower: do not install files to /etc/default/
  cpupower: do not call systemctl at install time
  cpupower: do not write DESTDIR to cpupower.service
  cpupower: change binding's makefile to use -lcpupower
  cpupower: add a systemd service to run cpupower
This commit is contained in:
Rafael J. Wysocki
2025-05-26 21:24:27 +02:00
7 changed files with 126 additions and 10 deletions

View File

@@ -2,6 +2,7 @@
# Makefile for cpupower
#
# Copyright (C) 2005,2006 Dominik Brodowski <linux@dominikbrodowski.net>
# Copyright (C) 2025 Francesco Poli <invernomuto@paranoici.org>
#
# Based largely on the Makefile for udev by:
#
@@ -71,6 +72,7 @@ bindir ?= /usr/bin
sbindir ?= /usr/sbin
mandir ?= /usr/man
libdir ?= /usr/lib
libexecdir ?= /usr/libexec
includedir ?= /usr/include
localedir ?= /usr/share/locale
docdir ?= /usr/share/doc/packages/cpupower
@@ -83,6 +85,7 @@ CP = cp -fpR
INSTALL = /usr/bin/install -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
SETPERM_DATA = chmod 644
#bash completion scripts get sourced and so they should be rw only.
INSTALL_SCRIPT = ${INSTALL} -m 644
@@ -302,6 +305,13 @@ install-tools: $(OUTPUT)cpupower
$(INSTALL_PROGRAM) $(OUTPUT)cpupower $(DESTDIR)${bindir}
$(INSTALL) -d $(DESTDIR)${bash_completion_dir}
$(INSTALL_SCRIPT) cpupower-completion.sh '$(DESTDIR)${bash_completion_dir}/cpupower'
$(INSTALL) -d $(DESTDIR)${confdir}
$(INSTALL_DATA) cpupower-service.conf '$(DESTDIR)${confdir}'
$(INSTALL) -d $(DESTDIR)${libexecdir}
$(INSTALL_PROGRAM) cpupower.sh '$(DESTDIR)${libexecdir}/cpupower'
$(INSTALL) -d $(DESTDIR)${libdir}/systemd/system
sed 's|___CDIR___|${confdir}|; s|___LDIR___|${libexecdir}|' cpupower.service.in > '$(DESTDIR)${libdir}/systemd/system/cpupower.service'
$(SETPERM_DATA) '$(DESTDIR)${libdir}/systemd/system/cpupower.service'
install-man:
$(INSTALL_DATA) -D man/cpupower.1 $(DESTDIR)${mandir}/man1/cpupower.1
@@ -336,6 +346,9 @@ uninstall:
- rm -f $(DESTDIR)${includedir}/cpufreq.h
- rm -f $(DESTDIR)${includedir}/cpuidle.h
- rm -f $(DESTDIR)${bindir}/utils/cpupower
- rm -f $(DESTDIR)${confdir}cpupower-service.conf
- rm -f $(DESTDIR)${libexecdir}/cpupower
- rm -f $(DESTDIR)${libdir}/systemd/system/cpupower.service
- rm -f $(DESTDIR)${mandir}/man1/cpupower.1
- rm -f $(DESTDIR)${mandir}/man1/cpupower-frequency-set.1
- rm -f $(DESTDIR)${mandir}/man1/cpupower-frequency-info.1

View File

@@ -59,6 +59,10 @@ $ sudo make install
-----------------------------------------------------------------------
| man pages | /usr/man |
-----------------------------------------------------------------------
| systemd service | /usr/lib/systemd/system |
-----------------------------------------------------------------------
| systemd support script | /usr/libexec |
-----------------------------------------------------------------------
To put it in other words it makes build results available system-wide,
enabling any user to simply start using it without any additional steps
@@ -109,6 +113,10 @@ The files will be installed to the following dirs:
-----------------------------------------------------------------------
| man pages | ${DESTDIR}/usr/man |
-----------------------------------------------------------------------
| systemd service | ${DESTDIR}/usr/lib/systemd/system |
-----------------------------------------------------------------------
| systemd support script | ${DESTDIR}/usr/libexec |
-----------------------------------------------------------------------
If you look at the table for the default 'make' output dirs you will
notice that the only difference with the non-default case is the
@@ -173,6 +181,26 @@ The issue is that binary cannot find the 'libcpupower' library. So, we
shall point to the lib dir:
sudo LD_LIBRARY_PATH=lib64/ ./bin/cpupower
systemd service
---------------
A systemd service is also provided to run the cpupower utility at boot with
settings read from a configuration file.
If you want systemd to find the new service after the installation, the service
unit must have been installed in one of the system unit search path directories
(such as '/usr/lib/systemd/system/', which is the default location) and (unless
you are willing to wait for the next reboot) you need to issue the following
command:
$ sudo systemctl daemon-reload
If you want to enable this systemd service, edit '/etc/cpupower-service.conf'
(uncommenting at least one of the options, depending on your preferences)
and then issue the following command:
$ sudo systemctl enable --now cpupower.service
THANKS
------

View File

@@ -1,22 +1,20 @@
# SPDX-License-Identifier: GPL-2.0-only
# Makefile for libcpupower's Python bindings
#
# This Makefile expects you have already run the makefile for cpupower to build
# the .o files in the lib directory for the bindings to be created.
# This Makefile expects you have already run `make install-lib` in the lib
# directory for the bindings to be created.
CC := gcc
HAVE_SWIG := $(shell if which swig >/dev/null 2>&1; then echo 1; else echo 0; fi)
HAVE_PYCONFIG := $(shell if which python-config >/dev/null 2>&1; then echo 1; else echo 0; fi)
LIB_DIR := ../../lib
PY_INCLUDE = $(firstword $(shell python-config --includes))
OBJECTS_LIB = $(wildcard $(LIB_DIR)/*.o)
INSTALL_DIR = $(shell python3 -c "import site; print(site.getsitepackages()[0])")
all: _raw_pylibcpupower.so
_raw_pylibcpupower.so: raw_pylibcpupower_wrap.o
$(CC) -shared $(OBJECTS_LIB) raw_pylibcpupower_wrap.o -o _raw_pylibcpupower.so
$(CC) -shared -lcpupower raw_pylibcpupower_wrap.o -o _raw_pylibcpupower.so
raw_pylibcpupower_wrap.o: raw_pylibcpupower_wrap.c
$(CC) -fPIC -c raw_pylibcpupower_wrap.c $(PY_INCLUDE)

View File

@@ -5,18 +5,21 @@ libcpupower (aside from the libcpupower object files).
requirements
------------
* You need the object files in the libcpupower directory compiled by
cpupower's makefile.
* If you are building completely from upstream; please install libcpupower by
running `make install-lib` within the cpupower directory. This installs the
libcpupower.so file and symlinks needed. Otherwise, please make sure a symlink
to libcpupower.so exists in your library path from your distribution's
packages.
* The SWIG program must be installed.
* The Python's development libraries installed.
* The Python's development libraries must be installed.
Please check that your version of SWIG is compatible with the version of Python
installed on your machine by checking the SWIG changelog on their website.
https://swig.org/
Note that while SWIG itself is GPL v3+ licensed; the resulting output,
the bindings code: is permissively licensed + the license of libcpupower's .o
files. For these bindings that means GPL v2.
the bindings code: is permissively licensed + the license of libcpupower's
library files. For these bindings that means GPL v2.
Please see https://swig.org/legal.html and the discussion [1] for more details.

View File

@@ -0,0 +1,32 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2012, Sébastien Luttringer
# Copyright (C) 2024-2025, Francesco Poli <invernomuto@paranoici.org>
# Configuration file for cpupower.service systemd service unit
#
# Edit this file (uncommenting at least one of the options, depending on
# your preferences) and then enable cpupower.service, if you want cpupower
# to run at boot with these settings.
# --- CPU clock frequency ---
# Define CPU governor
# Valid governors: ondemand, performance, powersave, conservative, userspace
#GOVERNOR='ondemand'
# Limit frequency range
# Valid suffixes: Hz, kHz (default), MHz, GHz, THz
#MIN_FREQ="2.25GHz"
#MAX_FREQ="3GHz"
# Set a specific frequency
# Requires userspace governor to be available.
# If this option is set, all the previous frequency options are ignored
#FREQ=
# --- CPU policy ---
# Set a register on supported Intel processore which allows software to convey
# its policy for the relative importance of performance versus energy savings to
# the processor. See man CPUPOWER-SET(1) for additional details
#PERF_BIAS=

View File

@@ -0,0 +1,16 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2012-2020, Sébastien Luttringer
# Copyright (C) 2024-2025, Francesco Poli <invernomuto@paranoici.org>
[Unit]
Description=Apply cpupower configuration
ConditionVirtualization=!container
[Service]
Type=oneshot
EnvironmentFile=-___CDIR___cpupower-service.conf
ExecStart=___LDIR___/cpupower
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,26 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2012, Sébastien Luttringer
# Copyright (C) 2024, Francesco Poli <invernomuto@paranoici.org>
ESTATUS=0
# apply CPU clock frequency options
if test -n "$FREQ"
then
cpupower frequency-set -f "$FREQ" > /dev/null || ESTATUS=1
elif test -n "${GOVERNOR}${MIN_FREQ}${MAX_FREQ}"
then
cpupower frequency-set \
${GOVERNOR:+ -g "$GOVERNOR"} \
${MIN_FREQ:+ -d "$MIN_FREQ"} ${MAX_FREQ:+ -u "$MAX_FREQ"} \
> /dev/null || ESTATUS=1
fi
# apply CPU policy options
if test -n "$PERF_BIAS"
then
cpupower set -b "$PERF_BIAS" > /dev/null || ESTATUS=1
fi
exit $ESTATUS