Date: Thursday, July 16, 2020 @ 22:32:22 Author: seblu Revision: 392010
archrelease: copy trunk to extra-any Added: dkms/repos/extra-any/0001-Revert-Make-newly-installed-modules-available-immedi.patch (from rev 392009, dkms/trunk/0001-Revert-Make-newly-installed-modules-available-immedi.patch) dkms/repos/extra-any/PKGBUILD (from rev 392009, dkms/trunk/PKGBUILD) dkms/repos/extra-any/PKGBUILD.26 (from rev 392009, dkms/trunk/PKGBUILD.26) dkms/repos/extra-any/dkms.install (from rev 392009, dkms/trunk/dkms.install) dkms/repos/extra-any/hook.install (from rev 392009, dkms/trunk/hook.install) dkms/repos/extra-any/hook.remove (from rev 392009, dkms/trunk/hook.remove) dkms/repos/extra-any/hook.sh (from rev 392009, dkms/trunk/hook.sh) dkms/repos/extra-any/hook.upgrade (from rev 392009, dkms/trunk/hook.upgrade) Deleted: dkms/repos/extra-any/0001-Revert-Make-newly-installed-modules-available-immedi.patch 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 -----------------------------------------------------------------+ 0001-Revert-Make-newly-installed-modules-available-immedi.patch | 62 - PKGBUILD | 146 +- PKGBUILD.26 | 138 +- dkms.install | 26 hook.install | 28 hook.remove | 26 hook.sh | 502 +++++----- hook.upgrade | 26 8 files changed, 477 insertions(+), 477 deletions(-) Deleted: 0001-Revert-Make-newly-installed-modules-available-immedi.patch =================================================================== --- 0001-Revert-Make-newly-installed-modules-available-immedi.patch 2020-07-16 22:32:13 UTC (rev 392009) +++ 0001-Revert-Make-newly-installed-modules-available-immedi.patch 2020-07-16 22:32:22 UTC (rev 392010) @@ -1,31 +0,0 @@ -From ca38ccd38c69a096dafa51c426ee3548980d5e2a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?S=C3=A9bastien=20Luttringer?= <se...@seblu.net> -Date: Sat, 8 Jul 2017 15:50:55 +0200 -Subject: [PATCH] Revert "Make newly installed modules available immediately" -To: dkms-de...@dell.com - -This reverts commit f5bfb12fef1fc06e56355cdba500eaa98d4e6aa8. ---- - dkms | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/dkms b/dkms -index a6cedc8..3ff71d5 100644 ---- a/dkms -+++ b/dkms -@@ -1522,12 +1522,6 @@ install_module() - exit 6 - } - -- # Make the newly installed modules available immediately -- find /sys/devices -name modalias -print0 | xargs -0 cat | xargs modprobe -a -b -q -- if [ -f /lib/systemd/system/systemd-modules-load.service ]; then -- systemctl restart systemd-modules-load.service -- fi -- - # Do remake_initrd things (save old initrd) - [[ $remake_initrd ]] && ! make_initrd "$kernelver" "$arch" && { - do_uninstall "$kernelver" "$arch" --- -Sébastien "Seblu" Luttringer - Copied: dkms/repos/extra-any/0001-Revert-Make-newly-installed-modules-available-immedi.patch (from rev 392009, dkms/trunk/0001-Revert-Make-newly-installed-modules-available-immedi.patch) =================================================================== --- 0001-Revert-Make-newly-installed-modules-available-immedi.patch (rev 0) +++ 0001-Revert-Make-newly-installed-modules-available-immedi.patch 2020-07-16 22:32:22 UTC (rev 392010) @@ -0,0 +1,31 @@ +From ca38ccd38c69a096dafa51c426ee3548980d5e2a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=A9bastien=20Luttringer?= <se...@seblu.net> +Date: Sat, 8 Jul 2017 15:50:55 +0200 +Subject: [PATCH] Revert "Make newly installed modules available immediately" +To: dkms-de...@dell.com + +This reverts commit f5bfb12fef1fc06e56355cdba500eaa98d4e6aa8. +--- + dkms | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/dkms b/dkms +index a6cedc8..3ff71d5 100644 +--- a/dkms ++++ b/dkms +@@ -1522,12 +1522,6 @@ install_module() + exit 6 + } + +- # Make the newly installed modules available immediately +- find /sys/devices -name modalias -print0 | xargs -0 cat | xargs modprobe -a -b -q +- if [ -f /lib/systemd/system/systemd-modules-load.service ]; then +- systemctl restart systemd-modules-load.service +- fi +- + # Do remake_initrd things (save old initrd) + [[ $remake_initrd ]] && ! make_initrd "$kernelver" "$arch" && { + do_uninstall "$kernelver" "$arch" +-- +Sébastien "Seblu" Luttringer + Deleted: PKGBUILD =================================================================== --- PKGBUILD 2020-07-16 22:32:13 UTC (rev 392009) +++ PKGBUILD 2020-07-16 22:32:22 UTC (rev 392010) @@ -1,73 +0,0 @@ -# Maintainer: Sébastien Luttringer -# Contributor: Balwinder S "bsd" Dheeman (bdheeman AT gmail.com) - -pkgname=dkms -pkgver=2.8.1 -pkgrel=4 -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.upgrade' - 'hook.sh' - '0001-Revert-Make-newly-installed-modules-available-immedi.patch') -sha256sums=('SKIP' - '047e0e46967e98fbf3ff8860a80f259c28693d5989373d5a5395714495b59844' - 'ae5483980db914d52bff981ed83356c85679dd7e6e8f73bdd94265f065014c73' - 'd61d94532789928085a8494ba039c59244cfb3bfd47deaf21bcbe54a2243dc45' - '6bc3931865afce6ee17a56099cf551ab2827db99b609de78e1bf9a1962e6ef56' - '124b821b1b44ba365d915945825bcf32c1077655c3a98eb1644de56b6abfcd09') - -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 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/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 (from rev 392009, dkms/trunk/PKGBUILD) =================================================================== --- PKGBUILD (rev 0) +++ PKGBUILD 2020-07-16 22:32:22 UTC (rev 392010) @@ -0,0 +1,73 @@ +# Maintainer: Sébastien Luttringer +# Contributor: Balwinder S "bsd" Dheeman (bdheeman AT gmail.com) + +pkgname=dkms +pkgver=2.8.3 +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.upgrade' + 'hook.sh' + '0001-Revert-Make-newly-installed-modules-available-immedi.patch') +sha256sums=('SKIP' + '047e0e46967e98fbf3ff8860a80f259c28693d5989373d5a5395714495b59844' + 'ae5483980db914d52bff981ed83356c85679dd7e6e8f73bdd94265f065014c73' + 'd61d94532789928085a8494ba039c59244cfb3bfd47deaf21bcbe54a2243dc45' + '6bc3931865afce6ee17a56099cf551ab2827db99b609de78e1bf9a1962e6ef56' + '124b821b1b44ba365d915945825bcf32c1077655c3a98eb1644de56b6abfcd09') + +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 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/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: PKGBUILD.26 =================================================================== --- PKGBUILD.26 2020-07-16 22:32:13 UTC (rev 392009) +++ PKGBUILD.26 2020-07-16 22:32:22 UTC (rev 392010) @@ -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 392009, dkms/trunk/PKGBUILD.26) =================================================================== --- PKGBUILD.26 (rev 0) +++ PKGBUILD.26 2020-07-16 22:32:22 UTC (rev 392010) @@ -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 2020-07-16 22:32:13 UTC (rev 392009) +++ dkms.install 2020-07-16 22:32:22 UTC (rev 392010) @@ -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 392009, dkms/trunk/dkms.install) =================================================================== --- dkms.install (rev 0) +++ dkms.install 2020-07-16 22:32:22 UTC (rev 392010) @@ -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 2020-07-16 22:32:13 UTC (rev 392009) +++ hook.install 2020-07-16 22:32:22 UTC (rev 392010) @@ -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/lib/dkms/alpm-hook install -NeedsTargets Copied: dkms/repos/extra-any/hook.install (from rev 392009, dkms/trunk/hook.install) =================================================================== --- hook.install (rev 0) +++ hook.install 2020-07-16 22:32:22 UTC (rev 392010) @@ -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/lib/dkms/alpm-hook install +NeedsTargets Deleted: hook.remove =================================================================== --- hook.remove 2020-07-16 22:32:13 UTC (rev 392009) +++ hook.remove 2020-07-16 22:32:22 UTC (rev 392010) @@ -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/lib/dkms/alpm-hook remove -NeedsTargets Copied: dkms/repos/extra-any/hook.remove (from rev 392009, dkms/trunk/hook.remove) =================================================================== --- hook.remove (rev 0) +++ hook.remove 2020-07-16 22:32:22 UTC (rev 392010) @@ -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/lib/dkms/alpm-hook remove +NeedsTargets Deleted: hook.sh =================================================================== --- hook.sh 2020-07-16 22:32:13 UTC (rev 392009) +++ hook.sh 2020-07-16 22:32:22 UTC (rev 392010) @@ -1,251 +0,0 @@ -#!/bin/bash - -# -# Copyright © 2018-2020, 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, \`$*' returned $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 ]] -} - -# handle actions on module addition/upgrade/removal -# $1: module name -# $2: module version -parse_module() { - pushd "$install_tree" >/dev/null - local path - for path in */build/; do - local kver="${path%%/*}" - dkms_register "$1" "$2" "$kver" - done - popd >/dev/null -} - -# handle actions on kernel addition/upgrade/removal -# $1: kernel version -parse_kernel() { - local path - for path in "$source_tree"/*-*/dkms.conf; do - if [[ -f "$path" && "$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then - dkms_register "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "$1" - fi - done -} - -# register a dkms module to install/remove -# this function suppress echo call for a module -# $1: module name, $2: module version, $3: kernel version -dkms_register() { - DKMS_MODULES["$1/$2/$3"]='' -} - -# install registered modules -dkms_install() { - local nvk mod mver kver - local -i retry=1 - local -A dmods=() - - while (( $retry > 0 )); do - retry=0 - for nvk in "${!DKMS_MODULES[@]}"; do - [[ "$nvk" =~ ([^/]+)/([^/]+)/(.+) ]] - 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 DKMS_MODULES[$nvk] - continue - # skip modules with missing kernel headers - elif [[ ! -d "$install_tree/$kver/build/include" ]]; then - DKMS_MODULES[$nvk]='Missing kernel headers' - continue - # skip modules with missing kernel package - elif [[ ! -d "$install_tree/$kver/kernel" ]]; then - DKMS_MODULES[$nvk]='Missing kernel modules tree' - continue - # postpone modules with missing dependencies - elif ! check_dependency "$mod" "$mver" "$kver"; then - DKMS_MODULES[$nvk]='Missing dependency' - continue - fi - # give it a try dkms - run dkms install --no-depmod -m "$mod" -v "$mver" -k "$kver" - dmods[$kver]='' - unset DKMS_MODULES[$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 "${!dmods[@]}"; do - run depmod "$kver" - done - fi -} - -# remove registered modules when built/installed -# run depmod later for performance improvments -dkms_remove() { - local nvk mod mver kver state - local -A dmods=() - for nvk in "${!DKMS_MODULES[@]}"; do - [[ "$nvk" =~ ([^/]+)/([^/]+)/(.+) ]] - mod="${BASH_REMATCH[1]}" - mver="${BASH_REMATCH[2]}" - kver="${BASH_REMATCH[3]}" - # do not remove excluded modules (n.b. display not found errors) - if ! check_buildexclusive "$mod" "$mver" "$kver"; then - unset DKMS_MODULES[$nvk] - continue - fi - state=$(dkms status -m "$mod" -v "$mver" -k "$kver") - if [[ "$state" =~ "$mod, $mver, $kver, "[^:]+": "(added|built|installed) ]]; then - dmods[$kver]='' - run dkms remove --no-depmod -m "$mod" -v "$mver" -k "$kver" - if (( $? == 0 )); then - unset DKMS_MODULES[$nvk] - else - DKMS_MODULES[$nvk]='dkms remove failed' - fi - else - DKMS_MODULES[$nvk]='Not found in dkms status output' - fi - done - # run depmod later for performance improvments - if (( $DKMS_DEPMOD )); then - for kver in "${!dmods[@]}"; do - run depmod "$kver" - done - fi -} - -# show information about failed modules -show_errors() { - local nvk mod kver - for nvk in "${!DKMS_MODULES[@]}"; do - mod=${nvk%/*} - kver=${nvk##*/} - echo "==> Unable to $DKMS_ACTION module $mod for kernel $kver: ${DKMS_MODULES[$nvk]}." - done -} - -# 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 - exit 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 - - # register DKMS action - 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!" - return 1 - fi - done - - # storage for DKMS modules to install/remove - # we use associate arrays to prevent duplicate - declare -A DKMS_MODULES - - # parse stdin paths to guess what do do - while read -r path; do - if [[ "/$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then - parse_module "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" - elif [[ "/$path" =~ ^$install_tree/([^/]+)/ ]]; then - parse_kernel "${BASH_REMATCH[1]}" - fi - done - - dkms_$DKMS_ACTION - - show_errors - - return 0 -} - -main "$@" Copied: dkms/repos/extra-any/hook.sh (from rev 392009, dkms/trunk/hook.sh) =================================================================== --- hook.sh (rev 0) +++ hook.sh 2020-07-16 22:32:22 UTC (rev 392010) @@ -0,0 +1,251 @@ +#!/bin/bash + +# +# Copyright © 2018-2020, 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, \`$*' returned $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 ]] +} + +# handle actions on module addition/upgrade/removal +# $1: module name +# $2: module version +parse_module() { + pushd "$install_tree" >/dev/null + local path + for path in */build/; do + local kver="${path%%/*}" + dkms_register "$1" "$2" "$kver" + done + popd >/dev/null +} + +# handle actions on kernel addition/upgrade/removal +# $1: kernel version +parse_kernel() { + local path + for path in "$source_tree"/*-*/dkms.conf; do + if [[ -f "$path" && "$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then + dkms_register "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "$1" + fi + done +} + +# register a dkms module to install/remove +# this function suppress echo call for a module +# $1: module name, $2: module version, $3: kernel version +dkms_register() { + DKMS_MODULES["$1/$2/$3"]='' +} + +# install registered modules +dkms_install() { + local nvk mod mver kver + local -i retry=1 + local -A dmods=() + + while (( $retry > 0 )); do + retry=0 + for nvk in "${!DKMS_MODULES[@]}"; do + [[ "$nvk" =~ ([^/]+)/([^/]+)/(.+) ]] + 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 DKMS_MODULES[$nvk] + continue + # skip modules with missing kernel headers + elif [[ ! -d "$install_tree/$kver/build/include" ]]; then + DKMS_MODULES[$nvk]='Missing kernel headers' + continue + # skip modules with missing kernel package + elif [[ ! -d "$install_tree/$kver/kernel" ]]; then + DKMS_MODULES[$nvk]='Missing kernel modules tree' + continue + # postpone modules with missing dependencies + elif ! check_dependency "$mod" "$mver" "$kver"; then + DKMS_MODULES[$nvk]='Missing dependency' + continue + fi + # give it a try dkms + run dkms install --no-depmod -m "$mod" -v "$mver" -k "$kver" + dmods[$kver]='' + unset DKMS_MODULES[$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 "${!dmods[@]}"; do + run depmod "$kver" + done + fi +} + +# remove registered modules when built/installed +# run depmod later for performance improvments +dkms_remove() { + local nvk mod mver kver state + local -A dmods=() + for nvk in "${!DKMS_MODULES[@]}"; do + [[ "$nvk" =~ ([^/]+)/([^/]+)/(.+) ]] + mod="${BASH_REMATCH[1]}" + mver="${BASH_REMATCH[2]}" + kver="${BASH_REMATCH[3]}" + # do not remove excluded modules (n.b. display not found errors) + if ! check_buildexclusive "$mod" "$mver" "$kver"; then + unset DKMS_MODULES[$nvk] + continue + fi + state=$(dkms status -m "$mod" -v "$mver" -k "$kver") + if [[ "$state" =~ "$mod, $mver, $kver, "[^:]+": "(added|built|installed) ]]; then + dmods[$kver]='' + run dkms remove --no-depmod -m "$mod" -v "$mver" -k "$kver" + if (( $? == 0 )); then + unset DKMS_MODULES[$nvk] + else + DKMS_MODULES[$nvk]='dkms remove failed' + fi + else + DKMS_MODULES[$nvk]='Not found in dkms status output' + fi + done + # run depmod later for performance improvments + if (( $DKMS_DEPMOD )); then + for kver in "${!dmods[@]}"; do + run depmod "$kver" + done + fi +} + +# show information about failed modules +show_errors() { + local nvk mod kver + for nvk in "${!DKMS_MODULES[@]}"; do + mod=${nvk%/*} + kver=${nvk##*/} + echo "==> Unable to $DKMS_ACTION module $mod for kernel $kver: ${DKMS_MODULES[$nvk]}." + done +} + +# 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 + exit 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 + + # register DKMS action + 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!" + return 1 + fi + done + + # storage for DKMS modules to install/remove + # we use associate arrays to prevent duplicate + declare -A DKMS_MODULES + + # parse stdin paths to guess what do do + while read -r path; do + if [[ "/$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then + parse_module "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" + elif [[ "/$path" =~ ^$install_tree/([^/]+)/ ]]; then + parse_kernel "${BASH_REMATCH[1]}" + fi + done + + dkms_$DKMS_ACTION + + show_errors + + return 0 +} + +main "$@" Deleted: hook.upgrade =================================================================== --- hook.upgrade 2020-07-16 22:32:13 UTC (rev 392009) +++ hook.upgrade 2020-07-16 22:32:22 UTC (rev 392010) @@ -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/lib/dkms/alpm-hook -D remove -NeedsTargets Copied: dkms/repos/extra-any/hook.upgrade (from rev 392009, dkms/trunk/hook.upgrade) =================================================================== --- hook.upgrade (rev 0) +++ hook.upgrade 2020-07-16 22:32:22 UTC (rev 392010) @@ -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/lib/dkms/alpm-hook -D remove +NeedsTargets