#!/bin/bash # tracklist version 0.3 # 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) 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/bin/installwatch -o ~/FILELIST.tmp $INSTALL_COMMAND $INSTALL_RULE ); ## 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 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 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 rm -rf $BACKUP_DIRECTORY