initial import
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
From ca38ccd38c69a096dafa51c426ee3548980d5e2a Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?S=C3=A9bastien=20Luttringer?= <seblu@seblu.net>
|
||||
Date: Sat, 8 Jul 2017 15:50:55 +0200
|
||||
Subject: [PATCH] Revert "Make newly installed modules available immediately"
|
||||
To: dkms-devel@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
|
||||
|
||||
64
dkms/PKGBUILD
Normal file
64
dkms/PKGBUILD
Normal file
@@ -0,0 +1,64 @@
|
||||
# Maintainer: Jesus E. <heckyel@riseup.net>
|
||||
|
||||
pkgname=dkms
|
||||
pkgver=2.8.4
|
||||
_debver=2.8.4
|
||||
_debrel=3
|
||||
pkgrel=3
|
||||
pkgdesc='Dynamic Kernel Modules System'
|
||||
arch=('any')
|
||||
url='https://github.com/dell/dkms'
|
||||
license=('GPL-2')
|
||||
depends=('bash' 'kmod' 'gcc' 'make' 'patch')
|
||||
makedepends=('quilt')
|
||||
optdepends=('linux-libre-lts-headers: build modules against the Hyperbola kernel')
|
||||
backup=('etc/dkms/framework.conf')
|
||||
install=$pkgname.install
|
||||
source=("https://github.com/dell/dkms/archive/refs/tags/v$pkgver.tar.gz"
|
||||
"https://deb.debian.org/debian/pool/main/d/dkms/dkms_$_debver-$_debrel.debian.tar.xz"
|
||||
'hook.install'
|
||||
'hook.remove'
|
||||
'hook.sh'
|
||||
'0001-Revert-Make-newly-installed-modules-available-immedi.patch')
|
||||
sha512sums=('1b8b987b239db8cf00f367ee4f5faf13dc41b450f09fb046dc719e51d6a762d6b700bf41156d8011c3ea7e139064119d6717b60c1bf7fa0a75ea1fc63887baa5'
|
||||
'54abdc6e00836e6589bfba29cbfb332fdd815b6d90aaa12566259c92b46152525346b3e8a9c02d06e84b56782046408639aba01254813bd4ff970de45d2c7add'
|
||||
'c3378f9f08353404e548ae58b6faae11ceb61f54f39197963b32aad581b7162ac805a892e1424dcb16e3efd6755b23690d86188369baaa10e37ebe2bca80788e'
|
||||
'8beb2293dbd2302e8ac64667b4e08982967562ee4282b16e91329fcb53f6cfd97a4986d8886c4303c24eb22557c488fb0859087eccf7eadce97200e8a7e5087e'
|
||||
'1848e18a19ad8e28a30a9ddbfdaee3dc4b3f13ef9b3398bf2eaf57d20e5ce5395a85957676840ed344afea2dca9a3f7ca909bcf833971476391b18fa7d7efd24'
|
||||
'312da3a4a5d761381afb2e58a1c0f2766cd069d9de2319e637ef02ef86d9c8cf2b0961155a8000ad0a5ab218b440c8d83aedf56a6b7a29985fc7b33611bf379e')
|
||||
|
||||
prepare() {
|
||||
cd $pkgname-$pkgver
|
||||
|
||||
if [[ ${pkgver%.*} = ${_debver%.*} ]]; then
|
||||
# Debian patches
|
||||
export QUILT_PATCHES=debian/patches
|
||||
export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index'
|
||||
export QUILT_DIFF_ARGS='--no-timestamps'
|
||||
|
||||
mv "$srcdir"/debian/patches/* debian/patches
|
||||
|
||||
quilt push -av
|
||||
else
|
||||
patch -p1 -i ../0001-Revert-Make-newly-installed-modules-available-immedi.patch
|
||||
fi
|
||||
}
|
||||
|
||||
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 $pkgname-$pkgver
|
||||
# we don't need kconf files, so we install them outside $pkgdir
|
||||
make \
|
||||
DESTDIR="$pkgdir" \
|
||||
BASHDIR="$pkgdir/usr/share/bash-completion/completions" \
|
||||
KCONF="$srcdir"/kconf \
|
||||
install
|
||||
|
||||
install -D -m 644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING"
|
||||
}
|
||||
|
||||
# vim:set ts=2 sw=2 et:
|
||||
13
dkms/dkms.install
Normal file
13
dkms/dkms.install
Normal file
@@ -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:
|
||||
14
dkms/hook.install
Normal file
14
dkms/hook.install
Normal file
@@ -0,0 +1,14 @@
|
||||
[Trigger]
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Type = File
|
||||
Target = usr/src/*/dkms.conf
|
||||
Target = lib/modules/*/build/include/
|
||||
Target = lib/modules/*/modules.alias
|
||||
|
||||
[Action]
|
||||
Description = Install DKMS modules
|
||||
Depends = dkms
|
||||
When = PostTransaction
|
||||
Exec = /usr/lib/dkms/alpm-hook install
|
||||
NeedsTargets
|
||||
16
dkms/hook.remove
Normal file
16
dkms/hook.remove
Normal file
@@ -0,0 +1,16 @@
|
||||
[Trigger]
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Type = File
|
||||
Target = usr/src/*/dkms.conf
|
||||
Target = lib/modules/*/build/include/
|
||||
Target = lib/modules/*/modules.alias
|
||||
|
||||
[Action]
|
||||
Description = Remove DKMS modules
|
||||
Depends = dkms
|
||||
When = PreTransaction
|
||||
# SIGPIPE workaround. See FS#49816
|
||||
#Exec = /usr/lib/dkms/alpm-hook remove
|
||||
Exec = /usr/bin/perl -e "$SIG{PIPE}='DEFAULT'; exec('/usr/lib/dkms/alpm-hook', 'remove');"
|
||||
NeedsTargets
|
||||
194
dkms/hook.sh
Normal file
194
dkms/hook.sh
Normal file
@@ -0,0 +1,194 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2018 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
|
||||
}
|
||||
|
||||
# check whether the dependencies of a module are installed
|
||||
# $1: module name/module version
|
||||
# $2: kernel version
|
||||
check_dependency() { (
|
||||
source "$source_tree/${1/\//-}/dkms.conf"
|
||||
for dep in "${BUILD_DEPENDS[@]}"; do
|
||||
if ! [[ "$(dkms status -m "$dep" -k "$2")" =~ :[[:space:]]installed$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
exit 0
|
||||
) }
|
||||
|
||||
# check whether the modules should be built with this kernel version
|
||||
# $1: module name/module version
|
||||
# $2: kernel version
|
||||
check_buildexclusive() {
|
||||
local BUILD_EXCLUSIVE_KERNEL=$(source "$source_tree/${1/\//-}/dkms.conf"; printf '%s\n' "$BUILD_EXCLUSIVE_KERNEL")
|
||||
[[ "$2" =~ $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 kver
|
||||
local -i retry=1
|
||||
|
||||
while (( $retry > 0 )); do
|
||||
retry=0
|
||||
for nvk in "${!DKMS_MODULES[@]}"; do
|
||||
mod=${nvk%/*}
|
||||
kver=${nvk##*/}
|
||||
# do not build excluded modules
|
||||
if ! check_buildexclusive "$mod" "$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" "$kver"; then
|
||||
DKMS_MODULES[$nvk]="Missing dependency"
|
||||
continue
|
||||
fi
|
||||
# give it a try dkms
|
||||
run dkms install "$mod" -k "$kver"
|
||||
unset DKMS_MODULES[$nvk]
|
||||
# maybe this module was a dep of another, so we retry
|
||||
retry=1
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
# remove registered modules when built/installed
|
||||
dkms_remove() {
|
||||
local nvk mod kver
|
||||
for nvk in "${!DKMS_MODULES[@]}"; do
|
||||
mod=${nvk%/*}
|
||||
kver=${nvk##*/}
|
||||
state=$(dkms status -m "$mod" -k "$kver")
|
||||
if [[ "$state" =~ :[[:space:]](built|installed)$ ]]; then
|
||||
run dkms remove "$mod" -k "$kver"
|
||||
fi
|
||||
unset DKMS_MODULES[$nvk]
|
||||
done
|
||||
}
|
||||
|
||||
# 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
|
||||
}
|
||||
|
||||
# emulated program entry point
|
||||
main() {
|
||||
[[ -n "$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
|
||||
|
||||
# register DKMS action
|
||||
case "$1" in
|
||||
install|remove)
|
||||
declare -r DKMS_ACTION="$1"
|
||||
;;
|
||||
*)
|
||||
echo "usage: ${0##*/} install|remove" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# dkms path from framework config
|
||||
# note: the alpm hooks which trigger this script use static path
|
||||
source_tree='/usr/src'
|
||||
install_tree='/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 "$@"
|
||||
Reference in New Issue
Block a user