Date: Wednesday, May 27, 2020 @ 16:31:39 Author: seblu Revision: 387728
archrelease: copy trunk to testing-any Added: dkms/repos/testing-any/ dkms/repos/testing-any/0001-Revert-Make-newly-installed-modules-available-immedi.patch (from rev 387727, dkms/trunk/0001-Revert-Make-newly-installed-modules-available-immedi.patch) dkms/repos/testing-any/PKGBUILD (from rev 387727, dkms/trunk/PKGBUILD) dkms/repos/testing-any/PKGBUILD.26 (from rev 387727, dkms/trunk/PKGBUILD.26) dkms/repos/testing-any/dkms.install (from rev 387727, dkms/trunk/dkms.install) dkms/repos/testing-any/hook.install (from rev 387727, dkms/trunk/hook.install) dkms/repos/testing-any/hook.remove (from rev 387727, dkms/trunk/hook.remove) dkms/repos/testing-any/hook.sh (from rev 387727, dkms/trunk/hook.sh) dkms/repos/testing-any/hook.upgrade (from rev 387727, dkms/trunk/hook.upgrade) -----------------------------------------------------------------+ 0001-Revert-Make-newly-installed-modules-available-immedi.patch | 31 + PKGBUILD | 73 ++ PKGBUILD.26 | 69 ++ dkms.install | 13 hook.install | 14 hook.remove | 13 hook.sh | 251 ++++++++++ hook.upgrade | 13 8 files changed, 477 insertions(+) Copied: dkms/repos/testing-any/0001-Revert-Make-newly-installed-modules-available-immedi.patch (from rev 387727, dkms/trunk/0001-Revert-Make-newly-installed-modules-available-immedi.patch) =================================================================== --- testing-any/0001-Revert-Make-newly-installed-modules-available-immedi.patch (rev 0) +++ testing-any/0001-Revert-Make-newly-installed-modules-available-immedi.patch 2020-05-27 16:31:39 UTC (rev 387728) @@ -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 + Copied: dkms/repos/testing-any/PKGBUILD (from rev 387727, dkms/trunk/PKGBUILD) =================================================================== --- testing-any/PKGBUILD (rev 0) +++ testing-any/PKGBUILD 2020-05-27 16:31:39 UTC (rev 387728) @@ -0,0 +1,73 @@ +# 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/testing-any/PKGBUILD.26 (from rev 387727, dkms/trunk/PKGBUILD.26) =================================================================== --- testing-any/PKGBUILD.26 (rev 0) +++ testing-any/PKGBUILD.26 2020-05-27 16:31:39 UTC (rev 387728) @@ -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: Copied: dkms/repos/testing-any/dkms.install (from rev 387727, dkms/trunk/dkms.install) =================================================================== --- testing-any/dkms.install (rev 0) +++ testing-any/dkms.install 2020-05-27 16:31:39 UTC (rev 387728) @@ -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: Copied: dkms/repos/testing-any/hook.install (from rev 387727, dkms/trunk/hook.install) =================================================================== --- testing-any/hook.install (rev 0) +++ testing-any/hook.install 2020-05-27 16:31:39 UTC (rev 387728) @@ -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 Copied: dkms/repos/testing-any/hook.remove (from rev 387727, dkms/trunk/hook.remove) =================================================================== --- testing-any/hook.remove (rev 0) +++ testing-any/hook.remove 2020-05-27 16:31:39 UTC (rev 387728) @@ -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 Copied: dkms/repos/testing-any/hook.sh (from rev 387727, dkms/trunk/hook.sh) =================================================================== --- testing-any/hook.sh (rev 0) +++ testing-any/hook.sh 2020-05-27 16:31:39 UTC (rev 387728) @@ -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 "$@" Copied: dkms/repos/testing-any/hook.upgrade (from rev 387727, dkms/trunk/hook.upgrade) =================================================================== --- testing-any/hook.upgrade (rev 0) +++ testing-any/hook.upgrade 2020-05-27 16:31:39 UTC (rev 387728) @@ -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