commit
3a6264113e
@ -0,0 +1,8 @@
|
|||||||
|
# Also see:
|
||||||
|
# https://fedoraproject.org/wiki/Starting_services_by_default
|
||||||
|
|
||||||
|
# Installing presets is not the preferred solution but until another one
|
||||||
|
# presents itself:
|
||||||
|
# https://bugzilla.rpmfusion.org/show_bug.cgi?id=3713
|
||||||
|
enable akmods.service
|
||||||
|
#enable akmods-shutdown.service
|
@ -0,0 +1,65 @@
|
|||||||
|
#!/bin/bash -
|
||||||
|
#
|
||||||
|
# 95-akmodposttrans.install - Calls akmods for newly installed kernels
|
||||||
|
#
|
||||||
|
# Copyright (c) 2019 Nicolas Viéville <nicolas.vieville@uphf.fr>
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
# a copy of this software and associated documentation files (the
|
||||||
|
# "Software"), to deal in the Software without restriction, including
|
||||||
|
# without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
# permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
# the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be
|
||||||
|
# included in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
|
||||||
|
COMMAND="$1"
|
||||||
|
KERNEL_VERSION="$2"
|
||||||
|
BOOT_DIR_ABS="$3"
|
||||||
|
KERNEL_IMAGE="$4"
|
||||||
|
|
||||||
|
# just check in case a user calls this directly
|
||||||
|
if [[ ! -w /var ]] ; then
|
||||||
|
echo "Needs to run as root to be able to install rpms." >&2
|
||||||
|
exit 4
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -n "${KERNEL_VERSION}" ]] ; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "${COMMAND}" in
|
||||||
|
add)
|
||||||
|
# needs to run in background as rpmdb might be locked otherwise
|
||||||
|
if [ -e /bin/systemctl ] ; then
|
||||||
|
# Exit early if system-update.target is active - rhbz#1518401
|
||||||
|
/bin/systemctl is-active system-update.target &>/dev/null
|
||||||
|
RET=$?
|
||||||
|
|
||||||
|
[ $RET == 0 ] && exit 0
|
||||||
|
|
||||||
|
/bin/systemctl restart akmods@${KERNEL_VERSION}.service --no-block >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
nohup /usr/sbin/akmods --from-kernel-posttrans --kernels ${KERNEL_VERSION} > /dev/null 2>&1 &
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
remove)
|
||||||
|
# Nothing to do
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
@ -0,0 +1,18 @@
|
|||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@ -0,0 +1,12 @@
|
|||||||
|
Akmods startup script will rebuild akmod packages during system
|
||||||
|
boot, while its background daemon will build them for kernels right
|
||||||
|
after they were installed.
|
||||||
|
|
||||||
|
The akmods systemd service provides both, and is enabled by default.
|
||||||
|
|
||||||
|
The akmods-shutdown service is disabled by default but can, in some
|
||||||
|
circumstances, provide an additional chance to build and install a kernel
|
||||||
|
module. Users who would prefer longer shutdowns over delayed startups
|
||||||
|
may wish to consider enabling it with the following command:
|
||||||
|
|
||||||
|
sudo systemctl enable --now akmods-shutdown.service
|
@ -0,0 +1,51 @@
|
|||||||
|
Secure boot is a setup using UEFI firmware to check cryptographic
|
||||||
|
signatures on the bootloader and associated OS kernel to ensure they
|
||||||
|
have not been tampered with or bypassed in the boot process.
|
||||||
|
|
||||||
|
This verification can be extended to Kernel and its modules.
|
||||||
|
It's default case in Fedora with UEFI and Secure boot enabled.
|
||||||
|
|
||||||
|
Fedora Project have signed kernels and also main modules with Fedora
|
||||||
|
Key, but 3rd party modules as NVidia, VirtualBox, etc. need to be signed
|
||||||
|
to load.
|
||||||
|
|
||||||
|
Akmods provides an enroll process to sign third party modules with your
|
||||||
|
own keypair.
|
||||||
|
|
||||||
|
At the first run of the akmods.service, certificate and keypair will be
|
||||||
|
created with default value using the '/usr/sbin/kmodgenca' script.
|
||||||
|
|
||||||
|
You may also wish to manually create your own certificate and keypair
|
||||||
|
with `/usr/sbin/kmodgenca` command.
|
||||||
|
If '/usr/sbin/kmodgenca' is launched with the '-a' parameter, it will
|
||||||
|
use default values to complete the cacert.config file, and to generate
|
||||||
|
automatically the cert and the private key.
|
||||||
|
If '/usr/sbin/kmodgenca' is launched without parameters, user will be
|
||||||
|
prompted to complete manually the cacert.config file, then the cert and
|
||||||
|
the private key will be automatically generated.
|
||||||
|
If the cert and the private key files already exist,
|
||||||
|
'/usr/sbin/kmodgenca' will exit unless the '-f' parameter is used.
|
||||||
|
|
||||||
|
The cert and the private key are stored respectively in
|
||||||
|
/etc/pki/akmods/certs and /etc/pki/akmods/private/ directories.
|
||||||
|
|
||||||
|
Now you need to enroll the public key in MOK, this process is described
|
||||||
|
below.
|
||||||
|
- Ask MOK to enroll new keypair with certificate with the command
|
||||||
|
`mokutil --import /etc/pki/akmods/certs/public_key.der`.
|
||||||
|
- mokutil asks to generate a password to enroll the public key.
|
||||||
|
- Rebooting the system is needed for MOK to enroll the new public key.
|
||||||
|
- On next boot MOK Management is launched and you have to choose
|
||||||
|
"Enroll MOK".
|
||||||
|
- Choose "Continue" to enroll the key or "View key 0" to show the keys
|
||||||
|
already enrolled.
|
||||||
|
- Confirm enrollment by selecting "Yes".
|
||||||
|
- You will be invited to enter the password generated above.
|
||||||
|
WARNING: keyboard is mapped to QWERTY!
|
||||||
|
- The new key is enrolled, and system ask you to reboot.
|
||||||
|
|
||||||
|
You can confirm the enrollment of the new keypair once the system
|
||||||
|
rebooted with:
|
||||||
|
`mokutil --list-enrolled | grep Issuer`
|
||||||
|
or with:
|
||||||
|
`mokutil --test-key /etc/pki/akmods/certs/public_key.der`
|
@ -0,0 +1,575 @@
|
|||||||
|
#!/bin/bash -
|
||||||
|
########################################################################
|
||||||
|
#
|
||||||
|
# akmods - Rebuilds and install akmod RPMs
|
||||||
|
# Copyright (c) 2007, 2008 Thorsten Leemhuis <fedora@leemhuis.info>
|
||||||
|
# Copyright (c) 2018 Nicolas Chauvet <kwizart@gmail.com>
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
# a copy of this software and associated documentation files (the
|
||||||
|
# "Software"), to deal in the Software without restriction, including
|
||||||
|
# without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
# permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
# the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be
|
||||||
|
# included in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
########################################################################
|
||||||
|
#
|
||||||
|
# ToDo:
|
||||||
|
# - use yum/dnf to install required kernel-devel packages?
|
||||||
|
# - better way to detect if a earlier build failed or succeeded
|
||||||
|
# - special kernel "all" (all that are installed with a matching -devel package; could be called from posttrans in akmods packages)
|
||||||
|
# - manpage
|
||||||
|
# - make it configurable if kmod building is done with nohup
|
||||||
|
# - check on shutdown if akmods is still running and let it finish before continuing
|
||||||
|
# - make it configurable if kmods from the repo replace local ones
|
||||||
|
|
||||||
|
# global vars
|
||||||
|
myprog="akmods"
|
||||||
|
myver="0.5.7"
|
||||||
|
kmodlogfile=
|
||||||
|
continue_line=""
|
||||||
|
tmpdir=
|
||||||
|
kernels=
|
||||||
|
verboselevel=2
|
||||||
|
# We cannot differenciate from a code failure to shutdown kill9 oom etc
|
||||||
|
# So we always retry anyway
|
||||||
|
alwaystry=1
|
||||||
|
|
||||||
|
akmods_echo()
|
||||||
|
{
|
||||||
|
# where to output
|
||||||
|
local this_fd=${1}
|
||||||
|
shift
|
||||||
|
|
||||||
|
# verboselevel
|
||||||
|
local this_verbose=${1}
|
||||||
|
shift
|
||||||
|
|
||||||
|
# output to console
|
||||||
|
if (( ${verboselevel} >= ${this_verbose} )) ; then
|
||||||
|
if [[ "${1}" == "--success" ]] ; then
|
||||||
|
echo_success
|
||||||
|
continue_line=""
|
||||||
|
echo
|
||||||
|
return 0
|
||||||
|
elif [[ "${1}" == "--failure" ]] ; then
|
||||||
|
echo_failure
|
||||||
|
echo
|
||||||
|
continue_line=""
|
||||||
|
return 0
|
||||||
|
elif [[ "${1}" == "--warning" ]] ; then
|
||||||
|
echo_warning
|
||||||
|
echo
|
||||||
|
continue_line=""
|
||||||
|
return 0
|
||||||
|
elif [[ "${1}" == "-n" ]] ; then
|
||||||
|
continue_line="true"
|
||||||
|
fi
|
||||||
|
echo "$@" >&${this_fd}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# no need to print the status flags in the logs
|
||||||
|
if [[ "${1}" == "--success" ]] || [[ "${1}" == "--failure" ]] || [[ "${1}" == "--warning" ]] ; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# no need to continues in the log
|
||||||
|
if [[ "${1}" == "-n" ]] ; then
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
# global logfile
|
||||||
|
echo "$(date +%Y/%m/%d\ %H:%M:%S) akmods: $@" >> "/var/log/akmods/akmods.log"
|
||||||
|
|
||||||
|
# the kmods logfile as well, if we work on a kmod
|
||||||
|
if [[ -n "${kmodlogfile}" ]] ; then
|
||||||
|
echo "$(date +%Y/%m/%d\ %H:%M:%S) akmods: $@" >> "${kmodlogfile}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
finally()
|
||||||
|
{
|
||||||
|
# remove tmpfiles
|
||||||
|
remove_tmpdir
|
||||||
|
|
||||||
|
# remove lockfile
|
||||||
|
rm -f /var/cache/akmods/.lockfile
|
||||||
|
|
||||||
|
exit ${1:-128}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make sure finally() is run regardless of reason for exiting.
|
||||||
|
trap "finally" ABRT HUP INT QUIT
|
||||||
|
|
||||||
|
create_tmpdir()
|
||||||
|
{
|
||||||
|
if ! tmpdir="$(mktemp -d -p /tmp ${myprog}.XXXXXXXX)/" ; then
|
||||||
|
akmods_echo 2 1 "ERROR: failed to create tmpdir."
|
||||||
|
akmods_echo 2 1 --failure ; return 1
|
||||||
|
fi
|
||||||
|
if ! mkdir "${tmpdir}"results ; then
|
||||||
|
akmods_echo 2 1 "ERROR: failed to create result tmpdir."
|
||||||
|
akmods_echo 2 1 --failure ; return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_tmpdir()
|
||||||
|
{
|
||||||
|
# remove tmpfiles
|
||||||
|
if [[ -n "${tmpdir}" ]] && [[ -d "${tmpdir}" ]] ; then
|
||||||
|
rm -f "${tmpdir}"results/* "${tmpdir}"*.log
|
||||||
|
rmdir "${tmpdir}"results/ "${tmpdir}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup_cachedir ()
|
||||||
|
{
|
||||||
|
for one_file in $(ls /var/cache/akmods/*/* 2>/dev/null | \
|
||||||
|
grep -v "$(ls -I "*rescue*" /boot/vmlinuz-* | \
|
||||||
|
sed 's%.*vmlinuz-%%g')") ; do
|
||||||
|
if $(grep -qE ".*\.rpm$" <<< "${one_file}") ; then
|
||||||
|
if ! $(rpm -q "$(basename ${one_file%.rpm})" >/dev/null) ; then
|
||||||
|
rm -f "${one_file}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
rm -f "${one_file}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
init ()
|
||||||
|
{
|
||||||
|
# some security provisions
|
||||||
|
\export PATH='/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
|
||||||
|
\unalias -a
|
||||||
|
hash -r
|
||||||
|
# https://bugzilla.rpmfusion.org/show_bug.cgi?id=4023
|
||||||
|
#ulimit -H -c 0 --
|
||||||
|
IFS=$' \t\n'
|
||||||
|
UMASK=022
|
||||||
|
umask ${UMASK}
|
||||||
|
|
||||||
|
# fall back to current kernel if user didn't provide one
|
||||||
|
if [[ ! -n "${kernels}" ]] ; then
|
||||||
|
kernels="$(uname -r)"
|
||||||
|
fi
|
||||||
|
# ensure to build for grub default kernel
|
||||||
|
default_kernel=$(grubby --default-kernel | sed -e 's/^.*vmlinuz-//')
|
||||||
|
if ! $(echo "${kernels}" | grep -q "${default_kernel}") ; then
|
||||||
|
kernels="${kernels} ${default_kernel}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# we get the echo_{success,failure} stuff from there
|
||||||
|
if [[ -r /etc/rc.d/init.d/functions ]] ; then
|
||||||
|
source /etc/rc.d/init.d/functions
|
||||||
|
else
|
||||||
|
# Use our own simple replacements
|
||||||
|
echo_success() {
|
||||||
|
echo -ne " [ OK ]\r"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
echo_failure() {
|
||||||
|
echo -ne " [FAILED]\r"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
echo_warning() {
|
||||||
|
echo -ne " [WARNING]\r"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# needs root permissions
|
||||||
|
if [[ ! -w /var ]] ; then
|
||||||
|
echo -n "Needs to run as root to be able to install rpms." >&2
|
||||||
|
echo_failure ; echo ; exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# no akmods
|
||||||
|
if [[ ! -d "/usr/src/akmods/" ]] ; then
|
||||||
|
echo -n "/usr/src/akmods/ not found." >&2
|
||||||
|
echo_failure ; echo ; exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# if there are no akmod packages installed there is nothing to do for us
|
||||||
|
if ! ls /usr/src/akmods/*-kmod.latest &> /dev/null ; then
|
||||||
|
echo -n "No akmod packages found, nothing to do." >&2
|
||||||
|
echo_success ; echo ; exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# now that we know that we're root make sure our dir for logging and results is available
|
||||||
|
if [[ ! -d "/var/cache/akmods/" ]] ; then
|
||||||
|
if ! mkdir -p "/var/cache/akmods/" ; then
|
||||||
|
echo -n "/var/cache/akmods/ not found and could not be created" >&2
|
||||||
|
echo_failure ; echo ; exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ ! -w "/var/cache/akmods/" ]] ; then
|
||||||
|
echo -n "/var/cache/akmods/ not writable" >&2
|
||||||
|
echo_failure ; echo ; exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# tools needed
|
||||||
|
for tool in akmodsbuild chown flock sed rpmdev-vercmp ; do
|
||||||
|
if ! which "${tool}" &> /dev/null ; then
|
||||||
|
echo -n "${tool} not found" >&2
|
||||||
|
echo_failure ; echo ; exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# create lockfile and wait till we get it
|
||||||
|
exec 99>/run/akmods/akmods.lock
|
||||||
|
flock -w 900 99
|
||||||
|
}
|
||||||
|
|
||||||
|
buildinstall_kmod()
|
||||||
|
{
|
||||||
|
local this_kernelver=${1}
|
||||||
|
local this_kmodname=${2}
|
||||||
|
local this_kmodsrpm=${3}
|
||||||
|
local this_kmodverrel=${4}
|
||||||
|
|
||||||
|
if [[ ! -r "${this_kmodsrpm}" ]] ; then
|
||||||
|
akmods_echo 2 1 "ERROR: ${this_kmodsrpm} not found."
|
||||||
|
akmods_echo 2 1 --failure ; return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# result and logdir
|
||||||
|
if [[ ! -d "/var/cache/akmods/${this_kmodname}" ]] ; then
|
||||||
|
if ! mkdir "/var/cache/akmods/${this_kmodname}" ; then
|
||||||
|
akmods_echo 2 1 "ERROR: could not create /var/cache/akmods/${this_kmodname}."
|
||||||
|
akmods_echo 2 1 --failure ; return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
## preparations
|
||||||
|
# tmpdir
|
||||||
|
create_tmpdir
|
||||||
|
|
||||||
|
# akmods needs to write there (and nobody else, but mktemp takes care of that!)
|
||||||
|
chown akmods "${tmpdir}" "${tmpdir}"results
|
||||||
|
|
||||||
|
# remove old logfiles if they exist
|
||||||
|
rm -f "/var/cache/akmods/${this_kmodname}/${this_kmodverrel}-for-${this_kernelver}.log" "/var/cache/akmods/${this_kmodname}/.last.log"
|
||||||
|
|
||||||
|
# create a per kmod logfile
|
||||||
|
if ! touch "/var/cache/akmods/${this_kmodname}/.last.log" ; then
|
||||||
|
akmods_echo 2 1 "ERROR: failed to create kmod specific logfile."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# akmods_echo will log to this file from now on as well
|
||||||
|
kmodlogfile="/var/cache/akmods/${this_kmodname}/.last.log"
|
||||||
|
|
||||||
|
# Unset TMPDIR since it is misused by "runuser"
|
||||||
|
# https://bugzilla.rpmfusion.org/show_bug.cgi?id=2596
|
||||||
|
unset TMPDIR
|
||||||
|
|
||||||
|
# build module using akmod
|
||||||
|
akmods_echo 1 4 "Building RPM using the command '$(which akmodsbuild) --kernels ${this_kernelver} ${this_kmodsrpm}'"
|
||||||
|
/sbin/runuser -s /bin/bash -c "$(which akmodsbuild) --quiet --kernels ${this_kernelver} --outputdir ${tmpdir}results --logfile ${tmpdir}/akmodsbuild.log ${this_kmodsrpm}" akmods >> "${kmodlogfile}" 2>&1
|
||||||
|
local returncode=$?
|
||||||
|
|
||||||
|
# copy rpmbuild log to kmod specific logfile
|
||||||
|
if [[ -s "${tmpdir}"/akmodsbuild.log ]] ; then
|
||||||
|
while read line ; do
|
||||||
|
echo "$(date +%Y/%m/%d\ %H:%M:%S) akmodsbuild: ${line}" >> "${kmodlogfile}"
|
||||||
|
done < "${tmpdir}"/akmodsbuild.log
|
||||||
|
fi
|
||||||
|
|
||||||
|
# result
|
||||||
|
if (( ! ${returncode} == 0 )) ; then
|
||||||
|
if [[ -n "${continue_line}" ]] ; then
|
||||||
|
akmods_echo 1 2 --failure
|
||||||
|
fi
|
||||||
|
akmods_echo 2 1 "Building rpms failed; see /var/cache/akmods/${this_kmodname}/${this_kmodverrel}-for-${this_kernelver}.failed.log for details"
|
||||||
|
cp -fl "${kmodlogfile}" "/var/cache/akmods/${this_kmodname}/${this_kmodverrel}-for-${this_kernelver}.failed.log"
|
||||||
|
kmodlogfile=""
|
||||||
|
remove_tmpdir
|
||||||
|
return 4
|
||||||
|
fi
|
||||||
|
|
||||||
|
# dnf/yum install - repository disabled on purpose see rfbz#3350
|
||||||
|
akmods_echo 1 4 "Installing newly built rpms"
|
||||||
|
if [[ -f /usr/bin/dnf ]] ; then
|
||||||
|
akmods_echo 1 4 "DNF detected"
|
||||||
|
dnf -y install --disablerepo='*' $(find "${tmpdir}results" -type f -name '*.rpm' | grep -v debuginfo) >> "${kmodlogfile}" 2>&1
|
||||||
|
else
|
||||||
|
akmods_echo 1 4 "DNF not found, using YUM instead."
|
||||||
|
yum -y install --disablerepo='*' $(find "${tmpdir}results" -type f -name '*.rpm' | grep -v debuginfo) >> "${kmodlogfile}" 2>&1
|
||||||
|
fi
|
||||||
|
local returncode=$?
|
||||||
|
|
||||||
|
# place the newly built rpms where user expects them
|
||||||
|
cp "${tmpdir}results/"* "/var/cache/akmods/${this_kmodname}/"
|
||||||
|
|
||||||
|
# everything fine?
|
||||||
|
if (( ${returncode} != 0 )) ; then
|
||||||
|
if [[ -n "${continue_line}" ]] ; then
|
||||||
|
akmods_echo 1 2 --failure
|
||||||
|
fi
|
||||||
|
akmods_echo 2 1 "Could not install newly built RPMs. You can find them and the logfile in:"
|
||||||
|
akmods_echo 2 1 "/var/cache/akmods/${this_kmodname}/${this_kmodverrel}-for-${this_kernelver}.failed.log"
|
||||||
|
cp -fl "${kmodlogfile}" "/var/cache/akmods/${this_kmodname}/${this_kmodverrel}-for-${this_kernelver}.failed.log"
|
||||||
|
kmodlogfile=""
|
||||||
|
remove_tmpdir
|
||||||
|
return 8
|
||||||
|
fi
|
||||||
|
|
||||||
|
# finish
|
||||||
|
akmods_echo 1 4 "Successful."
|
||||||
|
cp -fl "${kmodlogfile}" "/var/cache/akmods/${this_kmodname}/${this_kmodverrel}-for-${this_kernelver}.log"
|
||||||
|
kmodlogfile=""
|
||||||
|
remove_tmpdir
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
check_kmod_up2date()
|
||||||
|
{
|
||||||
|
local this_kernelver=${1}
|
||||||
|
local this_kmodname=${2}
|
||||||
|
local kmodpackage_file="$(modinfo ${this_kmodname} -k ${this_kernelver} -n 2>/dev/null)"
|
||||||
|
|
||||||
|
# kmod present, even with weak-modules?
|
||||||
|
if [[ ! -n "${kmodpackage_file}" ]] && [[ ! -d /lib/modules/${this_kernelver}/extra/${this_kmodname}/ ]] ; then
|
||||||
|
# build it
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# kmod up2date?
|
||||||
|
# Weak module symlink case
|
||||||
|
if [ -n "${kmodpackage_file}" ] && [ -h "${kmodpackage_file}" ] && $(echo "${kmodpackage_file}" | grep -q "weak-updates") ; then
|
||||||
|
local kmodpackage="$(rpm -qf $(readlink -e ${kmodpackage_file}) 2> /dev/null)"
|
||||||
|
# Regular module file case
|
||||||
|
else
|
||||||
|
local kmodpackage="$(rpm -qf /lib/modules/${this_kernelver}/extra/${this_kmodname}/ 2> /dev/null)"
|
||||||
|
fi
|
||||||
|
if [[ ! -n "${kmodpackage}" ]] ; then
|
||||||
|
# seems we didn't get what we wanted
|
||||||
|
# well, better to do nothing in this case
|
||||||
|
akmods_echo 1 2 -n "Warning: Could not determine what package owns /lib/modules/${this_kernelver}/extra/${this_kmodname}/"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
local kmodver=$(rpm -q --qf '%{EPOCH}:%{VERSION}-%{RELEASE}\n' "${kmodpackage}" | sed 's|(none)|0|; s!\.\(fc\|el\|lvn\)[0-9]*!!g')
|
||||||
|
local akmodver=$(rpm -qp --qf '%{EPOCH}:%{VERSION}-%{RELEASE}\n' /usr/src/akmods/"${this_kmodname}"-kmod.latest | sed 's|(none)|0|; s!\.\(fc\|el\|lvn\)[0-9]*!!g')
|
||||||
|
|
||||||
|
rpmdev-vercmp "${kmodver}" "${akmodver}" &>/dev/null
|
||||||
|
local retvalue=$?
|
||||||
|
if [[ "$retvalue" == 0 ]] ; then
|
||||||
|
# Versions are the same. Nothing to do.
|
||||||
|
return 0
|
||||||
|
elif [[ "$retvalue" == 11 ]] ; then
|
||||||
|
# kmod is newer, nothing to do.
|
||||||
|
return 0
|
||||||
|
elif [[ "$retvalue" == 12 ]] ; then
|
||||||
|
# akmod is newer, need to build kmod.
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
# Something went wrong
|
||||||
|
akmods_echo 1 2 -n "Error: Could not determine if akmod is newer than the installed kmod"
|
||||||
|
akmods_echo 1 2 --failure
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
check_kmods()
|
||||||
|
{
|
||||||
|
local this_kernelver="${1}"
|
||||||
|
|
||||||
|
akmods_echo 1 2 -n "Checking kmods exist for ${this_kernelver}"
|
||||||
|
for akmods_kmodfile in /usr/src/akmods/*-kmod.latest ; do
|
||||||
|
local this_kmodname="$(basename ${akmods_kmodfile%%-kmod.latest})"
|
||||||
|
|
||||||
|
# actually check this akmod?
|
||||||
|
if [[ -n "${akmods}" ]] ; then
|
||||||
|
for akmod in ${akmods} ; do
|
||||||
|
if [[ "${this_kmodname}" != "${akmod}" ]] ; then
|
||||||
|
# ignore this one
|
||||||
|
continue 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# go
|
||||||
|
if ! check_kmod_up2date ${this_kernelver} ${this_kmodname} ; then
|
||||||
|
# okay, kmod wasn't found or is not up2date
|
||||||
|
if [[ -n "${continue_line}" ]] ; then
|
||||||
|
akmods_echo 1 2 --success
|
||||||
|
# if the files for building modules are not available don't even try to build modules
|
||||||
|
if [[ ! -r /usr/src/kernels/"${this_kernelver}"/Makefile ]] && \
|
||||||
|
[[ ! -r /lib/modules/"${this_kernelver}"/build/Makefile ]] ; then
|
||||||
|
akmods_echo 1 2 "Files needed for building modules against kernel"
|
||||||
|
akmods_echo 1 2 "${this_kernelver} could not be found as the following"
|
||||||
|
akmods_echo 1 2 "directories are missing:"
|
||||||
|
akmods_echo 1 2 "/usr/src/kernels/${this_kernelver}/"
|
||||||
|
akmods_echo 1 2 -n "/lib/modules/${this_kernelver}/build/"
|
||||||
|
akmods_echo 1 2 -n "Is the correct kernel-devel package installed?"
|
||||||
|
akmods_echo 1 2 --failure
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
local this_kmodverrel="$(rpm -qp --qf '%{VERSION}-%{RELEASE}' "${akmods_kmodfile}" | sed 's!\.\(fc\|el\|lvn\)[0-9]*!!g' )"
|
||||||
|
if [[ ! -n "${alwaystry}" ]] && [[ -e "/var/cache/akmods/${this_kmodname}/${this_kmodverrel}-for-${this_kernelver}".failed.log ]] ; then
|
||||||
|
akmods_echo 1 2 -n "Ignoring ${this_kmodname}-kmod as it failed earlier"
|
||||||
|
akmods_echo 1 2 --warning
|
||||||
|
local someignored="true"
|
||||||
|
else
|
||||||
|
akmods_echo 1 2 -n "Building and installing ${this_kmodname}-kmod"
|
||||||
|
buildinstall_kmod ${this_kernelver} ${this_kmodname} ${akmods_kmodfile} ${this_kmodverrel}
|
||||||
|
local returncode=$?
|
||||||
|
if [[ "$returncode" == "0" ]] ; then
|
||||||
|
akmods_echo 1 2 --success
|
||||||
|
local somesucceeded="true"
|
||||||
|
elif [[ "$returncode" == "8" ]] ; then
|
||||||
|
akmods_echo 1 2 --failure "New kmod RPM was built but could not be installed."
|
||||||
|
else
|
||||||
|
local somefailed="true"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -n "${continue_line}" ]] ; then
|
||||||
|
akmods_echo 1 2 --success
|
||||||
|
elif [[ -n "${someignored}" ]] || [[ -n "${somefailed}" ]] ; then
|
||||||
|
echo
|
||||||
|
akmods_echo 1 2 "Hint: Some kmods were ignored or failed to build or install."
|
||||||
|
akmods_echo 1 2 "You can try to rebuild and install them by by calling"
|
||||||
|
akmods_echo 1 2 "'/usr/sbin/akmods --force' as root."
|
||||||
|
echo
|
||||||
|
sleep 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# akmods for newly installed akmod rpms as wells as akmods.service run
|
||||||
|
# after udev and systemd-modules-load.service have tried to load modules
|
||||||
|
if [[ -n "${somesucceeded}" ]] && [[ ${this_kernelver} = "$(uname -r)" ]] ; then
|
||||||
|
find /sys/devices -name modalias -print0 | xargs -0 cat | xargs modprobe -a -b -q
|
||||||
|
if [ -f /usr/bin/systemctl ] ; then
|
||||||
|
systemctl restart systemd-modules-load.service
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
myprog_help ()
|
||||||
|
{
|
||||||
|
echo "Checks the akmod packages and rebuilds them if needed"
|
||||||
|
echo $'\n'"Usage: ${myprog} [OPTIONS]"
|
||||||
|
echo $'\n'"Options:"
|
||||||
|
echo " --force -- try all, even if they failed earlier"
|
||||||
|
echo " --kernels <kernel> -- build and install only for kernel <kernel>"
|
||||||
|
echo " (formatted the same as 'uname -r' would produce)"
|
||||||
|
echo " --akmod <akmod> -- build and install only akmod <akmod>"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# first parse command line options
|
||||||
|
while [ "${1}" ] ; do
|
||||||
|
case "${1}" in
|
||||||
|
--kernel|--kernels)
|
||||||
|
shift
|
||||||
|
if [[ ! -n "${1}" ]] ; then
|
||||||
|
echo "ERROR: Please provide the kernel-version to build for together with --kernel" >&2
|
||||||
|
exit 1
|
||||||
|
elif [[ ! -r /usr/src/kernels/"${1}"/Makefile ]] && \
|
||||||
|
[[ ! -r /lib/modules/"${1}"/build/Makefile ]] ; then
|
||||||
|
echo "Could not find files needed to compile modules for ${1}"
|
||||||
|
echo "Are the development files for kernel ${1} or the appropriate kernel-devel package installed?"
|
||||||
|
exit 1
|
||||||
|
elif [[ -r /usr/src/kernels/"${1}"/Makefile ]] && \
|
||||||
|
[[ ! -d /lib/modules/"${1}" ]] ; then
|
||||||
|
# this is a red hat / fedora kernel-devel package, but the kernel for it is not installed
|
||||||
|
# kmodtool would add a dep on that kernel when building; thus when we'd try to install the
|
||||||
|
# rpms we'd run into a missing-dep problem. Thus we prevent that case
|
||||||
|
echo "Kernel ${1} not installed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# overwrites the default:
|
||||||
|
if [[ ! -n "${kernels}" ]] ; then
|
||||||
|
kernels="${1}"
|
||||||
|
else
|
||||||
|
kernels="${kernels} ${1}"
|
||||||
|
fi
|
||||||
|
# an try to build, even if we tried already
|
||||||
|
alwaystry=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--akmod|--kmod)
|
||||||
|
shift
|
||||||
|
if [[ ! -n "${1}" ]] ; then
|
||||||
|
echo "ERROR: Please provide a name of a akmod package together with --akmods" >&2
|
||||||
|
exit 1
|
||||||
|
elif [[ -r /usr/src/akmods/"${1}"-kmod.latest ]] ; then
|
||||||
|
akmods="${akmods}${1} "
|
||||||
|
elif [[ -r /usr/src/akmods/"${1}".latest ]] ; then
|
||||||
|
akmods="${akmods}${1%%-kmod} "
|
||||||
|
else
|
||||||
|
echo "Could not find akmod ${1}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--force)
|
||||||
|
alwaystry=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--from-init)
|
||||||
|
# just in case: remove stale lockfile if it exists:
|
||||||
|
rm -f /var/cache/akmods/.lockfile
|
||||||
|
# Clean old logs and rpm files from no more installed kmod
|
||||||
|
# packages.
|
||||||
|
cleanup_cachedir
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--from-posttrans|--from-kernel-posttrans|--from-akmod-posttrans)
|
||||||
|
# ignored
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--verbose)
|
||||||
|
let verboselevel++
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--quiet)
|
||||||
|
let verboselevel--
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--help)
|
||||||
|
myprog_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--version)
|
||||||
|
echo "${myprog} ${myver}"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Error: Unknown option '${1}'." >&2
|
||||||
|
myprog_help >&2
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# sanity checks
|
||||||
|
init
|
||||||
|
|
||||||
|
# go
|
||||||
|
for kernel in ${kernels} ; do
|
||||||
|
check_kmods ${kernel}
|
||||||
|
done
|
||||||
|
|
||||||
|
# finished :)
|
||||||
|
finally 0
|
@ -0,0 +1,3 @@
|
|||||||
|
[Unit]
|
||||||
|
Wants=akmods-keygen@.service
|
||||||
|
PartOf=akmods.service
|
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Akmods Secure boot MOK Key Generation
|
||||||
|
ConditionFileNotEmpty=|!/etc/pki/akmods/certs/public_key.der
|
||||||
|
ConditionFileNotEmpty=|!/etc/pki/akmods/private/private_key.priv
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/usr/sbin/kmodgenca -a
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=akmods-keygen.target
|
@ -0,0 +1,151 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# kmodgenca - Helper script to create CA/Keypair to sign modules.
|
||||||
|
# Copyright (c) 2017 Stanislas Leduc <stanislas.leduc@balinor.net>
|
||||||
|
# Copyright (c) 2018-2019 Nicolas Viéville <nicolas.vieville@uphf.fr>
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
# a copy of this software and associated documentation files (the
|
||||||
|
# "Software"), to deal in the Software without restriction, including
|
||||||
|
# without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
# permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
# the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be
|
||||||
|
# included in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
MYPROG="kmodgenca"
|
||||||
|
MYVER="0.5.7"
|
||||||
|
FORCE_BUILD=0
|
||||||
|
AUTOMATIC_BUILD=0
|
||||||
|
AUTOMATIC_BUILD_OPTION=""
|
||||||
|
|
||||||
|
myprog_help ()
|
||||||
|
{
|
||||||
|
echo "Build CA/Keypair to sign modules"
|
||||||
|
echo $'\n'"Usage: ${MYPROG} [OPTIONS]"
|
||||||
|
echo $'\n'"Options:"
|
||||||
|
echo " -a, --auto -- generate default values for cacert.config file without prompt"
|
||||||
|
echo " -f, --force -- build CA/Keypair even if there is already ones"
|
||||||
|
echo " -h, --help -- print usage"
|
||||||
|
echo " -V, --version -- show version"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Parse command line options.
|
||||||
|
#
|
||||||
|
while [ "${1}" ] ; do
|
||||||
|
case "${1}" in
|
||||||
|
-a|--auto)
|
||||||
|
AUTOMATIC_BUILD=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-f|--force)
|
||||||
|
FORCE_BUILD=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
myprog_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-V|--version)
|
||||||
|
echo "${MYPROG} ${MYVER}"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Error: Unknown option '${1}'." >&2
|
||||||
|
myprog_help >&2
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Exit early if cert and private key already exist and if FORCE_BUILD
|
||||||
|
# is not equal to 1.
|
||||||
|
#
|
||||||
|
if $(readlink -e /etc/pki/akmods/certs/public_key.der &>/dev/null) && \
|
||||||
|
$(readlink -e /etc/pki/akmods/private/private_key.priv &>/dev/null) && \
|
||||||
|
[ ${FORCE_BUILD} -eq 0 ] ; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
CACERT_CONFIG="/etc/pki/akmods/cacert.config"
|
||||||
|
KEYNAME="$(hostname)"-"$(od -vAn -N4 -tu4 < /dev/urandom | awk '{print $1}')"
|
||||||
|
|
||||||
|
# Create cacert.config file with local values if AUTOMATIC_BUILD is set
|
||||||
|
# or ask for values manually.
|
||||||
|
#
|
||||||
|
echo "Update cacert.config..."
|
||||||
|
if [ ${AUTOMATIC_BUILD} -eq 1 ] ; then
|
||||||
|
# Set OpenSSL fields values, comment default values and min/max ones.
|
||||||
|
sed -e "s#\(0.organizationName *= \).*#\1$(hostname)#" \
|
||||||
|
-e "s#\(organizationalUnitName *= \).*#\1$(hostname)#" \
|
||||||
|
-e "s#\(emailAddress *= \).*#\1akmods@$(hostname)#" \
|
||||||
|
-e "s#\(localityName *= \).*#\1None#" \
|
||||||
|
-e "s#\(stateOrProvinceName *= \).*#\1None#" \
|
||||||
|
-e "s#\(countryName *= \).*#\1$(locale country_ab2)#" \
|
||||||
|
-e "s#\(commonName *= \).*#\1$(hostname)"-"$(od -vAn -N4 -tu4 < /dev/urandom | awk '{print $1}')#" \
|
||||||
|
-e "s/^[^#]*_default *= /#&/" \
|
||||||
|
-e "s/^[^#]*_min/#&/" \
|
||||||
|
-e "s/^[^#]*_max/#&/" ${CACERT_CONFIG}.in > ${CACERT_CONFIG}
|
||||||
|
AUTOMATIC_BUILD_OPTION=" -batch"
|
||||||
|
else
|
||||||
|
# Activate prompt directive.
|
||||||
|
sed -e "s#\(prompt *= \).*#\1yes#" ${CACERT_CONFIG}.in > ${CACERT_CONFIG}
|
||||||
|
fi
|
||||||
|
KEY_SUFF="$(date "+%F_%T_%N")"
|
||||||
|
# If cert and private key files names already exists, do not overwrite
|
||||||
|
# them but save them.
|
||||||
|
#
|
||||||
|
if [[ -e /etc/pki/akmods/certs/${KEYNAME}.der ]] ; then
|
||||||
|
# If the cert has already been loaded in MOK, add "already_enrolled"
|
||||||
|
# to the suffix of the backup file.
|
||||||
|
# `mokutil --help` fails if EFI variables are not supported on the
|
||||||
|
# system. It is therefore impossible to test the presence of the key
|
||||||
|
# in MOK, and then do not add special suffix to the backup file.
|
||||||
|
#
|
||||||
|
if $(which mokutil &> /dev/null) && $(mokutil --help &> /dev/null) && $(mokutil --test-key /etc/pki/akmods/certs/${KEYNAME}.der &> /dev/null) ; then
|
||||||
|
KEY_SUFF="${KEY_SUFF}_already_enrolled"
|
||||||
|
fi
|
||||||
|
mv /etc/pki/akmods/certs/${KEYNAME}.der /etc/pki/akmods/certs/${KEYNAME}.der.${KEY_SUFF}.bak
|
||||||
|
if [[ -e /etc/pki/akmods/private/${KEYNAME}.priv ]] ; then
|
||||||
|
mv /etc/pki/akmods/private/${KEYNAME}.priv /etc/pki/akmods/private/${KEYNAME}.priv.${KEY_SUFF}.bak
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Generate new keypair..."
|
||||||
|
sg akmods -c "
|
||||||
|
umask 037
|
||||||
|
openssl req -x509 -new -nodes -utf8 -sha256 -days 3650${AUTOMATIC_BUILD_OPTION} \
|
||||||
|
-config ${CACERT_CONFIG} -outform DER \
|
||||||
|
-out /etc/pki/akmods/certs/${KEYNAME}.der \
|
||||||
|
-keyout /etc/pki/akmods/private/${KEYNAME}.priv
|
||||||
|
"
|
||||||
|
|
||||||
|
# Ensure that akmods group can read keys.
|
||||||
|
#
|
||||||
|
chmod g+r /etc/pki/akmods/certs/${KEYNAME}.*
|
||||||
|
chmod g+r /etc/pki/akmods/private/${KEYNAME}.*
|
||||||
|
|
||||||
|
# Sanitize permissions.
|
||||||
|
#
|
||||||
|
if [[ -x /usr/sbin/restorecon ]] ; then
|
||||||
|
/usr/sbin/restorecon /etc/pki/akmods/certs/${KEYNAME}.der
|
||||||
|
/usr/sbin/restorecon /etc/pki/akmods/private/${KEYNAME}.priv
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update symlink to use new keypair.
|
||||||
|
#
|
||||||
|
ln -nsf /etc/pki/akmods/certs/${KEYNAME}.der /etc/pki/akmods/certs/public_key.der
|
||||||
|
ln -nsf /etc/pki/akmods/private/${KEYNAME}.priv /etc/pki/akmods/private/private_key.priv
|
||||||
|
|
||||||
|
exit 0
|
@ -0,0 +1,102 @@
|
|||||||
|
#!/bin/bash -
|
||||||
|
############################################################################
|
||||||
|
#
|
||||||
|
# akmods - Rebuilds and install akmod RPMs
|
||||||
|
# Copyright (c) 2007, 2008 Thorsten Leemhuis <fedora@leemhuis.info>
|
||||||
|
# Copyright (c) 2018 Nicolas Chauvet <kwizart@gmail.com>
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
# a copy of this software and associated documentation files (the
|
||||||
|
# "Software"), to deal in the Software without restriction, including
|
||||||
|
# without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
# permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
# the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be
|
||||||
|
# included in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
############################################################################
|
||||||
|
|
||||||
|
myprog="akmods-post"
|
||||||
|
tmpdir=
|
||||||
|
|
||||||
|
# Only do %post builds in ostree
|
||||||
|
if ! grep -q OSTREE_VERSION= /etc/os-release && ! test -f /run/ostree-booted; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
kmodname=$1
|
||||||
|
srpm=$2
|
||||||
|
|
||||||
|
|
||||||
|
finally()
|
||||||
|
{
|
||||||
|
# remove tmpfiles
|
||||||
|
remove_tmpdir
|
||||||
|
|
||||||
|
exit ${1:-128}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make sure finally() is run regardless of reason for exiting.
|
||||||
|
trap "finally" ABRT HUP INT QUIT
|
||||||
|
|
||||||
|
create_tmpdir()
|
||||||
|
{
|
||||||
|
if ! tmpdir="$(mktemp -d -p /tmp ${myprog}.XXXXXXXX)/" ; then
|
||||||
|
echo "ERROR: failed to create tmpdir." >&2
|
||||||
|
finally 1
|
||||||
|
fi
|
||||||
|
if ! mkdir "${tmpdir}"results ; then
|
||||||
|
echo "ERROR: failed to create result tmpdir." >&2
|
||||||
|
finally 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_tmpdir()
|
||||||
|
{
|
||||||
|
# remove tmpfiles
|
||||||
|
if [[ -n "${tmpdir}" ]] && [[ -d "${tmpdir}" ]]; then
|
||||||
|
rm -rf "${tmpdir}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# This is an ostree build, so do build for all
|
||||||
|
# deployed kernels in the %post
|
||||||
|
kernels="$(ls /lib/modules)"
|
||||||
|
|
||||||
|
create_tmpdir
|
||||||
|
|
||||||
|
for kernel in ${kernels} ; do
|
||||||
|
echo "Building ${srpm} for kernel ${kernel}"
|
||||||
|
# Note: This builds as root, but this is pretty safe because its happening in the ostree %post sandbox.
|
||||||
|
# In fact, given that /usr is a rofiles-fuse mount no other user can access /usr in this sandbox anyway.
|
||||||
|
akmodsbuild --quiet --kernels ${kernel} --outputdir ${tmpdir}results --logfile "${tmpdir}/akmodsbuild.log" "${srpm}" 2>&1
|
||||||
|
returncode=$?
|
||||||
|
if (( ! ${returncode} == 0 )); then
|
||||||
|
finally 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for f in $(find "${tmpdir}results" -type f -name '*.rpm' | grep -v debuginfo) ; do
|
||||||
|
rpm2cpio $f | cpio --quiet -D / -id
|
||||||
|
returncode=$?
|
||||||
|
if (( ! ${returncode} == 0 )); then
|
||||||
|
echo "Extracting $f failed:" 2>&1
|
||||||
|
finally 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for kernel in ${kernels} ; do
|
||||||
|
depmod -v ${kernel} 2>&1
|
||||||
|
done
|
||||||
|
|
||||||
|
finally 0
|
@ -0,0 +1,31 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# akmods-shutdown - Helper script to build kernel modules on shutdown
|
||||||
|
# Copyright (c) 2012 Richard shaw <hobbes1069@gmail.com>
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
# a copy of this software and associated documentation files (the
|
||||||
|
# "Software"), to deal in the Software without restriction, including
|
||||||
|
# without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
# permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
# the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be
|
||||||
|
# included in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
|
||||||
|
echo "Building modules for all installed kernels."
|
||||||
|
for kernel in /usr/src/kernels/* ; do
|
||||||
|
kernel=$(basename $kernel)
|
||||||
|
/usr/sbin/akmods --kernels $kernel
|
||||||
|
done
|
||||||
|
|
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Builds and install new kmods from akmod packages
|
||||||
|
Before=shutdown.service reboot.service halt.service
|
||||||
|
Conflicts=shutdown.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/bin/true
|
||||||
|
ExecStop=-/usr/sbin/akmods-shutdown
|
||||||
|
TimeoutStopSec=5min
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
@ -0,0 +1,2 @@
|
|||||||
|
# See tmpfiles.d(5) for details
|
||||||
|
d /run/akmods 0770 root akmods -
|
@ -0,0 +1,12 @@
|
|||||||
|
[BUGS]
|
||||||
|
https://bugzilla.rpmfusion.org/buglist.cgi?product=Fedora&component=akmods&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED
|
||||||
|
[REPORTING BUGS]
|
||||||
|
Submit a bug against the akmods component at:
|
||||||
|
.br
|
||||||
|
https://bugzilla.rpmfusion.org/enter_bug.cgi?product=Fedora
|
||||||
|
[AUTHOR]
|
||||||
|
Thorsten Leemhuis <fedora [AT] leemhuis [DOT] info>
|
||||||
|
[MAINTAINER]
|
||||||
|
Richard Shaw <hobbes1069 [AT] gmail [DOT] com>
|
||||||
|
[SEE ALSO]
|
||||||
|
http://rpmfusion.org/Packaging/KernelModules/Akmods
|
@ -0,0 +1,8 @@
|
|||||||
|
/var/log/akmods/akmods.log {
|
||||||
|
monthly
|
||||||
|
rotate 12
|
||||||
|
missingok
|
||||||
|
notifempty
|
||||||
|
create 644 root root
|
||||||
|
su root akmods
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Builds and install new kmods from akmod packages
|
||||||
|
ConditionPathExists=!/run/ostree-booted
|
||||||
|
Before=@SERVICE@
|
||||||
|
After=akmods-keygen.target
|
||||||
|
Wants=akmods-keygen.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/sbin/akmods --from-init
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Builds and install new kmods from akmod for a given kernel
|
||||||
|
Wants=akmods-keygen.target
|
||||||
|
After=akmods-keygen.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/bin/systemd-inhibit --mode=block --what=idle:sleep:shutdown --who="akmods" --why="Akmods Transaction running" /usr/sbin/akmods --from-kernel-posttrans --kernels %i
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
@ -0,0 +1,358 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# akmodbuild - Helper script for building kernel module SRPMs
|
||||||
|
# Copyright (c) 2007 Thorsten Leemhuis <fedora@leemhuis.info>
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
# a copy of this software and associated documentation files (the
|
||||||
|
# "Software"), to deal in the Software without restriction, including
|
||||||
|
# without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
# permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
# the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be
|
||||||
|
# included in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
myprog="akmodsbuild"
|
||||||
|
myver="0.5.6"
|
||||||
|
|
||||||
|
# defaults that might get overwritten by user:
|
||||||
|
kernels="$(uname -r)"
|
||||||
|
target="$(uname -m)"
|
||||||
|
if [[ "${target}" == "armv7l" ]] ; then
|
||||||
|
target="armv7hl"
|
||||||
|
fi
|
||||||
|
numberofjobs=$(grep -c processor /proc/cpuinfo 2> /dev/null)
|
||||||
|
verboselevel=2
|
||||||
|
outputdir="${PWD}"
|
||||||
|
srpms=
|
||||||
|
|
||||||
|
init ()
|
||||||
|
{
|
||||||
|
## startup checks
|
||||||
|
# prevent root-usage
|
||||||
|
if [[ -w /var ]] ; then
|
||||||
|
echo "ERROR: Not to be used as root; start as user or '${myprog}' instead." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# do we have everything we need to build for the kernels in question?
|
||||||
|
for kernel in ${kernels}; do
|
||||||
|
if [[ ! -e /usr/src/kernels/${kernel}/Makefile ]] && [[ ! -e /usr/lib/modules/${kernel}/build/Makefile ]] ; then
|
||||||
|
echo "ERROR: Files needed for building modules against kernel" >&2
|
||||||
|
echo " ${kernel} could not be found as the following" >&2
|
||||||
|
echo " directories are missing:"
|
||||||
|
echo " /usr/src/kernels/${kernel}/" >&2
|
||||||
|
echo " /usr/lib/modules/${kernel}/build/" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ! -n "${srpms}" ]] ; then
|
||||||
|
echo "ERROR: Please provide a list of SRPM-files to build."
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# SRPMS available?
|
||||||
|
for srpm in ${srpms}; do
|
||||||
|
if [[ ! -r ${srpm} ]] ; then
|
||||||
|
echo "ERROR: Can't find SRPM ${srpm}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# room to save things
|
||||||
|
if [[ ! -d "${outputdir}" ]] ; then
|
||||||
|
echo "ERROR: ${outputdir} is not a directory" >&2
|
||||||
|
exit 1
|
||||||
|
elif [[ ! -w "${outputdir}" ]] ; then
|
||||||
|
echo "ERROR: ${outputdir} is not a writable" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# make sure this is a number
|
||||||
|
if ! (( ${numberofjobs} > 0 )) ; then
|
||||||
|
echo "Warning: using hardcoded defaut value for number of jobs"
|
||||||
|
numberofjobs=2
|
||||||
|
fi
|
||||||
|
|
||||||
|
## preparations
|
||||||
|
# tmpdir
|
||||||
|
if ! tmpdir="$(mktemp -d -p /tmp ${myprog}.XXXXXXXX)" ; then
|
||||||
|
echo "ERROR: Could create tempdir."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# buildtreee
|
||||||
|
mkdir "${tmpdir}"/{BUILD,SOURCES,SPECS,SRPMS,RPMS,RPMS/"${target}"}
|
||||||
|
|
||||||
|
# logfile
|
||||||
|
if [[ ! -n "${logfile}" ]] ; then
|
||||||
|
logfile="${tmpdir}/logfile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ( [[ -e "${logfile}" ]] && [[ ! -w "${logfile}" ]] ) || ! touch "${logfile}" ; then
|
||||||
|
echo "ERROR: Could not write logfile."
|
||||||
|
finally
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
finally()
|
||||||
|
{
|
||||||
|
# kill background jobs if needed
|
||||||
|
if [[ -n "${watch_jobid}" ]] ; then
|
||||||
|
kill "${watch_jobid}"
|
||||||
|
fi
|
||||||
|
if [[ -n "${rpmbuild_jobid}" ]] ; then
|
||||||
|
kill "${rpmbuild_jobid}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# remove tmpfiles
|
||||||
|
if [[ -d "${tmpdir}" ]] ; then
|
||||||
|
rm -rf "${tmpdir}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
trap "finally" 2
|
||||||
|
|
||||||
|
|
||||||
|
akmods_echo()
|
||||||
|
{
|
||||||
|
# where to output
|
||||||
|
local this_fd=${1}
|
||||||
|
shift
|
||||||
|
|
||||||
|
# verboselevel
|
||||||
|
local this_verbose=${1}
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [[ "${1}" == "--not-logfile" ]] ; then
|
||||||
|
local notlogfile=true
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
# output to console
|
||||||
|
if (( ${verboselevel} >= ${this_verbose} )) ; then
|
||||||
|
echo "$@" >&${this_fd}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# global logfile
|
||||||
|
if [[ ! -n ${notlogfile} ]] ; then
|
||||||
|
echo "$@" >> "${logfile}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
watch_rpmbuild()
|
||||||
|
{
|
||||||
|
# background function to show rpmbuild progress
|
||||||
|
# does't use akmods_echo here; this stage handles the output on its own
|
||||||
|
# (seperate process and there is no need to log this)
|
||||||
|
if (( ${verboselevel} == 2 )) ; then
|
||||||
|
tail --pid ${1} -n +1 -s 0.1 -f ${2} 2>/dev/null | grep --line-buffered -e '%prep' -e '%build' -e '%install' -e '%clean' | while read line ; do
|
||||||
|
if [[ "${line}" != "${line##*prep}" ]] ; then
|
||||||
|
echo -n "prep "
|
||||||
|
elif [[ "${line}" != "${line##*build}" ]] ; then
|
||||||
|
echo -n "build "
|
||||||
|
elif [[ "${line}" != "${line##*install}" ]] ; then
|
||||||
|
echo -n "install "
|
||||||
|
elif [[ "${line}" != "${line##*clean}" ]] ; then
|
||||||
|
echo -n "clean; "
|
||||||
|
# last linefeed is done by the caller
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
elif (( ${verboselevel} > 2 )) ; then
|
||||||
|
tail --pid ${1} -n +1 -s 0.1 -f ${2}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
process_srpm()
|
||||||
|
{
|
||||||
|
local source_rpm="${1}"
|
||||||
|
|
||||||
|
# status info
|
||||||
|
akmods_echo 1 2 -n "* Rebuilding ${source_rpm} for kernel(s) ${kernels}: "
|
||||||
|
|
||||||
|
# kick off rebuild into background
|
||||||
|
/usr/bin/time --format='%x' --output="${tmpdir}/.jobexit" rpmbuild \
|
||||||
|
--define "_topdir ${tmpdir}/" \
|
||||||
|
--define "_buildtree ${tmpdir}/BUILD" \
|
||||||
|
--define "_specdir ${tmpdir}/SPECS" \
|
||||||
|
--define "_sourcedir ${tmpdir}/SOURCES" \
|
||||||
|
--define "_srcrpmdir ${tmpdir}/SRPMS" \
|
||||||
|
--define "_rpmdir ${tmpdir}/RPMS" \
|
||||||
|
--define "_smp_mflags -j${numberofjobs}" \
|
||||||
|
--define "kernels ${kernels}" \
|
||||||
|
--target ${target} \
|
||||||
|
--rebuild "${source_rpm}" 2>&1 | tee -a "${logfile}" > "${tmpdir}/.joblog" &
|
||||||
|
|
||||||
|
local rpmbuild_jobid=$!
|
||||||
|
|
||||||
|
# show progress
|
||||||
|
if (( ${verboselevel} >= 2 )) ; then
|
||||||
|
watch_rpmbuild ${rpmbuild_jobid} "${tmpdir}/.joblog" 2> /dev/null &
|
||||||
|
local watch_jobid=$!
|
||||||
|
fi
|
||||||
|
|
||||||
|
# wait for rpmbuild
|
||||||
|
wait ${rpmbuild_jobid}
|
||||||
|
local rpmbuild_returncode=$(tail -n 1 "${tmpdir}/.jobexit")
|
||||||
|
unset rpmbuild_jobid
|
||||||
|
|
||||||
|
# give watch_rpmbuild a moment to catch up; kill it if it does not
|
||||||
|
if (( ${verboselevel} >= 2 )) ; then
|
||||||
|
sleep 0.5
|
||||||
|
kill ${watch_jobid} &> /dev/null
|
||||||
|
unset watch_jobid
|
||||||
|
fi
|
||||||
|
|
||||||
|
# did rpmbuild succeed?
|
||||||
|
if (( ${rpmbuild_returncode} != 0 )) ; then
|
||||||
|
# linefeed:
|
||||||
|
akmods_echo 1 2 ""
|
||||||
|
|
||||||
|
akmods_echo 2 2 --not-logfile "rpmbuild failed with errorcode ${rpmbuild_returncode}; last 35 Lines of log:"
|
||||||
|
akmods_echo 2 2 --not-logfile "--- "
|
||||||
|
tail -n 35 "${tmpdir}/.joblog" >&2
|
||||||
|
akmods_echo 2 2 --not-logfile "---"
|
||||||
|
return ${rpmbuild_returncode}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# finish status for watch_rpmbuild
|
||||||
|
if (( ${verboselevel} >= 2 )) ; then
|
||||||
|
akmods_echo 1 2 -n "Successfull; "
|
||||||
|
fi
|
||||||
|
|
||||||
|
local rpms_built="$(cd "${tmpdir}"/RPMS/"${target}" ; echo *)"
|
||||||
|
|
||||||
|
if ! mv "${tmpdir}/RPMS/${target}/"* "${outputdir}" ; then
|
||||||
|
# linefeed:
|
||||||
|
akmods_echo 1 2 ""
|
||||||
|
|
||||||
|
akmods_echo 2 2 "Failed to move ${tmpdir}/RPMS/${target}/"* "to ${outputdir}"
|
||||||
|
return 128
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( ${verboselevel} == 1 )) ; then
|
||||||
|
for rpm in ${rpms_built}; do
|
||||||
|
echo "${outputdir%%/}/${rpm}"
|
||||||
|
done
|
||||||
|
elif (( ${verboselevel} >= 2 )) ; then
|
||||||
|
akmods_echo 1 2 "Saved ${rpms_built} in ${outputdir%%/}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# finished
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
myprog_help ()
|
||||||
|
{
|
||||||
|
echo "Rebuilds kmod SRPM(s)"
|
||||||
|
echo $'\n'"Usage: ${myprog} [OPTIONS] <SRPMS>"
|
||||||
|
echo $'\n'"Options:"
|
||||||
|
echo " -k, --kernels -- build for kernel-versions (output from 'uname -r')"
|
||||||
|
echo " -l, --logfile <file> -- save rpmbuild output to <file>"
|
||||||
|
echo " -o, --outputdir <dir> -- save rpms and logs here (current directory)"
|
||||||
|
echo " -t, --target -- target-arch (output from 'uname -m')"
|
||||||
|
echo " -v, --verbose -- increase verboseness"
|
||||||
|
echo " -q, --quiet -- be more quiet"
|
||||||
|
echo " -h, --help -- show usage"
|
||||||
|
echo " -V, --version -- show version"
|
||||||
|
}
|
||||||
|
|
||||||
|
while [ "${1}" ] ; do
|
||||||
|
case "${1}" in
|
||||||
|
-k|--kernels)
|
||||||
|
shift
|
||||||
|
if [[ ! -n "${1}" ]] ; then
|
||||||
|
echo "ERROR: Please provide kernel-version(s) to build for together with --kernel" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
kernels="${1}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-l|--logfile)
|
||||||
|
shift
|
||||||
|
if [[ ! -n "${1}" ]] ; then
|
||||||
|
echo "ERROR: Please provide a filename together with --logfile" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
logfile="${1}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-o|--outputdir)
|
||||||
|
shift
|
||||||
|
if [[ ! -n "${1}" ]] ; then
|
||||||
|
echo "ERROR: Please provide the output directory together with --outputdir" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
outputdir="${1}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-t|--target)
|
||||||
|
shift
|
||||||
|
if [[ ! -n "${1}" ]] ; then
|
||||||
|
echo "ERROR: Please provide the target-arch together with --target" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
target="${1}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-v|--verbose)
|
||||||
|
let verboselevel++
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-q|--quiet)
|
||||||
|
let verboselevel--
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
myprog_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-V|--version)
|
||||||
|
echo "${myprog} ${myver}"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--*)
|
||||||
|
echo "Error: Unknown option '${1}'." >&2
|
||||||
|
myprog_help >&2
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
srpms="${srpms} ${1}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# sanity checks
|
||||||
|
init
|
||||||
|
|
||||||
|
# go
|
||||||
|
for srpm in ${srpms}; do
|
||||||
|
process_srpm ${srpm}
|
||||||
|
returncode=$?
|
||||||
|
|
||||||
|
if (( ${returncode} != 0 )) ; then
|
||||||
|
finally
|
||||||
|
exit ${returncode}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# finished
|
||||||
|
finally
|
||||||
|
|
||||||
|
exit 0
|
@ -0,0 +1,47 @@
|
|||||||
|
#!/bin/bash -
|
||||||
|
#
|
||||||
|
# akmodposttrans - Calls akmods for newly installed kernels
|
||||||
|
#
|
||||||
|
# Copyright (c) 2009 Thorsten Leemhuis <fedora@leemhuis.info>
|
||||||
|
# Copyright (c) 2017 Nicolas Chauvet <kwizart@gmail.com>
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
# a copy of this software and associated documentation files (the
|
||||||
|
# "Software"), to deal in the Software without restriction, including
|
||||||
|
# without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
# permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
# the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be
|
||||||
|
# included in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
|
||||||
|
# just check in case a user calls this directly
|
||||||
|
if [[ ! -w /var ]] ; then
|
||||||
|
echo "Needs to run as root to be able to install rpms." >&2
|
||||||
|
exit 4
|
||||||
|
fi
|
||||||
|
|
||||||
|
# needs to run in background as rpmdb might be locked otherwise
|
||||||
|
if [ -e /bin/systemctl ] ; then
|
||||||
|
# Exit early if system-update.target is active - rhbz#1518401
|
||||||
|
/bin/systemctl is-active system-update.target &>/dev/null
|
||||||
|
RET=$?
|
||||||
|
|
||||||
|
[ $RET == 0 ] && exit 0
|
||||||
|
|
||||||
|
/bin/systemctl restart akmods@${1}.service --no-block >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
nohup /usr/sbin/akmods --from-kernel-posttrans --kernels ${1} > /dev/null 2>&1 &
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
@ -0,0 +1,41 @@
|
|||||||
|
# Default OpenSSL settings and configuration file for kmodgenca
|
||||||
|
# shell-script.
|
||||||
|
#
|
||||||
|
[ req ]
|
||||||
|
default_bits = 4096
|
||||||
|
distinguished_name = req_distinguished_name
|
||||||
|
prompt = no
|
||||||
|
utf8 = yes
|
||||||
|
string_mask = utf8only
|
||||||
|
x509_extensions = req_exts
|
||||||
|
|
||||||
|
[ req_distinguished_name ]
|
||||||
|
# Values settings
|
||||||
|
#
|
||||||
|
0.organizationName = Organization Name (eg, company)
|
||||||
|
organizationalUnitName = Organizational Unit Name (eg, section)
|
||||||
|
emailAddress = Email Address
|
||||||
|
emailAddress_max = 64
|
||||||
|
localityName = Locality Name (eg, city)
|
||||||
|
stateOrProvinceName = State or Province Name (full name)
|
||||||
|
countryName = Country Name (2 letter code)
|
||||||
|
countryName_min = 2
|
||||||
|
countryName_max = 2
|
||||||
|
commonName = Common Name (eg, your name or your server\'s hostname)
|
||||||
|
commonName_max = 64
|
||||||
|
|
||||||
|
# Default values
|
||||||
|
#
|
||||||
|
0.organizationName_default = akmods local
|
||||||
|
organizationalUnitName_default = akmods
|
||||||
|
emailAddress_default = akmods@localhost.localdomain
|
||||||
|
localityName_default = None
|
||||||
|
stateOrProvinceName_default = None
|
||||||
|
countryName_default = XX
|
||||||
|
commonName_default = akmods local signing CA
|
||||||
|
|
||||||
|
[ req_exts ]
|
||||||
|
basicConstraints = critical,CA:FALSE
|
||||||
|
keyUsage = digitalSignature
|
||||||
|
subjectKeyIdentifier = hash
|
||||||
|
authorityKeyIdentifier = keyid
|
@ -0,0 +1,419 @@
|
|||||||
|
Name: akmods
|
||||||
|
Version: 0.5.7
|
||||||
|
Release: 8%{?dist}
|
||||||
|
Summary: Automatic kmods build and install tool
|
||||||
|
|
||||||
|
License: MIT
|
||||||
|
URL: http://rpmfusion.org/Packaging/KernelModules/Akmods
|
||||||
|
|
||||||
|
# We are upstream, these files are maintained directly in pkg-git
|
||||||
|
Source0: 95-akmods.preset
|
||||||
|
Source1: akmods
|
||||||
|
Source2: akmodsbuild
|
||||||
|
Source3: akmods.h2m
|
||||||
|
Source5: akmodsposttrans
|
||||||
|
Source6: akmods.service.in
|
||||||
|
Source7: akmods-shutdown
|
||||||
|
Source8: akmods-shutdown.service
|
||||||
|
Source9: README
|
||||||
|
Source10: LICENSE
|
||||||
|
Source11: akmods@.service
|
||||||
|
Source12: akmods-ostree-post
|
||||||
|
Source13: 95-akmodsposttrans.install
|
||||||
|
Source14: akmods.log
|
||||||
|
Source15: README.secureboot
|
||||||
|
Source16: cacert.config.in
|
||||||
|
Source17: akmods-kmodgenca
|
||||||
|
Source18: akmods-keygen.target
|
||||||
|
Source19: akmods-keygen@.service
|
||||||
|
Source20: %{name}-tmpfiles.conf
|
||||||
|
|
||||||
|
BuildArch: noarch
|
||||||
|
|
||||||
|
BuildRequires: help2man
|
||||||
|
|
||||||
|
# not picked up automatically
|
||||||
|
%if 0%{?rhel} == 6
|
||||||
|
Requires: %{_bindir}/nohup
|
||||||
|
%endif
|
||||||
|
Requires: %{_bindir}/flock
|
||||||
|
Requires: %{_bindir}/time
|
||||||
|
|
||||||
|
# needed for actually building kmods:
|
||||||
|
Requires: %{_bindir}/rpmdev-vercmp
|
||||||
|
Requires: kmodtool >= 1.1-1
|
||||||
|
|
||||||
|
# needed to create CA/Keypair to sign modules
|
||||||
|
Requires: openssl
|
||||||
|
|
||||||
|
# this should track in all stuff that is normally needed to compile modules:
|
||||||
|
Requires: bzip2 coreutils diffutils file findutils gawk gcc grep
|
||||||
|
Requires: gzip make sed tar unzip util-linux which rpm-build
|
||||||
|
|
||||||
|
# On EL, kABI list was renamed
|
||||||
|
%if 0%{?rhel}
|
||||||
|
%if 0%{?rhel} >= 8
|
||||||
|
Requires: (kernel-abi-stablelists or kernel-abi-whitelists)
|
||||||
|
%else
|
||||||
|
Requires: kernel-abi-whitelists
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?fedora} || 0%{?rhel} > 7
|
||||||
|
# We use a virtual provide that would match either
|
||||||
|
# kernel-devel or kernel-PAE-devel
|
||||||
|
Requires: kernel-devel-uname-r
|
||||||
|
# kernel-devel-matched enforces the same kernel version as the -devel
|
||||||
|
%if 0%{?fedora} >= 36 || 0%{?rhel} >= 9
|
||||||
|
Requires: (kernel-debug-devel-matched if kernel-debug-core)
|
||||||
|
Requires: (kernel-devel-matched if kernel-core)
|
||||||
|
Requires: (kernel-lpae-devel-matched if kernel-lpae-core)
|
||||||
|
%else
|
||||||
|
Suggests: (kernel-debug-devel if kernel-debug)
|
||||||
|
Suggests: (kernel-devel if kernel)
|
||||||
|
Suggests: (kernel-lpae-devel if kernel-lpae)
|
||||||
|
%endif
|
||||||
|
Suggests: (kernel-PAE-devel if kernel-PAE)
|
||||||
|
Suggests: (kernel-PAEdebug-devel if kernel-PAEdebug)
|
||||||
|
# Theses are from planetccrma-core or rhel-7-server-rt-rpms
|
||||||
|
Suggests: (kernel-rt-devel if kernel-rt)
|
||||||
|
Suggests: (kernel-rtPAE-devel if kernel-rtPAE)
|
||||||
|
%else
|
||||||
|
# There is no much variant there, so using a sane default
|
||||||
|
Requires: kernel-devel
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# we create a special user that used by akmods to build kmod packages
|
||||||
|
Requires(pre): shadow-utils
|
||||||
|
|
||||||
|
# systemd unit requirements.
|
||||||
|
BuildRequires: systemd
|
||||||
|
Requires(post): systemd
|
||||||
|
Requires(preun): systemd
|
||||||
|
Requires(postun): systemd
|
||||||
|
# Optional but good to have on recent kernel
|
||||||
|
Requires: pkgconfig(libelf)
|
||||||
|
|
||||||
|
|
||||||
|
%description
|
||||||
|
Akmods startup script will rebuild akmod packages during system
|
||||||
|
boot, while its background daemon will build them for kernels right
|
||||||
|
after they were installed.
|
||||||
|
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -c -T
|
||||||
|
cp -p %{SOURCE9} %{SOURCE10} %{SOURCE15} .
|
||||||
|
|
||||||
|
|
||||||
|
%build
|
||||||
|
# Nothing to build
|
||||||
|
|
||||||
|
|
||||||
|
%install
|
||||||
|
mkdir -p %{buildroot}%{_usrsrc}/%{name} \
|
||||||
|
%{buildroot}%{_sbindir} \
|
||||||
|
%{buildroot}%{_sysconfdir}/rpm \
|
||||||
|
%{buildroot}%{_sysconfdir}/pki/%{name}/certs \
|
||||||
|
%{buildroot}%{_sysconfdir}/pki/%{name}/private \
|
||||||
|
%{buildroot}%{_sysconfdir}/kernel/postinst.d \
|
||||||
|
%{buildroot}%{_sysconfdir}/logrotate.d \
|
||||||
|
%{buildroot}%{_localstatedir}/cache/%{name} \
|
||||||
|
%{buildroot}%{_localstatedir}/log/%{name} \
|
||||||
|
%{buildroot}%{_tmpfilesdir}
|
||||||
|
|
||||||
|
install -pm 0755 %{SOURCE1} %{buildroot}%{_sbindir}/
|
||||||
|
install -pm 0755 %{SOURCE2} %{buildroot}%{_sbindir}/
|
||||||
|
install -pm 0755 %{SOURCE12} %{buildroot}%{_sbindir}/
|
||||||
|
install -pm 0755 %{SOURCE5} %{buildroot}%{_sysconfdir}/kernel/postinst.d/
|
||||||
|
install -pm 0644 %{SOURCE14} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
|
||||||
|
install -pm 0640 %{SOURCE16} %{buildroot}%{_sysconfdir}/pki/%{name}/
|
||||||
|
install -pm 0755 %{SOURCE17} %{buildroot}%{_sbindir}/kmodgenca
|
||||||
|
install -pm 0644 %{SOURCE20} %{buildroot}%{_tmpfilesdir}/%{name}.conf
|
||||||
|
install -dpm 0770 %{buildroot}%{_rundir}/%{name}/
|
||||||
|
|
||||||
|
mkdir -p %{buildroot}%{_prefix}/lib/kernel/install.d
|
||||||
|
install -pm 0755 %{SOURCE13} %{buildroot}%{_prefix}/lib/kernel/install.d/
|
||||||
|
mkdir -p \
|
||||||
|
%{buildroot}%{_unitdir} \
|
||||||
|
%{buildroot}%{_presetdir}
|
||||||
|
sed "s|@SERVICE@|display-manager.service|" %{SOURCE6} >\
|
||||||
|
%{buildroot}%{_unitdir}/akmods.service
|
||||||
|
install -pm 0644 %{SOURCE0} %{buildroot}%{_presetdir}/
|
||||||
|
install -pm 0755 %{SOURCE7} %{buildroot}%{_sbindir}/
|
||||||
|
install -pm 0644 %{SOURCE8} %{buildroot}%{_unitdir}/
|
||||||
|
install -pm 0644 %{SOURCE11} %{buildroot}%{_unitdir}/
|
||||||
|
install -pm 0644 %{SOURCE18} %{buildroot}%{_unitdir}/
|
||||||
|
install -pm 0644 %{SOURCE19} %{buildroot}%{_unitdir}/
|
||||||
|
|
||||||
|
# Generate and install man pages.
|
||||||
|
mkdir -p %{buildroot}%{_mandir}/man1
|
||||||
|
help2man -N -i %{SOURCE3} -s 1 \
|
||||||
|
-o %{buildroot}%{_mandir}/man1/akmods.1 \
|
||||||
|
%{buildroot}%{_sbindir}/akmods
|
||||||
|
help2man -N -i %{SOURCE3} -s 1 \
|
||||||
|
-o %{buildroot}%{_mandir}/man1/akmodsbuild.1 \
|
||||||
|
%{buildroot}%{_sbindir}/akmodsbuild
|
||||||
|
|
||||||
|
|
||||||
|
%pre
|
||||||
|
# create group and user
|
||||||
|
getent group akmods >/dev/null || groupadd -r akmods
|
||||||
|
getent passwd akmods >/dev/null || \
|
||||||
|
useradd -r -g akmods -d /var/cache/akmods/ -s /sbin/nologin \
|
||||||
|
-c "User is used by akmods to build akmod packages" akmods
|
||||||
|
|
||||||
|
%post
|
||||||
|
%systemd_post akmods.service
|
||||||
|
%systemd_post akmods@.service
|
||||||
|
%systemd_post akmods-shutdown.service
|
||||||
|
|
||||||
|
%preun
|
||||||
|
%systemd_preun akmods.service
|
||||||
|
%systemd_preun akmods@.service
|
||||||
|
%systemd_preun akmods-shutdown.service
|
||||||
|
|
||||||
|
%postun
|
||||||
|
%systemd_postun akmods.service
|
||||||
|
%systemd_postun akmods@.service
|
||||||
|
%systemd_postun akmods-shutdown.service
|
||||||
|
|
||||||
|
|
||||||
|
%files
|
||||||
|
%doc README README.secureboot
|
||||||
|
%license LICENSE
|
||||||
|
%{_sbindir}/akmodsbuild
|
||||||
|
%{_sbindir}/akmods
|
||||||
|
%{_sbindir}/akmods-ostree-post
|
||||||
|
%{_sbindir}/kmodgenca
|
||||||
|
%dir %attr(750,root,akmods) %{_sysconfdir}/pki/%{name}/certs
|
||||||
|
%dir %attr(750,root,akmods) %{_sysconfdir}/pki/%{name}/private
|
||||||
|
%config(noreplace) %attr(640,root,akmods) %{_sysconfdir}/pki/%{name}/cacert.config.in
|
||||||
|
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
|
||||||
|
%{_sysconfdir}/kernel/postinst.d/akmodsposttrans
|
||||||
|
%{_unitdir}/akmods.service
|
||||||
|
%{_unitdir}/akmods@.service
|
||||||
|
%{_sbindir}/akmods-shutdown
|
||||||
|
%{_unitdir}/akmods-shutdown.service
|
||||||
|
%{_prefix}/lib/kernel/install.d/95-akmodsposttrans.install
|
||||||
|
%attr(0644,root,root) %{_unitdir}/akmods-keygen.target
|
||||||
|
%attr(0644,root,root) %{_unitdir}/akmods-keygen@.service
|
||||||
|
%dir %attr(0770,root,akmods) %{_rundir}/%{name}
|
||||||
|
%{_tmpfilesdir}/%{name}.conf
|
||||||
|
# akmods was enabled in the default preset by f28
|
||||||
|
%if 0%{?rhel}
|
||||||
|
%{_presetdir}/95-akmods.preset
|
||||||
|
%else
|
||||||
|
%exclude %{_presetdir}/95-akmods.preset
|
||||||
|
%endif
|
||||||
|
%{_usrsrc}/akmods
|
||||||
|
%dir %attr(-,akmods,akmods) %{_localstatedir}/cache/akmods
|
||||||
|
%dir %attr(0775,root,akmods) %{_localstatedir}/log/%{name}
|
||||||
|
%{_mandir}/man1/*
|
||||||
|
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Wed Jun 05 2024 Arkady L. Shane <tigro@msvsphere-os.ru> - 0.5.7-8
|
||||||
|
- Rebuilt for MSVSphere 9.4
|
||||||
|
|
||||||
|
* Wed May 04 2022 Nicolas Chauvet <kwizart@gmail.com> - 0.5.7-8
|
||||||
|
- Fix logrotate permission access to /var/log/akmods directory - rhbz#2078490
|
||||||
|
- Rename logrotate config file
|
||||||
|
|
||||||
|
* Wed Mar 09 2022 Timothée Ravier <tim@siosm.fr> - 0.5.7-7
|
||||||
|
- Use 'Require' instead of 'Suggest' for kernel*-devel packages.
|
||||||
|
|
||||||
|
* Thu Jan 27 2022 Nicolas Viéville <nicolas.vieville@uphf.fr> - 0.5.7-6
|
||||||
|
- Adapt usage of lockfile to systemd-tmpfiles
|
||||||
|
- Re-locate akmods logs in /var/log
|
||||||
|
|
||||||
|
* Wed Jan 26 2022 Timothée Ravier <tim@siosm.fr> - 0.5.7-5
|
||||||
|
- Use kernel*-core variants in conditional Suggests
|
||||||
|
|
||||||
|
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.7-4
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Dec 20 2021 Nicolas Chauvet <kwizart@gmail.com> - 0.5.7-3
|
||||||
|
- Drop perl-interpeter
|
||||||
|
- Drop akmodsinit
|
||||||
|
- Only use preset on rhel
|
||||||
|
- kernel-devel-matched support
|
||||||
|
see also https://src.fedoraproject.org/rpms/akmods/pull-request/7
|
||||||
|
|
||||||
|
* Fri Dec 10 2021 Nicolas Chauvet <kwizart@gmail.com> - 0.5.7-2
|
||||||
|
- Bump kmodtool requirement
|
||||||
|
- Rename kABI list
|
||||||
|
- Drop EL6 support
|
||||||
|
- Switch to distro agnostic deps
|
||||||
|
|
||||||
|
* Fri Oct 22 2021 Nicolas Viéville <nicolas.vieville@uphf.fr> - 0.5.7-1
|
||||||
|
- Add local akmods CA signing keys and support tools to sign modules for
|
||||||
|
Secure boot thanks to Stanislas Leduc <stanislas.leduc@balinor.net>
|
||||||
|
- Add akmods-keygen service to generate MOK key pair on first run
|
||||||
|
|
||||||
|
* Fri Oct 22 2021 Nicolas Viéville <nicolas.vieville@uphf.fr> - 0.5.6-29
|
||||||
|
- Remove trailing spaces and clean-up
|
||||||
|
- Use %%{name} when possible
|
||||||
|
- Convert if statement from "[!] $variable" to "[!] -n $variable"
|
||||||
|
- Fix kernel list build when parsing command line options
|
||||||
|
- Ensure to build for grub default kernel
|
||||||
|
- Improve detection of already installed (weak-)modules in akmods (RHEL)
|
||||||
|
- akmods uses logrotate and clean-up /var/cache/akmods sub-directories of
|
||||||
|
old logs and rpm files from no more installed kmod packages
|
||||||
|
(rhbz #1542658).
|
||||||
|
|
||||||
|
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.6-28
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Jan 25 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.6-27
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.6-26
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||||
|
|
||||||
|
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.6-25
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Nov 20 2019 Nicolas Viéville <nicolas.vieville@uphf.fr> - 0.5.6-24
|
||||||
|
- Check kernel presence differently for systemd-boot machines - rhbz#1769144
|
||||||
|
|
||||||
|
* Wed Oct 16 2019 Leigh Scott <leigh123linux@googlemail.com> - 0.5.6-23
|
||||||
|
- Add requires kernel-abi-whitelists for RHEL
|
||||||
|
|
||||||
|
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.6-22
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon May 20 2019 Nicolas Chauvet <kwizart@gmail.com> - 0.5.6-21
|
||||||
|
- Add check for rhel8
|
||||||
|
|
||||||
|
* Wed May 15 2019 Nicolas Viéville <nicolas.vieville@uphf.fr> - 0.5.6-20
|
||||||
|
- Fix akmodsposttrans after kernel update/install on Fedora >= 28 and
|
||||||
|
RHEL >= 7 - rhbz#1709055
|
||||||
|
|
||||||
|
* Thu Feb 28 2019 Alexander Larsson <alexl@redhat.com> - 0.5.6-19
|
||||||
|
- Support ostree/silverblue builds - rhbz#1667014
|
||||||
|
|
||||||
|
* Thu Feb 28 2019 Hans de Goede <hdegoede@redhat.com>
|
||||||
|
- Do not fail when the old initscripts pkg is not installed - rhbz#1680121
|
||||||
|
|
||||||
|
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.6-18
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Nov 05 2018 Nicolas Chauvet <kwizart@gmail.com> - 0.5.6-17
|
||||||
|
- Don't enforce target arch - rhbz#1644430
|
||||||
|
- Rework log file path
|
||||||
|
- Avoid using /usr/lib/modules for el6 compat
|
||||||
|
|
||||||
|
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.6-16
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Mar 26 2018 Nicolas Chauvet <kwizart@gmail.com> - 0.5.6-15
|
||||||
|
- Add inihibitor for akmods@.service
|
||||||
|
- Use restart on akmodsposttrans
|
||||||
|
|
||||||
|
* Mon Mar 26 2018 Nicolas Chauvet <kwizart@gmail.com> - 0.5.6-14
|
||||||
|
- Switch to always retry by default
|
||||||
|
- Drop akmods preset by f28
|
||||||
|
- Don't enable service on ah
|
||||||
|
- Test a rw directory
|
||||||
|
|
||||||
|
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.6-13
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Dec 13 2017 Nicolas Chauvet <kwizart@gmail.com> - 0.5.6-12
|
||||||
|
- Update kernel posttrans method - rhbz#1518401
|
||||||
|
|
||||||
|
* Thu Aug 03 2017 Nicolas Chauvet <kwizart@gmail.com> - 0.5.6-11
|
||||||
|
- Rework kernel-devel requires on el
|
||||||
|
|
||||||
|
* Thu Aug 03 2017 Nicolas Chauvet <kwizart@gmail.com> - 0.5.6-10
|
||||||
|
- Enable suggests on fedora
|
||||||
|
- Add back el6 support in spec
|
||||||
|
- Add Requires elfutils-libelf-devel
|
||||||
|
|
||||||
|
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.6-9
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Jul 13 2017 Petr Pisar <ppisar@redhat.com> - 0.5.6-8
|
||||||
|
- perl dependency renamed to perl-interpreter
|
||||||
|
<https://fedoraproject.org/wiki/Changes/perl_Package_to_Install_Core_Modules>
|
||||||
|
|
||||||
|
* Thu May 4 2017 Hans de Goede <hdegoede@redhat.com> - 0.5.6-7
|
||||||
|
- "udevadm trigger" may have bad side-effects (rhbz#454407) instead
|
||||||
|
look for modalias files under /sys/devices and call modprobe directly
|
||||||
|
- Fix exit status when no akmod packages are installed, so that systemd
|
||||||
|
does not consider the akmods.service as having failed to start
|
||||||
|
|
||||||
|
* Wed May 3 2017 Hans de Goede <hdegoede@redhat.com> - 0.5.6-6
|
||||||
|
- Run "udevadm trigger" and "systemctl restart systemd-modules-load.service"
|
||||||
|
when new kmod packages have been build and installed so that the new
|
||||||
|
modules may be used immediately without requiring a reboot
|
||||||
|
|
||||||
|
* Mon Mar 6 2017 Hans de Goede <hdegoede@redhat.com> - 0.5.6-5
|
||||||
|
- Add LICENSE file (rhbz#1422918)
|
||||||
|
|
||||||
|
* Fri Feb 24 2017 Hans de Goede <hdegoede@redhat.com> - 0.5.6-4
|
||||||
|
- Replace %%{_prefix}/lib/systemd/system-preset with %%{_presetdir}
|
||||||
|
|
||||||
|
* Thu Feb 16 2017 Hans de Goede <hdegoede@redhat.com> - 0.5.6-3
|
||||||
|
- Submit to Fedora for package review
|
||||||
|
|
||||||
|
* Mon Nov 28 2016 Nicolas Chauvet <kwizart@gmail.com> - 0.5.6-2
|
||||||
|
- Use Suggests kernel-devel weak-dependency - see rfbz#3386
|
||||||
|
|
||||||
|
* Fri Oct 14 2016 Richard Shaw <hobbes1069@gmail.com> - 0.5.6-1
|
||||||
|
- Disable shutdown systemd service file by default.
|
||||||
|
- Remove modprobe line from main service file.
|
||||||
|
|
||||||
|
* Wed Aug 17 2016 Sérgio Basto <sergio@serjux.com> - 0.5.4-3
|
||||||
|
- New release
|
||||||
|
|
||||||
|
* Sun Jan 03 2016 Nicolas Chauvet <kwizart@gmail.com> - 0.5.4-2
|
||||||
|
- Revert conflicts kernel-debug-devel
|
||||||
|
|
||||||
|
* Thu Jul 23 2015 Richard Shaw <hobbes1069@gmail.com> - 0.5.4-1
|
||||||
|
- Do not mark a build as failed when only installing the RPM fails.
|
||||||
|
- Run akmods-shutdown script instead of akmods on shutdown.
|
||||||
|
- Add systemd preset file to enable services by default.
|
||||||
|
|
||||||
|
* Wed Jul 15 2015 Richard Shaw <hobbes1069@gmail.com> - 0.5.3-2
|
||||||
|
- Add package conflicts to stop pulling in kernel-debug-devel, fixes BZ#3386.
|
||||||
|
- Add description for the formatting of the <kernel> parameter, BZ#3580.
|
||||||
|
- Update static man pages and clean them up.
|
||||||
|
- Fixed another instance of TMPDIR causing issues.
|
||||||
|
- Added detection of dnf vs yum to akmods, fixed BZ#3481.
|
||||||
|
|
||||||
|
* Wed Apr 1 2015 Richard Shaw <hobbes1069@gmail.com> - 0.5.2-1
|
||||||
|
- Fix temporary directory creation when TMPDIR environment variable is set,
|
||||||
|
fixes BZ#2596.
|
||||||
|
- Update systemd scripts to use macros.
|
||||||
|
- Fix akmods run on shutdown systemd unit file, fixes BZ#3503.
|
||||||
|
|
||||||
|
* Sun Nov 16 2014 Nicolas Chauvet <kwizart@gmail.com> - 0.5.1-4
|
||||||
|
- Fix akmods on armhfp - rfbz#3117
|
||||||
|
- Use yum instead of rpm to install packages - rfbz#3350
|
||||||
|
Switch to a better date format
|
||||||
|
|
||||||
|
* Fri Jan 11 2013 Richard Shaw <hobbes1069@gmail.com> - 0.5.1-3
|
||||||
|
- Really fix akmods.service.in.
|
||||||
|
|
||||||
|
* Fri Jun 01 2012 Richard Shaw <hobbes1069@gmail.com> - 0.5.1-2
|
||||||
|
- Add service file to run again on shutdown.
|
||||||
|
- Add conditional for Fedora 18 to specify correct systemd graphical service.
|
||||||
|
|
||||||
|
* Thu Apr 12 2012 Nicolas Chauvet <kwizart@gmail.com> - 0.4.0-4
|
||||||
|
- Rebuilt
|
||||||
|
|
||||||
|
* Tue Mar 20 2012 Richard Shaw <hobbes1069@gmail.com> - 0.4.0-3
|
||||||
|
- Add additional error output if the needed kernel development files are not
|
||||||
|
installed. (Fixes #561)
|
||||||
|
|
||||||
|
* Mon Mar 05 2012 Richard Shaw <hobbes1069@gmail.com> - 0.4.0-2
|
||||||
|
- Remove remaining references to previous Fedora releases
|
||||||
|
- Remove legacy SysV init script from CVS.
|
||||||
|
- Added man page for akmods and cleaned up man page for akmodsbuild.
|
||||||
|
|
||||||
|
* Tue Feb 07 2012 Nicolas Chauvet <kwizart@gmail.com> - 0.4.0-1
|
||||||
|
- Update for UsrMove support
|
||||||
|
- Remove unused references to older fedora
|
||||||
|
- Change Requires from kernel-devel to kernel-devel-uname-r
|
Loading…
Reference in new issue