Rev 3413 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/bin/bash#set -x## Config#MAILTO=David.Purdie@vixtechnology.com,John.Rowling@vixtechnology.comCCTO=PATH=$HOME/bin:$PATHDPKG=/export/devl/dpkg_archiveRELEASES=/export/devl/releasesBASEDIR=$DPKGMETADIR=.dpkg_archive/pkg_cronOUTDIR=$BASEDIR/$METADIRGFIND=/usr/bin/findGDF=/bin/dfMOUNTS="$DPKG $RELEASES"# Enable null globbing#shopt -s nullglob## Debug Control#DO_VERBOSE=DO_FIND=1DO_MAIL=1DO_NEW=1DO_REMOVED=1DO_FILES=1DO_SCAN=1DATE=YDATE=## Parse user (debug) options#for arg in $* ; docase $arg innomail) DO_MAIL= ;;nofind) DO_FIND= ;;nofiles) DO_FILES= ;;noremoved) DO_REMOVED= ;;nonew) DO_NEW= ;;noscan) DO_SCAN= ;;today=*) DATE=${arg##*=} ;;yesterday=*) YDATE=${arg##*=} ;;mail=*) MAILTO=${arg##*=} ;;verbose) DO_VERBOSE=1 ;;*help) echo "Options: nomail, nofind, nofiles, nonew, noremoved, noscan, today=xxx, yesterday=yyy, mail=zzz verbose"; exit 0 ;;* ) echo "Unknown option $arg"; exit 1 ;;esacdoneif [ $DO_VERBOSE ] ; thenecho "DATE : $DATE";echo "YDATE : $YDATE";echo "MAILTO : $MAILTO";echo "DO_FIND : $DO_FIND";echo "DO_FILES : $DO_FILES";echo "DO_NEW : $DO_NEW";echo "DO_REMOVED : $DO_REMOVED";echo "DO_SCAN : $DO_SCAN";echo "DO_MAIL : $DO_MAIL";fiif [ ! "$DATE" ] ; thenDATE=$(date +%Y-%m-%d)fi## Determine Yesterdays date to locate yesterdays logfile#if [ ! "$YDATE" ] ; thenDAYS=( Sat Sun Mon Tue Wed Thu Fri Sat)MONTHS=( Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)YESTERDAY=$((`date +%e` -1))MONTH=`date +%m`YEAR=`date +%Y`NDAY=`date +%u`WEEKDAY=${DAYS[`date +%u`]}MONTH=${MONTH#0}if [ $YESTERDAY -eq "0" ]thenMONTH=$((MONTH-1))if [ $MONTH -eq "0" ]thenMONTH=12YEAR=$((YEAR-1))fiset `cal $MONTH $YEAR`shift $(($# - 1))YESTERDAY=$1fiTMONTH=${MONTHS[MONTH]}# echo $WEEKDAY $YESTERDAY $MONTH $TMONTH $YEAR#echo $YESTERDAYYDATE=$( printf "%4.4d-%2.2d-%2.2d" $YEAR $MONTH $YESTERDAY )fiLFILE=$OUTDIR/dpkg_archive_list.$DATE.txtLLFILE=$METADIR/dpkg_archive_list.$DATE.txtL2FILE=$METADIR/dpkg_archive_list.$DATE.txtCFILE=$BASEDIR/dpkg_archive_list.txtC2FILE=$OUTDIR/dpkg_archive_list.txtPFILE=$OUTDIR/dpkg_archive_pkg.$DATE.txtYFILE=$OUTDIR/dpkg_archive_pkg.$YDATE.txtif [ "$DO_VERBOSE" ] ; thenecho "PFILE: $PFILE"echo "YFILE: $YFILE"echo "LFILE: $LFILE"fimkdir -p $OUTDIR## Find files# Find packages#if [ "$DO_FIND" ] ; then[ $DO_VERBOSE ] && echo "Finding all packages in the archive"## Determine packages in archive#$GFIND -L $BASEDIR -mindepth=2 -maxdepth 2 -type d > $PFILE## Determine files in the archive# Keep a link to simplify user access to the list#if [ $DO_FILES ] ; then[ $DO_VERBOSE ] && echo "Finding all Files in the archive"$GFIND -L $BASEDIR | sort > $LFILE## Create a link to the current list of all files#rm -f $CFILEln -s $LLFILE $CFILErm -f $C2FILEln -s $L2FILE $C2FILEfifif1=/tmp/$$.file1f2=/tmp/$$.file2f3=/tmp/$$.file3echo >> $f3 "dpkg_archive Report"echo >> $f3 "Yesterday: $YFILE"echo >> $f3 "Today : $PFILE"echo >> $f3 ""$GDF -h $MOUNTS >> $f3## Determine new packages##echo "Yesterday: $YFILE"#echo "Today : $PFILE"if [ -f $YFILE ] ; thenif [ "$DO_NEW" ] ; then[ $DO_VERBOSE ] && echo "Finding new packages in the archive"echo >> $f3 ""echo >> $f3 "New packages added to dpkg_archive"sort $YFILE > $f1sort $PFILE > $f2newp=$( comm -13 $f1 $f2)for file in $newp ; dopname="${file##$BASEDIR/}"pver="${pname##*/}"pname="${pname%%/*}"if [ "$pname" = "$pver" ] ; thenprintf " D%10s %8s %10s %s\n" "-" "NewDir" "-" $filecontinuefibuilt='-'if [ -f $file/descpkg ] ; thenbuilt=$( sed -n '-e/^Released By:/s~.*: *\([-_.0-9a-zA-Z]*\).*~\1~p' '-e/^Built By:/s~.*: *\([-_.0-9a-zA-Z]*\).*~\1~p' < $file/descpkg)fiflag='*'[ "$built" = "buildadm" ] && flag=' 'tag='ManCpy'for ii in $file/built.* ; dotag='Auto'donenote='-'ls 1>/dev/null 2>&1 $file/doc/RELEASE_NOTES_* || note='N'result=$(du -ks $file)printf "%c%c%10s %8s %10s %s\n" "$note" "$flag" "$built" "$tag" $resultdone >> $f3fiif [ "$DO_REMOVED" ] ; then[ $DO_VERBOSE ] && echo "Finding removed packages in the archive"echo >> $f3 ""echo >> $f3 "Removed Package Versions"sort $YFILE > $f1sort $PFILE > $f2remp=$( comm -23 $f1 $f2 )for file in $remp ; dopname="${file##$BASEDIR/}"pver="${pname##*/}"pname="${pname%%/*}"if [ "$pname" != "$pver" ] ; thenprintf " %10s %8s %10s %s\n" "-" "Deleted" "-" $filecontinuefidone >> $f3fi## Broken link report#if [ "$DO_SCAN" ] ; then[ $DO_VERBOSE ] && echo "Broken Link Scan"echo "" >> $f3echo "Dpkg Broken Link Report" >> $f3$GFIND -L $BASEDIR -maxdepth 1 -type l -ls >> $f3# ## # Scan deploy mount for oddities# ## [ $DO_VERBOSE ] && echo "Deploy Mount Point Scan"# echo "" >> $f3# echo "Deploy Mount Point Scan" >> $f3# for pkg in $( $GFIND -L $DEPLOY -maxdepth 1 ) ; do# name=${pkg#$DEPLOY/}## # Skip root of the search# if [ "$name" = "$pkg" ] ; then# continue# fi## # Don't expect files in the deploy mount# if [ -f $pkg ] ; then# echo Suspect file: $pkg# continue# fi## # Don't expect links in the deploy mount# if [ -L $pkg ] ; then# echo Suspect Link: $pkg# fi## if [ ! -d $DPKG/$name ] ; then# echo Missing Link: $pkg# fi# done | sort >> $f3## Scan releases area for broken and funny links#echo "" >> $f3echo "Releases Link Report" >> $f3scan_release.pl $RELEASES >> $f3fi## Mail results#if [ "$DO_MAIL" ] ; then[ $DO_VERBOSE ] && echo "Mailing Results"echo "Mailing results"(cat $f3) | mail_files.ksh -t ${MAILTO} ${CCTO} -s "[dpkg_archive] $DATE Archive Report from $HOSTNAME" #-b $f3elsecat $f3fielseecho "Yesterdays package file not found"echo "Yesterday: $YFILE"echo "Today : $PFILE"fi## Clean up#rm -f /tmp/$$.file*## Remove old copies of files#$GFIND $OUTDIR -type f -mtime +100 -exec rm -f {} \;