aboutsummaryrefslogtreecommitdiffstats
path: root/extras
diff options
context:
space:
mode:
authorastokes <astokes@ef72aa8b-4018-0410-8976-d6e080ef94d8>2010-02-17 16:28:17 +0000
committerastokes <astokes@ef72aa8b-4018-0410-8976-d6e080ef94d8>2010-02-17 16:28:17 +0000
commit18191c43943661b2d61b191ea95a9c9351bd465c (patch)
treedd426874c830ec029dbd44eec4e469131d4fadc9 /extras
parent494f1de1db6c29a3f5f6d0e5cabc29b86eaf99e8 (diff)
downloadsos-18191c43943661b2d61b191ea95a9c9351bd465c.tar.gz
- moved 1.9 to trunkr1.9
git-svn-id: svn+ssh://svn.fedorahosted.org/svn/sos/trunk@778 ef72aa8b-4018-0410-8976-d6e080ef94d8
Diffstat (limited to 'extras')
-rwxr-xr-xextras/rh-upload283
-rwxr-xr-xextras/sos-open151
-rwxr-xr-xextras/sysreport/functions132
-rwxr-xr-xextras/sysreport/sysreport-fdisk8
-rwxr-xr-xextras/sysreport/sysreport.legacy766
-rw-r--r--extras/sysreport/text.xsl33
6 files changed, 1373 insertions, 0 deletions
diff --git a/extras/rh-upload b/extras/rh-upload
new file mode 100755
index 00000000..75a86f43
--- /dev/null
+++ b/extras/rh-upload
@@ -0,0 +1,283 @@
+#!/bin/bash
+
+#################################################################################
+# #
+# rh-upload #
+# Version - 0.3 #
+# Copyright (c) 2007 Red Hat, Inc. All rights reserved. #
+# #
+# #
+# Written by David Mair #
+# Cleanup and generalized for any kind of file by Olivier Arsac #
+# Idea stolen from Chris Snook :-) #
+# #
+# Purpose - To help in the automatic upload of files. #
+# Specifically, this script will compress, encrypt, md5sum, #
+# and upload the file automatically when invoked. #
+# Items are optional and specified by command line switch. #
+# ###############################################################################
+
+
+## Global directives
+umask 0077
+
+## Declare some variables
+Date=`/bin/date -u +%G%m%d%k%M%S | /usr/bin/tr -d ' '`
+Destination="dropbox.redhat.com"
+
+function usage {
+cat <<EOF
+rh-upload [-cehnNq] [-s size of hunks in MB] -f filename
+ rh-upload automates the upload of files to the Red Hat ftp.
+ The script helps the user to compress, checksum, encrypt and upload a file.
+ -c|--checksum : perform an md5 checksum on the file
+ -e|--encrypt : encrypt the file
+ -f|--file : file to act on (required)
+ -h|--help : show this usage help
+ -z|--compress : compress the file
+ -n|--noupload : Do NOT upload
+ -q|--quiet : Do everything I ask and do it quietly
+ -s|--split : split file into small hunks
+
+EOF
+}
+
+
+# echo to stderr
+function echoe(){
+ echo -e "$@" 1>&2
+}
+
+# echo unless in verbosity is too low
+function echov(){
+ local level="$1"
+ shift
+ if [[ $Verbose -ge "$level" ]]; then echo -e "$@"; fi
+}
+
+# Parse command line options (and perform some checks)
+function parse(){
+ if [ $# == 0 ]; then
+ usage
+ exit 0
+ fi
+
+ TEMP=`getopt -o heuczqs:f:n --long help,encrypt,quiet,noupload,checksum,compress,split:,file: -n 'rh-upload' -- "$@"`
+
+ if [ $? != 0 ]; then
+ echo "Options error -- Terminating..." >&2
+ usage
+ exit 1
+ fi
+
+ eval set -- "$TEMP"
+ Upload=1
+ Split=0
+ Verbose=1
+ Compress=0
+ Encrypt=0
+ Force=0
+ while true; do
+ case "$1" in
+ -h|--help) usage; exit 0;;
+ -e|--encrypt) Encrypt=1; shift;;
+ -N|--noupload) Upload=0; shift;;
+ -c|--checksum) Checksum=1; shift;;
+ -q|--quiet) Verbose=0; shift;;
+ -z|--compress) Compress=1; shift;;
+ -s|--split)
+ case $2 in
+ "") echoe "You must specify a hunk size."; exit 1 ;;
+ *) Split=$2; shift 2;;
+ esac ;;
+ -F|--force) Force=1; shift;;
+ -f|--file)
+ case "$2" in
+ "") echoe "You must specify a file name."; exit 1 ;;
+ *) File=$2; shift 2;;
+ esac ;;
+ --) shift; break ;;
+ *) echoe "Wrong options or flag specified"; usage; exit 1;;
+ esac
+ done
+
+ # Ensure the -f||--file flag was passed or die
+ if [ -z "$File" ]; then
+ echoe "The -f or --file flag is required! Terminating."
+ usage
+ exit 1
+ fi
+
+ # Validate the file exists or die
+ if [ ! -f "$File" ]; then
+ echoe "Invalid filename or file not found. Terminating."
+ exit 1
+ fi
+ File_dirname=${File%/*}
+ File_basename=${File##*/}
+ File_ext=${File_basename##*.}
+ Src_file="$File"
+ Dst_file="$File_basename"
+}
+
+function ticket(){
+ echov 1
+ echov 1 "We'll need to use your issue-tracker ticket number for a couple of things."
+ echo -n "Please enter ticket number: "
+ read Ticket_number
+ Dst_file="${Ticket_number}-${Date}-${File_basename}"
+}
+
+# Compress the file
+function compress(){
+ if [ "$Compress" != 0 ]; then
+ echov 1 "Starting file compression. This may take some time."
+ # Begin compression of file
+ if [ ! -x /usr/bin/gzip ]; then
+ echoe "Cannot find gzip in /usr/bin/. Terminating."
+ exit 1
+ else
+ /usr/bin/gzip --fast "$Src_file"
+ fi
+ Src_file="${Src_file}.gz"
+ Dst_file="${Dst_file}.gz"
+ fi
+}
+
+# Encrypt the file
+function encrypt(){
+ if [ "$Encrypt" != 0 ]; then
+ echov 1 "Encrypting file. This should only take a few minutes."
+ if [ ! -x /usr/bin/openssl ]; then
+ echoe "Cannot find openssl in /usr/bin. Terminating."
+ exit 1
+ fi
+ # Use the ticket number as the ssl keyfile name
+ Key_file="${Ticket_number}-${Date}.key"
+ /usr/bin/openssl rand -out "$Key_file" -base64 48
+ echov 1 "You have chosen to encrypt your file. Your passkey file is: $Key_file"
+ echov 1 "Please attach this key to your ticket."
+ /usr/bin/openssl aes-128-cbc -in $Src_file -out $Src_file.aes -pass file:"$Key_file"
+ Src_file="$Src_file.aes"
+ Dst_file="$Dst_file.aes"
+ fi
+}
+
+function checksum(){
+ if [ "$Checksum" != 0 ]; then
+ echov 1 "Cheksuming $Src_file... (This should only take a few minutes)"
+ if [ ! -x /usr/bin/md5sum ]; then
+ echoe "Cannot find md5sum in /usr/bin. Terminating."
+ exit 1
+ fi
+ MD5_file="${Ticket_number}-${Date}-checksum.out"
+ MD5_result=`/usr/bin/md5sum "$Src_file" | awk '{print $1}'`
+ echo "$MD5_result" > "$MD5_file"
+ echov 1 "The MD5 checksum is $MD5_result (in $MD5_file)."
+ fi
+}
+
+function split(){
+ if [ "$Split" -eq 0 ]; then
+ return
+ fi
+ local hunk_size="$Split"
+ if [[ "$hunk_size" -gt 0 ]] && [[ "$hunk_size" -lt 1001 ]]; then
+ if [ ! -x /usr/bin/split ]; then
+ echoe "Cannot find split in /usr/bin. Terminating."
+ exit 1
+ fi
+ Split_dir="${Ticket_number}-${Date}"
+ # We need to make a directory to keep things sane
+ echov 1 "Creating directory $Split_dir to house file hunks..."
+ /bin/mkdir "$Split_dir"
+ echov 1 "Splitting $Src_file..."
+ /usr/bin/split -b "$hunk_size"m -d "$Src_file" "${Split_dir}/${Dst_file}"
+ else
+ echoe "Invalid hunk size argument. Please enter a number greater than 0 and less than 1001. Terminating."
+ exit 1
+ fi
+}
+
+function upload(){
+ if [ "$Upload" -eq 0 ]; then
+ echov 1 "All file operations are complete. The file(s) is ready to upload at your convenience."
+ return
+ fi
+ echov 1 "The file(s) will now be uploaded."
+ echo -n "Please enter the destination host (default is $Destination): "
+ local destination_input
+ read destination_input
+ if [ "$destination_input" != "" ]; then
+ Destination=$destination_input
+ fi
+ echov 1
+ echov 1 "Uploading to $Destination... (This could take quite a while)."
+ if [ ! -x /usr/bin/lftp ]; then
+ # No lftp installed
+ echov 1 "lftp could not be found in /usr/bin. The file(s) will need to be uploaded manually."
+ Ftp_res=255
+ else
+ # Make the lftp script first
+ local script="/tmp/rh-upload-lftp.$$"
+ echo "lftp $Destination <<EOF" > $script
+ echo "cd incoming" >> $script
+ if [ "$Split" != 0 ]; then
+ echo "lcd $Split_dir" >> $script
+ echo "mirror -R" >> $script
+ else
+ echo "put $Src_file -o $Dst_file" >> $script
+ fi
+ echo "exit" >> $script
+ echo "EOF" >> $script
+ /usr/bin/lftp -f $script
+ Ftp_res=$?
+ fi
+}
+
+function closure(){
+ if [ "$Encrypt" != 0 ]; then
+ echov 1 "## File was encrypted with key $Key_file."
+ echov 1 "Please upload this key file to Issue Tracker or send it to your support representative for decryption after upload."
+ fi
+
+ if [ "$Checksum" != 0 ]; then
+ echov 1 "## A checksum was performed on your file."
+ echov 1 "The MD5 checksum is $MD5_result (in $MD5_file)."
+ echov 1 "Please include this when updating your ticket so your support representative can verify the copy uploaded."
+ fi
+
+ if [ "$Split" != 0 ]; then
+ echov 1 "## Your file was split and the hunks are in: $Split_dir/ "
+ fi
+
+ if [ -n "$Ftp_res" ] && [ "$Ftp_res" -eq 0 ]; then
+ echov 1 "This script has completed successfully the upload."
+ if [ "$Compress" != 0 ] || [ "$Split" != 0 ]; then
+ echov 1 "You performed file encryption and/or file splitting."
+ echov 1 "You may consider removing those temporary files."
+ fi
+ else
+ echoe "Sorry unable to upload the files to $Destination. You may want to retry or do it manually."
+ fi
+
+ if [ "$Compress" != 0 ]; then
+ echov 1 "It is NOT recommended to remove the gzipped copy of the file."
+ echov 1 "This is the only remaining copy of the file on your system."
+ echov 1 "It is recommended to retain the file until your support representative indicates that the problem has been identified and/or resolved."
+ fi
+}
+
+function main(){
+ # Run through the functions
+ parse $@
+ ticket
+ compress
+ encrypt
+ checksum
+ split
+ upload
+ closure
+}
+
+main $@
diff --git a/extras/sos-open b/extras/sos-open
new file mode 100755
index 00000000..ffc9f051
--- /dev/null
+++ b/extras/sos-open
@@ -0,0 +1,151 @@
+#!/usr/bin/python
+
+import os, commands, getopt, sys, tarfile
+
+# FILES NEEDED BY CHECKSYSREPORT: /etc/redhat-release /etc/sysconfig/rhn/up2date rpm-Va installed-rpms uname lsmod
+
+CONFIG = {}
+report_dirs = []
+
+CONFIG["outdir"] = "/tmp/sysreports"
+CONFIG["extract_reports"] = []
+CONFIG["spawn_terminal"] = False
+if not sys.stdin.isatty(): CONFIG["spawn_terminal"] = True
+else: CONFIG["spawn_terminal"] = False
+
+def cat(fname):
+ try:
+ fp = open(fname,"r")
+ print fp.read()
+ fp.close()
+ except: pass
+
+try:
+ opts, args = getopt.getopt(sys.argv[1:], "hi:w:vxf", ["help", "input="])
+except getopt.GetoptError:
+ # print help information and exit:
+ usage()
+ sys.exit(2)
+
+for o, a in opts:
+ if o == "-v":
+ verbose = True
+ if o == "-f":
+ CONFIG["spawn_terminal"] = False
+ if o == "-x":
+ CONFIG["spawn_terminal"] = True
+ sys.argv[sys.argv.index("-x")] = "-f"
+ if o in ("-h", "--help"):
+ usage()
+ sys.exit()
+ if o in ("-d"):
+ CONFIG["outdir"] = a
+ if o in ("-w"):
+ a = os.path.abspath(a)
+ try: os.stat(a)
+ except: print "ERROR: could not open", a
+ else: report_dirs.append(a)
+
+ if o in ("-i"):
+ a = os.path.abspath(a)
+ try: os.stat(a)
+ except: print "ERROR: could not open", a
+
+if CONFIG["spawn_terminal"]:
+ print "spawning new terminal"
+ sys.argv[0] = os.path.abspath(sys.argv[0])
+ os.system("gnome-terminal -e '%s'" % (' '.join(sys.argv)))
+ sys.exit()
+
+CONFIG["extract_reports"] = [os.path.abspath(a) for a in args]
+
+if not os.path.isdir(CONFIG["outdir"]):
+ if not os.path.exists(CONFIG["outdir"]):
+ exit("ERROR: working directory path exists but it's not a directory")
+ else:
+ try: os.mkdir(CONFIG["outdir"])
+ except: exit("ERROR: could not create working directory")
+
+try: os.chdir(CONFIG["outdir"])
+except: exit("ERROR: could not chdir into working directory, please check permissions")
+
+for report in CONFIG["extract_reports"]:
+ report_ext = report.rsplit(".",1)[-1]
+
+ if report_ext == "gpg":
+ clear_fname = os.path.join(CONFIG["outdir"],os.path.basename(report.rsplit(".",1)[0]))
+ status, output = commands.getstatusoutput("gpg --output %s %s" % (clear_fname,report))
+ if status:
+ sys.exit("ERROR: could not decrypt using gpg" + output )
+ report = clear_fname
+ report_ext = clear_fname.rsplit(".",1)[-1]
+ del clear_fname
+
+ outdir = None
+ tar = tarfile.open(report, "r")
+ for tarinfo in tar:
+ if tarinfo.isdir(): outdir = tarinfo.name ; break
+ tar.close()
+
+ if not outdir:
+ print("INFO: archive doesn't appear to be either a sysreport or sosreport")
+ cddir = os.path.basename(report)
+ for sout in [ ".tar.gz", ".tgz", ".tar.bz2" ]:
+ if cddir.endswith(sout): cddir = cddir[:-len(sout)]
+ cddir = os.path.abspath(os.path.join(CONFIG["outdir"],"extract_" + cddir))
+ outdir = cddir
+ else:
+ cddir = CONFIG["outdir"]
+ outdir = os.path.abspath(os.path.join(CONFIG["outdir"], outdir))
+
+ extract = True
+ if os.path.isdir(outdir):
+ extract = False
+ yorno = False
+ print "This report already seems to have been extracted in:"
+ print " " + outdir
+ print
+ while yorno not in ['y','n']: yorno = raw_input("Do you want to replace it with a fresh copy ? (y/n) ").lower()
+ if yorno == 'y':
+ print "Deleting previous copy..."
+ os.system("chmod -R u+rw %s" % outdir)
+ os.system("rm -rf %s" % outdir)
+ extract = True
+
+ if extract:
+ print "Extracting..."
+ if not os.path.isdir(cddir):
+ os.mkdir(cddir)
+ if report_ext == "bz2":
+ status, output = commands.getstatusoutput("tar xCfj %s %s" % (cddir,report))
+ elif report_ext == "gz" or report_ext == "tgz" :
+ status, output = commands.getstatusoutput("tar xCfz %s %s" % (cddir,report))
+
+ if status:
+ print("ERROR: there was some problem extracting the report (%s)" % report)
+
+ report_dirs.append(os.path.abspath(outdir))
+
+if len(report_dirs) == 1 and os.path.isdir(report_dirs[0]):
+ os.chdir(report_dirs[0])
+
+ if os.path.isfile("sos_reports/diagnose.txt"):
+ print
+ print "Diagnostics messages available:"
+ print
+ fp = open("sos_reports/diagnose.txt","r")
+ for line in fp.readlines():
+ print " " + line.strip("\n")
+ fp.close()
+ print
+
+ report_dirs[0]
+
+ print
+ print "The extracted report is located in: "
+ print " " + report_dirs[0]
+ print "Once finished, press exit to return."
+ print
+ cat("uname")
+ os.system("PS1='[SoS \W]\$ ' HOME='%s' /bin/bash -l" % (report_dirs[0]) )
+ sys.exit(-1)
diff --git a/extras/sysreport/functions b/extras/sysreport/functions
new file mode 100755
index 00000000..fff52ccd
--- /dev/null
+++ b/extras/sysreport/functions
@@ -0,0 +1,132 @@
+#! /bin/sh
+export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
+export LANG=C
+export LC_ALL=C
+export LC_CTYPE=C
+
+log="sysreport.log"
+
+fixupfile() {
+ if [ -f $2 ] ; then
+ /bin/sed -e$1 $2 > $2.newfile
+ /bin/mv $2.newfile $2
+ fi
+ return 0
+}
+
+getpartinfo() {
+ # Get fdisk -l output from all disks/partitionable raid devices from /proc/partitions
+ raiddevs=`/bin/cat /proc/partitions | /bin/egrep -v "^major|^$" | /bin/awk '{print $4}' | /bin/grep \/ | /bin/egrep -v "p[0123456789]$"`
+ disks=`/bin/cat /proc/partitions | /bin/egrep -v "^major|^$" | /bin/awk '{print $4}' | /bin/grep -v / | /bin/egrep -v "[0123456789]$"`
+ echo "fdisk -l output"
+ for d in $raiddevs $disks ; do
+ echo "<---- Disk: /dev/${d} ---->"
+ echo ""
+ /sbin/fdisk -l /dev/${d} 2>&1
+ echo ""
+ echo "<---- END ---->"
+ done
+}
+
+getpciinfo() {
+( echo "lspci"
+ echo
+ /sbin/lspci
+ echo
+ echo "lspci -n"
+ echo
+ /sbin/lspci -n
+ echo
+ echo "lspci -nv"
+ echo
+ /sbin/lspci -nv
+ echo
+ echo "lspci -nvv"
+ echo
+ /sbin/lspci -nvv ) 2>&1
+}
+
+catiffile() {
+ if [ -d $1 ]; then
+ /bin/cp -p -x --parents -R $1 $ROOT 2>>$ROOT/$log
+ find $ROOT/$1 -type b -o -type c | xargs rm -f 2>/dev/null || :
+ echo -n $STATUS
+ echo_success
+ return 1
+ fi
+ if [ -f $1 ]; then
+ /bin/cp -p --parents $1 $ROOT 2>>$ROOT/$log
+ echo -n $STATUS
+ echo_success
+ return 1
+ fi
+
+ return 0
+}
+
+catifexec() {
+ if [ -x $1 ]; then
+ echo -n $STATUS
+ echo "$*" >> $ROOT/`/bin/basename $1`
+ $* >> $ROOT/`/bin/basename $1` 2>&1
+ echo_success
+ return 1
+ fi
+ return 0
+}
+
+# The following was borrowed from the Red Hat 6.x init scripts function
+# to aid in letting the user know the application was still working.
+#
+# Get a sane screen width
+[ -z "$COLUMNS" ] && COLUMNS=80
+
+# Read in our configuration
+if [ -z "$BOOTUP" ]; then
+ if [ -f /etc/sysconfig/init ]; then
+ . /etc/sysconfig/init
+ else
+ # This all seem confusing? Look in /etc/sysconfig/init,
+ # or in /usr/doc/initscripts-*/sysconfig.txt
+ BOOTUP=color
+ RES_COL=60
+ MOVE_TO_COL="echo -en \\033[300C\\033[$[${COLUMNS}-${RES_COL}]D"
+ SETCOLOR_SUCCESS="echo -en \\033[1;32m"
+ SETCOLOR_FAILURE="echo -en \\033[1;31m"
+ SETCOLOR_WARNING="echo -en \\033[1;33m"
+ SETCOLOR_NORMAL="echo -en \\033[0;39m"
+ LOGLEVEL=1
+ fi
+fi
+
+echo_success() {
+ [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+ echo -n "[ "
+ [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
+ echo -n "OK"
+ [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+ echo " ]"
+ return 0
+}
+
+echo_failure() {
+ [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+ echo -n "["
+ [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
+ echo -n "FAILED"
+ [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+ echo "]"
+ return 1
+}
+
+echo_passed() {
+ [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+ echo -n "["
+ [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
+ echo -n "PASSED"
+ [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+ echo "]"
+ return 1
+}
+
+
diff --git a/extras/sysreport/sysreport-fdisk b/extras/sysreport/sysreport-fdisk
new file mode 100755
index 00000000..451cb535
--- /dev/null
+++ b/extras/sysreport/sysreport-fdisk
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+/sbin/fdisk -l /dev/hd[a-g]
+/sbin/fdisk -l /dev/sd[a-p]
+/sbin/fdisk -l /dev/md[0-9] /dev/md[1][0-5]
+for i in `/bin/ls /dev/rd/ | /bin/grep -v p[0-9]`; do
+ /sbin/fdisk -l /dev/rd/"$i" 2>&1
+done
diff --git a/extras/sysreport/sysreport.legacy b/extras/sysreport/sysreport.legacy
new file mode 100755
index 00000000..043ba026
--- /dev/null
+++ b/extras/sysreport/sysreport.legacy
@@ -0,0 +1,766 @@
+#! /bin/bash
+#
+# System Report
+# Copyright (c) 1999-2006 Red Hat, Inc. All rights reserved.
+#
+# Written by:
+# Wil Harris <wil@redhat.com>
+# Peter Jones <pjones@redhat.com>
+# Preston Brown <pbrown@redhat.com>
+# Than Ngo <than@redhat.com>
+
+umask 0077
+UTILDIR=/usr/share/sysreport
+VER=`/bin/uname -r`
+PATH=""
+PROGNAME="sysreport"
+DATE=`/bin/date -u +%G%m%d%k%M%S | /usr/bin/tr -d ' '`
+
+function usage {
+ echo "Sysreport is a utility that gathers information about a system's"
+ echo "hardware and configuration. The information can then be used for"
+ echo "diagnostic purposes and debugging. Sysreport is commonly used to help"
+ echo "support technicians and developers by providing a "snapshot" of a"
+ echo "system's current layout."
+ echo
+ echo "Usage: sysreport [OPTION]"
+ echo " -help : show help"
+ echo " -norpm : omit collecting information about currently installed packages"
+ echo " -dmidecode: enable dmidecode, getting information about the hardware"
+ echo " -firewall : collecting the system firewall rules"
+ echo " -home : place sysreport outputs within home directory"
+ echo " -usesysrq : collecting information about sysrq-trigger"
+ echo
+ exit 0
+}
+
+[ $# -lt 6 ] || usage
+for i
+do
+ case "$i" in
+ -help) usage;;
+ -norpm) NORPM=yes;;
+ -dmidecode) DMIDECODE=yes;;
+ -firewall) FIREWALL=yes;;
+ -home) HOMEDIR=yes;;
+ -sysrq) SYSRQ_TRIGGER=yes;;
+ -usesysrq) SYSRQ_TRIGGER=yes;;
+ *) usage;;
+ esac
+done
+
+if [ -f $UTILDIR/functions ]; then
+ . $UTILDIR/functions
+else
+ echo "Sysreport is not properly installed"
+ exit 1
+fi
+if [ $UID != 0 ]; then
+ echo "You must be root to use this utility"
+ exit 1
+fi
+
+if [ "$HOMEDIR" = yes ] ; then
+ TEMPDIR=$HOME
+ ROOT=$HOME/sysreport-$DATE
+ /bin/mkdir $ROOT >& /dev/null
+else
+ TEMPDIR=/tmp
+ ROOT=`/bin/mktemp -dq /tmp/sysreport.XXXXXXXX`
+fi
+if [ $? != 0 ] ; then
+ echo "Cannot make temp dir"
+ exit 1
+fi
+
+trap "{ rm -rf $ROOT ; exit ; }" EXIT
+
+if [ -f /etc/fedora-release ] ; then
+ release_name="Fedora Core"
+else
+ release_name="Red Hat Linux"
+fi
+
+echo
+echo "This utility will go through and collect some detailed information "
+echo "about the hardware and setup of your $release_name system."
+echo "This information will be used to diagnose problems with your system"
+echo "and will be considered confidential information. Red Hat will use"
+echo "this information for diagnostic purposes ONLY. "
+echo
+echo "Please wait while we collect information about your system."
+echo
+echo "This process may take a while to complete...."
+echo "No changes will be made to your system during this process."
+echo
+echo "NOTE: You can safely ignore a failed message. This only means a file"
+echo "we were checking for did not exist."
+echo
+echo "If your system hangs while gathering rpm information, please abort"
+echo "the script with CTRL-C and run it again after adding -norpm to the"
+echo "sysreport command line"
+echo
+echo "Press ENTER to continue, or CTRL-C to quit."
+read IGNORE
+
+echo
+echo "Getting system configuration information."
+echo
+STATUS="Determining $release_name version:"
+catiffile "/etc/redhat-release"
+
+STATUS="Determinding your current hostname: "
+catifexec "/bin/hostname"
+
+STATUS="Getting the date:"
+catifexec "/bin/date"
+
+STATUS="Checking your systems current uptime and load average:"
+catifexec "/usr/bin/uptime"
+
+STATUS="Checking available memory:"
+catifexec "/usr/bin/free"
+
+STATUS="Checking free disk space:"
+catifexec "/bin/df" "-al"
+
+STATUS="Checking currently running processes:"
+catifexec "/bin/ps" "-e -o euser,pid,ppid,tty,%cpu,%mem,rss,vsz,start_time,time,state,wchan,cmd"
+
+STATUS="Checking current process tree:"
+catifexec "/usr/bin/pstree"
+
+STATUS="Collecting information about ld.so.conf:"
+catiffile "/etc/ld.so.conf"
+
+STATUS="Collecting information about ld.so.conf.d:"
+catiffile "/etc/ld.so.conf.d"
+
+STATUS="Collecting IPC-related information:"
+catifexec "/usr/bin/ipcs" "-a"
+
+STATUS="Collecting information about chkconfig --list:"
+catifexec "/sbin/chkconfig" "--list"
+
+STATUS="Collecting information about /etc/rc.d:"
+catiffile "/etc/rc.d"
+/bin/ls /etc/rc.d/rc*.d/ > $ROOT/etc/rc.d/ls-output
+
+if [ -x /usr/sbin/lsof ] ; then
+ STATUS="Lists information about files opened (lsof)"
+ catifexec "/usr/sbin/lsof" "-b +M -n -l"
+fi
+
+STATUS="Collecting interprocess communication facilities status"
+catifexec "/usr/bin/ipcs" "-u"
+catifexec "/usr/bin/ipcs" "-l"
+
+# check to see if we want to run rpm, under some circumstances
+# rpm can hang and never complete
+# yes, command line parsing needs some work
+if [ "$NORPM" != "yes" ]; then
+ echo "Collecting information about currently installed packages:"
+ echo -n "This may take several minutes...."
+ /bin/rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}-%{ARCH}\n" > $ROOT/installed-rpms
+ /bin/rpm -Va > $ROOT/rpm-Va 2>&1
+ echo_success
+fi
+
+STATUS="Getting bootloader information:"
+/bin/ls -alR /boot > $ROOT/ls-boot 2>&1
+
+# This covers sparc, alpha, and intel (respectively)
+# updated for grub -mpg
+if [ -f /etc/silo.conf ]; then
+ STATUS="Collecting information about the boot process (silo):"
+ catiffile "/etc/silo.conf"
+fi
+if [ -f /etc/milo.conf ]; then
+ STATUS="Collecting information about the boot process (milo):"
+ catiffile "/etc/milo.conf"
+fi
+if [ -f /etc/lilo.conf ]; then
+ STATUS="Collecting information about the boot process (lilo):"
+ catiffile "/etc/lilo.conf"
+ catifexec "/sbin/lilo" "-q"
+fi
+if [ -d /boot/grub -a -f /boot/grub/grub.conf -a -f /boot/grub/device.map ]; then
+ STATUS="Collecting information about the boot process (grub.conf):"
+ catiffile "/boot/grub/grub.conf"
+ STATUS="Collecting information about the boot process (grub.map):"
+ catiffile "/boot/grub/device.map"
+fi
+if [ -f /etc/cluster.conf -o -f /etc/cluster.xml -o -f /etc/cluster/cluster.conf ] ; then
+ STATUS="Gathering information on cluster setup"
+ # 2.1 AS
+ if [ -f /etc/cluster.conf ] ; then
+ catiffile "/etc/cluster.conf"
+ fi
+ # Taroon
+ if [ -f /etc/cluster.xml ] ; then
+ catiffile "/etc/cluster.xml"
+ fi
+ # RHEL4
+ if [ -d /etc/cluster ]; then
+ catiffile "/etc/cluster"
+ fi
+fi
+STATUS="Collecting init configuration:"
+catiffile "/etc/inittab"
+
+STATUS="Collecting information about X:"
+catiffile "/etc/X11"
+
+STATUS="Gathering sysctl information (/proc/sys):"
+catifexec "/sbin/sysctl" "-a"
+STATUS="Gathering sysctl information (/etc/sysctl.conf):"
+catiffile "/etc/sysctl.conf"
+
+for x in `/bin/ls -d /etc/cron*` ; do
+ STATUS="Collecting information about cron ($(/bin/basename $x)):"
+ catiffile "$x"
+done
+
+STATUS="Gathering Syslog config information:"
+catiffile "/etc/syslog.conf"
+
+STATUS="Gathering ntp configuration (/etc/ntp.conf):"
+catiffile "/etc/ntp.conf"
+STATUS="Gathering ntp configuration (/etc/ntp/step-tickers):"
+catiffile "/etc/ntp/step-tickers"
+STATUS="Gathering ntp configuration (/etc/ntp/ntpservers):"
+catiffile "/etc/ntp/ntpservers"
+
+STATUS="Gathering IP information (/sbin/ifconfig):"
+catifexec "/sbin/ifconfig" "-a"
+
+STATUS="Checking network routes:"
+catifexec "/sbin/route" "-n"
+
+STATUS="Collecting Name Service Switch config information:"
+catiffile "/etc/nsswitch.conf"
+STATUS="Collecting NIS client information:"
+catiffile "/etc/yp.conf"
+
+STATUS="Collecting system configuration information:"
+catiffile "/etc/sysconfig"
+fixupfile 's/\(.*Password=\)\(.*\)/\1********/' $ROOT/etc/sysconfig/rhn/up2date
+
+STATUS="Collecting information about system authentication (pam):"
+catiffile "/etc/pam.d"
+
+echo
+echo "Getting information about the kernel."
+echo
+STATUS="Getting kernel version:"
+catifexec "/bin/uname" "-a"
+STATUS="Checking module information:"
+catifexec "/sbin/lsmod"
+for x in $(/sbin/lsmod | /bin/cut -f1 -d" " 2>/dev/null | /bin/grep -v Module 2>/dev/null ) ; do
+ STATUS="Checking module information $x:"
+ catifexec "/sbin/modinfo" "$x"
+done
+
+STATUS="Currently getting ksysms information:"
+catifexec "/sbin/ksyms"
+
+STATUS="Gathering information about your filesystems:"
+catiffile "/proc/filesystems"
+
+STATUS="Gathering information about your system stat:"
+catiffile "/proc/stat"
+
+STATUS="Gathering information about your partitions:"
+catiffile "/proc/partitions"
+
+STATUS="Gathering information about your ksysms:"
+catiffile "/proc/ksyms"
+
+STATUS="Gathering information about slabinfo:"
+catiffile "/proc/slabinfo"
+
+# Added support to cover for the new modules.conf layout in Red Hat 7
+STATUS="Collecting information regarding kernel modules"
+catiffile "/lib/modules/$VER/modules.dep"
+if [ -f /etc/conf.modules ]; then
+ STATUS="Collecting information regarding kernel modules (conf.modules)"
+ catiffile "/etc/conf.modules"
+fi
+if [ -f /etc/modules.conf ]; then
+ STATUS="Collecting information regarding kernel modules (modules.conf)"
+ catiffile "/etc/modules.conf"
+fi
+if [ -f /etc/modprobe.conf ]; then
+ STATUS="Collecting information regarding kernel modules (modeprobe.conf)"
+ catiffile "/etc/modprobe.conf"
+fi
+
+if [ "$DMIDECODE" == "yes" ] ; then
+ echo "Getting information about the hardware."
+ echo
+ if [ -x /usr/sbin/dmidecode ] ; then
+ STATUS="Gathering DMI information:"
+ catifexec "/usr/sbin/dmidecode"
+ fi
+fi
+
+# dkms status
+STATUS="Gathering current status of modules, versions and kernels (dkms):"
+if [ -x /usr/sbin/dkms ] ; then
+ catifexec "/usr/sbin/dkms" "status"
+fi
+
+if [ -f /etc/sysconfig/isdncard ] ; then
+ STATUS="Gathering information about ISDN:"
+ catiffile "/etc/sysconfig/isdncard"
+fi
+
+STATUS="Collecting information from the proc directory:"
+catiffile "/proc/pci"
+
+STATUS="Getting kernel command line"
+catiffile "/proc/cmdline"
+
+STATUS="Gathering information about your CPU:"
+catiffile "/proc/cpuinfo"
+
+STATUS="Gathering information about your Ram:"
+catiffile "/proc/meminfo"
+
+STATUS="Gathering information about your ioports:"
+catiffile "/proc/ioports"
+
+STATUS="Gathering information about your interrupts:"
+catiffile "/proc/interrupts"
+
+STATUS="Gathering information about your scsi devices:"
+catiffile "/proc/scsi"
+
+STATUS="Gathering information about your dma:"
+catiffile "/proc/dma"
+
+STATUS="Gathering information about your devices (/proc/devices):"
+catiffile "/proc/devices"
+
+STATUS="Gathering information about your rtc:"
+catiffile "/proc/rtc"
+
+STATUS="Gathering information about your ide drivers:"
+catiffile "/proc/ide"
+
+STATUS="Gathering information about your bus:"
+getpciinfo > $ROOT/lspci
+catiffile "/proc/bus"
+
+STATUS="Gathering info on udev configuration:"
+catiffile "/etc/udev"
+
+echo
+echo "Getting disk and filesystem information."
+echo
+
+STATUS="Collecting information from /etc/fstab:"
+catiffile "/etc/fstab"
+
+STATUS="Collecting disk partition information:"
+PATH=/bin getpartinfo > $ROOT/fdisk-l
+
+STATUS="Checking mounted file systems (mount) "
+catifexec "/bin/mount"
+
+STATUS="Checking mounted file systems (/proc/mounts)"
+catiffile "/proc/mounts"
+
+STATUS="Collecting Software RAID information (/proc/mdstat)"
+catiffile "/proc/mdstat"
+
+STATUS="Collecting Software RAID information (/etc/raidtab)"
+catiffile "/etc/raidtab"
+
+STATUS="Collecting Software RAID information (/etc/mdadm.conf)"
+catiffile "/etc/mdadm.conf"
+
+STATUS="Collecting Software RAID information (mdadm -D /dev/md*)"
+catifexec "/sbin/mdadm" "-D /dev/md*"
+
+STATUS="Collecting Automount information (auto.master)"
+catiffile "/etc/auto.master"
+
+STATUS="Collecting Automount information (auto.misc)"
+catiffile "/etc/auto.misc"
+
+STATUS="Collecting Automount information (auto.net)"
+catiffile "/etc/auto.net"
+
+STATUS="Collecting LVM information:"
+catifexec "/usr/sbin/vgdisplay" "-vv"
+
+STATUS="Gathering LVM setup"
+catiffile "/etc/lvm"
+
+STATUS="Collecting SCSI Tape information (/etc/stinit.def)"
+catiffile "/etc/stinit.def"
+
+if [ -x /sbin/lsusb ] ; then
+ STATUS="Collecting USB devices list (lsusb):"
+ catifexec "/sbin/lsusb"
+fi
+
+if [ -x /usr/bin/lshal ] ; then
+ STATUS="Collecting global devices list (lshal):"
+ catifexec "/usr/bin/lshal"
+fi
+
+echo
+echo "collecting information about commonly used network services"
+echo
+# This covers backwards compatiablity for systems with inetd while keeping
+# support for the new 7.x xinetd
+if [ -f /etc/inetd.conf ]; then
+ STATUS="Collecting information about system services (inetd.conf)"
+ catiffile "/etc/inetd.conf"
+elif [ -f /etc/xinetd.conf ]; then
+ STATUS="Collecting information about system services (xinetd.conf)"
+ catiffile "/etc/xinetd.conf"
+ for x in `/bin/ls -d /etc/xinetd.d/*`; do
+ STATUS="Collecting information about system services ($(/bin/basename $x))"
+ catiffile "$x"
+ done
+fi
+for x in `/bin/ls -d /etc/host*` ; do
+ STATUS="Collecting information from $x:"
+ catiffile "$x"
+done
+
+STATUS="Collecting information about the ftp servers:"
+ftpconfigfiles=`/bin/ls -d /etc/ftp* /etc/vsftpd/* 2>/dev/null`
+for x in $ftpconfigfiles; do
+ STATUS="Collecting information about the ftp servers ($(/bin/basename $x)):"
+ catiffile "$x"
+done
+
+STATUS="Collecting information about ypbind configuration:"
+catiffile "/etc/yp.conf"
+
+if [ "$FIREWALL" == "yes" ]; then
+ KERNELMIN=`/bin/uname -r | /bin/sed -e 's,[^\.]*\.,,' -e 's,\..*,,'`
+ ipchainsmod=`/sbin/lsmod 2>/dev/null| /bin/grep ipchains`
+
+ if [ "$KERNELMIN" -lt 3 ] || [ -n "${ipchainsmod}" ] ; then
+ STATUS="Getting ipchains information:"
+ catifexec "/sbin/ipchains" "-nvL"
+ elif [ "$KERNELMIN" -gt 3 ]; then
+ STATUS="Getting iptables information:"
+ if [ -f /etc/sysconfig/iptables-config ] ; then
+ catiffile "/etc/sysconfig/iptables-config"
+ fi
+ STATUS="Getting iptables information (filter):"
+ catifexec "/sbin/iptables" "-t filter -nvL"
+ STATUS="Getting iptables information (mangle):"
+ catifexec "/sbin/iptables" "-t mangle -nvL"
+ STATUS="Getting iptables information (nat):"
+ catifexec "/sbin/iptables" "-t nat -nvL"
+ fi
+fi
+
+# ldap client and server config
+if [ -f /etc/ldap.conf ] ; then
+ STATUS="Getting LDAP configuration (ldap.conf)"
+ catiffile "/etc/ldap.conf"
+fi
+if [ -d /etc/openldap ] ; then
+ for x in `/bin/ls -d /etc/openldap/*` ; do
+ if [ -f $x ] ; then
+ STATUS="Getting LDAP configuration ($(/bin/basename $x))"
+ catiffile "$x"
+ fi
+ done
+fi
+
+# ssh
+STATUS="Getting ssh configuration (ssh_config)"
+catiffile "/etc/ssh/ssh_config"
+STATUS="Getting sshd configuration (sshd_config)"
+catiffile "/etc/ssh/sshd_config"
+
+# sendmail
+SENDMAIL_CF_FILE=/etc/mail/sendmail.cf
+SENDMAIL_CW_FILE=/etc/mail/sendmail.cw
+
+if [ -f /etc/sendmail.cf ] ; then
+ SENDMAIL_CF_FILE=/etc/sendmail.cf
+fi
+
+if [ -f /etc/sendmail.cw ] ; then
+ SENDMAIL_CW_FILE=/etc/sendmail.cw
+fi
+
+STATUS="Sendmail Configuration ($SENDMAIL_CF_FILE):"
+catiffile "$SENDMAIL_CF_FILE"
+if [ -f $SENDMAIL_CW_FILE ]; then
+ STATUS="Sendmail Machine aliases ($SENDMAIL_CW_FILE):"
+ catiffile "$SENDMAIL_CW_FILE"
+fi
+
+STATUS="Sendmail User aliases (/etc/aliases):"
+catiffile "/etc/aliases"
+
+for f in `/bin/ls -d /etc/mail/* | /bin/grep -v \.db`; do
+ STATUS="Getting files from ($(/bin/basename $f))"
+ catiffile $f
+done
+
+STATUS="Collecting Postfix Configuration (main.cf)"
+catiffile "/etc/postfix/main.cf"
+
+STATUS="Collecting Postfix Configuration (master.cf)"
+catiffile "/etc/postfix/master.cf"
+
+STATUS="Collecting exim configuration directory"
+catiffile "/etc/exim"
+
+STATUS="Collecting host resolution information"
+catiffile "/etc/resolv.conf"
+
+# Make sure we have support for both versions of bind
+if [ -f /etc/named.boot ]; then
+ STATUS="Collecting information about the nameserver (named.boot)"
+ catiffile "/etc/named.boot"
+elif [ -f /etc/named.conf ]; then
+ STATUS="Collecting information about the nameserver (named.conf)"
+ catiffile "/etc/named.conf"
+fi
+
+DNSDIR=""
+if [ -f /etc/named.conf ]; then
+ DNSDIR=$(/bin/grep -i directory /etc/named.conf |/bin/gawk '{ print $2 ;}'|\
+ /bin/sed s/\"//g|/bin/sed s/\;//g)
+elif [ -f /etc/named.boot ]; then
+ DNSDIR=$(/bin/grep -i directory /etc/named.boot|/bin/gawk '{ print $2 ;}')
+fi
+
+if [ -n "$DNSDIR" -a -d "$DNSDIR" ]; then
+ STATUS="Collecting information about the nameserver ($DNSDIR)"
+ catiffile "$DNSDIR"
+fi
+
+if [ -f /etc/exports ] ; then
+ STATUS="Collecting information about the NFS:"
+ catiffile "/etc/exports"
+fi
+
+SAMBADIR="/etc/samba"
+if [ -d $SAMBADIR ]; then
+ STATUS="Getting samba informations ($SAMBADIR)"
+ for x in `/bin/ls -d $SAMBADIR/* | grep -vE 'smbpasswd|secrets\.tdb|\.bak|\.rpmnew'` ; do
+ STATUS="Getting samba informations ($(/bin/basename $x))"
+ catiffile "$x"
+ done
+ /bin/ls -alR $SAMBADIR > $ROOT/ls-samba 2>&1
+ if [ -x /usr/bin/wbinfo ] ; then
+ STATUS="Getting samba informations (wbinfo -g):"
+ catifexec "/usr/bin/wbinfo" "-g"
+ STATUS="Getting samba informations (wbinfo -u):"
+ catifexec "/usr/bin/wbinfo" "-u"
+ fi
+fi
+
+STATUS="Getting /etc/securetty"
+catiffile "/etc/securetty"
+
+STATUS="Getting /etc/shells"
+catiffile "/etc/shells"
+
+STATUS="Getting ulimit info"
+catiffile "/etc/security/limits.conf"
+
+STATUS="Getting nscd configuration"
+catiffile "/etc/nscd.conf"
+
+STATUS="Getting Kerberos informations (/etc/krb5.conf)"
+catiffile "/etc/krb5.conf"
+
+STATUS="Getting Kerberos informations (/etc/krb.conf)"
+catiffile "/etc/krb.conf"
+
+STATUS="Getting Kerberos informations (/etc/krb.realms)"
+catiffile "/etc/krb.realms"
+
+STATUS="Getting information about apache"
+catiffile "/etc/httpd/conf/httpd.conf"
+
+for x in `/bin/ls -d /etc/httpd/conf.d/*.conf 2>/dev/null` ; do
+ STATUS="Getting information about apache ($(/bin/basename $x))"
+ catiffile "$x"
+done
+
+STATUS="Getting information about squid"
+catiffile "/etc/squid/squid.conf"
+
+STATUS="Getting information about CUPS"
+for x in `/bin/ls -d /etc/cups/*.conf 2>/dev/null` ; do
+ STATUS="Getting information about CUPS ($x)"
+ catiffile "$x"
+done
+
+echo
+echo "Gathering information from system logs"
+echo
+STATUS="Collecting information from dmesg:"
+catiffile "/var/log/dmesg"
+
+if [ "$SYSRQ_TRIGGER" == "yes" ]; then
+ STATUS="Collecting information from /proc/sysrq-trigger"
+ if [ -f /proc/sysrq-trigger -a -f /proc/sys/kernel/sysrq ] ; then
+ sysr_state="$(/bin/cat /proc/sys/kernel/sysrq)"
+ echo 1 > /proc/sys/kernel/sysrq
+ for key in m p t ; do
+ echo $key > /proc/sysrq-trigger
+ done
+ echo $sysr_state > /proc/sys/kernel/sysrq
+ fi
+fi
+
+for x in `/bin/ls /var/log/messages*` ; do
+ STATUS="Collecting messages files ($x)"
+ catiffile "$x"
+done
+for x in `/bin/ls /var/log/maillog*` ; do
+ STATUS="Collecting maillog files ($x)"
+ catiffile "$x"
+done
+
+
+STATUS="Collecting information (/var/log/sa)"
+catiffile "/var/log/sa"
+
+for x in `/bin/ls -d /var/log/Xorg.*.log /var/log/XFree86.*.log 2>/dev/null` ; do
+ STATUS="Collecting X logs ($x)"
+ catiffile "$x"
+done
+
+STATUS="Collecting information (/var/log/rpmpkgs)"
+catiffile "/var/log/rpmpkgs"
+
+STATUS="Collecting information (/var/log/boot.log)"
+catiffile "/var/log/boot.log"
+
+STATUS="Collecting information (/var/log/up2date)"
+catiffile "/var/log/up2date"
+
+STATUS="Collecting information (/var/log/secure)"
+catiffile "/var/log/secure"
+
+STATUS="Collecting log files from Apache"
+catiffile "/var/log/httpd"
+
+STATUS="Collecting log files from RHN"
+if `/bin/ls /var/log/rhn* >& /dev/null` ; then
+ catiffile "/var/log/rhn*"
+fi
+
+# General monitoring moc logs
+if [ -d /opt/notification ] ; then
+ for x in `/bin/ls -d /opt/notification/var/*.log* 2>/dev/null` ; do
+ STATUS="Collecting monitoring moc logs ($(/bin/basename $x))"
+ catiffile "$x"
+ done
+ for x in `/bin/ls -d /var/tmp/ack_handler.log* 2>/dev/null` ; do
+ STATUS="Collecting monitoring moc logs ($(/bin/basename $x))"
+ catiffile "$x"
+ done
+ for x in `/bin/ls -d /var/tmp/enqueue.log* 2>/dev/null` ; do
+ STATUS="Collecting monitoring moc logs ($(/bin/basename $x))"
+ catiffile "$x"
+ done
+fi
+
+# monitoring scout logs
+if [ -d /home/nocpulse/var ] ; then
+ for x in `/bin/ls -d /home/nocpulse/var/*.log* 2>/dev/null` ; do
+ STATUS="Collecting monitoring scout logs ($(/bin/basename $x))"
+ catiffile "$x"
+ done
+ for x in `/bin/ls -d /home/nocpulse/var/commands/*.log* 2>/dev/null` ; do
+ STATUS="Collecting monitoring scout logs ($(/bin/basename $x))"
+ catiffile "$x"
+ done
+fi
+
+/bin/echo
+/bin/echo "Getting information about RHN"
+/bin/echo
+RHNDIR=/etc/sysconfig/rhn
+/bin/mkdir -p $ROOT/$RHNDIR 2>/dev/null
+catiffile "/etc/rhn"
+if [ -f $RHNDIR/systemid ] ; then
+ echo -n "Gathering systemid information:"
+ if [ -x /usr/bin/xsltproc ] ; then
+ /usr/bin/xsltproc $UTILDIR/text.xsl $RHNDIR/systemid > $ROOT/$RHNDIR/systemid 2>/dev/null
+ echo_success
+ else
+ catiffile "$RHNDIR/systemid"
+ fi
+fi
+
+# Get hardware profile information (for verification with system state and RHN)
+if [ -x /usr/share/rhn/up2date_client/hardware.py ] ; then
+ STATUS="Gathering RHN hardware profile information"
+ catifexec /usr/share/rhn/up2date_client/hardware.py
+fi
+if [ -x /usr/bin/rhn-schema-version ] ; then
+ STATUS="Gathering schema version"
+ catifexec "/usr/bin/rhn-schema-version"
+fi
+if [ -x /usr/bin/rhn-charsets ] ; then
+ STATUS="Gathering database charactersets"
+ catifexec "/usr/bin/rhn-charsets"
+fi
+
+# Get SELinux information
+echo
+echo "Gathering information on SELinux setup"
+echo
+catifexec "/usr/bin/selinuxconfig"
+catifexec "/usr/sbin/sestatus"
+catifexec "rpm" "-q -V selinux-policy-targeted"
+catifexec "rpm" "-q -V selinux-policy-strict"
+
+cd $TEMPDIR
+/bin/echo
+/bin/echo -n "Please enter your case number (if you have one): "
+
+while read CASENUM
+do
+ case $CASENUM in
+ *[^0-9]*)
+ /bin/echo -e "\nError: Your input contains non-numeric characters!"
+ /bin/echo -e "Please enter your case number (if you have one): "
+ ;;
+ *)
+ break ;;
+ esac
+done
+if [ ! $CASENUM ]; then
+ NAME=$PROGNAME-$HOSTNAME.$DATE
+else
+ NAME="$PROGNAME-$HOSTNAME-$CASENUM.$DATE"
+fi
+/bin/rm -Rf $NAME
+/bin/mv $ROOT $NAME
+/bin/tar Scf $NAME.tar $NAME
+if [ -x /usr/bin/bzip2 ]; then
+ /usr/bin/bzip2 $NAME.tar
+ SUFFIX="tar.bz2"
+else
+ /bin/gzip -9 $NAME.tar
+ SUFFIX="tar.gz"
+fi
+
+/bin/rm -Rf $NAME
+/bin/echo
+/bin/echo "Please send $TEMPDIR/${NAME}.${SUFFIX} to your support"
+/bin/echo "representative."
+/bin/echo
+
+exit 0
diff --git a/extras/sysreport/text.xsl b/extras/sysreport/text.xsl
new file mode 100644
index 00000000..c381b3a8
--- /dev/null
+++ b/extras/sysreport/text.xsl
@@ -0,0 +1,33 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version='1.0'>
+
+<xsl:output method="text" indent="no"/>
+
+<xsl:template match="array">
+ <xsl:text>[</xsl:text>
+ <xsl:for-each select="data/value">
+ <xsl:apply-templates/>
+ <xsl:if test="following-sibling::value">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>]&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="string">
+ <xsl:value-of select="."/>
+</xsl:template>
+
+<xsl:template match="member">
+ <xsl:value-of select="name"/>
+ <xsl:text>: </xsl:text>
+ <xsl:apply-templates select="value"/>
+ <xsl:text>&#10;</xsl:text>
+</xsl:template>
+
+<xsl:template match="/">
+ <xsl:apply-templates select=".//member"/>
+</xsl:template>
+
+</xsl:stylesheet>