Hallo Hilmar,
On Sun, Dec 29, 2024 at 23:49:29 +0100, Preuße, Hilmar wrote:
ich habe ein RH8 System und will beeinflussen, wo (potentielle) Core Dumps abgelegt werden. Nach einigem Herumsurfen komme ich zu dem Ergebnis, daß diese auch mit systemd über den Kernel-Parameter "kernel.core_pattern" gesteuert wird:
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e
Von hier aus lande ich bei [1], finde aber nicht die Stelle, wo man die Lokation des Core Dumps steuern kann (außer natürlich "kernel.core_pattern" selber anpassen).
Die Manpage systemd-coredump(8) verweist auf coredump.conf(5). Dort gibt es in der Section [Coredump] das Setting Storage=... Damit sollte es konfigurierbar sein.
Der sysctl kernel.core_pattern hat ueber die Jahre immer mehr Features bekommen. Zuerst kam core_uses_pid dazu, dann Format Strings, dann die Moeglichkeit fuer einen optionalen Coredump-Helper im Userspace.
Grundsaetzlich unterscheidet der Kernel beim sysctl kernel.core_pattern zwischen Strings, die mit dem Pipe-Symbol beginnen und solchen, die einen absoluten oder relativen Pfad fuer den Core-Dateinamen beschreiben. Klassisches UN*X-Verhalten ist, dass der Kernel selbst eine Coredump-Datei "core" ins Working Directory des betreffenden Prozesses schreibt, sofern fuer den Owner des Prozesses die Berechtigungen ausreichen.
Beim Pipe-Symbol wird der nachfolgende Pfad vom Kernel als der eines Executables (Binary oder Skript) interpretiert. Tritt ein Coredump auf, startet der Kernel via call_usermodehelper() das Executable und schiebt die Coredump-Daten in dessen Standard Input. Was das Executable mit diesen Daten macht, geht den Kernel nichts mehr an.
Gruesse, Christian