forked from michael.heier/citadel-core
266 lines
8.1 KiB
Plaintext
266 lines
8.1 KiB
Plaintext
|
#!/usr/bin/env bash
|
||
|
|
||
|
# SPDX-FileCopyrightText: 2021 Aaron Dewes <aaron.dewes@protonmail.com>
|
||
|
#
|
||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||
|
|
||
|
NODE_ROOT="$(dirname $(readlink -f "${BASH_SOURCE[0]}"))/.."
|
||
|
cd "${NODE_ROOT}"
|
||
|
|
||
|
if [[ $UID != 0 ]]; then
|
||
|
echo "This script must run as root"
|
||
|
echo "Please re-run this script as"
|
||
|
echo " sudo ~/citadel/scripts/debug"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Try to load Citadel OS version on Citadel OS
|
||
|
[[ -f "/etc/default/citadel" ]] && source "/etc/default/citadel"
|
||
|
[[ -f "./.env" ]] && source "./.env"
|
||
|
|
||
|
# function to upload the output to our debug log server
|
||
|
# Based on https://github.com/seejohnrun/haste-client#lightweight-alternative
|
||
|
upload() {
|
||
|
echo "Generating link..."
|
||
|
curl \
|
||
|
--header "Content-Type: text/plain" \
|
||
|
--request POST \
|
||
|
--data-binary @- \
|
||
|
https://api.debug.umbrel.tech/api/upload \
|
||
|
| jq '.key' \
|
||
|
| sed 's/"//g' \
|
||
|
| awk -F '"' '{print "https://citadel-paste.vercel.app/"$1}'
|
||
|
}
|
||
|
|
||
|
torupload() {
|
||
|
echo "Generating link..."
|
||
|
curl \
|
||
|
--header "Content-Type: text/plain" \
|
||
|
--request POST \
|
||
|
--socks5 "localhost:${TOR_PROXY_PORT}" \
|
||
|
--data-binary @- \
|
||
|
https://api.debug.umbrel.tech/api/upload \
|
||
|
| jq '.key' \
|
||
|
| sed 's/"//g' \
|
||
|
| awk -F '"' '{print "https://citadel-paste.vercel.app/"$1}'
|
||
|
}
|
||
|
|
||
|
list_block_devices () {
|
||
|
# Documented in the mount script for the OS
|
||
|
sync
|
||
|
(ls -d /sys/block/sd* /sys/block/nvme*n* 2>/dev/null || true) | sed 's!.*/!!'
|
||
|
}
|
||
|
|
||
|
if [[ "${1}" == "--run" ]]; then
|
||
|
echo "=============="
|
||
|
echo "= Debug info ="
|
||
|
echo "=============="
|
||
|
|
||
|
echo
|
||
|
echo "Node version"
|
||
|
echo "------------"
|
||
|
cat info.json | jq .version | sed 's/"//g'
|
||
|
|
||
|
if [[ ! -z "${CITADEL_OS:-}" ]]; then
|
||
|
echo
|
||
|
echo "Flashed OS version"
|
||
|
echo "-----------------"
|
||
|
echo $CITADEL_OS
|
||
|
|
||
|
echo
|
||
|
echo "Raspberry Pi Model"
|
||
|
echo "------------------"
|
||
|
|
||
|
cat /proc/cpuinfo | tail -1
|
||
|
|
||
|
echo
|
||
|
echo "Temperature"
|
||
|
echo "-----------"
|
||
|
|
||
|
vcgencmd measure_temp
|
||
|
|
||
|
echo
|
||
|
echo "Throttling"
|
||
|
echo "----------"
|
||
|
|
||
|
vcgencmd get_throttled
|
||
|
fi
|
||
|
|
||
|
echo
|
||
|
echo "Memory usage"
|
||
|
echo "------------"
|
||
|
free --human --mega
|
||
|
echo
|
||
|
"${NODE_ROOT}/scripts/memory-usage"
|
||
|
|
||
|
echo
|
||
|
echo "Memory monitor logs"
|
||
|
echo "-------------------"
|
||
|
tail -n 10 "${NODE_ROOT}/logs/memory-monitor.log"
|
||
|
|
||
|
echo
|
||
|
echo "Filesystem information"
|
||
|
echo "----------------------"
|
||
|
|
||
|
df --human-readable / "${NODE_ROOT}"
|
||
|
|
||
|
if [[ ! -z "${CITADEL_OS:-}" ]]; then
|
||
|
echo
|
||
|
echo "Startup service logs"
|
||
|
echo "--------------------"
|
||
|
journalctl --unit=citadel-startup.service | tail -n 30 | sed '/onion/d'
|
||
|
|
||
|
echo
|
||
|
echo "External storage service logs"
|
||
|
echo "-----------------------------"
|
||
|
journalctl --unit=citadel-external-storage.service | tail -n 30
|
||
|
|
||
|
echo
|
||
|
echo "External storage SD card update service logs"
|
||
|
echo "--------------------------------------------"
|
||
|
journalctl --unit=citadel-external-storage-sdcard-update.service | tail -n 30
|
||
|
fi
|
||
|
|
||
|
|
||
|
echo
|
||
|
echo "Karen logs"
|
||
|
echo "----------"
|
||
|
echo
|
||
|
|
||
|
tail -n 50 logs/karen.log | sed '/onion/d'
|
||
|
|
||
|
echo
|
||
|
echo "Docker containers"
|
||
|
echo "-----------------"
|
||
|
|
||
|
docker ps --format="table {{.Names}}\t{{.Status}}"
|
||
|
|
||
|
echo
|
||
|
echo "Bitcoin Core logs"
|
||
|
echo "-----------------"
|
||
|
echo
|
||
|
docker compose logs --tail=30 bitcoin
|
||
|
|
||
|
echo
|
||
|
echo "LND logs"
|
||
|
echo "--------"
|
||
|
echo
|
||
|
docker compose logs --tail=30 lnd
|
||
|
|
||
|
echo
|
||
|
echo "Tor logs"
|
||
|
echo "--------"
|
||
|
echo
|
||
|
docker compose logs --tail=30 tor
|
||
|
|
||
|
installed_apps=$(./app/app-manager.py ls-installed)
|
||
|
if [[ ! -z "${installed_apps:-}" ]]; then
|
||
|
echo
|
||
|
echo "App logs"
|
||
|
echo "--------"
|
||
|
for app in $installed_apps; do
|
||
|
echo
|
||
|
echo "${app}"
|
||
|
echo
|
||
|
# Double tail because we want 30 lines total not per container
|
||
|
./scripts/app compose $app logs --tail 30 | tail -n 30;
|
||
|
done
|
||
|
fi
|
||
|
else
|
||
|
filter_sensitive=false
|
||
|
allow_colors=true
|
||
|
upload=false
|
||
|
instructions=true
|
||
|
dmesg=false
|
||
|
tor=true
|
||
|
while [[ "$#" -gt 0 ]]; do
|
||
|
case $1 in
|
||
|
--no-colors) allow_colors=false ;;
|
||
|
--no-instructions) instructions=false ;;
|
||
|
-f|--filter) filter_sensitive=true ;;
|
||
|
-u|--upload) upload=true ;;
|
||
|
--no-tor) tor=false ;;
|
||
|
-d|--dmesg) dmesg=true ;;
|
||
|
-r|--run) echo "--run can't be used with other options!"; exit 1 ;;
|
||
|
*) echo "Unknown parameter passed: $1"; exit 1 ;;
|
||
|
esac
|
||
|
shift
|
||
|
done
|
||
|
echo "Loading data..."
|
||
|
OWN_OUTPUT="$(./scripts/debug --run)"
|
||
|
append_dmesg () {
|
||
|
echo "${1}"
|
||
|
echo "dmesg"
|
||
|
echo "-----"
|
||
|
dmesg
|
||
|
}
|
||
|
|
||
|
if [[ $allow_colors = false ]]; then
|
||
|
OWN_OUTPUT=$(echo "${OWN_OUTPUT}" | sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g")
|
||
|
fi
|
||
|
|
||
|
if [[ $filter_sensitive = true ]]; then
|
||
|
# TODO: Add more filters
|
||
|
OWN_OUTPUT=$(echo "${OWN_OUTPUT}" | sed '/onion/d')
|
||
|
fi
|
||
|
|
||
|
if [[ $dmesg = true ]]; then
|
||
|
OWN_OUTPUT=$(append_dmesg "${OWN_OUTPUT}")
|
||
|
fi
|
||
|
|
||
|
echo "${OWN_OUTPUT}"
|
||
|
|
||
|
if [[ $upload = true ]]; then
|
||
|
if [[ $dmesg = false ]]; then
|
||
|
OWN_OUTPUT=$(append_dmesg "${OWN_OUTPUT}")
|
||
|
fi
|
||
|
OWN_OUTPUT=$(echo "${OWN_OUTPUT}" | sed '/onion/d')
|
||
|
fi
|
||
|
|
||
|
echo "================"
|
||
|
echo "==== Result ===="
|
||
|
echo "================"
|
||
|
echo
|
||
|
if [[ ! -z "${BITCOIN_NODE_OS:-}" ]]; then
|
||
|
if [[ $(vcgencmd get_throttled) != "throttled=0x0" ]]; then
|
||
|
if [[ $(vcgencmd get_throttled) = "throttled=0x5"* ]]; then
|
||
|
echo "There is probably issue with your power supply. We recommend using the official power supply to avoid this issue."
|
||
|
else
|
||
|
echo "The temperature of your Raspberry Pi is too high. We recommend either using a case that lowers the temperature of your Pi or a case with a builtin fan."
|
||
|
fi
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
no_of_block_devices=$(list_block_devices | wc -l)
|
||
|
if [[ $no_of_block_devices -lt 1 ]]; then
|
||
|
echo "You have either no external drive connected to your Raspberry Pi or the drive is not being detected."
|
||
|
echo "Please shutdown your Raspberry Pi ('sudo shutdown'), then plug the SSD into the other USB3 port."
|
||
|
echo "After you've finished that, boot your Raspberry Pi back up. If it still still doesn't work,"
|
||
|
echo "you can contact us on Telegram."
|
||
|
if [[ $upload = true ]]; then
|
||
|
echo "To make it possible for us to analyze your problem easier, please share the following link with us:"
|
||
|
echo "${OWN_OUTPUT}" | upload
|
||
|
elif [[ $instructions = true ]]; then
|
||
|
echo "Please run this script again with the --upload flag to generate a link to share."
|
||
|
fi
|
||
|
exit 0
|
||
|
elif [[ $no_of_block_devices -gt 1 ]]; then
|
||
|
echo "You have multiple external drives connected to your Raspberry Pi. Please remove the drive(s) you don't want to use for Citadel,"
|
||
|
echo "then reboot your Raspberry Pi by running 'sudo reboot'."
|
||
|
exit 0
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
echo "The debug script did not automatically detect any issues with your Citadel."
|
||
|
if [[ $upload = true ]]; then
|
||
|
echo "Please copy the following link and share it with us on Telegram so we can help you with your problem."
|
||
|
if [[ $tor = true ]]; then
|
||
|
echo "${OWN_OUTPUT}" | torupload
|
||
|
else
|
||
|
echo "${OWN_OUTPUT}" | upload
|
||
|
fi
|
||
|
elif [[ $instructions = true ]]; then
|
||
|
echo "Please copy the entire output of this script and share it with us on Telegram so we can help you with your problem."
|
||
|
echo "It's recommended to upload the output somewhere and share a link to it. Run this script with '--upload' to automatically generate a link to share."
|
||
|
fi
|
||
|
fi
|