From: Andres Freund Date: Wed, 12 Feb 2025 14:40:20 +0000 (-0500) Subject: ci: Collect core files on NetBSD and OpenBSD X-Git-Tag: REL_18_BETA1~890 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=c45963c5d5cc0a3b8739ba158f781452a3fd89c5;p=postgresql.git 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 Discussion: https://postgr.es/m/CAN55FZ32ySyYa06k9MFd+VY5vHhUyBpvgmJUZae5PihjzaurVg@mail.gmail.com --- diff --git a/.cirrus.tasks.yml b/.cirrus.tasks.yml index 0d99b787f5f..fffa438cec1 100644 --- a/.cirrus.tasks.yml +++ b/.cirrus.tasks.yml @@ -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 diff --git a/src/tools/ci/cores_backtrace.sh b/src/tools/ci/cores_backtrace.sh index 28d3cecfc67..54607415258 100755 --- a/src/tools/ci/cores_backtrace.sh +++ b/src/tools/ci/cores_backtrace.sh @@ -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