#!/bin/bash # tracklist version 0.2 # Gilbert Ashley # tracklist logs commands using installwatch # and then produces a FILELIST of files and # directories created by the command. # This was a really fast hack, but amazingly useful. # It parses the installwatch log differently than # the src2pkg routine. tracklist lists only the # files and directories created, but not links (so far). CWD=`pwd` # don't use this # BACKUPS_SAVE_DIRECTORY=$CWD KEEP_INSTALL_LIST="YES" # ANSI COLORS CRE="" NORMAL="" # RED: Failure or error message RED="" # GREEN: Success message GREEN="" # YELLOW: Warnings YELLOW="" # BLUE: Summary messages BLUE="" # CYAN: Current Process CYAN="" if [[ $1 ]] && [[ $2 ]] ; then INSTALL_COMMAND=$1 shift INSTALL_RULE="$@" else echo "We need 2 args!" fi echo $BLUE"Now Running 'installwatch $INSTALL_COMMAND $INSTALL_RULE'"$NORMAL BACKUP_DIRECTORY=$CWD/trackit-backup unset INSTALLWATCH_BACKUP_PATH export INSTALLWATCH_BACKUP_PATH=$BACKUP_DIRECTORY export LD_PRELOAD=/usr/libexec/src2pkg/installwatch.so cd $CWD; ( /usr/libexec/src2pkg/installwatch -o ~/FILELIST.tmp $INSTALL_COMMAND $INSTALL_RULE ); # &> /dev/null # echo $? ## 2 this routine ends at the end of the function if [[ $? != 0 ]] ; then # make install itself returned an error echo $RED"FATAL! "$NORMAL"Running '$INSTALL_COMMAND $INSTALL_RULE' has failed with errors. "$RED"Exiting..."$NORMAL unset INSTALLWATCH_BACKUP_PATH unset LD_PRELOAD rm -rf $BACKUP_DIR/trackit-backup rm -f ~/FILELIST.tmp FAILED="MAKE $INSTALL_COMMAND $INSTALL_RULE" echo $FAILED exit 1 fi sleep 1 cd $HOME if [[ `cat ./FILELIST.tmp |grep -v 'FILELIST'` = "" ]] ; then # 'make install' produced no errors but also produced no output unset INSTALLWATCH_BACKUP_PATH unset LD_PRELOAD echo $RED"FATAL! "$NORMAL"Running '$INSTALL_COMMAND $INSTALL_RULE' with installwatch produced no files list. " echo "This may be the result of an empty or faulty install rule. "$RED"Exiting..."$NORMAL rm -rf $BACKUP_DIR/trackit-backup rm -f ./FILELIST.tmp FAILED="NO FILES" else # otherwise, we have files. # unset INSTALLWATCH_BACKUP_PATH # unset LD_PRELOAD echo $BLUE"Tracking "$GREEN"Successful!"$NORMAL echo -n $BLUE"Processing file list..."$NORMAL # extract a list of the regular files cd $HOME cat FILELIST.tmp |grep 'mkdir' |grep -v '#File exists' |cut -f3 > FILELIST cat ~/FILELIST.tmp |grep 'open' |grep '#success' |grep -v '#File exists' |grep -v 'FILELIST*' |grep -v /dev |grep -v /tmp |cut -f3 >> ~/FILELIST rm -f ~/FILELIST.tmp for fileordir in `cat ~/FILELIST` ; do [[ -e "$fileordir" ]] && echo $fileordir >> ~/FILELIST.tmp done cat ~/FILELIST.tmp |sort -u | uniq > ~/FILELIST cp -a ~/FILELIST.tmp $CWD/FILELIST rm -f ~/FILELIST.tmp rm -f ~/FILELIST echo $GREEN"Done!"$NORMAL unset INSTALLWATCH_BACKUP_PATH unset LD_PRELOAD fi # This is probably not working... since we already unset the INSTALLWATCH_BACKUP_PATH # get back to this later... if [[ $KEEP_BACKUPS = "YES" ]] ; then ! [[ $BACKUPS_SAVE_DIR ]] && BACKUPS_SAVE_DIR="$CWD" ls $BACKUP_DIRECTORY/* &> /dev/null if [[ $? -eq 0 ]] ; then cd $BACKUP_DIRECTORY echo -n $CYAN"Creating backup package..."$NORMAL tar -cpf - . | gzip -9 > "${BACKUPS_SAVE_DIR}/backup-`date +%m%d%Y%H%M`-pre-${SHORT_NAME}.tar.gz" rm -f $CWD/BACKUP.list echo $GREEN"Done!"$NORMAL fi fi if [[ -d $BACKUP_DIR/trackit-backup ]] ; then ls $BACKUP_DIR/trackit-backup/* &> /dev/null if [[ $? -eq 0 ]] ; then echo -n $BLUE"Removing backup files and directory..."$NORMAL else echo -n $BLUE"Removing unused backup directory..."$NORMAL fi rm -rf $BACKUP_DIR/trackit-backup 2> /dev/null 1> /dev/null echo $GREEN"Done!"$NORMAL fi # ! [[ $KEEP_INSTALL_LIST = "YES" ]] && rm -f $CWD/FILELIST rm -rf $BACKUP_DIRECTORY # this fi comes from the top...