2018-11-07 17:37:16 +01:00
#!/bin/bash
2019-05-21 09:21:22 -07:00
set -eu -o pipefail
2023-12-13 16:43:12 +01:00
# scripts requires root
2018-11-07 17:37:16 +01:00
if [ [ ${ EUID } -ne 0 ] ] ; then
2019-05-21 09:44:58 -07:00
echo "This script should be run as root. Run with sudo"
2018-11-07 17:37:16 +01:00
exit 1
fi
2023-12-13 16:43:12 +01:00
readonly PASTEBIN = "https://paste.cloudron.io"
readonly LINE = "\n========================================================\n"
readonly HELP_MESSAGE = "
Cloudron Support and Diagnostics Tool
2018-11-26 15:28:11 +01:00
2023-12-13 16:43:12 +01:00
Options:
--enable-remote-access Enable SSH Remote Access for the Cloudron support team
2023-12-13 16:58:30 +01:00
--send-diagnostics Collects server diagnostics and uploads it to ${ PASTEBIN }
2023-12-13 16:43:12 +01:00
--owner-login Login as owner
--help Show this message
"
2022-04-28 11:31:18 +02:00
2023-12-13 16:43:12 +01:00
function enable_remote_access( ) {
local -r cloudron_support_public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGWS+930b8QdzbchGljt3KSljH9wRhYvht8srrtQHdzg support@cloudron.io"
local -r ssh_user = "cloudron-support"
local -r keys_file = "/home/cloudron-support/.ssh/authorized_keys"
2022-04-28 11:31:18 +02:00
2023-12-13 16:43:12 +01:00
echo -n "Enabling Remote Access for the Cloudron support team..."
2022-04-28 11:31:18 +02:00
mkdir -p $( dirname " ${ keys_file } " ) # .ssh does not exist sometimes
touch " ${ keys_file } " # required for concat to work
2023-12-13 16:43:12 +01:00
if ! grep -q " ${ cloudron_support_public_key } " " ${ keys_file } " ; then
echo -e " \n ${ cloudron_support_public_key } " >> " ${ keys_file } "
2022-04-28 11:31:18 +02:00
chmod 600 " ${ keys_file } "
chown " ${ ssh_user } " " ${ keys_file } "
fi
echo "Done"
2023-12-13 16:43:12 +01:00
}
2022-04-28 11:31:18 +02:00
2023-12-13 16:43:12 +01:00
function owner_login( ) {
local -r owner_username = $( mysql -NB -uroot -ppassword -e "SELECT username FROM box.users WHERE role='owner' AND username IS NOT NULL AND active=1 ORDER BY creationTime LIMIT 1" 2>/dev/null)
local -r owner_password = $( pwgen -1s 12)
local -r dashboard_domain = $( mysql -NB -uroot -ppassword -e "SELECT value FROM box.settings WHERE name='dashboard_domain'" 2>/dev/null)
mysql -NB -uroot -ppassword -e " INSERT INTO box.settings (name, value) VALUES ('ghosts_config', '{\" ${ owner_username } \":\" ${ owner_password } \"}') ON DUPLICATE KEY UPDATE name='ghosts_config', value='{\" ${ owner_username } \":\" ${ owner_password } \"}' " 2>/dev/null
echo " Login at https://my. ${ dashboard_domain } as ${ owner_username } / ${ owner_password } . This password may only be used once. "
}
2022-04-28 11:31:18 +02:00
2023-12-13 16:58:30 +01:00
function send_diagnostics( ) {
2023-12-13 16:43:12 +01:00
local -r log = "/tmp/cloudron-support.log"
2018-11-07 17:37:16 +01:00
2023-12-13 16:43:12 +01:00
echo -n "Generating Cloudron Support stats..."
2018-11-07 17:37:16 +01:00
2023-12-13 16:43:12 +01:00
rm -rf $log
2023-05-10 09:05:28 +02:00
2023-12-13 16:43:12 +01:00
echo -e $LINE "Linux" $LINE >> $log
uname -nar & >> $log
2023-05-10 09:05:28 +02:00
2023-12-13 16:43:12 +01:00
echo -e $LINE "Ubuntu" $LINE >> $log
lsb_release -a & >> $log
2021-02-17 20:27:46 -08:00
2023-12-13 16:43:12 +01:00
echo -e $LINE "Dashboard Domain" $LINE >> $log
mysql -NB -uroot -ppassword -e "SELECT value FROM box.settings WHERE name='dashboard_domain'" & >> $log 2>/dev/null || true
echo -e $LINE "Docker containers" $LINE >> $log
if ! timeout --kill-after 10s 15s docker ps -a & >> $log 2>& 1; then
echo -e "Docker is not responding" >> $log
fi
2018-11-07 17:37:16 +01:00
2023-12-13 16:43:12 +01:00
echo -e $LINE "Filesystem stats" $LINE >> $log
df -h & >> $log
2019-04-23 10:07:57 -07:00
2023-12-13 16:43:12 +01:00
echo -e $LINE "Appsdata stats" $LINE >> $log
du -hcsL /home/yellowtent/appsdata/* & >> $log || true
2019-04-23 10:07:57 -07:00
2023-12-13 16:43:12 +01:00
echo -e $LINE "Boxdata stats" $LINE >> $log
du -hcsL /home/yellowtent/boxdata/* & >> $log
2019-04-23 10:07:57 -07:00
2023-12-13 16:43:12 +01:00
echo -e $LINE "Backup stats (possibly misleading)" $LINE >> $log
du -hcsL /var/backups/* & >> $log || true
2018-11-07 17:37:16 +01:00
2023-12-13 16:43:12 +01:00
echo -e $LINE "System daemon status" $LINE >> $log
systemctl status --lines= 100 box mysql unbound cloudron-syslog nginx collectd docker & >> $log
echo -e $LINE "Box logs" $LINE >> $log
tail -n 100 /home/yellowtent/platformdata/logs/box.log & >> $log
echo -e $LINE "Interface Info" $LINE >> $log
ip addr & >> $log
echo -e $LINE "Firewall chains" $LINE >> $log
iptables -L & >> $log
has_ipv6 = $( cat /proc/net/if_inet6 >/dev/null 2>& 1 && echo "yes" || echo "no" )
echo -e " IPv6: ${ has_ipv6 } " >> $log
[ [ " ${ has_ipv6 } " = = "yes" ] ] && ip6tables -L & >> $log
echo "Done"
echo -n "Uploading information..."
paste_key = $( curl -X POST ${ PASTEBIN } /documents --silent --data-binary " @ $log " | python3 -c "import sys, json; print(json.load(sys.stdin)['key'])" )
echo "Done"
2018-11-07 17:37:16 +01:00
2023-12-13 16:43:12 +01:00
echo -e " \nPlease email the following link to support@cloudron.io : ${ PASTEBIN } / ${ paste_key } "
}
function check_disk_space( ) {
# check if at least 10mb root partition space is available
if [ [ "`df --output=" avail" / | sed -n 2p`" -lt "10240" ] ] ; then
echo "No more space left on /"
echo "This is likely the root case of the issue. Free up some space and also check other partitions below:"
echo ""
df -h
echo ""
echo "To recover from a full disk, follow the guide at https://docs.cloudron.io/troubleshooting/#recovery-after-disk-full"
exit 1
fi
2018-11-19 19:47:19 +01:00
2023-12-13 16:43:12 +01:00
# check for at least 5mb free /tmp space for the log file
if [ [ "`df --output=" avail" /tmp | sed -n 2p`" -lt "5120" ] ] ; then
echo "Not enough space left on /tmp"
echo "Free up some space first by deleting files from /tmp"
exit 1
fi
}
2019-06-10 09:31:34 -07:00
2023-12-13 16:43:12 +01:00
check_disk_space
2018-11-07 17:37:16 +01:00
2023-12-13 16:58:30 +01:00
args = $( getopt -o "" -l "admin-login,enable-ssh,enable-remote-access,help,owner-login,send-diagnostics" -n " $0 " -- " $@ " )
2023-12-13 16:43:12 +01:00
eval set -- " ${ args } "
2018-11-07 17:37:16 +01:00
2023-12-13 16:43:12 +01:00
while true; do
case " $1 " in
--enable-ssh)
# fall through
; &
--enable-remote-access) enable_remote_access; exit 0; ;
--admin-login)
# fall through
; &
--owner-login) owner_login; exit 0; ;
2023-12-13 16:58:30 +01:00
--send-diagnostics) send_diagnostics; exit 0; ;
2023-12-13 16:43:12 +01:00
--help) break; ;
--) break; ;
*) echo " Unknown option $1 " ; exit 1; ;
esac
done
2019-05-21 09:44:58 -07:00
2023-12-13 16:43:12 +01:00
echo -e " ${ HELP_MESSAGE } "