#!/bin/bash cd $HOME # workaround EVG-12829 # Communicate to users that logged in before the script started that nothing is ready. wall "The setup_spawnhost_coredump script has just started setting up the debugging environment." # Write this file that gets cat'ed on login to communicate to users logging in if this setup script is still running. echo '+-----------------------------------------------------------------+' > ~/.setup_spawnhost_coredump_progress echo '| The setup script is still setting up data files for inspection. |' >> ~/.setup_spawnhost_coredump_progress echo '+-----------------------------------------------------------------+' >> ~/.setup_spawnhost_coredump_progress cat >> ~/.profile < ./'" cat ~/.setup_spawnhost_coredump_progress EOF export PATH=/opt/mongodbtoolchain/gdb/bin:$PATH echo 'if [ -f ~/.profile ]; then . ~/.profile fi' >> .bash_profile # Make a directory on the larger EBS volume. Soft-link it under the home directory. The smaller home # volume can have trouble particularly with coredumps from sharded timeouts. mkdir /data/debug ln -s /data/debug . cd debug # As the name suggests, pretty printers. Primarily for boost::optional git clone git@github.com:ruediger/Boost-Pretty-Printer.git & # Discover and unarchive necessary files and source code. This will put mongo binaries and their # partner .debug files in the same `debug/bin` directory. The `bin` directory will later be symbolic # linked into the top-level (`debug`) directory. Shared library files and their debug symbols will # be dumped into a `debug/lib` directory for tidiness. The mongo `/src/` directory is soft # linked as `debug/src`. The .gdbinit file assumes gdb is being run from the `debug` directory. BIN_ARCHIVE=`ls /data/mci/artifacts-*archive_dist_test*/mongo-*.tgz` tar --wildcards --strip-components=1 -xzf $BIN_ARCHIVE '*/bin/mongod' '*/bin/mongos' '*/bin/mongo' '*/bin/mongobridge' & tar --wildcards --strip-components=1 -xzf $BIN_ARCHIVE '*/lib/*' & DBG_ARCHIVE=`ls /data/mci/artifacts-*archive_dist_test_debug/debugsymbols-*.tgz` tar --wildcards --strip-components=1 -xzf $DBG_ARCHIVE '*/bin/mongod.debug' '*/bin/mongos.debug' '*/bin/mongo.debug' '*/bin/mongobridge.debug' & tar --wildcards --strip-components=1 -xzf $DBG_ARCHIVE '*/lib/*' & UNITTEST_ARCHIVE=`ls /data/mci/artifacts-*run_unittests/mongo-unittests-*.tgz` tar --wildcards --strip-components=0 -xzf $UNITTEST_ARCHIVE 'bin/*' & tar --wildcards -xzf $UNITTEST_ARCHIVE 'lib/*' & SRC_DIR=`find /data/mci/ -maxdepth 1 | grep source` ln -s $SRC_DIR/.gdbinit . ln -s $SRC_DIR/src src ln -s $SRC_DIR/buildscripts buildscripts # Install pymongo to get the bson library for pretty-printers. /opt/mongodbtoolchain/v3/bin/pip3 install -r $SRC_DIR/etc/pip/dev-requirements.txt & COREDUMP_ARCHIVE=`ls /data/mci/artifacts-*/mongo-coredumps-*.tgz` tar -xzf $COREDUMP_ARCHIVE & echo "Waiting for background processes to complete." wait # Symbolic linking all of the executable files is sufficient for `gdb ./mongod ./dump_mongod.core` # to succeed. This inadvertantly also links in the ".debug" files which is unnecessary, but # harmless. gdb expects the .debug files to live adjacent to the physical binary. ln -s bin/* ./ cat >> ~/.gdbinit <> ~/.gdbinit # Empty out the progress script that warns users about the set script still running when users log in. echo "" > ~/.setup_spawnhost_coredump_progress # Alert currently logged in users that this setup script has completed. Logging back in will ensure any # paths/environment variables will be set as intended. wall "The setup_spawnhost_coredump script has completed, please relogin to ensure the right environment variables are set."