Last active
April 27, 2019 07:32
-
-
Save dreamcat4/c2bea0e889de8860b035 to your computer and use it in GitHub Desktop.
entrypoint script to take core files, and another script to take a stacktrace (while program is hung running, deadlocked / live-locked)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Tvheadend Debugging Guide | |
# https://tvheadend.org/projects/tvheadend/wiki/Debugging | |
_cleanup () | |
{ | |
if [ "$core_pattern_orig" ]; then | |
# Restore core path | |
echo "$core_pattern_orig" > /proc/sys/kernel/core_pattern | |
fi | |
# Restore original file ownership and permissions | |
chown -R ${crash_uid}:${crash_gid} /crash && chmod ${crash_rwx} /crash | |
exit 0 | |
} | |
trap _cleanup TERM INT QUIT HUP | |
# Remember the folder ownership for later | |
crash_uid="$(stat -c %u /crash)" | |
crash_gid="$(stat -c %g /crash)" | |
crash_rwx="$(stat -c %a /crash)" | |
# Set folder permissions | |
chown -R hts:video /config /recordings | |
chown -R hts:video /crash && chmod u+rwx /crash | |
if [ "$pipework_wait" ]; then | |
echo "Waiting for pipework to bring up $pipework_wait..." | |
pipework --wait -i $pipework_wait | |
fi | |
# Enable core dumps | |
ulimit -c unlimited | |
echo "Set: ulimit -c unlimited" | |
# Override core path | |
core_pattern_orig=$(cat /proc/sys/kernel/core_pattern) | |
core_pattern="/crash/core.%h.%e.%t" | |
echo "$core_pattern" > /proc/sys/kernel/core_pattern | |
# Make sure our core files get saved as '/crash/core*' | |
if [ "$?" -ne "0" ]; then | |
echo "error: can't modify /proc/sys/kernel/core_pattern | |
Did you run this image with --privileged=true flag?" | |
fi | |
if [ "$(cat /proc/sys/kernel/core_pattern | grep -v -e '^/crash/core')" ]; then | |
echo "error: the save path of core files is not /crash/core* | |
Aborting." | |
exit 1 | |
fi | |
echo "Set: core_pattern=/crash/core.%h.%e.%t" | |
# Uname | |
echo "uname -a:" | |
uname -a | |
# Dmesg | |
dmesg > /crash/dmesg | |
echo "Saved: dmesg --> /crash/dmesg" | |
# Start tvheadend | |
echo /usr/bin/tvheadend "$@" | |
/usr/bin/tvheadend "$@" | |
# Echo full trace to stdout | |
tvh_pid="$(ps -o pid= -C tvheadend | head -1 | tr -d ' ')" | |
[ "${tvh_pid}" ] || exit 1 | |
tail -n 99999 -F --pid=$tvh_pid /crash/tvheadend.log | |
# Restore core path | |
echo "$core_pattern_orig" > /proc/sys/kernel/core_pattern | |
# Keep debug binary with symbols | |
cp /usr/lib/debug/usr/bin/tvheadend /crash/tvheadend | |
# Restore original file ownership and permissions | |
chown -R ${crash_uid}:${crash_gid} /crash && chmod ${crash_rwx} /crash | |
# Exit cleanly if there was no segfault crash | |
core_file=$(find /crash/core.*) | |
[ "$core_file" ] || rm /crash/tvheadend && exit 0 | |
echo " | |
*********************************************************************** | |
GDB Backtrace | |
*********************************************************************** | |
" | |
echo "set logging on /crash/gdb.txt | |
set pagination off | |
bt full" | gdb /usr/bin/tvheadend "$core_file" | |
echo " | |
***********************************************************************" | |
echo " | |
Tvheadend Debugging Guide | |
----> https://tvheadend.org/projects/tvheadend/wiki/Debugging | |
Tvheadend Issue Tracker | |
----> https://tvheadend.org/projects/tvheadend/issues | |
Tvheadend New Issue | |
----> https://tvheadend.org/projects/tvheadend/issues/new | |
" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
containers: | |
tvheadend-debug: | |
image: dreamcat4/tvheadend-debug | |
dockerfile: tvheadend/Dockerfile.debug | |
run: | |
cmd: --abort | |
volume: | |
- /home/id/tvh_debug:/crash | |
privileged: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Tvheadend Debugging Guide | |
# https://tvheadend.org/projects/tvheadend/wiki/Debugging | |
# Override core path | |
core_pattern_orig=$(cat /proc/sys/kernel/core_pattern) | |
core_pattern="/crash/core.%h.%e.%t" | |
echo "$core_pattern" > /proc/sys/kernel/core_pattern | |
# Remember the folder ownership for later | |
crash_uid="$(stat -c %u /crash)" | |
crash_gid="$(stat -c %g /crash)" | |
crash_rwx="$(stat -c %a /crash)" | |
# Set folder permissions | |
chown -R hts:video /crash && chmod u+rwx /crash | |
echo " | |
*********************************************************************** | |
uname -a" | |
uname -a | |
echo " | |
*********************************************************************** | |
ps -aux" | |
ps -aux | |
echo " | |
*********************************************************************** | |
GDB Backtrace | |
***********************************************************************" | |
tvh_pid="$(ps -o pid= -C tvheadend)" | |
echo "set logging on | |
set pagination off | |
thread apply all bt full | |
generate core file" | gdb /usr/bin/tvheadend $tvh_pid | |
# Restore core path | |
echo "$core_pattern_orig" > /proc/sys/kernel/core_pattern | |
# Keep debug binary with symbols | |
cp /usr/lib/debug/usr/bin/tvheadend /crash/tvheadend | |
# Restore original file ownership and permissions | |
chown -R ${crash_uid}:${crash_gid} /crash && chmod ${crash_rwx} /crash | |
echo " | |
***********************************************************************" | |
echo " | |
Tvheadend Debugging Guide | |
----> https://tvheadend.org/projects/tvheadend/wiki/Debugging | |
Tvheadend Issue Tracker | |
----> https://tvheadend.org/projects/tvheadend/issues | |
Tvheadend New Issue | |
----> https://tvheadend.org/projects/tvheadend/issues/new | |
" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment