initial import

This commit is contained in:
2025-06-22 20:39:04 -05:00
commit f8a70886f0
3428 changed files with 302546 additions and 0 deletions

View File

@@ -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
View 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
View 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
View 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
View 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
View 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 "$@"