2007-09-23 03:16:28 +02:00
|
|
|
#!/bin/sh
|
|
|
|
#
|
2008-02-13 16:08:45 +01:00
|
|
|
# Original version 2005 by loki der quaeler
|
|
|
|
# Copyright 2007-2008 Andrew Lewman
|
|
|
|
# This is licensed under a Modified BSD license.
|
2007-09-23 03:16:28 +02:00
|
|
|
|
|
|
|
|
|
|
|
### this is the location of a file which contains all the actual package names
|
|
|
|
## (ie "Polipo", "polipostartup", ...) the list should be new-line-delimited.
|
|
|
|
PACKAGE_LIST_SRC="Polipo polipostartup"
|
|
|
|
|
|
|
|
### this is the name of the user created in the install process of Polipo
|
|
|
|
POLIPO_USER=_polipo
|
|
|
|
|
|
|
|
### these should be constant across all osX installs (so leave them be)
|
|
|
|
STARTUP_ITEMS_DIR=/Library/StartupItems
|
|
|
|
PKG_RCPT_BASE_DIR=/Library/Receipts
|
|
|
|
BOM_INTERMEDIATE_DIR=Contents/Resources
|
|
|
|
INFO_INTERMEDIATE_DIR=$BOM_INTERMEDIATE_DIR/English.lproj
|
|
|
|
TEMP_BOM_CONTENTS=/tmp/polipo_uninst_scratch
|
|
|
|
|
|
|
|
|
|
|
|
### make sure the script is being run as root, barf if not
|
|
|
|
if [ "`whoami`" != "root" ]; then
|
|
|
|
echo "Must be root to run the uninstall script."
|
|
|
|
exit -1
|
|
|
|
fi
|
|
|
|
|
|
|
|
### check to see if polipo is currently running, kill it if it is
|
|
|
|
## we grep on 'Polipo/polipo ' because 'polipo' is too common (like in 'direcpolipoy')
|
|
|
|
## -- this relies on the fact that polipo has been started with command
|
|
|
|
## line arguments.. :-/
|
|
|
|
POLIPO_PID=`ps -uax | grep 'Polipo/polipo ' | grep -v grep | awk '{print $2;}'`
|
|
|
|
if [ ${#POLIPO_PID} -gt 0 ]; then
|
|
|
|
echo ". Killing currently running polipo process, pid is $POLIPO_PID"
|
|
|
|
kill -9 $POLIPO_PID
|
|
|
|
else
|
|
|
|
echo ". polipo process appears to already be stopped"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
## grab each package name from the package list file
|
|
|
|
while read LINE; do
|
|
|
|
if [ ${#LINE} -gt 0 ]; then
|
|
|
|
PACKAGE_NAME=$LINE.pkg
|
|
|
|
PACKAGE_PATH=$PKG_RCPT_BASE_DIR/$PACKAGE_NAME
|
|
|
|
echo ". Uninstalling $PACKAGE_NAME"
|
|
|
|
if [ ! -d $PACKAGE_PATH ]; then
|
|
|
|
echo " . No receipt exists for this package -- skipping."
|
|
|
|
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
## get rid of the startup item if it exists
|
|
|
|
STARTUP_DIR=$STARTUP_ITEMS_DIR/$LINE
|
|
|
|
if [ -d $STARTUP_DIR ]; then
|
|
|
|
echo " . Deleting startup item $STARTUP_DIR"
|
|
|
|
rm -rf $STARTUP_DIR
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
## determine the root direcpolipoy of the the relative paths specified in the bom
|
|
|
|
DEFAULT_LOC=`grep DefaultLocation $PACKAGE_PATH/$INFO_INTERMEDIATE_DIR/$LINE.info | awk '{print $2;}'`
|
|
|
|
if [ ${#DEFAULT_LOC} -eq 0 ]; then
|
|
|
|
echo "!! Could not find default location for $LINE package -- skipping package."
|
|
|
|
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
## examine the list of installed items desribed in the bom
|
|
|
|
BOM_FILE=$PACKAGE_PATH/$BOM_INTERMEDIATE_DIR/$LINE.bom
|
|
|
|
lsbom $BOM_FILE > $TEMP_BOM_CONTENTS
|
|
|
|
while read BOM_ITEM; do
|
|
|
|
## 3 column items describe just direcpolipoies, 5 column items describe actual files
|
|
|
|
COL_COUNT=$(echo $BOM_ITEM | awk '{print NF;}')
|
|
|
|
if [ "$COL_COUNT" -eq 5 ]; then
|
|
|
|
FILE_NAME=$DEFAULT_LOC/$(echo $BOM_ITEM | awk '{print $1;}')
|
|
|
|
|
|
|
|
echo " . Removing $FILE_NAME"
|
|
|
|
rm -rf $FILE_NAME
|
|
|
|
fi
|
|
|
|
done < $TEMP_BOM_CONTENTS
|
|
|
|
|
|
|
|
## remove package receipt
|
|
|
|
echo " . Removing package receipt $PACKAGE_PATH"
|
|
|
|
rm -rf $PACKAGE_PATH
|
|
|
|
fi
|
|
|
|
done < $PACKAGE_LIST_SRC
|
|
|
|
|
|
|
|
## nuke the user created by the install process.
|
|
|
|
echo ". Removing created user $POLIPO_USER"
|
|
|
|
niutil -destroy . /users/$POLIPO_USER
|
|
|
|
|
|
|
|
## clean up
|
|
|
|
echo ". Cleaning up"
|
|
|
|
rm -rf $TEMP_BOM_CONTENTS
|
|
|
|
rm -rf /Library/Polipo/ /Library/StartupItems/Polipo/
|
|
|
|
echo ". Finished"
|
|
|
|
|