ci: Collect core files on NetBSD and OpenBSD

Support for NetBSD and OpenBSD operating systems have been added to CI in the
prior commit. Now add support for collect core files and generating backtraces
using for all core files.

Author: Nazir Bilal Yavuz <byavuz81@gmail.com>
Discussion: https://postgr.es/m/CAN55FZ32ySyYa06k9MFd+VY5vHhUyBpvgmJUZae5PihjzaurVg@mail.gmail.com
This commit is contained in:
Andres Freund 2025-02-12 09:40:20 -05:00
parent e291573534
commit c45963c5d5
2 changed files with 19 additions and 2 deletions

View File

@ -232,11 +232,13 @@ task:
CCACHE_DIR: /home/postgres/cache
PATH: /usr/sbin:$PATH
CORE_DUMP_DIR: /var/crash
matrix:
- name: NetBSD - Meson
only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*netbsd.*'
env:
OS_NAME: netbsd
IMAGE_FAMILY: pg-ci-netbsd-postgres
PKGCONFIG_PATH: '/usr/lib/pkgconfig:/usr/pkg/lib/pkgconfig'
# initdb fails with: 'invalid locale settings' error on NetBSD.
@ -253,12 +255,15 @@ task:
- name: OpenBSD - Meson
only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*openbsd.*'
env:
OS_NAME: openbsd
IMAGE_FAMILY: pg-ci-openbsd-postgres
PKGCONFIG_PATH: '/usr/lib/pkgconfig:/usr/local/lib/pkgconfig'
UUID: -Duuid=e2fs
TCL: -Dtcl_version=tcl86
setup_additional_packages_script: |
#pkg_add -I ...
# Always core dump to ${CORE_DUMP_DIR}
set_core_dump_script: sysctl -w kern.nosuidcoredump=2
<<: *openbsd_task_template
sysinfo_script: |
@ -276,6 +281,10 @@ task:
chown -R postgres:users /home/postgres
mkdir -p ${CCACHE_DIR}
chown -R postgres:users ${CCACHE_DIR}
setup_core_files_script: |
mkdir -p ${CORE_DUMP_DIR}
chmod -R 770 ${CORE_DUMP_DIR}
chown -R postgres:users ${CORE_DUMP_DIR}
# -Duuid=bsd is not set since 'bsd' uuid option
# is not working on NetBSD & OpenBSD. See
@ -306,6 +315,12 @@ task:
on_failure:
<<: *on_failure_meson
cores_script: |
# Although we try to configure the OS to core dump inside
# ${CORE_DUMP_DIR}, they may not obey this. So, move core files to the
# ${CORE_DUMP_DIR} directory.
find build/ -type f -name '*.core' -exec mv '{}' ${CORE_DUMP_DIR} \;
src/tools/ci/cores_backtrace.sh ${OS_NAME} ${CORE_DUMP_DIR}
# configure feature flags, shared between the task running the linux tests and

View File

@ -9,7 +9,7 @@ os=$1
directory=$2
case $os in
freebsd|linux|macos)
freebsd|linux|macos|netbsd|openbsd)
;;
*)
echo "unsupported operating system ${os}"
@ -26,7 +26,7 @@ for corefile in $(find "$directory" -type f) ; do
echo -e '\n\n'
fi
if [ "$os" = 'macos' ]; then
if [ "$os" = 'macos' ] || [ "$os" = 'openbsd' ]; then
lldb -c $corefile --batch -o 'thread backtrace all' -o 'quit'
else
auxv=$(gdb --quiet --core ${corefile} --batch -ex 'info auxv' 2>/dev/null)
@ -37,6 +37,8 @@ for corefile in $(find "$directory" -type f) ; do
if [ "$os" = 'freebsd' ]; then
binary=$(echo "$auxv" | grep AT_EXECPATH | perl -pe "s/^.*\"(.*)\"\$/\$1/g")
elif [ "$os" = 'netbsd' ]; then
binary=$(echo "$auxv" | grep AT_SUN_EXECNAME | perl -pe "s/^.*\"(.*)\"\$/\$1/g")
elif [ "$os" = 'linux' ]; then
binary=$(echo "$auxv" | grep AT_EXECFN | perl -pe "s/^.*\"(.*)\"\$/\$1/g")
else