From 4bfff591896385befee69685f6680317f0ac37df Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Fri, 5 Jan 2024 21:49:47 +0100 Subject: [PATCH] sysv -> systemd switch [release 2.2.0.3-4mamba;Sat Dec 13 2014] --- dkms.service | 11 ++++++++++ dkms.spec | 45 ++++++++++++++++++++++++++++++-------- dkms.systemd | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 9 deletions(-) create mode 100644 dkms.service create mode 100644 dkms.systemd diff --git a/dkms.service b/dkms.service new file mode 100644 index 0000000..0e679a9 --- /dev/null +++ b/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/dkms.spec b/dkms.spec index 44be1ac..061d068 100644 --- a/dkms.spec +++ b/dkms.spec @@ -1,6 +1,6 @@ Name: dkms Version: 2.2.0.3 -Release: 3mamba +Release: 4mamba Summary: Dynamic Kernel Module Support Group: System/Tools Vendor: openmamba @@ -8,6 +8,8 @@ Distribution: openmamba Packager: Ercole 'ercolinux' Carpanetto URL: http://linux.dell.com/projects.shtml#dkms Source: http://linux.dell.com/dkms/permalink/dkms-%{version}.tar.gz +Source1: dkms.service +Source2: dkms.systemd Patch0: dkms-2.2.0.3-dont_fail_if_module_source_removed.patch License: GPL ## AUTOBUILDREQ-BEGIN @@ -29,27 +31,45 @@ DKMS stands for Dynamic Kernel Module Support. It is designed to create a framew [ "%{buildroot}" != / ] && rm -rf "%{buildroot}" make install-redhat DESTDIR=%{buildroot} +install -D -m0644 %{SOURCE1} %{buildroot}%{_unitdir}/dkms.service +install -D -m0755 %{SOURCE2} %{buildroot}%{_prefix}/lib/systemd/scripts/dkms + +rm -f %{buildroot}%{_initrddir}/dkms_autoinstaller + +install -d %{buildroot}%{_presetdir} +cat > %{buildroot}%{_presetdir}/50-dkms.preset << _EOF +enable dkms.service +_EOF + + %clean [ "%{buildroot}" != / ] && rm -rf "%{buildroot}" %post +%systemd_post %{name} if [ $1 -ge 1 ]; then - /sbin/chkconfig --add dkms_autoinstaller - /sbin/service dkms_autoinstaller start + systemctl -q enable %{name} + systemctl -q start %{name} fi : %preun -if [ $1 -eq 0 ]; then - /sbin/chkconfig --del dkms_autoinstaller -fi +%systemd_preun %{name} +: + +%postun +%systemd_postun %{name} +: + +%posttrans +# clean old sysv broken links +find /etc/rc[0-6].d/ -type l -xtype l -exec rm -f {} \; : %files %defattr(-,root,root) %{_sysconfdir}/dkms/template-dkms-mkrpm.spec %{_sysconfdir}/dkms/template-dkms-redhat-kmod.spec -%{_initrddir}/dkms_autoinstaller %{_sysconfdir}/bash_completion.d/dkms %{_sysconfdir}/dkms/framework.conf %{_sysconfdir}/kernel/postinst.d/dkms @@ -63,10 +83,17 @@ fi %{_prefix}/lib/dkms/mkkerneldoth %dir %{_localstatedir}/lib/dkms %{_localstatedir}/lib/dkms/dkms_dbversion -%{_mandir}/man8/dkms.8.gz -%doc AUTHORS COPYING README.dkms TODO +%{_presetdir}/50-dkms.preset +%{_unitdir}/dkms.service +%{_prefix}/lib/systemd/scripts/dkms +%{_mandir}/man8/dkms.8* +%doc AUTHORS COPYING +#README.dkms TODO %changelog +* Sat Dec 13 2014 Silvan Calarco 2.2.0.3-4mamba +- sysv -> systemd switch + * Sat Apr 13 2013 Silvan Calarco 2.2.0.3-3mamba - added a patch to avoid failed with dkms status and remove if missing source directory diff --git a/dkms.systemd b/dkms.systemd new file mode 100644 index 0000000..03e6bfe --- /dev/null +++ b/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: