Nachdem ich -wie gewohnt- mein System per "Hot-Upgrade" (im laufenden Betrieb mit zypper dup) ohne größeren Ärger von 11.4 auf 12.1 gebracht hatte, war ich vor allem auf das neue Init-System "systemd" gespannt.
Das Ganze liess sich auch recht gut an, Start des Systems geht merkbar flotter von statten aber der große Ärger kam dann beim Herunterfahren, das System blieb einfach hängen und schaltete ums Verrecken nicht ab.
Nachdem ich diverse Wikieinträge (openSUSE/Fedora und Archlinux) zum Thema "wie debugge ich systemd-Probleme überhaupt?" durchforstet und einige Reboots mit diversen Versuchen hinter mich gebracht hatte, wurde -für mich erstaunlicherweise- nicht ein Dienst sondern der Kerneltreiber meiner WLAN-Karte (iwlagn/iwlwifi, je nach Kernelversion) als der potentielle Störenfried identifiziert.
Ein
bzw.
_vor_ dem Herunterfahren und alles war wieder gut.
Nur stellte sich jetzt die Frage, wie mache ich das automatisch unter Zuhilfenahme des neuen Init-Systems "systemd"?
Bei SysVinit würde man den Befehl in /etc/init.d/halt.local schreiben, aber das wird von systemd wohl ignoriert und vor allem wollte ich eine Lösung, die auch ohne "legacy"-Scripte auskommt.
Meine Erfolge mittels Suchmaschine waren eher übersichtlich, aber zumindest konnte ich für mich herausfinden, wie man ein eigenes ".service"-file für systemd schreibt, wo man es hinpacken sollte und wie man es aktiviert.
Langer Rede kurzer Sinn:
1) Datei /etc/systemd/system/iwlwifi-unload.service
2) Aktivieren mittels
Ausgabe sieht dann so aus:
Und fertig ist die Laube, System fährt sauber herunter.
Wie man den Dateinamen und die Befehle abändern kann/sollte, falls eben ein anderes Modul vor dem/beim Herunterfahren entladen werden soll, dürfte dem geneigten und wachen Leser nach etwas Überlegen sicher einfallen.
Greetz,
RM
P.S:
Wer z.B. das Verhalten seiner "guten, alte" /etc/init.d/halt.local wiederhaben will, dem verbietet sicher niemand, den passenden Befehl bei "ExecStart" einzufügen.
Das Ganze liess sich auch recht gut an, Start des Systems geht merkbar flotter von statten aber der große Ärger kam dann beim Herunterfahren, das System blieb einfach hängen und schaltete ums Verrecken nicht ab.
Nachdem ich diverse Wikieinträge (openSUSE/Fedora und Archlinux) zum Thema "wie debugge ich systemd-Probleme überhaupt?" durchforstet und einige Reboots mit diversen Versuchen hinter mich gebracht hatte, wurde -für mich erstaunlicherweise- nicht ein Dienst sondern der Kerneltreiber meiner WLAN-Karte (iwlagn/iwlwifi, je nach Kernelversion) als der potentielle Störenfried identifiziert.
Ein
Code:
/sbin/modprobe -r iwlagn #Distro-Kernel - 3.1
Code:
/sbin/modprobe -r iwlwifi #Ab Kernel 3.3 oder 3.4
Nur stellte sich jetzt die Frage, wie mache ich das automatisch unter Zuhilfenahme des neuen Init-Systems "systemd"?
Bei SysVinit würde man den Befehl in /etc/init.d/halt.local schreiben, aber das wird von systemd wohl ignoriert und vor allem wollte ich eine Lösung, die auch ohne "legacy"-Scripte auskommt.
Meine Erfolge mittels Suchmaschine waren eher übersichtlich, aber zumindest konnte ich für mich herausfinden, wie man ein eigenes ".service"-file für systemd schreibt, wo man es hinpacken sollte und wie man es aktiviert.
Langer Rede kurzer Sinn:
1) Datei /etc/systemd/system/iwlwifi-unload.service
Code:
# This file is part of systemd.
#
# systemd 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.
[Unit]
Description=Unload iwlwifi Kernel Module on Shutdown
DefaultDependencies=no
Conflicts=
After=
Before=shutdown.target
[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/sbin/modprobe -r iwlwifi
[Install]
WantedBy=shutdown.target
Code:
systemctl enable iwlwifi-unload.service
Code:
# systemctl enable iwlwifi-unload.service
ln -s '/etc/systemd/system/iwlwifi-unload.service' '/etc/systemd/system/shutdown.target.wants/iwlwifi-unload.service'
Wie man den Dateinamen und die Befehle abändern kann/sollte, falls eben ein anderes Modul vor dem/beim Herunterfahren entladen werden soll, dürfte dem geneigten und wachen Leser nach etwas Überlegen sicher einfallen.
Greetz,
RM
P.S:
Wer z.B. das Verhalten seiner "guten, alte" /etc/init.d/halt.local wiederhaben will, dem verbietet sicher niemand, den passenden Befehl bei "ExecStart" einzufügen.