diff options
Diffstat (limited to 'libre/dkms-libre')
-rw-r--r-- | libre/dkms-libre/01-broken-uninstall.patch | 22 | ||||
-rw-r--r-- | libre/dkms-libre/02-no-kernel-hook.patch | 13 | ||||
-rw-r--r-- | libre/dkms-libre/PKGBUILD | 66 | ||||
-rw-r--r-- | libre/dkms-libre/dkms.default | 9 | ||||
-rw-r--r-- | libre/dkms-libre/dkms.hook | 12 | ||||
-rw-r--r-- | libre/dkms-libre/dkms.install | 13 | ||||
-rw-r--r-- | libre/dkms-libre/dkms.service | 11 | ||||
-rw-r--r-- | libre/dkms-libre/dkms.systemd | 61 |
8 files changed, 207 insertions, 0 deletions
diff --git a/libre/dkms-libre/01-broken-uninstall.patch b/libre/dkms-libre/01-broken-uninstall.patch new file mode 100644 index 000000000..a859efabe --- /dev/null +++ b/libre/dkms-libre/01-broken-uninstall.patch @@ -0,0 +1,22 @@ +diff --git a/dkms b/dkms +index abb01a4..265b69a 100644 +--- a/dkms ++++ b/dkms +@@ -162,11 +162,14 @@ set_kernel_source_dir() + + # A little test function for DKMS commands that only work on one kernel. + have_one_kernel() { +- (( ${#kernelver[@]} > 1 )) && \ +- die 4 $"The action $1 does not support multiple kernel version" \ +- $"parameters on the command line." +- [[ $all ]] && die 5 $"The action $1 does not support the --all" \ +- $"parameter." ++ if (( ${#kernelver[@]} != 1 )); then ++ die 4 $"The action $1 does not support multiple kernel version" \ ++ $"parameters on the command line." ++ fi ++ if [[ $all ]]; then ++ die 5 $"The action $1 does not support the --all" \ ++ $"parameter." ++ fi + } diff --git a/libre/dkms-libre/02-no-kernel-hook.patch b/libre/dkms-libre/02-no-kernel-hook.patch new file mode 100644 index 000000000..f01f22002 --- /dev/null +++ b/libre/dkms-libre/02-no-kernel-hook.patch @@ -0,0 +1,13 @@ +# Author: Sébastien Luttringer <seblu@seblu.net> +--- a/Makefile 2011-12-07 19:23:51.000000000 +0100 ++++ b/Makefile 2013-05-13 00:48:19.620000000 +0200 +@@ -46,9 +46,6 @@ + gzip -c -9 dkms.8 > $(MAN)/dkms.8.gz + chmod 0644 $(MAN)/dkms.8.gz + touch --reference=dkms.8 $(MAN)/dkms.8.gz +- mkdir -p -m 0755 $(KCONF)/prerm.d $(KCONF)/postinst.d +- install -p -m 0755 kernel_prerm.d_dkms $(KCONF)/prerm.d/dkms +- install -p -m 0755 kernel_postinst.d_dkms $(KCONF)/postinst.d/dkms + + DOCFILES=sample.spec sample.conf AUTHORS COPYING README.dkms sample-suse-9-mkkmp.spec sample-suse-10-mkkmp.spec + diff --git a/libre/dkms-libre/PKGBUILD b/libre/dkms-libre/PKGBUILD new file mode 100644 index 000000000..99caab5fa --- /dev/null +++ b/libre/dkms-libre/PKGBUILD @@ -0,0 +1,66 @@ +# $Id: PKGBUILD 90494 2013-05-12 22:57:28Z seblu $ +# Maintainer: Sébastien Luttringer +# Contributor: Balwinder S "bsd" Dheeman (bdheeman AT gmail.com) +# Maintainer (Parabola): André Silva <emulatorman@lavabit.com> + +_pkgname=dkms +pkgname=dkms-libre +pkgver=2.2.0.3 +pkgrel=14 +pkgdesc='Dynamic Kernel Modules System, with linux-libre-headers and linux-libre-lts-headers recommendation' +arch=('any') +url='http://linux.dell.com/dkms/' +license=('GPL2') +depends=('bash' 'kmod' 'gcc' 'make' 'patch') +optdepends=('linux-libre-headers: build modules against linux-libre kernel' + 'linux-libre-lts-headers: build modules against linux-libre-lts kernel') +replaces=$_pkgname +conflicts=$_pkgname +provides=$_pkgname=$pkgver +backup=('etc/dkms/framework.conf' 'etc/default/dkms') +install=$_pkgname.install +source=("http://linux.dell.com/$_pkgname/permalink/$_pkgname-$pkgver.tar.gz" + "$_pkgname.default" + "$_pkgname.service" + "$_pkgname.systemd" + '01-broken-uninstall.patch' + '02-no-kernel-hook.patch') +md5sums=('11a8aaade2ebec2803653837c7593030' + '33be2fbf1bcc1b3fb2f38d9e7eaa809d' + '02e9744e3fdc3d2f68e46966fb32e260' + '267632312aa52a190ec0db0758920dd3' + '2dfd8656dc79afd229c1481a90fb645b' + '82d520c39c99c34977e48b313a189c6c') + +prepare() { + # patch + patches=("$srcdir"/*.patch) + cd $_pkgname-$pkgver + for p in "${patches[@]}"; do + msg2 "Apply patch: ${p##*/}" + patch -p1 -i "$p" + 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 + # fix hardcoded paths + sed -i "s|/sbin/depmod|depmod|" dkms +} + +package() { + # systemd + install -D -m 644 $_pkgname.service "$pkgdir/usr/lib/systemd/system/$_pkgname.service" + install -D -m 755 $_pkgname.systemd "$pkgdir/usr/lib/systemd/scripts/$_pkgname" + install -D -m 644 $_pkgname.default "$pkgdir/etc/default/$_pkgname" + # upstream installer + cd $_pkgname-$pkgver + make \ + DESTDIR="$pkgdir" \ + SBIN="$pkgdir/usr/bin" \ + BASHDIR="$pkgdir/usr/share/bash-completion/completions" \ + install +} + +# vim:set ts=2 sw=2 et: diff --git a/libre/dkms-libre/dkms.default b/libre/dkms-libre/dkms.default new file mode 100644 index 000000000..d430855bb --- /dev/null +++ b/libre/dkms-libre/dkms.default @@ -0,0 +1,9 @@ +# vim:set ts=2 sw=2 ft=sh noet: + +# With LOAD set to yes, modules listed as installed will be loaded with +# systemctl start dkms.service. Default is yes. +LOAD=yes + +# With UNLOAD set to yes, modules listed as installed will be unloaded with +# systemctl stop dkms.service. Default is no. +UNLOAD=no diff --git a/libre/dkms-libre/dkms.hook b/libre/dkms-libre/dkms.hook new file mode 100644 index 000000000..3d656e32d --- /dev/null +++ b/libre/dkms-libre/dkms.hook @@ -0,0 +1,12 @@ +#!/bin/bash + +dkms_autoinstall() { + export TMPDIR=/dev/shm + status 'Starting DKMS autoinstall' dkms autoinstall + unset TMPDIR +} + +add_hook single_udevlaunched dkms_autoinstall +add_hook sysinit_udevlaunched dkms_autoinstall + +# vim:set ts=2 sw=2 ft=sh et: diff --git a/libre/dkms-libre/dkms.install b/libre/dkms-libre/dkms.install new file mode 100644 index 000000000..4dd18dd19 --- /dev/null +++ b/libre/dkms-libre/dkms.install @@ -0,0 +1,13 @@ +#!/bin/sh + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + if [ "$(vercmp $2 2.2.0.3-12)" -le 0 ]; then + cat << EOF +===> dkms startup config file moved to /etc/default/dkms +EOF + fi +} + +# vim:set ts=2 sw=2 ft=sh et: diff --git a/libre/dkms-libre/dkms.service b/libre/dkms-libre/dkms.service new file mode 100644 index 000000000..0e679a949 --- /dev/null +++ b/libre/dkms-libre/dkms.service @@ -0,0 +1,11 @@ +[Unit] +Description=Dynamic Kernel Modules System + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/lib/systemd/scripts/dkms start +ExecStop=/usr/lib/systemd/scripts/dkms stop + +[Install] +WantedBy=multi-user.target diff --git a/libre/dkms-libre/dkms.systemd b/libre/dkms-libre/dkms.systemd new file mode 100644 index 000000000..03e6bfe97 --- /dev/null +++ b/libre/dkms-libre/dkms.systemd @@ -0,0 +1,61 @@ +#!/bin/bash + +. /etc/default/dkms + +# list dkms modules for the current running kernel +list_dkms_modules() { + shopt -s nullglob + declare -a DKMS_MOULES + # dkms status needs uname -r to list correctly intalled version for current kernel + local modules_path=($(dkms status -k "$(uname -r)"|sed -rn 's#(.*), (.*), (.*), (.*): installed#\1/\2/\3/\4#p')) + for p in "${modules_path[@]}"; do + for m in /var/lib/dkms/"$p"/module/*.ko{,gz}; do + m=${m##*/} + m=${m%.gz} + m=${m%.ko} + DKMS_MODULES+=("$m") + done + done +} + +# load installed kernel modules for the current kernel version +load_dkms_modules() { + local ret=0 + list_dkms_modules + for m in "${DKMS_MODULES[@]}"; do + modprobe "$m" + ret+=$? + done + return $ret +} + +# unload installed kernel modules for the current kernel version +unload_dkms_modules() { + list_dkms_modules + # ask for removal + for m in "${DKMS_MODULES[@]}"; do + modprobe --remove --quiet "$m" + done + # check modules are unloaded + # sometimes modprobe -r fail but modules are removed + for m in "${DKMS_MODULES[@]}"; do + [[ -e /sys/modules/$m ]] && return 1 + done + return 0 +} + +case "$1" in + start) + dkms autoinstall -k "$(uname -r)" + [[ $LOAD =~ [Yy][Ee][Ss] ]] && load_dkms_modules + ;; + stop) + [[ $UNLOAD =~ [Yy][Ee][Ss] ]] && unload_dkms_modules + ;; + *) + echo "usage: $0 {start|stop}" >&2 + ;; +esac + +: +# vim:set ts=2 sw=2 ft=sh et: |