]> code.delx.au - monosys/commitdiff
Restore clean-dkms
authorJames Bunton <jamesbunton@delx.net.au>
Sun, 16 Jul 2017 12:55:47 +0000 (22:55 +1000)
committerJames Bunton <jamesbunton@delx.net.au>
Sun, 16 Jul 2017 12:55:47 +0000 (22:55 +1000)
clean-dkms [new file with mode: 0755]

diff --git a/clean-dkms b/clean-dkms
new file mode 100755 (executable)
index 0000000..146efa3
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+architecture="x86_64"
+linux_packages="linux linux-lts"
+
+declare -A module2package
+module2package[vboxhost]=virtualbox-host-dkms
+module2package[broadcom-wl]=broadcom-wl-dkms
+
+echo "# Running: $(uname -r)"
+for linux in $linux_packages; do
+    echo "# Installed: $(pacman -Q "$linux")"
+done
+
+echo
+find /var/lib/dkms/ -maxdepth 2 -type l -name 'kernel-*' | while read line; do
+    module_name="$(echo "$line" | cut -d/ -f5)"
+    package_name="${module2package[$module_name]}"
+    if [ -z "$package_name" ]; then
+        echo "Unknown module: $module_name"
+        exit 1
+    fi
+    module_version="$(pacman -Q "${package_name}" | cut -d' ' -f2 | cut -d'-' -f1)"
+    long_kernel_version="$(echo "$line" | cut -d/ -f6)"
+    kernel_version="$(echo "$long_kernel_version" | sed -e 's/^kernel-//' -e "s/-${architecture}\$//")"
+    if [ "$kernel_version" = "$(uname -r)" ]; then
+        continue
+    fi
+    echo dkms remove -m "$module_name" -v "$module_version" -k "$kernel_version"
+done
+
+echo
+find /lib/modules/ -maxdepth 1 -type d -name '[0-9]*' | while read line; do
+    if pacman -Qo "$line" &> /dev/null; then
+        continue
+    fi
+    echo rm -rf "$line"
+done
+