257 lines
6.2 KiB
Bash
257 lines
6.2 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
# Rassemble informations sur le systeme et l'installation ScoDoc pour
|
||
|
# faciliter le support a distance.
|
||
|
#
|
||
|
# Avec option:
|
||
|
# -a : sauve aussi les bases de données
|
||
|
#
|
||
|
DEST_ADDRESS=emmanuel.viennet@univ-paris13.fr
|
||
|
|
||
|
INSTANCE_DIR=/opt/scodoc
|
||
|
|
||
|
TMP=/tmp/scodoc-$(date +%F-%s)
|
||
|
|
||
|
DEPTS_TO_SAVE=""
|
||
|
SAVE_USERS=0
|
||
|
SEND_BY_MAIL=1
|
||
|
|
||
|
# -------------------------------------
|
||
|
# Arguments
|
||
|
# -------------------------------------
|
||
|
|
||
|
function join_by { local IFS="$1"; shift; echo "$*"; }
|
||
|
|
||
|
while getopts ":d:aunh" opt; do
|
||
|
case $opt in
|
||
|
a)
|
||
|
# Liste des noms des departements, a partir des bases SQL SCO*
|
||
|
DEPTS_TO_SAVE=$( (su postgres -c "psql -l") | grep SCO | grep -v SCOUSERS | awk '{ gsub("SCO", "", $1); print $1}' )
|
||
|
SAVE_USERS=1
|
||
|
;;
|
||
|
u)
|
||
|
SAVE_USERS=1
|
||
|
;;
|
||
|
n)
|
||
|
SEND_BY_MAIL=0
|
||
|
;;
|
||
|
d)
|
||
|
DEPTS_TO_SAVE=$( join_by ' ' $DEPTS_TO_SAVE $OPTARG )
|
||
|
;;
|
||
|
h)
|
||
|
echo "Diagnostic installation ScoDoc"
|
||
|
echo "Rassemble informations sur le systeme et l'installation ScoDoc"
|
||
|
echo "Usage: $0 [-h] [-n] [-a] [-u] [-d dept]"
|
||
|
echo " -h cette aide"
|
||
|
echo " -n pas d'envoi par mail"
|
||
|
echo " -a enregistre aussi toutes les bases de donnees"
|
||
|
echo " -u enregistre la base utilisateurs"
|
||
|
echo " -d dept enregistre la base du departement dept"
|
||
|
exit 0
|
||
|
;;
|
||
|
\?)
|
||
|
echo "Invalid option: -$OPTARG" >&2
|
||
|
exit 1
|
||
|
;;
|
||
|
:)
|
||
|
echo "Option -$OPTARG requires an argument." >&2
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
|
||
|
# -------------------------------------
|
||
|
# Configuration
|
||
|
# -------------------------------------
|
||
|
|
||
|
# needed for uuencode
|
||
|
if [ ! -e /usr/bin/uuencode ]
|
||
|
then
|
||
|
apt-get install sharutils
|
||
|
fi
|
||
|
|
||
|
mkdir $TMP
|
||
|
|
||
|
# Files to copy:
|
||
|
FILES="/etc/hosts /etc/debian_version /etc/apt /etc/apache2"
|
||
|
|
||
|
|
||
|
echo "ScoDoc diagnostic: informations about your system will be "
|
||
|
if [ "${SEND_BY_MAIL}" = "1" ]
|
||
|
then
|
||
|
echo "sent to ${DEST_ADDRESS}"
|
||
|
echo -n "and "
|
||
|
fi
|
||
|
echo "left in ${TMP}"
|
||
|
|
||
|
|
||
|
# -------------------------------------
|
||
|
# Logs
|
||
|
# -------------------------------------
|
||
|
|
||
|
copy_log() {
|
||
|
if [ -e $1 ]
|
||
|
then
|
||
|
cp $1 $TMP/scodoc_logs/
|
||
|
fi
|
||
|
}
|
||
|
mkdir $TMP/scodoc_logs/
|
||
|
copy_log /opt/scodoc/instance/log/event.log
|
||
|
copy_log /opt/scodoc/instance/log/event.log.1
|
||
|
copy_log /opt/scodoc/instance/log/notes.log
|
||
|
copy_log /opt/scodoc/instance/log/notes.log.1
|
||
|
|
||
|
|
||
|
# -------------------------------------
|
||
|
# Linux System Configuration
|
||
|
# -------------------------------------
|
||
|
|
||
|
iptables -L > $TMP/iptables.out
|
||
|
ip a > $TMP/ifconfig.out
|
||
|
ps auxww > $TMP/ps.out
|
||
|
df -h > $TMP/df.out
|
||
|
dpkg -l > $TMP/dpkg.lst
|
||
|
|
||
|
(cd /opt/scodoc/instance/Products/ScoDoc; svn status > $TMP/svn.status)
|
||
|
(cd /opt/scodoc/instance/Products/ScoDoc; svn diff > $TMP/svn.diff)
|
||
|
|
||
|
(cd /opt/scodoc/instance/Products/ScoDoc; svnversion > $TMP/svn.version)
|
||
|
ls -laR /opt/scodoc/instance/Products/ScoDoc > $TMP/ls-laR
|
||
|
|
||
|
|
||
|
# -------------------------------------
|
||
|
# Databases configurations
|
||
|
# -------------------------------------
|
||
|
(su postgres -c "psql -l") > "${TMP}/psql-l.out"
|
||
|
for dept in "${INSTANCE_DIR}"/var/scodoc/config/depts/*.cfg
|
||
|
do
|
||
|
cnx=$(cat $dept)
|
||
|
(su postgres -c "echo '\dt' | psql -d $cnx") > "${TMP}/psql-$(basename ${dept%%.*}).out"
|
||
|
done
|
||
|
|
||
|
|
||
|
# -------------------------------------
|
||
|
# Other system configuration files
|
||
|
# -------------------------------------
|
||
|
# copy files:
|
||
|
for f in $FILES
|
||
|
do
|
||
|
cp -R $f $TMP
|
||
|
done
|
||
|
|
||
|
|
||
|
# -------------------------------------
|
||
|
# Optionally save dept(s) database(s)
|
||
|
# -------------------------------------
|
||
|
DEPTS_TO_SAVE=$(echo ${DEPTS_TO_SAVE} | tr ' ' '\n' | sort | uniq)
|
||
|
|
||
|
# Dump database of a dept (eg "RT")
|
||
|
function dump_dept_db {
|
||
|
dept=$1
|
||
|
DB=$2
|
||
|
echo "Dumping database ${DB}..."
|
||
|
mkdir -p "${TMP}/depts/${dept}"
|
||
|
chmod -R a+wr "${TMP}/depts/"
|
||
|
(su postgres -c "pg_dump --create ${DB}") | gzip > "${TMP}/depts/${dept}/${DB}.dump.gz"
|
||
|
# may add archives ? (but probably too big)
|
||
|
}
|
||
|
|
||
|
for dept in ${DEPTS_TO_SAVE}
|
||
|
do
|
||
|
dump_dept_db "${dept}" "SCO${dept}"
|
||
|
done
|
||
|
|
||
|
|
||
|
# -------------------------------------
|
||
|
# Optionally saveUSERS db
|
||
|
# -------------------------------------
|
||
|
if [ "${SAVE_USERS}" = "1" ]
|
||
|
then
|
||
|
dump_dept_db "USERS" "SCOUSERS"
|
||
|
fi
|
||
|
|
||
|
|
||
|
# -------------------------------------
|
||
|
# Archive all stuff to /tmp
|
||
|
# -------------------------------------
|
||
|
|
||
|
tar cfz $TMP.tgz $TMP
|
||
|
|
||
|
echo
|
||
|
echo "Fichier de diagnostic: $TMP.tgz"
|
||
|
echo
|
||
|
|
||
|
# If no mail, stop here
|
||
|
if [ "${SEND_BY_MAIL}" = "0" ]
|
||
|
then
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
# -------------------------------------
|
||
|
# Send by e-mail
|
||
|
# -------------------------------------
|
||
|
|
||
|
|
||
|
# Code below found on http://www.zedwood.com/article/103/bash-send-mail-with-an-attachment
|
||
|
|
||
|
#requires: basename,date,md5sum,sed,sendmail,uuencode
|
||
|
function fappend {
|
||
|
echo "$2">>$1;
|
||
|
}
|
||
|
YYYYMMDD=`date +%Y%m%d`
|
||
|
|
||
|
# CHANGE THESE
|
||
|
TOEMAIL=$DEST_ADDRESS
|
||
|
FREMAIL="scodoc-diagnostic@none.org";
|
||
|
SUBJECT="ScoDoc diagnostic - $YYYYMMDD";
|
||
|
MSGBODY="ScoDoc diagnostic sent by diagnostic.sh";
|
||
|
ATTACHMENT="$TMP.tgz"
|
||
|
MIMETYPE="application/gnutar" #if not sure, use http://www.webmaster-toolkit.com/mime-types.shtml
|
||
|
|
||
|
|
||
|
# DON'T CHANGE ANYTHING BELOW
|
||
|
TMP="/tmp/tmpfil_123"$RANDOM;
|
||
|
BOUNDARY=`date +%s|md5sum`
|
||
|
BOUNDARY=${BOUNDARY:0:32}
|
||
|
FILENAME=`basename $ATTACHMENT`
|
||
|
|
||
|
rm -rf $TMP;
|
||
|
cat $ATTACHMENT|uuencode --base64 $FILENAME>$TMP;
|
||
|
sed -i -e '1,1d' -e '$d' $TMP;#removes first & last lines from $TMP
|
||
|
DATA=`cat $TMP`
|
||
|
|
||
|
rm -rf $TMP;
|
||
|
fappend $TMP "From: $FREMAIL";
|
||
|
fappend $TMP "To: $TOEMAIL";
|
||
|
fappend $TMP "Reply-To: $FREMAIL";
|
||
|
fappend $TMP "Subject: $SUBJECT";
|
||
|
fappend $TMP "Content-Type: multipart/mixed; boundary=\""$BOUNDARY"\"";
|
||
|
fappend $TMP "";
|
||
|
fappend $TMP "This is a MIME formatted message. If you see this text it means that your";
|
||
|
fappend $TMP "email software does not support MIME formatted messages.";
|
||
|
fappend $TMP "";
|
||
|
fappend $TMP "--$BOUNDARY";
|
||
|
fappend $TMP "Content-Type: text/plain; charset=ISO-8859-1; format=flowed";
|
||
|
fappend $TMP "Content-Transfer-Encoding: 7bit";
|
||
|
fappend $TMP "Content-Disposition: inline";
|
||
|
fappend $TMP "";
|
||
|
fappend $TMP "$MSGBODY";
|
||
|
fappend $TMP "";
|
||
|
fappend $TMP "";
|
||
|
fappend $TMP "--$BOUNDARY";
|
||
|
fappend $TMP "Content-Type: $MIMETYPE; name=\"$FILENAME\"";
|
||
|
fappend $TMP "Content-Transfer-Encoding: base64";
|
||
|
fappend $TMP "Content-Disposition: attachment; filename=\"$FILENAME\";";
|
||
|
fappend $TMP "";
|
||
|
fappend $TMP "$DATA";
|
||
|
fappend $TMP "";
|
||
|
fappend $TMP "";
|
||
|
fappend $TMP "--$BOUNDARY--";
|
||
|
fappend $TMP "";
|
||
|
fappend $TMP "";
|
||
|
#cat $TMP>out.txt
|
||
|
cat $TMP|sendmail -t -f none@example.com;
|
||
|
rm $TMP;
|
||
|
|