10139N/A#!/bin/ksh
10139N/A
10139N/A# This version of 'remove-gnome' does not prompt the user when '-q' is
10139N/A# present on the command line. This allows the script to be incorporated into
10139N/A# other scripts.
10139N/A#
10139N/A# Modified by Damien Carbery, 19 May 2003.
10139N/A# -f option added by Laca, 25 Feb 2004
10139N/A# jds support added by Laca, 10 Mar 2004
10139N/A
10139N/APKGRM=/usr/sbin/pkgrm
10139N/APKGINFO=/usr/bin/pkginfo
10139N/AADMIN=/tmp/.pkgrm.$$.admin
10139N/APRODREG_SCRIPT=/tmp/prodreg.$$.sed.tmpl
10139N/A
10139N/APRODREG_SCRIPT_CREATED=no
10139N/ATMP_PRODREG_SCRIPT_CREATED=no
10139N/ATMP_PRODREG_CREATED=no
10139N/AADMIN_CREATED=no
10139N/AMYNAME="$0"
10139N/AMYDIR=`dirname $0`
10139N/AMYDIR=`( cd $MYDIR; /usr/bin/pwd )`
10139N/AMYNAME=$(basename $0)
10139N/AMYARGS="$*"
10139N/AQUIET=0
10139N/AFORCE=0
10139N/ARM_EXTRA_PKGS=1
10139N/A
10139N/A# List of JDS packages without JDS category. Will be removed if specified
10139N/A# category is JDS and the packages are present.
10139N/AEXTRA_PKGS_TO_REMOVE="SUNWmozgm SUNWmoznss SUNWmozpsm SUNWgnome-l10ndocument-ja SUNWgnome-l10nmessages-ja SUNWsogm SUNWsom SUNWsoagm SUNWsoam"
10139N/A
10139N/A
10139N/Ausage () {
10139N/A echo "$0 [-h|--help|-q|--quiet|-f|--force|--version 2.0|1.4|JDS|JDS<n>|-R rootdir]"
10139N/A echo "Remove GNOME packages."
10139N/A echo " -h, --help display this help"
10139N/A echo " --version x remove version x (default: 2.0)"
10139N/A echo " --quiet, -q don't prompt for confirmation before deletion."
10139N/A echo " --force, -f ignore any errors and continue."
10139N/A echo " -R rootdir remove packages from an alternative root directory."
10139N/A echo " --no_extras, -n don't remove extra packages, only jds/gnome ones."
10139N/A exit 1
10139N/A}
10139N/A
10139N/AGNOME_CATEGORY=GNOME2
10139N/AGNOME_VERSION=2.0
10139N/Aversion_opt=2.0
10139N/A# If the script is called 'remove-jds' the category will include all JDS
10139N/A# components.
10139N/Aif [ "x$MYNAME" = xremove-jds ]; then
10139N/A GNOME_CATEGORY="JDSosol,JDS,JDS2,JDS3,JDS3x,JDS4,JDS5,JDS6,JDS7,JDS8,JDS9,APOC,EVO146,EVO25,GLOW,JAI,JAVAAPPS,MUSCLE,FF15,FIREFOX,TB15,"
10139N/A version_opt=jds
10139N/Afi
10139N/A
10139N/Awhile [ $# != 0 ]; do
10139N/A case "$1" in
10139N/A --help | -h )
10139N/A usage
10139N/A ;;
10139N/A --version )
10139N/A shift
10139N/A if [ $# = 0 ]; then
10139N/A echo "Error: argument expected after --version"
10139N/A usage
10139N/A fi
10139N/A case "$1" in
10139N/A 1.4 )
10139N/A GNOME_CATEGORY=GNOME
10139N/A GNOME_VERSION=1.4
10139N/A version_opt=1.4
10139N/A ;;
10139N/A 2.0 )
10139N/A ;;
10139N/A JDS|jds)
10139N/A GNOME_VERSION="2.x (JDS)"
10139N/A GNOME_CATEGORY="JDS,JDS2,JDS3,JDS4,JDS5,JDS6,JDS7,JDS8,JDS9,JDS3x,JDSosol"
10139N/A version_opt=jds
10139N/A ;;
10139N/A JDS[0-9]|jds[0-9])
10139N/A jdsrel=`echo $1 | cut -c4-`
10139N/A GNOME_VERSION="2.x (JDS Release $jdsrel)"
10139N/A GNOME_CATEGORY="JDS$jdsrel"
10139N/A version_opt=$1
10139N/A ;;
10139N/A opensolaris)
10139N/A GNOME_VERSION="OpenSolaris Desktop"
10139N/A GNOME_CATEGORY="JDS3x,JDSosol"
10139N/A version_opt=$1
10139N/A ;;
10139N/A * )
10139N/A echo "Error: version should be one of 1.4, 2.0, opensolaris or JDS"
10139N/A usage
10139N/A ;;
10139N/A esac
10139N/A ;;
10139N/A --quiet | -q )
10139N/A QUIET=1
10139N/A ;;
10139N/A --force | -f )
10139N/A FORCE=1
10139N/A ;;
10139N/A -R )
10139N/A shift
10139N/A ROOTDIR=$1
10139N/A if [ "x$ROOTDIR" = x ]; then
10139N/A echo "Option -R requires an argument"
10139N/A usage
10139N/A fi
10139N/A ;;
10139N/A --no_extras | -n )
10139N/A RM_EXTRA_PKGS=0
10139N/A ;;
10139N/A * )
10139N/A echo "Error: $1: invalid argument"
10139N/A usage
10139N/A ;;
10139N/A esac
10139N/A shift
10139N/Adone
10139N/A
10139N/Abackup () {
10139N/A if [ -e "$1" ]; then
10139N/A backup "$1~"
10139N/A echo "Saving file $1 as $1~"
10139N/A mv "$1" "$1~" || msg_error "Failed to back up file $1"
10139N/A fi
10139N/A}
10139N/A
10139N/Aclean_up () {
10139N/A if [ "x$PRODREG_SCRIPT_CREATED" = xyes ]; then
10139N/A rm -f $PRODREG_SCRIPT
10139N/A fi
10139N/A if [ "x$TMP_PRODREG_SCRIPT_CREATED" = xyes ]; then
10139N/A rm -f $TMP_PRODREG_SCRIPT
10139N/A fi
10139N/A if [ "x$TMP_PRODREG_CREATED" = xyes ]; then
10139N/A rm -f $TMP_PRODREG
10139N/A fi
10139N/A if [ "x$ADMIN_CREATED" = xyes ]; then
10139N/A rm -f $ADMIN
10139N/A fi
10139N/A case "$MYNAME" in
10139N/A /tmp/remove-gnome.copy.* )
10139N/A rm -f $MYNAME
10139N/A ;;
10139N/A esac
10139N/A}
10139N/A
10139N/Aclean_up_and_abort () {
10139N/A clean_up
10139N/A echo "Interrupted."
10139N/A exit 1
10139N/A}
10139N/A
10139N/Amsg_error () {
10139N/A echo $*
10139N/A if [ $FORCE == 0 ]; then
10139N/A echo "Use for -f or --force option to ignore errors."
10139N/A echo "Exiting..."
10139N/A exit 1
10139N/A else
10139N/A WARNINGS=yes
10139N/A fi
10139N/A}
10139N/A
10139N/Amsg_noerror () {
10139N/A echo $*
10139N/A exit 0
10139N/A}
10139N/A
10139N/AWARNINGS=no
10139N/Amsg_warning () {
10139N/A echo $*
10139N/A WARNINGS=yes
10139N/A}
10139N/A
10139N/A/usr/bin/id | /usr/bin/grep '^uid=0(' > /dev/null 2>&1
10139N/AUSER_IS_ROOT=$?
10139N/A
10139N/Aprofiles | fgrep -sx "Software Installation"
10139N/Ahaveinstallprofile=$?
10139N/A
10139N/Aif [ $USER_IS_ROOT != 0 -a $haveinstallprofile != 0 ]; then
10139N/A echo "WARNING: Run this script as root or make sure you have been assigned"
10139N/A echo "the 'Software Installation' profile to be able to uninstall packages."
10139N/A echo "See the user_attr(4) and profiles(1) man pages for more details"
10139N/Afi
10139N/A
10139N/Aif [ $FORCE -gt 0 ]; then
10139N/A trap clean_up_and_abort HUP INT TERM
10139N/Aelse
10139N/A trap clean_up_and_abort HUP INT TERM ERR
10139N/Afi
10139N/A
10139N/Atrap clean_up QUIT EXIT
10139N/A
10139N/Acase "$MYDIR" in
10139N/A*/sbin )
10139N/A cp $MYNAME /tmp/remove-gnome.copy.$$
10139N/A chmod 755 /tmp/remove-gnome.copy.$$
10139N/A exec /tmp/remove-gnome.copy.$$ ${MYARGS} --version $version_opt
10139N/A ;;
10139N/Aesac
10139N/A
10139N/Abackup "$PRODREG_SCRIPT"
10139N/A
10139N/Acat > $PRODREG_SCRIPT << EOF
10139N/A:compid
10139N/A/^[ ]*<compid>/{
10139N/A N
10139N/A /<\/compid>/!b compid
10139N/A /.*<uniquename>@PACKAGE_TO_REMOVE@\n[ ]*<\/uniquename>.*$/d
10139N/A}
10139N/AEOF
10139N/APRODREG_SCRIPT_CREATED=yes
10139N/A
10139N/ATMP_PRODREG_SCRIPT=/tmp/prodreg.$$.sed
10139N/Abackup $TMP_PRODREG_SCRIPT
10139N/A
10139N/Abackup "$ADMIN"
10139N/Acat > $ADMIN << EOF
10139N/Amail=
10139N/Arunlevel=nocheck
10139N/Aconflict=nocheck
10139N/Asetuid=nocheck
10139N/Aaction=nocheck
10139N/Apartial=nocheck
10139N/Aidepend=nocheck
10139N/Ardepend=nocheck
10139N/Aspace=quit
10139N/AEOF
10139N/A
10139N/AADMIN_CREATED=yes
10139N/A
10139N/Aecho "This script will remove packages belonging to GNOME $GNOME_VERSION"
10139N/Aecho
10139N/Aecho "Looking for packages..."
10139N/Aif [ "x$ROOTDIR" != x ]; then
10139N/A TMP_PKGS=`$PKGINFO -R "$ROOTDIR" -c $GNOME_CATEGORY | grep -v '^JDS[ ]*CBE'`|| msg_noerror "No packages found."
10139N/Aelse
10139N/A TMP_PKGS=`$PKGINFO -c $GNOME_CATEGORY | grep -v '^JDS[ ]*CBE'`|| msg_noerror "No packages found."
10139N/Afi
10139N/A
10139N/A# Add JDS extra packages that do not have the JDS category.
10139N/Aif [ $RM_EXTRA_PKGS -eq 1 ]
10139N/Athen
10139N/A if [ $version_opt == "jds" ]
10139N/A then
10139N/A # Turn off traps - '$PKGINFO -q $pkg' triggers ERR if $pkg not installed.
10139N/A trap " " HUP INT TERM ERR
10139N/A
10139N/A for pkg in $EXTRA_PKGS_TO_REMOVE
10139N/A do
10139N/A # If package is present then add to list to be removed.
10139N/A $PKGINFO -q $pkg
10139N/A if [ $? -eq 0 ]
10139N/A then
10139N/A # Later code expects $PKGINFO style output which contains the
10139N/A # "Category package_name Description"
10139N/A TMP_PKGS="$TMP_PKGS
10139N/AGNOME2 $pkg Dummy description"
10139N/A fi
10139N/A done
10139N/A
10139N/A # Restore the original trap triggers.
10139N/A if [ $FORCE -gt 0 ]; then
10139N/A trap clean_up_and_abort HUP INT TERM
10139N/A else
10139N/A trap clean_up_and_abort HUP INT TERM ERR
10139N/A fi
10139N/A fi
10139N/Afi
10139N/A
10139N/Aif [ $QUIET -eq 0 ]; then
10139N/A ( echo "The following packages were found:"
10139N/A echo "$TMP_PKGS" ) | more
10139N/A echo
10139N/A
10139N/A answer=
10139N/A
10139N/A while [ "x$answer" = x ]; do
10139N/A echo "Would you like to remove the above packages? (y/n)"
10139N/A read answer
10139N/A done
10139N/A
10139N/A if [ "x$answer" != "xy" -a "x$answer" != "xY" ]; then
10139N/A msg_error "Cancelled."
10139N/A fi
10139N/Aelse
10139N/A # Simply list the packages.
10139N/A echo "The following packages were found:"
10139N/A echo "$TMP_PKGS"
10139N/Afi
10139N/A
10139N/A
10139N/A# Packages need to be removed and we must be root to do this.
10139N/Aif [ $USER_IS_ROOT != 0 -a $haveinstallprofile != 0 ]; then
10139N/A msg_error "ERROR: You must be root or have the 'Software Installation' profile to uninstall packages."
10139N/Afi
10139N/A
10139N/APRODREG=
10139N/A# find the productregistry file
10139N/Aif [ $version_opt = "1.4" ]; then
10139N/A IFS='
10139N/A'
10139N/A for prodreg in /var/sadm/install/productregistry \
10139N/A /var/sadm/install/productregistry.xml; do
10139N/A if [ -s $prodreg ]; then
10139N/A PRODREG=$prodreg
10139N/A fi
10139N/A done
10139N/A
10139N/A if [ -n "$PRODREG" ]; then
10139N/A TMP_PRODREG=/tmp/productregistry.tmp.$$
10139N/A
10139N/A backup $TMP_PRODREG
10139N/A
10139N/A cp $PRODREG $TMP_PRODREG || \
10139N/A msg_error "Error copying $PRODREG to $TMP_PRODREG"
10139N/A TMP_PRODREG_CREATED=yes
10139N/A
10139N/A backup $PRODREG
10139N/A cp $TMP_PRODREG $PRODREG || \
10139N/A msg_error "Error copying $TMP_PRODREG to $PRODREG"
10139N/A fi
10139N/Afi
10139N/A
10139N/Aecho "Removing packages..."
10139N/A
10139N/AALL_PKGS=`echo "$TMP_PKGS" | /usr/bin/tr '\t' ' ' | \
10139N/A /usr/bin/sed -e 's/ */ /g' | /usr/bin/cut -f2 -d' ' | sort -r`
10139N/AALL_PKGS=`echo $ALL_PKGS`
10139N/A
10139N/AIFS=' '
10139N/Afor pkg in $ALL_PKGS; do
10139N/A if [ "x$ROOTDIR" != x ]; then
10139N/A /usr/bin/pfexec $PKGRM -R "$ROOTDIR" -a $ADMIN -n $pkg || \
10139N/A msg_error "ERROR: Failed to remove package $pkg"
10139N/A else
10139N/A /usr/bin/pfexec $PKGRM -a $ADMIN -n $pkg || \
10139N/A msg_error "ERROR: Failed to remove package $pkg"
10139N/A fi
10139N/A if [ -n "$PRODREG" ]; then
10139N/A cp $PRODREG $TMP_PRODREG && \
10139N/A /bin/sed -e "s/@PACKAGE_TO_REMOVE@/$pkg/g" $PRODREG_SCRIPT > $TMP_PRODREG_SCRIPT && \
10139N/A TMP_PRODREG_SCRIPT_CREATED=yes && \
10139N/A /bin/sed -f $TMP_PRODREG_SCRIPT $TMP_PRODREG > $PRODREG ||
10139N/A msg_warning "Warning: Failed to update the product registry file: $PRODREG"
10139N/A fi
10139N/Adone
10139N/A
10139N/Aif [ "x$WARNINGS" = xyes ]; then
10139N/A echo "Completed with warnings. Some packages could not be removed."
10139N/Aelse
10139N/A echo "Successfully removed all packages."
10139N/Afi
10139N/A
10139N/Aif [ -n "$PRODREG" ]; then
10139N/A # Delete backup product registry if unchanged.
10139N/A `/usr/bin/cmp -s $PRODREG $PRODREG~`
10139N/A if [ $? -eq 0 ]; then
10139N/A echo "Product registry unchanged, removing backup file."
10139N/A rm $PRODREG~
10139N/A fi
10139N/A
10139N/A /bin/grep '<compid>' $PRODREG > /dev/null 2>&1 || rm -f $PRODREG
10139N/Afi