#!/bin/sh # # MegaGlest System Report # # Examines the Linux operating environment of a MegaGlest installation and # dumps this information into REPORT_LOCATION for support purposes. # # ----------------------------------------------------------------------------- # # Written by Tom Reynolds <tomreyn[at]megaglest.org> # Copyright (c) 2012-2017 Tom Reynolds, The MegaGlest Team, under GNU GPL v3.0 # # ----------------------------------------------------------------------------- # # Configuration section # Location to write report to #REPORT_LOCATION= # MegaGlest installation directory, see --help #INSTALLATION_LOCATION= # Make user press Enter to exit #PAUSE=1 # End of configuration section # # ----------------------------------------------------------------------------- # LANG=C VERSION='0.3.5' MYNAME="$(basename "$0")" DEFAULT_REPORT_FILENAME="system_report.log" KERNEL="$(uname -s | tr '[A-Z]' '[a-z]')" if [ "$KERNEL" = "darwin" ]; then Exec_1="MegaGlest.sh"; Exec_2="MegaGlest" Default_location="/Applications/MegaGlest.app/Contents/MacOS" else Exec_1="start_megaglest"; Exec_2="megaglest" Default_location=~/"megaglest" fi if [ "$KERNEL" = "linux" ] || [ "$(echo "$(readlink -f "$0" >/dev/null 2>&1; echo $?)" | grep '^[0-9]$')" -eq "0" ]; then SCRIPTDIR="$(dirname "$(readlink -f "$0")")" else SCRIPTDIR="$(cd "$(dirname "$0")"; pwd)" fi if [ "$1" = "-v" ] || [ "$1" = "--version" ]; then echo "MegaGlest System Report $VERSION"; echo; exit 0; fi if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then echo "Usage:" echo " $MYNAME <OPTION>" echo " $MYNAME [INSTALLATION LOCATION]" echo echo "Available options:" echo " --version output version information and exit" echo " --help display this help and exit" echo echo "INSTALLATION LOCATION is an optional argument which specifies the MegaGlest" echo "installation directory, containing the '$Exec_2' wrapper script." echo; exit 0 fi if [ "$1" != "" ]; then INSTALLATION_LOCATION="$1"; INSTALLATION_LOCATION_TYPE="arg" elif [ "$INSTALLATION_LOCATION" != "" ]; then INSTALLATION_LOCATION_TYPE="var" elif [ -d "$Default_location" ]; then INSTALLATION_LOCATION="$Default_location" INSTALLATION_LOCATION_TYPE="def" elif [ "$(which "$Exec_2" 2>/dev/null)" != "" ]; then INSTALLATION_LOCATION="$(dirname "$(which "$Exec_2")")"; INSTALLATION_LOCATION_TYPE="def2" else INSTALLATION_LOCATION=""; fi if [ "$INSTALLATION_LOCATION_TYPE" = "def2" ]; then Executable="$Exec_2" elif [ -f "$INSTALLATION_LOCATION/$Exec_1" ]; then Executable="$Exec_1" elif [ -f "$INSTALLATION_LOCATION/$Exec_2" ]; then Executable="$Exec_2" else Executable=""; fi common_info () { echo >&2 echo "Please specify the directory you installed to (which must contain the" >&2 echo "'$Exec_2' file) as first parameter to this script, e.g.:" >&2 echo " $MYNAME /home/user/MegaGlest-3" >&2 echo >&2 echo "You may try to use the following commands to locate it:" >&2 echo " locate -b $Exec_2" >&2 echo " find -type f -name $Exec_2 ~/" >&2 echo " sudo find -type f -name $Exec_2 /" >&2 echo >&2 echo "Please be aware that this script is written to work with installations created" >&2 echo "using the installation instructions on https://megaglest.org. It may or may not" >&2 echo "work with variants of MegaGlest which were packaged by your Linux distribution." >&2 echo >&2; exit 1 } if ( [ "$INSTALLATION_LOCATION_TYPE" = "def" ] || [ "$INSTALLATION_LOCATION_TYPE" = "def2" ] ) && \ [ "$Executable" != "" ]; then echo "WARNING: Using automatically selected installation directory '$INSTALLATION_LOCATION/'" >&2 echo " This is usually what you want. To manually specify it, see --help." >&2 elif ( [ "$INSTALLATION_LOCATION_TYPE" = "def" ] && [ "$Executable" = "" ] ) || \ [ "$INSTALLATION_LOCATION" = "" ]; then echo "ERROR: Unable to determine MegaGlest installation location." >&2 echo >&2 common_info elif ( [ "$INSTALLATION_LOCATION_TYPE" = "var" ] || [ "$INSTALLATION_LOCATION_TYPE" = "arg" ] ) && \ [ "$Executable" = "" ]; then echo "ERROR: The INSTALLATION_LOCATION you provided is unusable:" >&2 echo " $INSTALLATION_LOCATION" >&2 common_info fi if [ "$REPORT_LOCATION" = "" ]; then REPORT_LOCATION="$SCRIPTDIR/$DEFAULT_REPORT_FILENAME"; fi if [ "$PAUSE" = "" ]; then PAUSE=1; fi # Check whether report file is writable rm -f "$REPORT_LOCATION" touch "$REPORT_LOCATION" >/dev/null 2>&1 if [ "$?" -ne "0" ]; then # Unable to write report file rm -f "/tmp/$DEFAULT_REPORT_FILENAME" touch "/tmp/$DEFAULT_REPORT_FILENAME" >/dev/null 2>&1 if [ "$?" -ne "0" ]; then # Unable to write to backup report file location echo "ERROR: Unable to write to either $REPORT_LOCATION or /tmp/$DEFAULT_REPORT_FILENAME" >&2 echo " Please edit this script and set REPORT_LOCATION to a writable location." >&2 echo >&2 rm -f "$REPORT_LOCATION" exit 1 else # Writing to backup report file location succeeded echo "WARNING: Unable to write to $REPORT_LOCATION." >&2 echo " It will be writen to '/tmp/$DEFAULT_REPORT_FILENAME' (which is writable) instead." >&2 echo >&2 REPORT_LOCATION="/tmp/$DEFAULT_REPORT_FILENAME" fi fi rm -f "$REPORT_LOCATION" el_in_report () { i=0; if [ "$1" = "" ] || [ "$1" -eq "0" ]; then rep_l=1; else rep_l="$1"; fi while [ "$i" -le "$rep_l" ]; do echo >> "$REPORT_LOCATION"; sleep 0.1s i="$(( i + 1 ))" done } # Start gathering information, writing it to REPORT_LOCATION cat <<'EOF' a. __,. ._a,, v .. =ma; <wVUXSc<ZA2YS> j[ _a2` :. .]W#=; ]ZgQ#Zq2Xmmmmmoc .. jX( _ss,%_wXZ' _a, i _u)W#>> =ZmWXY!3Qm$Z13WQo,.adUXXS3;uASoZXXnnSauudZXSn. +;. _=%|IcWWmm; 3qQEe .nQBd` 1dQZsdSmmmqmnZqmBW#BWomwwwwwmX8I 3, ._iii=<in3WWm' .S**X( .n?S2 <2TCXSUXZS1SXXXGZ"?nnXXZd8X3Ev+` -h, s,. .=v+||1+<nmo$m# :n|<#; n|ve :z+{2|vmaaonSi)d` _nn(d1{d{c|v. ]kdmms=>Iv=|lnwZ!` ?[ .1+<X; 3|ve :2|ve|voonvnS>Ie<dX13ak>{SXs=n. 4WP4k;<<vsuw2!` vaaX; .nsvo )c<oc|3m#ZmI2><XSd#c|1e|iaao|v. _)Qswpc=vomY^ {dWp( nmp2 dqm21q2o="vn2vudXZ!{ivv%3mXo>v: ._|||3mBmo%Z"` =v$SowwommXwwSmX()3Q2oaZm3zWmoouGmEvQv~)Sm{> .=||||=)Qr]Ze .X2SomqqmQWmgwmXX( {dQmqmUn+3WQgqmBmnAouXdWon` ._||||++=+imom#' )u####ZZZZZZ###X( -{X##Zsn;~3Z##XXXoZdGZ###p_=|||++++<vnn$mWe X?"^- . -~"Y' -~~ {v> -""YXm#mZ3d!"|||||=+|+<unv" )#. :n( -"{Sd'=||i|==+|sun}^ -m: {z _#Z|ii|====iao1o( X; =o .jZ||>==+<vu21oZP ]; _;<i,_______us, v. _=v#(+=<adS2nouZSd` )( _2 3vn22121211v; +; ._|iid+==wX1Isi%|lno' ._ .( .d( 3viillIlll|i` |=|ii|||=<dnlvXZZZc|nSisuS( _i,_d1=_XzSSXX1|IXo%. ._|iii|=+|iumSmZX!~^!1%onvnun` _dS111nIdY111124v|v]qo. .=iii|==+|voX*Zmm1e 2{XZd#ve _UqwZmgpvnZXXwoi]nwi:~~ ._|iii|++|iuS2"`:XUDv` _i2{+33E| .ZqSoX1XCvBsoXX1>]nmv. _=iii||+|<voS*~ )ei|v.<dS11vaoIl% ]21vosvXlvSlvvon=]nXl. _|ili||||iuS2!` :1||{dSwXS%|iXi|c ]1+|Iliiina|||iIn]1|v. .=illi||||soSe^ .v||)odS??1||vi|i .di|3XX#Si3dGoa%|{]o|{. .=ili||||vuX2!- _wc|ine. :o%|vs|s_j2%|)e""X|vv*YSX|<voi{: _<vIl|||ivoXe^ _wmX{oqo2nuZSoudvsISnvn%iIss2%n%n=aCcino|{= _|iI||||iaoX}~ .aZ!` -XXWmwwwmUoXdmmmm1nXmqonqevqonnwooZnou1. .||ii|||vuSe"` :>~ -?X#ZZZX2{o#XXXXv;?X#UAX1vXZUXS2!oXXXv. =l||||<uoX}~ -""""- :Y""~]Xq; -"!!^nv>!!?"`-Y""!! =l||iaoX2"` )o; .=iiau2*"` :2= =+|""-- v> <( s <. - S Y S T E M R E P O R T - -; : EOF echo ' v'"$VERSION"'' echo '' echo '________________________________________________________________________________' echo '' echo ' Collecting information on this computer and MegaGlest.' echo '' echo ' Please stand by...' echo '________________________________________________________________________________' echo '' echo '' echo '--------------------------------------------------------------------------------' >> $REPORT_LOCATION echo ' MEGAGLEST SYSTEM REPORT '"$VERSION" >> $REPORT_LOCATION echo ' '"`date -Ru`" >> $REPORT_LOCATION echo '--------------------------------------------------------------------------------' >> $REPORT_LOCATION echo ' → Operating system' el_in_report 2 echo '***** Operating system *********************************************************' >> $REPORT_LOCATION el_in_report if [ "$(which lsb_release 2>/dev/null)" = "" ]; then lsb=0 release='unknown release' if [ -e "/etc/os-release" ]; then distribution="$(cat "/etc/os-release" | grep '^ID=' | awk -F '=' '{print $2}' \ | awk '{print toupper(substr($0,1,1))substr($0,2)}')" codename="$(cat "/etc/os-release" | grep '^PRETTY_NAME=' | awk -F '"' '{print $2}')" elif [ -e /etc/debian_version ]; then distribution='Debian'; codename="$(cat /etc/debian_version)" elif [ -e /etc/SuSE-release ]; then distribution='SuSE'; codename="$(cat /etc/SuSE-release)" elif [ -e /etc/redhat-release ]; then if [ -e /etc/fedora-release ]; then distribution='Fedora'; codename="$(cat /etc/fedora-release)" else distribution='Redhat'; codename="$(cat /etc/redhat-release)"; fi elif [ -e /etc/fedora-release ]; then distribution='Fedora'; codename="$(cat /etc/fedora-release)" elif [ -e /etc/mandrake-release ]; then distribution='Mandrake'; codename="$(cat /etc/mandrake-release)" else distribution='unknown distribution'; codename='unknown codename'; fi else lsb=1 distribution=`lsb_release -i | awk -F':' '{ gsub(/^[ \t]*/,"",$2); print $2 }'` release=`lsb_release -r | awk -F':' '{ gsub(/^[ \t]*/,"",$2); print $2 }'` codename=`lsb_release -c | awk -F':' '{ gsub(/^[ \t]*/,"",$2); print $2 }'` fi if [ "$KERNEL" = "darwin" ]; then distribution="$(sw_vers -productName)"; release="$(sw_vers -productVersion)" fi architecture=`uname -m` echo '* Distribution: '"$distribution" >> $REPORT_LOCATION echo '* Release: '"$release" >> $REPORT_LOCATION echo '* Codename: '"$codename" >> $REPORT_LOCATION echo '* Architecture: '"$architecture" >> $REPORT_LOCATION echo '* LSB support: '"$lsb" >> $REPORT_LOCATION el_in_report echo '>>> uname -a' >> $REPORT_LOCATION uname -a >> $REPORT_LOCATION 2>&1 sleep 1 el_in_report echo '>>> cat /etc/issue' >> $REPORT_LOCATION cat /etc/issue >> $REPORT_LOCATION 2>&1 sleep 1 echo ' → MegaGlest version' el_in_report 2 echo '***** MegaGlest version ********************************************************' >> $REPORT_LOCATION el_in_report echo ">>> INSTALLATION_LOCATION ($INSTALLATION_LOCATION_TYPE): [$INSTALLATION_LOCATION/]." >> $REPORT_LOCATION ERROR_RUNNING_MEGAGLEST=0 MG_error_check () { if [ "$1" -eq "0" ]; then ERROR_RUNNING_MEGAGLEST=0 else ERROR_RUNNING_MEGAGLEST=1; fi sleep 1 } if [ "$ERROR_RUNNING_MEGAGLEST" -eq "0" ]; then echo ' (MegaGlest will be launched, but should quit automatically.)' el_in_report echo ">>> ./$Executable --use-language=en --version" >> $REPORT_LOCATION "$INSTALLATION_LOCATION/$Executable" --use-language=en --version >> $REPORT_LOCATION 2>&1 MG_error_check "$?" else echo 'WARNING: A previous run of MegaGlest failed. Skipping test.' >&2 echo ">>> SKIPPED: ./$Executable --use-language=en --version" >> $REPORT_LOCATION fi echo ' → CPU' el_in_report 2 echo '***** CPU **********************************************************************' >> $REPORT_LOCATION el_in_report if [ -e "/proc/cpuinfo" ]; then echo '>>> cat /proc/cpuinfo' >> $REPORT_LOCATION cat /proc/cpuinfo >> $REPORT_LOCATION 2>&1 else echo '>>> sysctl -a | grep machdep.cpu' >> $REPORT_LOCATION sysctl -a | grep machdep.cpu >> $REPORT_LOCATION 2>&1 fi sleep 1 echo ' → Memory' el_in_report 2 echo '***** Memory *******************************************************************' >> $REPORT_LOCATION el_in_report if [ "$(which free 2>/dev/null)" != "" ]; then echo '>>> free -mt' >> $REPORT_LOCATION free -mt >> $REPORT_LOCATION 2>&1 else echo '>>> top -l 1 -s 0 | grep PhysMem' >> $REPORT_LOCATION top -l 1 -s 0 | grep PhysMem >> $REPORT_LOCATION 2>&1 echo '>>> sysctl vm.swapusage' >> $REPORT_LOCATION sysctl vm.swapusage >> $REPORT_LOCATION 2>&1 fi sleep 1 echo ' → MegaGlest configuration' el_in_report 2 echo '***** MegaGlest configuration **************************************************' >> $REPORT_LOCATION el_in_report if [ "$ERROR_RUNNING_MEGAGLEST" -eq "0" ]; then echo ' (MegaGlest will be launched, but should quit automatically.)' echo ">>> ./$Executable --use-language=en --show-ini-settings" >> $REPORT_LOCATION "$INSTALLATION_LOCATION/$Executable" --use-language=en --show-ini-settings >> $REPORT_LOCATION 2>&1 MG_error_check "$?" else echo 'WARNING: A previous run of MegaGlest failed. Skipping test.' echo ">>> SKIPPED: ./$Executable --use-language=en --show-ini-settings" >> $REPORT_LOCATION fi echo ' → Graphics' el_in_report 2 echo '***** Graphics *****************************************************************' >> $REPORT_LOCATION el_in_report if [ "$(which lspci 2>/dev/null)" = "" ]; then echo 'WARNING: "lspci" utility is not available.' >&2 echo ' Consider installing it to provide more useful information on your system.' >&2 echo '' >&2 echo '>>> SKIPPED: lspci -knnv | grep -EA12 '"'"'(VGA|Display)'"'" >> $REPORT_LOCATION if [ "$KERNEL" = "darwin" ]; then echo >&2 echo ">>> ioreg -l | grep PCI" >> $REPORT_LOCATION ioreg -l | grep PCI >> $REPORT_LOCATION 2>&1 fi else # it's available echo ">>> lspci -knnv | grep -EA12 '(VGA|Display)'" >> $REPORT_LOCATION lspci -knnv | grep -EA12 '(VGA|Display)' >> $REPORT_LOCATION 2>&1 fi sleep 1 el_in_report echo '----------------------------------------' >> $REPORT_LOCATION el_in_report if [ "$(which xrandr 2>/dev/null)" = "" ]; then echo 'WARNING: "xrandr" utility is not available.' >&2 echo ' Consider installing it to provide more useful information on your system.' >&2 echo '' >&2 echo '>>> SKIPPED: xrandr' >> $REPORT_LOCATION else # it's available echo ">>> xrandr" >> $REPORT_LOCATION xrandr >> $REPORT_LOCATION 2>&1 fi sleep 1 el_in_report echo '----------------------------------------' >> $REPORT_LOCATION if [ "$ERROR_RUNNING_MEGAGLEST" -eq "0" ]; then echo ' (MegaGlest will be launched, but should quit automatically.)' el_in_report echo ">>> ./$Executable --use-language=en --opengl-info" >> $REPORT_LOCATION "$INSTALLATION_LOCATION/$Executable" --use-language=en --opengl-info >> $REPORT_LOCATION 2>&1 MG_error_check "$?" else echo 'WARNING: A previous run of MegaGlest failed. Skipping test.' >&2 echo ">>> SKIPPED: ./$Executable --use-language=en --opengl-info" >> $REPORT_LOCATION fi el_in_report echo '----------------------------------------' >> $REPORT_LOCATION el_in_report if [ "$(which glxinfo 2>/dev/null)" = "" ]; then echo 'WARNING: "glxinfo" utility is not available.' >&2 echo ' Consider installing it to provide more useful information on your system.' >&2 echo '' >&2 echo '>>> SKIPPED: glxinfo | grep -E '"'"'^(name|display|server|client|GLX|OpenGL)'"'" >> $REPORT_LOCATION else echo ">>> glxinfo | grep -E '^(name|display|server|client|GLX|OpenGL)'" >> $REPORT_LOCATION glxinfo | grep -E '^(name|display|server|client|GLX|OpenGL)' >> $REPORT_LOCATION 2>&1 fi sleep 1 el_in_report echo '--------------------------------------------------------------------------------' >> $REPORT_LOCATION el_in_report echo '' echo ' Processing complete.' echo '________________________________________________________________________________' sleep 1 echo '' echo ' Please find your report in this file:' echo ' '"$REPORT_LOCATION" echo '' echo ' Please post this report to a pastebin such as (one of)' echo ' http://paste.megaglest.org' echo ' http://pastebin.com' echo '' echo ' After posting it there you will be taken to a new Internet address. Please' echo ' take note of this new location/URL/Internet address and make it available to' echo ' the MegaGlest developers. Unless you were instructed to do otherwise, please' echo ' post both the Internet address of where you uploaded to and a verbose' echo ' description of the issues you are experiencing at' echo ' https://forum.megaglest.org' echo '' echo ' Thank you for making it easy for us to assist you,' echo '' echo ' -- The MegaGlest development team' if [ "$PAUSE" -eq "1" ] || [ "$PAUSE" = "true" ]; then echo '________________________________________________________________________________' echo '' echo ' Please read all of the above, then press return to exit.' read input >/dev/null fi