summaryrefslogblamecommitdiffstats
path: root/core/modules/debug-report-bwlp/data/opt/openslx/bin/debug_report
blob: f228e9c5275f7100f9dc304885050b423022fcdb (plain) (tree)
1
2
3
4
5
6
7
8
9
10


                               


                     

                       

                 
               
                   




                 
                           
 
 




                                                                      
 


                 




                                                                      


















                                                                          







                                                                                                

                        
                                                  










                                                                    



                                           
 


                                                                                  
 

                        

















                                                                                
                                                
                          

                                 
                                       
                                                         
                            
                                                                                      

           
                                                               

                                                          
    
 

           






                                                                               



           

                                                                                   
                                                      
                            
                                                                                                              
                                                                     
                                             
                                               

           

                                                                          


                   
                                                                     





                                                                                       


                                                                                   


                                                  




                                                                                                    
                                                            

           


                                                      


                                                       


                                                                                                            
                                                                                                  



                             
                                                                   
                                               


                                                             


                   



                                                                             




                               
                            







                                                                                  







                                                   






                                                                                                                


                                           
#!/bin/bash
# bash because of {,} expansion

export LANG=C.UTF-8
export LC_ALL=C.UTF-8

TOOLS=(
	"journalctl -a"
	systemctl
	loginctl
	lsiommu
	"lspci -nn"
	lsusb
	lsmod
	mount
	dmesg
	dmidecode
	"slx-brightness -l"
)

URLS="
	https://bwlp-masterserver.ruf.uni-freiburg.de/error_report.php
	http://132.230.8.113/error_report.php
	end
"

localReport=false
errorDesc=

if [ "$UID" != "0" ]; then
	echo "Debug Reports können nur von root versendet werden" >&2
	exit 1
fi

while [ $# -gt 0 ]; do
	case "$1" in
	--local)
		localReport=true
		;;
	--message)
		errorDesc="$2"
		shift
		;;
	esac
	shift
done

if [ -z "$errorDesc" ] && ! [ -t 0 ]; then
	echo "Keine Fehlerbeschreibung angegeben (--message '<ein text>')"
	exit 1
fi

if ! $localReport; then
	for URL in $URLS; do
		if [ "$URL" = "end" ]; then
			echo "Kann den Debug-Report-Server in Freiburg nicht erreichen. :-(" >&2
			exit 1
		fi
		curl -L -H "Expect:" -f -s -S --connect-timeout 5 "$URL" > /dev/null && break
	done
fi

rm -rf /tmp/debug-report
mkdir -p /tmp/debug-report/{static/proc,generated}

if [ ! -d /tmp/debug-report ]; then
	echo "FEHLER: Konnte /tmp/debug-report nicht erstellen!" >&2
	exit 1
fi

if ! cd /tmp/debug-report; then
	echo "Cannot go to /tmp/debug-report"
	exit 1
fi

if [ -n "$errorDesc" ]; then
	printf "%s" "$errorDesc" > err-desc
else
	cat > err-desc <<-HEREEND

	# Bitte hier kurz eine passende Fehlerbeschreibung eingeben, anschließend
	# Strg+O, ENTER, Strg+X, ENTER drücken.
	HEREEND

	nano -w err-desc
fi

if ! grep -vqE '(^$)|(^# )' err-desc; then
	echo "Fehlerberichterstattung aufgrund leerer Beschreibung abgebrochen."
	exit 1
fi

echo -n "Beginne mit dem Erstellen des Fehlerberichts..."

. /opt/openslx/config

echo "TIME INFORMATION (hwclock, date):" > metadata
hwclock >> metadata
date >> metadata
for srv in $SLX_NTP_SERVER 0.de.pool.ntp.org; do
	ntpdate -u -q -p 2 -t 1 "$srv" >> metadata 2> /dev/null && break
done
echo -n "..."

cp /tmp/udhcpclog /opt/openslx/config.tgz.list \
	/etc/resolv.conf \
	/tmp/xsession-log-* \
	/tmp/remote_log_check-* \
	/opt/openslx/pam/slx-ldap.d/* \
	/opt/openslx/vmchooser/config/udhcpd-nat1.conf* \
	static/ 2> /dev/null
sed -r 's/^([^=]*PASS[^=]*)=.*$/\1=<removed>/' "/opt/openslx/config" > "static/config"
echo -n "."

for file in /root/.xsession-errors /home/*/.xsession-errors; do
	[ -f "$file" ] || continue
	cp "$file" "static/${file////_}" #/////////777-7-7
