Date: Friday, July 1, 2022 @ 22:12:37 Author: seblu Revision: 449728 archrelease: copy trunk to extra-any
Added: dkms/repos/extra-any/PKGBUILD (from rev 449727, dkms/trunk/PKGBUILD) dkms/repos/extra-any/PKGBUILD.26 (from rev 449727, dkms/trunk/PKGBUILD.26) dkms/repos/extra-any/dkms.install (from rev 449727, dkms/trunk/dkms.install) dkms/repos/extra-any/hook.install (from rev 449727, dkms/trunk/hook.install) dkms/repos/extra-any/hook.remove (from rev 449727, dkms/trunk/hook.remove) dkms/repos/extra-any/hook.sh (from rev 449727, dkms/trunk/hook.sh) dkms/repos/extra-any/hook.upgrade (from rev 449727, dkms/trunk/hook.upgrade) Deleted: dkms/repos/extra-any/PKGBUILD dkms/repos/extra-any/PKGBUILD.26 dkms/repos/extra-any/dkms.install dkms/repos/extra-any/hook.install dkms/repos/extra-any/hook.remove dkms/repos/extra-any/hook.sh dkms/repos/extra-any/hook.upgrade --------------+ PKGBUILD | 146 ++++++------- PKGBUILD.26 | 138 ++++++------ dkms.install | 26 +- hook.install | 28 +- hook.remove | 26 +- hook.sh | 606 ++++++++++++++++++++++++++++----------------------------- hook.upgrade | 26 +- 7 files changed, 498 insertions(+), 498 deletions(-) Deleted: PKGBUILD =================================================================== --- PKGBUILD 2022-07-01 22:12:23 UTC (rev 449727) +++ PKGBUILD 2022-07-01 22:12:37 UTC (rev 449728) @@ -1,73 +0,0 @@ -# Maintainer: Sébastien Luttringer -# Contributor: Balwinder S "bsd" Dheeman (bdheeman AT gmail.com) - -pkgname=dkms -pkgver=3.0.3 -pkgrel=1 -pkgdesc='Dynamic Kernel Modules System' -arch=('any') -url='https://github.com/dell/dkms' -license=('GPL2') -depends=('coreutils' 'bash' 'gawk' 'sed' 'kmod' 'gcc' 'make' 'patch') -makedepends=('git') -optdepends=('linux-headers: build modules against the Arch kernel' - 'linux-lts-headers: build modules against the LTS kernel' - 'linux-zen-headers: build modules against the ZEN kernel' - 'linux-hardened-headers: build modules against the HARDENED kernel') -backup=('etc/dkms/framework.conf') -install=$pkgname.install -source=("git+https://github.com/dell/dkms.git#tag=v$pkgver" - 'hook.install' - 'hook.remove' - 'hook.upgrade' - 'hook.sh') -sha256sums=('SKIP' - 'acdc5b45cc018cea04ee1aec56fd8fc3a2de62cf7bc41acf53b3790872120998' - '326515cc7d00f93760beb844434ca7442caf7a9424614aa95a8f6d1ab79e15df' - '4f8dff7716e73a8bba885638f12e3cdc9e87daec1896f75e700b981527e43870' - 'c1b4a4e2e4e0e0e59ee0887403e79d60b209f3878dbbec6612573f13b90cce01') - -prepare() { - cd dkms - - # apply patch from the source array (should be a pacman feature) - local filename - for filename in "${source[@]}"; do - if [[ "$filename" =~ \.patch$ ]]; then - msg2 "Applying patch ${filename##*/}" - patch -p1 -N -i "$srcdir/${filename##*/}" - fi - done - - # /usr move - msg2 '/usr move patching' - for i in dkms{.in,.8.in,_framework.conf,.bash-completion,_common.postinst} sign_helper.sh; do - sed -ri 's,/lib/modules,/usr/lib/modules,g' "$i" - done -} - -package() { - # alpm hooks - install -D -m 644 hook.install "$pkgdir/usr/share/libalpm/hooks/70-dkms-install.hook" - # both upgrade and remove hooks are removing dkms modules. - # remove always call depmod while upgrade never, as install will later. - # upgrade is run before remove in order to have the cleanest depmod file, - # if something goes wrong before the depmod call in install hook. - install -D -m 644 hook.upgrade "$pkgdir/usr/share/libalpm/hooks/70-dkms-upgrade.hook" - install -D -m 644 hook.remove "$pkgdir/usr/share/libalpm/hooks/71-dkms-remove.hook" - # hook helper - install -D -m 755 hook.sh "$pkgdir/usr/share/libalpm/scripts/dkms" - # upstream installer - cd dkms - # we don't need kconf files and libdir is only for debian stuff, so - # we install them outside of $pkgdir - make \ - DESTDIR="$pkgdir" \ - SBIN="$pkgdir/usr/bin" \ - BASHDIR="$pkgdir/usr/share/bash-completion/completions" \ - KCONF="$srcdir"/trash \ - LIBDIR="$srcdir"/trash \ - install -} - -# vim:set ts=2 sw=2 et: Copied: dkms/repos/extra-any/PKGBUILD (from rev 449727, dkms/trunk/PKGBUILD) =================================================================== --- PKGBUILD (rev 0) +++ PKGBUILD 2022-07-01 22:12:37 UTC (rev 449728) @@ -0,0 +1,73 @@ +# Maintainer: Sébastien Luttringer +# Contributor: Balwinder S "bsd" Dheeman (bdheeman AT gmail.com) + +pkgname=dkms +pkgver=3.0.5 +pkgrel=1 +pkgdesc='Dynamic Kernel Modules System' +arch=('any') +url='https://github.com/dell/dkms' +license=('GPL2') +depends=('coreutils' 'bash' 'gawk' 'sed' 'kmod' 'gcc' 'make' 'patch') +makedepends=('git') +optdepends=('linux-headers: build modules against the Arch kernel' + 'linux-lts-headers: build modules against the LTS kernel' + 'linux-zen-headers: build modules against the ZEN kernel' + 'linux-hardened-headers: build modules against the HARDENED kernel') +backup=('etc/dkms/framework.conf') +install=$pkgname.install +source=("git+https://github.com/dell/dkms.git#tag=v$pkgver" + 'hook.install' + 'hook.remove' + 'hook.upgrade' + 'hook.sh') +sha256sums=('SKIP' + 'acdc5b45cc018cea04ee1aec56fd8fc3a2de62cf7bc41acf53b3790872120998' + '326515cc7d00f93760beb844434ca7442caf7a9424614aa95a8f6d1ab79e15df' + '4f8dff7716e73a8bba885638f12e3cdc9e87daec1896f75e700b981527e43870' + 'c1b4a4e2e4e0e0e59ee0887403e79d60b209f3878dbbec6612573f13b90cce01') + +prepare() { + cd dkms + + # apply patch from the source array (should be a pacman feature) + local filename + for filename in "${source[@]}"; do + if [[ "$filename" =~ \.patch$ ]]; then + msg2 "Applying patch ${filename##*/}" + patch -p1 -N -i "$srcdir/${filename##*/}" + fi + done + + # /usr move + msg2 '/usr move patching' + for i in dkms{.in,.8.in,_framework.conf,.bash-completion,_common.postinst}; do + sed -ri 's,/lib/modules,/usr/lib/modules,g' "$i" + done +} + +package() { + # alpm hooks + install -D -m 644 hook.install "$pkgdir/usr/share/libalpm/hooks/70-dkms-install.hook" + # both upgrade and remove hooks are removing dkms modules. + # remove always call depmod while upgrade never, as install will later. + # upgrade is run before remove in order to have the cleanest depmod file, + # if something goes wrong before the depmod call in install hook. + install -D -m 644 hook.upgrade "$pkgdir/usr/share/libalpm/hooks/70-dkms-upgrade.hook" + install -D -m 644 hook.remove "$pkgdir/usr/share/libalpm/hooks/71-dkms-remove.hook" + # hook helper + install -D -m 755 hook.sh "$pkgdir/usr/share/libalpm/scripts/dkms" + # upstream installer + cd dkms + # we don't need kconf files and libdir is only for debian stuff, so + # we install them outside of $pkgdir + make \ + DESTDIR="$pkgdir" \ + SBIN="$pkgdir/usr/bin" \ + BASHDIR="$pkgdir/usr/share/bash-completion/completions" \ + KCONF="$srcdir"/trash \ + LIBDIR="$srcdir"/trash \ + install +} + +# vim:set ts=2 sw=2 et: Deleted: PKGBUILD.26 =================================================================== --- PKGBUILD.26 2022-07-01 22:12:23 UTC (rev 449727) +++ PKGBUILD.26 2022-07-01 22:12:37 UTC (rev 449728) @@ -1,69 +0,0 @@ -# Maintainer: Sébastien Luttringer -# Contributor: Balwinder S "bsd" Dheeman (bdheeman AT gmail.com) - -pkgname=dkms -pkgver=2.6.1 -pkgrel=1 -pkgdesc='Dynamic Kernel Modules System' -arch=('any') -url='https://github.com/dell/dkms' -license=('GPL2') -depends=('bash' 'kmod' 'gcc' 'make' 'patch') -makedepends=('git') -optdepends=('linux-headers: build modules against the Arch kernel' - 'linux-lts-headers: build modules against the LTS kernel' - 'linux-zen-headers: build modules against the ZEN kernel' - 'linux-hardened-headers: build modules against the HARDENED kernel') -backup=('etc/dkms/framework.conf') -install=$pkgname.install -source=("git+https://github.com/dell/dkms.git#tag=v$pkgver" - 'hook.install' - 'hook.remove' - 'hook.sh' - '0001-Revert-Make-newly-installed-modules-available-immedi.patch' - '0002-Revert-Fix-to-run-under-BusyBox-shell.patch' - '0003-Fix-version-check-when-installing-modules.patch') -md5sums=('SKIP' - '90f1486e0af9aab85e8c60d456802c63' - '2e8ffd0c2ddec02872d0234befd129fd' - '80632f6a454b35bcade2bed287f13c7b' - 'd3b91ef709f567a375f4bbdbd3291d2b' - '4342b5e9020a52a73a63e7897ead5405' - '00813655321b8fc256eda737ca0622ef') - -prepare() { - cd dkms - - # apply patch from the source array (should be a pacman feature) - local filename - for filename in "${source[@]}"; do - if [[ "$filename" =~ \.patch$ ]]; then - msg2 "Applying patch ${filename##*/}" - patch -p1 -N -i "$srcdir/${filename##*/}" - fi - done - - # /usr move - msg2 '/usr move patching' - for i in dkms{,_framework.conf,.bash-completion,.8,_common.postinst}; do - sed -ri 's,/lib/modules,/usr/lib/modules,g' "$i" - done -} - -package() { - # alpm hook - install -D -m 644 hook.install "$pkgdir/usr/share/libalpm/hooks/70-dkms-install.hook" - install -D -m 644 hook.remove "$pkgdir/usr/share/libalpm/hooks/70-dkms-remove.hook" - install -D -m 755 hook.sh "$pkgdir/usr/lib/dkms/alpm-hook" - # upstream installer - cd dkms - # we don't need kconf files, so we install them outside $pkgdir - make \ - DESTDIR="$pkgdir" \ - SBIN="$pkgdir/usr/bin" \ - BASHDIR="$pkgdir/usr/share/bash-completion/completions" \ - KCONF="$srcdir"/kconf \ - install -} - -# vim:set ts=2 sw=2 et: Copied: dkms/repos/extra-any/PKGBUILD.26 (from rev 449727, dkms/trunk/PKGBUILD.26) =================================================================== --- PKGBUILD.26 (rev 0) +++ PKGBUILD.26 2022-07-01 22:12:37 UTC (rev 449728) @@ -0,0 +1,69 @@ +# Maintainer: Sébastien Luttringer +# Contributor: Balwinder S "bsd" Dheeman (bdheeman AT gmail.com) + +pkgname=dkms +pkgver=2.6.1 +pkgrel=1 +pkgdesc='Dynamic Kernel Modules System' +arch=('any') +url='https://github.com/dell/dkms' +license=('GPL2') +depends=('bash' 'kmod' 'gcc' 'make' 'patch') +makedepends=('git') +optdepends=('linux-headers: build modules against the Arch kernel' + 'linux-lts-headers: build modules against the LTS kernel' + 'linux-zen-headers: build modules against the ZEN kernel' + 'linux-hardened-headers: build modules against the HARDENED kernel') +backup=('etc/dkms/framework.conf') +install=$pkgname.install +source=("git+https://github.com/dell/dkms.git#tag=v$pkgver" + 'hook.install' + 'hook.remove' + 'hook.sh' + '0001-Revert-Make-newly-installed-modules-available-immedi.patch' + '0002-Revert-Fix-to-run-under-BusyBox-shell.patch' + '0003-Fix-version-check-when-installing-modules.patch') +md5sums=('SKIP' + '90f1486e0af9aab85e8c60d456802c63' + '2e8ffd0c2ddec02872d0234befd129fd' + '80632f6a454b35bcade2bed287f13c7b' + 'd3b91ef709f567a375f4bbdbd3291d2b' + '4342b5e9020a52a73a63e7897ead5405' + '00813655321b8fc256eda737ca0622ef') + +prepare() { + cd dkms + + # apply patch from the source array (should be a pacman feature) + local filename + for filename in "${source[@]}"; do + if [[ "$filename" =~ \.patch$ ]]; then + msg2 "Applying patch ${filename##*/}" + patch -p1 -N -i "$srcdir/${filename##*/}" + fi + done + + # /usr move + msg2 '/usr move patching' + for i in dkms{,_framework.conf,.bash-completion,.8,_common.postinst}; do + sed -ri 's,/lib/modules,/usr/lib/modules,g' "$i" + done +} + +package() { + # alpm hook + install -D -m 644 hook.install "$pkgdir/usr/share/libalpm/hooks/70-dkms-install.hook" + install -D -m 644 hook.remove "$pkgdir/usr/share/libalpm/hooks/70-dkms-remove.hook" + install -D -m 755 hook.sh "$pkgdir/usr/lib/dkms/alpm-hook" + # upstream installer + cd dkms + # we don't need kconf files, so we install them outside $pkgdir + make \ + DESTDIR="$pkgdir" \ + SBIN="$pkgdir/usr/bin" \ + BASHDIR="$pkgdir/usr/share/bash-completion/completions" \ + KCONF="$srcdir"/kconf \ + install +} + +# vim:set ts=2 sw=2 et: Deleted: dkms.install =================================================================== --- dkms.install 2022-07-01 22:12:23 UTC (rev 449727) +++ dkms.install 2022-07-01 22:12:37 UTC (rev 449728) @@ -1,13 +0,0 @@ -#!/bin/bash - -# arg 1: the new package version -# arg 2: the old package version -post_upgrade() { - if (( "$(vercmp $2 '2.2.0.3+git151023-2')" < 0 )); then - echo '===> dkms systemd startup service has been removed' - echo '===> modules building is now handled by alpm hooks at install time' - echo '===> startup modules loading must be done via modules-load.d' - fi -} - -# vim:set ts=2 sw=2 ft=sh et: Copied: dkms/repos/extra-any/dkms.install (from rev 449727, dkms/trunk/dkms.install) =================================================================== --- dkms.install (rev 0) +++ dkms.install 2022-07-01 22:12:37 UTC (rev 449728) @@ -0,0 +1,13 @@ +#!/bin/bash + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + if (( "$(vercmp $2 '2.2.0.3+git151023-2')" < 0 )); then + echo '===> dkms systemd startup service has been removed' + echo '===> modules building is now handled by alpm hooks at install time' + echo '===> startup modules loading must be done via modules-load.d' + fi +} + +# vim:set ts=2 sw=2 ft=sh et: Deleted: hook.install =================================================================== --- hook.install 2022-07-01 22:12:23 UTC (rev 449727) +++ hook.install 2022-07-01 22:12:37 UTC (rev 449728) @@ -1,14 +0,0 @@ -[Trigger] -Operation = Install -Operation = Upgrade -Type = Path -Target = usr/src/*/dkms.conf -Target = usr/lib/modules/*/build/include/ -Target = usr/lib/modules/*/modules.alias - -[Action] -Description = Install DKMS modules -Depends = dkms -When = PostTransaction -Exec = /usr/share/libalpm/scripts/dkms install -NeedsTargets Copied: dkms/repos/extra-any/hook.install (from rev 449727, dkms/trunk/hook.install) =================================================================== --- hook.install (rev 0) +++ hook.install 2022-07-01 22:12:37 UTC (rev 449728) @@ -0,0 +1,14 @@ +[Trigger] +Operation = Install +Operation = Upgrade +Type = Path +Target = usr/src/*/dkms.conf +Target = usr/lib/modules/*/build/include/ +Target = usr/lib/modules/*/modules.alias + +[Action] +Description = Install DKMS modules +Depends = dkms +When = PostTransaction +Exec = /usr/share/libalpm/scripts/dkms install +NeedsTargets Deleted: hook.remove =================================================================== --- hook.remove 2022-07-01 22:12:23 UTC (rev 449727) +++ hook.remove 2022-07-01 22:12:37 UTC (rev 449728) @@ -1,13 +0,0 @@ -[Trigger] -Operation = Remove -Type = Path -Target = usr/src/*/dkms.conf -Target = usr/lib/modules/*/build/include/ -Target = usr/lib/modules/*/modules.alias - -[Action] -Description = Remove DKMS modules -Depends = dkms -When = PreTransaction -Exec = /usr/share/libalpm/scripts/dkms remove -NeedsTargets Copied: dkms/repos/extra-any/hook.remove (from rev 449727, dkms/trunk/hook.remove) =================================================================== --- hook.remove (rev 0) +++ hook.remove 2022-07-01 22:12:37 UTC (rev 449728) @@ -0,0 +1,13 @@ +[Trigger] +Operation = Remove +Type = Path +Target = usr/src/*/dkms.conf +Target = usr/lib/modules/*/build/include/ +Target = usr/lib/modules/*/modules.alias + +[Action] +Description = Remove DKMS modules +Depends = dkms +When = PreTransaction +Exec = /usr/share/libalpm/scripts/dkms remove +NeedsTargets Deleted: hook.sh =================================================================== --- hook.sh 2022-07-01 22:12:23 UTC (rev 449727) +++ hook.sh 2022-07-01 22:12:37 UTC (rev 449728) @@ -1,303 +0,0 @@ -#!/bin/bash - -# -# Copyright © 2018-2021, Sébastien Luttringer -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# display what to run and run it quietly -run() { - echo "==> $*" - "$@" > /dev/null - local ret=$? - (( $ret )) && echo "==> WARNING: \`$*' exited $ret" - return $ret -} - -# check whether the dependencies of a module are installed -# $1: module name -# $2: module version -# $3: kernel version -check_dependency() { ( - source "$source_tree/$1-$2/dkms.conf" - local mod lines line - for mod in "${BUILD_DEPENDS[@]}"; do - mapfile lines < <(dkms status -m "$mod" -k "$3") - for line in "${lines[@]}"; do - [[ "$line" =~ "$mod/"[^,]+", $3, "[^:]+': installed' ]] && break 2 - done - exit 1 - done - exit 0 -) } - -# check whether the modules should be built with this kernel version -# $1: module name -# $2: module version -# $3: kernel version -check_buildexclusive() { - local BUILD_EXCLUSIVE_KERNEL=$(source "$source_tree/$1-$2/dkms.conf"; printf '%s\n' "$BUILD_EXCLUSIVE_KERNEL") - [[ "$3" =~ $BUILD_EXCLUSIVE_KERNEL ]] -} - -# list all kernel versions -all_kver() { - pushd "$install_tree" >/dev/null - local path - for path in */build/; do - echo "${path%%/*}" - done - popd >/dev/null -} - -# list all module name/version for a specific kernel version -# $1: kernel version -all_nv_from_kver() { - local path - for path in "$source_tree"/*-*/dkms.conf; do - if [[ -f "$path" && "$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then - echo "${BASH_REMATCH[1]}/${BASH_REMATCH[2]}" - fi - done -} - -# list of modules/version for installed/built kernel version -# $1: kernel version -built_nv_from_kver() { - local line - dkms status -k "$1" | while read -r line; do - if [[ "$line" =~ ^([^/]+/[^,]+)", $1, "[^:]+": "(built|installed) ]]; then - echo "${BASH_REMATCH[1]}" - fi - done -} - -# list installed or built kernel version for a specific module version -# $1 : module name/module version -built_kver_from_nv() { - local line - dkms status "$1" | while read -r line; do - if [[ "$line" =~ ^"$1, "([^,]+)", "[^:]+": "(built|installed) ]]; then - echo "${BASH_REMATCH[1]}" - fi - done -} - -# install registered modules -dkms_install() { - # list of modules to build for a specific kernel - local -A tobuild=() - - # add new/updated modules for all kernels to the build list - local nv kver - for nv in "${!DKMS_MODULES[@]}"; do - for kver in $(all_kver); do - tobuild["$nv/$kver"]='' - done - done - # add modules for new/updated kernels to the build list - for kver in "${!KERNEL_VERSIONS[@]}"; do - for nv in $(all_nv_from_kver "$kver"); do - tobuild["$nv/$kver"]='' - done - done - - # list of kver which requires depmod refresh - local -A depmods=() - - # let's build and install - local nvk mod mver - local -i retry=1 - while (( $retry > 0 )); do - retry=0 - for nvk in "${!tobuild[@]}"; do - [[ "$nvk" =~ ([^/]+)/([^/]+)/(.+) ]] || continue - mod="${BASH_REMATCH[1]}" - mver="${BASH_REMATCH[2]}" - kver="${BASH_REMATCH[3]}" - # do not build excluded modules - if ! check_buildexclusive "$mod" "$mver" "$kver"; then - unset tobuild[$nvk] - continue - # skip modules with missing kernel headers - elif [[ ! -d "$install_tree/$kver/build/include" ]]; then - ERROR_MESSAGES+=("Missing $kver kernel headers for module $mod/$mver.") - unset tobuild[$nvk] - continue - # skip modules with missing kernel package - elif [[ ! -d "$install_tree/$kver/kernel" ]]; then - ERROR_MESSAGES+=("Missing $kver kernel modules tree for module $mod/$mver.") - unset tobuild[$nvk] - continue - # postpone modules with missing dependencies - elif ! check_dependency "$mod" "$mver" "$kver"; then - continue - fi - # give it a try dkms - run dkms install --no-depmod "$mod/$mver" -k "$kver" - if (( $? == 0 )); then - # register kernel version for later depmod - depmods[$kver]='' - fi - unset tobuild[$nvk] - # maybe this module was a dep of another, so we retry - retry=1 - done - done - # run depmod later for performance improvments - if (( $DKMS_DEPMOD )); then - for kver in "${!depmods[@]}"; do - run depmod "$kver" - done - fi - # add errors messages for missing dependencies modules - for nvk in "${!tobuild[@]}"; do - [[ "$nvk" =~ ([^/]+/[^/]+)/(.+) ]] || continue - nv="${BASH_REMATCH[1]}" - kver="${BASH_REMATCH[2]}" - ERROR_MESSAGES+=("Missing dependencies to install module $nv for kernel $kver.") - done -} - -# remove registered modules -# run depmod once per kernel for performance improvments -dkms_remove() { - local nv kver - local -A depmods=() - # remove full modules first - for nv in "${!DKMS_MODULES[@]}"; do - # try to remove modules one by one to keep the depmod optimization - for kver in $(built_kver_from_nv "$nv"); do - run dkms remove --no-depmod "$nv" -k "$kver" - if (( $? == 0 )); then - # register kernel version for later depmod - depmods[$kver]='' - else - ERROR_MESSAGES+=("Failed to remove module $nv for kernel $kver.") - fi - done - # ensure module removal (even if only added) - if [[ $(dkms status "$nv") ]]; then - run dkms remove "$nv" - (( $? == 0 )) || ERROR_MESSAGES+=("Failed to remove module $nv.") - fi - done - # remove modules for a specific kernel version - for kver in "${!KERNEL_VERSIONS[@]}"; do - for nv in $(built_nv_from_kver "$kver"); do - run dkms remove --no-depmod "$nv" -k "$kver" - if (( $? == 0 )); then - # register kernel version for later depmod - depmods[$kver]='' - else - ERROR_MESSAGES+=("Failed to remove module $nv for kernel $kver.") - fi - done - done - # run depmod later for performance improvments - if (( $DKMS_DEPMOD )); then - for kver in "${!depmods[@]}"; do - run depmod "$kver" - done - fi -} - -# display hook usage and exit $1 (default 1) -usage() { - cat << EOF >&2 -usage: ${0##*/} <options> install|remove -options: -D Do not run depmod -EOF - exit ${1:-1} -} - -# emulated program entry point -main() { - [[ "$DKMS_ALPM_HOOK_DEBUG" ]] && set -x - - # prevent each dkms call from failing with authorization errors - if (( EUID )); then - echo 'You must be root to use this hook' >&2 - return 1 - fi - - # parse command line options - declare -i DKMS_DEPMOD=1 - local opt - while getopts 'hD' opt; do - case $opt in - D) DKMS_DEPMOD=0;; - *) usage;; - esac - done - shift $((OPTIND - 1)) - (( $# != 1 )) && usage - - # parse command action to early exit - case "$1" in - install|remove) declare -r DKMS_ACTION="$1";; - *) usage;; - esac - - # dkms path from framework config - # note: the alpm hooks which trigger this script use static path - source_tree='/usr/src' - install_tree='/usr/lib/modules' - source /etc/dkms/framework.conf - - # check source_tree and install_tree exists - local path - for path in "$source_tree" "$install_tree"; do - if [[ ! -d "$path" ]]; then - echo "==> Missing mandatory directory: $path. Exiting!" >&2 - return 1 - fi - done - - # global storage for changed DKMS modules - # we use associate arrays to prevent duplication - # the key is <module name>/<module version>/<kernel version> - declare -A DKMS_MODULES - - # global storage for changed linux kernels - # we use associate arrays to prevent duplication - declare -A KERNEL_VERSIONS - - # global storage for error messages - declare -a ERROR_MESSAGES - - # parse stdin paths to guess what we should install/remove - while read -r path; do - if [[ "/$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then - # we match file updates on dkms modules sources - DKMS_MODULES["${BASH_REMATCH[1]}/${BASH_REMATCH[2]}"]='' - elif [[ "/$path" =~ ^$install_tree/([^/]+)/ ]]; then - # we match file updates on kernels install/removal - KERNEL_VERSIONS["${BASH_REMATCH[1]}"]='' - fi - done - - dkms_$DKMS_ACTION - - # display errors at the end, to maximize readers - local msg - for msg in "${ERROR_MESSAGES[@]}"; do - echo "==> ERROR: $msg" >&2 - done - - return 0 -} - -main "$@" Copied: dkms/repos/extra-any/hook.sh (from rev 449727, dkms/trunk/hook.sh) =================================================================== --- hook.sh (rev 0) +++ hook.sh 2022-07-01 22:12:37 UTC (rev 449728) @@ -0,0 +1,303 @@ +#!/bin/bash + +# +# Copyright © 2018-2021, Sébastien Luttringer +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# display what to run and run it quietly +run() { + echo "==> $*" + "$@" > /dev/null + local ret=$? + (( $ret )) && echo "==> WARNING: \`$*' exited $ret" + return $ret +} + +# check whether the dependencies of a module are installed +# $1: module name +# $2: module version +# $3: kernel version +check_dependency() { ( + source "$source_tree/$1-$2/dkms.conf" + local mod lines line + for mod in "${BUILD_DEPENDS[@]}"; do + mapfile lines < <(dkms status -m "$mod" -k "$3") + for line in "${lines[@]}"; do + [[ "$line" =~ "$mod/"[^,]+", $3, "[^:]+': installed' ]] && break 2 + done + exit 1 + done + exit 0 +) } + +# check whether the modules should be built with this kernel version +# $1: module name +# $2: module version +# $3: kernel version +check_buildexclusive() { + local BUILD_EXCLUSIVE_KERNEL=$(source "$source_tree/$1-$2/dkms.conf"; printf '%s\n' "$BUILD_EXCLUSIVE_KERNEL") + [[ "$3" =~ $BUILD_EXCLUSIVE_KERNEL ]] +} + +# list all kernel versions +all_kver() { + pushd "$install_tree" >/dev/null + local path + for path in */build/; do + echo "${path%%/*}" + done + popd >/dev/null +} + +# list all module name/version for a specific kernel version +# $1: kernel version +all_nv_from_kver() { + local path + for path in "$source_tree"/*-*/dkms.conf; do + if [[ -f "$path" && "$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then + echo "${BASH_REMATCH[1]}/${BASH_REMATCH[2]}" + fi + done +} + +# list of modules/version for installed/built kernel version +# $1: kernel version +built_nv_from_kver() { + local line + dkms status -k "$1" | while read -r line; do + if [[ "$line" =~ ^([^/]+/[^,]+)", $1, "[^:]+": "(built|installed) ]]; then + echo "${BASH_REMATCH[1]}" + fi + done +} + +# list installed or built kernel version for a specific module version +# $1 : module name/module version +built_kver_from_nv() { + local line + dkms status "$1" | while read -r line; do + if [[ "$line" =~ ^"$1, "([^,]+)", "[^:]+": "(built|installed) ]]; then + echo "${BASH_REMATCH[1]}" + fi + done +} + +# install registered modules +dkms_install() { + # list of modules to build for a specific kernel + local -A tobuild=() + + # add new/updated modules for all kernels to the build list + local nv kver + for nv in "${!DKMS_MODULES[@]}"; do + for kver in $(all_kver); do + tobuild["$nv/$kver"]='' + done + done + # add modules for new/updated kernels to the build list + for kver in "${!KERNEL_VERSIONS[@]}"; do + for nv in $(all_nv_from_kver "$kver"); do + tobuild["$nv/$kver"]='' + done + done + + # list of kver which requires depmod refresh + local -A depmods=() + + # let's build and install + local nvk mod mver + local -i retry=1 + while (( $retry > 0 )); do + retry=0 + for nvk in "${!tobuild[@]}"; do + [[ "$nvk" =~ ([^/]+)/([^/]+)/(.+) ]] || continue + mod="${BASH_REMATCH[1]}" + mver="${BASH_REMATCH[2]}" + kver="${BASH_REMATCH[3]}" + # do not build excluded modules + if ! check_buildexclusive "$mod" "$mver" "$kver"; then + unset tobuild[$nvk] + continue + # skip modules with missing kernel headers + elif [[ ! -d "$install_tree/$kver/build/include" ]]; then + ERROR_MESSAGES+=("Missing $kver kernel headers for module $mod/$mver.") + unset tobuild[$nvk] + continue + # skip modules with missing kernel package + elif [[ ! -d "$install_tree/$kver/kernel" ]]; then + ERROR_MESSAGES+=("Missing $kver kernel modules tree for module $mod/$mver.") + unset tobuild[$nvk] + continue + # postpone modules with missing dependencies + elif ! check_dependency "$mod" "$mver" "$kver"; then + continue + fi + # give it a try dkms + run dkms install --no-depmod "$mod/$mver" -k "$kver" + if (( $? == 0 )); then + # register kernel version for later depmod + depmods[$kver]='' + fi + unset tobuild[$nvk] + # maybe this module was a dep of another, so we retry + retry=1 + done + done + # run depmod later for performance improvments + if (( $DKMS_DEPMOD )); then + for kver in "${!depmods[@]}"; do + run depmod "$kver" + done + fi + # add errors messages for missing dependencies modules + for nvk in "${!tobuild[@]}"; do + [[ "$nvk" =~ ([^/]+/[^/]+)/(.+) ]] || continue + nv="${BASH_REMATCH[1]}" + kver="${BASH_REMATCH[2]}" + ERROR_MESSAGES+=("Missing dependencies to install module $nv for kernel $kver.") + done +} + +# remove registered modules +# run depmod once per kernel for performance improvments +dkms_remove() { + local nv kver + local -A depmods=() + # remove full modules first + for nv in "${!DKMS_MODULES[@]}"; do + # try to remove modules one by one to keep the depmod optimization + for kver in $(built_kver_from_nv "$nv"); do + run dkms remove --no-depmod "$nv" -k "$kver" + if (( $? == 0 )); then + # register kernel version for later depmod + depmods[$kver]='' + else + ERROR_MESSAGES+=("Failed to remove module $nv for kernel $kver.") + fi + done + # ensure module removal (even if only added) + if [[ $(dkms status "$nv") ]]; then + run dkms remove "$nv" + (( $? == 0 )) || ERROR_MESSAGES+=("Failed to remove module $nv.") + fi + done + # remove modules for a specific kernel version + for kver in "${!KERNEL_VERSIONS[@]}"; do + for nv in $(built_nv_from_kver "$kver"); do + run dkms remove --no-depmod "$nv" -k "$kver" + if (( $? == 0 )); then + # register kernel version for later depmod + depmods[$kver]='' + else + ERROR_MESSAGES+=("Failed to remove module $nv for kernel $kver.") + fi + done + done + # run depmod later for performance improvments + if (( $DKMS_DEPMOD )); then + for kver in "${!depmods[@]}"; do + run depmod "$kver" + done + fi +} + +# display hook usage and exit $1 (default 1) +usage() { + cat << EOF >&2 +usage: ${0##*/} <options> install|remove +options: -D Do not run depmod +EOF + exit ${1:-1} +} + +# emulated program entry point +main() { + [[ "$DKMS_ALPM_HOOK_DEBUG" ]] && set -x + + # prevent each dkms call from failing with authorization errors + if (( EUID )); then + echo 'You must be root to use this hook' >&2 + return 1 + fi + + # parse command line options + declare -i DKMS_DEPMOD=1 + local opt + while getopts 'hD' opt; do + case $opt in + D) DKMS_DEPMOD=0;; + *) usage;; + esac + done + shift $((OPTIND - 1)) + (( $# != 1 )) && usage + + # parse command action to early exit + case "$1" in + install|remove) declare -r DKMS_ACTION="$1";; + *) usage;; + esac + + # dkms path from framework config + # note: the alpm hooks which trigger this script use static path + source_tree='/usr/src' + install_tree='/usr/lib/modules' + source /etc/dkms/framework.conf + + # check source_tree and install_tree exists + local path + for path in "$source_tree" "$install_tree"; do + if [[ ! -d "$path" ]]; then + echo "==> Missing mandatory directory: $path. Exiting!" >&2 + return 1 + fi + done + + # global storage for changed DKMS modules + # we use associate arrays to prevent duplication + # the key is <module name>/<module version>/<kernel version> + declare -A DKMS_MODULES + + # global storage for changed linux kernels + # we use associate arrays to prevent duplication + declare -A KERNEL_VERSIONS + + # global storage for error messages + declare -a ERROR_MESSAGES + + # parse stdin paths to guess what we should install/remove + while read -r path; do + if [[ "/$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then + # we match file updates on dkms modules sources + DKMS_MODULES["${BASH_REMATCH[1]}/${BASH_REMATCH[2]}"]='' + elif [[ "/$path" =~ ^$install_tree/([^/]+)/ ]]; then + # we match file updates on kernels install/removal + KERNEL_VERSIONS["${BASH_REMATCH[1]}"]='' + fi + done + + dkms_$DKMS_ACTION + + # display errors at the end, to maximize readers + local msg + for msg in "${ERROR_MESSAGES[@]}"; do + echo "==> ERROR: $msg" >&2 + done + + return 0 +} + +main "$@" Deleted: hook.upgrade =================================================================== --- hook.upgrade 2022-07-01 22:12:23 UTC (rev 449727) +++ hook.upgrade 2022-07-01 22:12:37 UTC (rev 449728) @@ -1,13 +0,0 @@ -[Trigger] -Operation = Upgrade -Type = Path -Target = usr/src/*/dkms.conf -Target = usr/lib/modules/*/build/include/ -Target = usr/lib/modules/*/modules.alias - -[Action] -Description = Remove upgraded DKMS modules -Depends = dkms -When = PreTransaction -Exec = /usr/share/libalpm/scripts/dkms -D remove -NeedsTargets Copied: dkms/repos/extra-any/hook.upgrade (from rev 449727, dkms/trunk/hook.upgrade) =================================================================== --- hook.upgrade (rev 0) +++ hook.upgrade 2022-07-01 22:12:37 UTC (rev 449728) @@ -0,0 +1,13 @@ +[Trigger] +Operation = Upgrade +Type = Path +Target = usr/src/*/dkms.conf +Target = usr/lib/modules/*/build/include/ +Target = usr/lib/modules/*/modules.alias + +[Action] +Description = Remove upgraded DKMS modules +Depends = dkms +When = PreTransaction +Exec = /usr/share/libalpm/scripts/dkms -D remove +NeedsTargets