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
-- 
Christian Perle                                    chris AT linuxinfotag.de
010111                                              http://chris.silmor.de/
101010                          LinuxGuitarKitesBicyclesBeerPizzaRaytracing

Antwort per Email an