done

echo -n "."

mapfile -t -d '' FILES < <( find /tmp/vmware* /tmp/virt /tmp/vmchooser* \
	-type f \
	\( -name "*.log" -o -name "*.conf" -o -name "*.xml" -o -name "vmx" \) \
	-print0 2> /dev/null )

if (( ${#FILES[@]} > 0 )); then
	tar ckf static/vm-related.tar "${FILES[@]}"
fi

echo -n "."

cp -r /var/log/Xorg.0.lo* \
	/var/log/{auth.log,kdm.log,syslog,messages,user.log,cups,openslx,lightdm} \
	/tmp/x11vnc-log-* /tmp/remote-access-*/*log* \
	static/ 2> /dev/null
cp /proc/{cpu,mem}info /proc/{mtrr,interrupts} /proc/driver/nvidia/{params,registry} static/proc/ 2> /dev/null
cp /run/openslx/*log* /run/openslx/dmsetup.state static/ 2> /dev/null
cp -r /opt/openslx/.mltk static/ 2> /dev/null
cp -r /tmp/bwlp_debug_logs static/ 2> /dev/null
echo -n "."

for tool in "${TOOLS[@]}"; do
	$tool > "generated/${tool%% *}-out" 2> "generated/${tool%% *}-err"
	echo -n "."
done

brctl show > "generated/brctl-show-out" 2> "generated/brctl-show-err"
ip a > "generated/ip-a-out" 2> "generated/ip-a-err"
echo -n "."

systemctl status > "generated/systemctl-status-out" 2> "generated/systemctl-status-err"
echo -n "."

systemd-analyze plot > "generated/systemd-plot.svg" 2> "generated/systemd-plot.err"
echo -n "."

ps auxf > "generated/ps-out" 2> "generated/ps-err"
echo -n "."

for table in filter nat mangle; do
	iptables -t "$table" -L -v -n > "generated/ipt-${table}-out" 2> "generated/ipt-${table}-err"
done
echo -n "."

fdisk -l -u > "generated/fdisk-out" 2> "generated/fdisk-err"
echo -n "."

blkid > "generated/blkid-out" 2> "generated/blkid-err"
echo -n "."

ls -al /dev /dev/disk/* &> "generated/ls-dev-and-disks"
echo -n "."

if [ -z "$DISPLAY" ]; then
	DISPLAY=:0
	XAUTHORITY=$(ps a | grep " $DISPLAY " | grep -o -- '-auth.*$' | grep -m1 -v grep | awk '{print $2}')
	[ -z "$XAUTHORITY" ] && [ -s "/run/lightdm/root/:0" ] && XAUTHORITY="/run/lightdm/root/:0"
fi
if [ -n "$XAUTHORITY" ]; then
	export DISPLAY
	export XAUTHORITY
	if timeout --help 2>&1 | grep -q -F -- '--kill-after'; then
		timeout -k 1 2 xrandr --verbose
	else
		timeout -s 9 3 xrandr --verbose
	fi > "generated/xrandr-out" 2> "generated/xrandr-err"
	echo -n "."
fi

find generated/ -type f -name "*-err" -size 0 -delete > /dev/null 2>/dev/null

echo "..fertig!"

if ! cd /tmp; then
	echo 'cd /tmp failed!?'
	exit 1
fi

rm -f -- error-report.tar.gz

if [ "$localReport" = "true" ]; then
	dirname="debug-report-$(date +"%Y-%m-%d_%H-%M-%S")"
	mv debug-report "$dirname"
	echo "Fehlerbericht wird NICHT versendet und liegt unter: $(pwd)/$dirname"
	exit
fi

echo -n "Packe Fehlerbericht ein..."
if ! tar czf error-report.tar.gz debug-report; then
	echo "Fehler beim Packen des Berichts!" >&2
	exit 1
fi
echo "....fertig!"

echo -n "Lade Fehlerbericht hoch...."
for URL in $URLS; do
	if [ "$URL" = "end" ]; then
		echo "Fehler beim Hochladen des Fehlerberichts :-(" >&2
		exit 1
	fi
	curl -L -H "Expect:" -f -s -S -F "file=@error-report.tar.gz;filename=report" "$URL" > /dev/null && break
done

echo "Fehlerbericht erfolgreich versendet!"