110 lines
3.1 KiB
Bash
Executable File
110 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Debug variant of deploy_lt.sh
|
|
# Builds with debug symbols, deploys, enables core dumps, and restarts services.
|
|
# After a crash, run on the server:
|
|
# coredumpctl list
|
|
# coredumpctl gdb simon.service
|
|
# (gdb) bt full
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SOURCE_BINARY_DEBUG="$SCRIPT_DIR/didactyl_static_x86_64_debug"
|
|
SOURCE_BINARY_FALLBACK="$SCRIPT_DIR/didactyl_static_x86_64"
|
|
SOURCE_BINARY=""
|
|
REMOTE_HOST="ubuntu@laantungir.net"
|
|
REMOTE_TARGETS=(
|
|
"/home/simon/didactyl"
|
|
"/home/didactyl/didactyl"
|
|
)
|
|
REMOTE_SERVICES=(
|
|
"simon.service"
|
|
"didactyl.service"
|
|
)
|
|
|
|
if ! command -v rsync >/dev/null 2>&1; then
|
|
echo "ERROR: rsync is not installed or not in PATH"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v ssh >/dev/null 2>&1; then
|
|
echo "ERROR: ssh is not installed or not in PATH"
|
|
exit 1
|
|
fi
|
|
|
|
echo "=========================================="
|
|
echo " DEBUG BUILD + DEPLOY"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
echo "Building DEBUG static binary (symbols preserved)..."
|
|
"$SCRIPT_DIR/build_static.sh" --debug
|
|
|
|
if [ -f "$SOURCE_BINARY_DEBUG" ]; then
|
|
SOURCE_BINARY="$SOURCE_BINARY_DEBUG"
|
|
elif [ -f "$SOURCE_BINARY_FALLBACK" ]; then
|
|
SOURCE_BINARY="$SOURCE_BINARY_FALLBACK"
|
|
else
|
|
echo "ERROR: Build completed but no binary found (expected $SOURCE_BINARY_DEBUG or $SOURCE_BINARY_FALLBACK)"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Binary info:"
|
|
file "$SOURCE_BINARY"
|
|
ls -lh "$SOURCE_BINARY"
|
|
echo ""
|
|
|
|
REMOTE_STAGE="/tmp/didactyl_static_x86_64"
|
|
|
|
echo "Uploading debug binary to $REMOTE_HOST:$REMOTE_STAGE"
|
|
rsync -avz --progress "$SOURCE_BINARY" "$REMOTE_HOST:$REMOTE_STAGE"
|
|
|
|
for target in "${REMOTE_TARGETS[@]}"; do
|
|
echo "Installing staged binary to $target via sudo"
|
|
ssh "$REMOTE_HOST" "sudo install -m 0755 '$REMOTE_STAGE' '$target'"
|
|
done
|
|
|
|
echo ""
|
|
echo "Enabling core dumps on remote..."
|
|
ssh "$REMOTE_HOST" "
|
|
# Ensure systemd stores core dumps via coredumpctl
|
|
sudo mkdir -p /etc/systemd/coredump.conf.d
|
|
echo '[Coredump]
|
|
Storage=external
|
|
ProcessSizeMax=512M
|
|
ExternalSizeMax=512M' | sudo tee /etc/systemd/coredump.conf.d/debug.conf > /dev/null
|
|
sudo systemctl daemon-reload
|
|
|
|
# Remove any ulimit restrictions for the services
|
|
for svc in ${REMOTE_SERVICES[*]}; do
|
|
OVERRIDE_DIR=\"/etc/systemd/system/\${svc}.d\"
|
|
sudo mkdir -p \"\$OVERRIDE_DIR\"
|
|
echo '[Service]
|
|
LimitCORE=infinity' | sudo tee \"\$OVERRIDE_DIR/coredump.conf\" > /dev/null
|
|
done
|
|
sudo systemctl daemon-reload
|
|
"
|
|
|
|
echo "Restarting services on $REMOTE_HOST: ${REMOTE_SERVICES[*]}"
|
|
ssh "$REMOTE_HOST" "sudo systemctl restart ${REMOTE_SERVICES[*]}"
|
|
|
|
echo "Cleaning up remote staging file $REMOTE_STAGE"
|
|
ssh "$REMOTE_HOST" "rm -f '$REMOTE_STAGE'"
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo " DEBUG DEPLOYMENT COMPLETE"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "After reproducing the crash, run on the server:"
|
|
echo " ssh $REMOTE_HOST"
|
|
echo " sudo coredumpctl list"
|
|
echo " sudo coredumpctl gdb simon.service"
|
|
echo " (gdb) bt full"
|
|
echo " (gdb) info threads"
|
|
echo " (gdb) thread apply all bt"
|
|
echo ""
|
|
echo "Then paste the backtrace here."
|