home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 52
/
Amiga_Dream_52.iso
/
Applix
/
install.cd
/
uninstal
< prev
Wrap
Text File
|
1998-05-09
|
8KB
|
278 lines
#!/bin/bash
#
# Ce shell est tirΘ du code de l'utilitaire pkgtool de la distribution
# Slackware 3.2.
#----------------------------------------------------------------------------
#
# Copyright 1993, 1994, 1995, 1996, 1997 Patrick Volkerding, Moorhead, MN USA
# All rights reserved.
#
umask 000
TMP="/var/lib/applix-setup"
tmp="$TMP"
TARGET_DIR=/opt
BACKTITLE="DΘsinstallation d'APPLIXware 4.3.7 Office (DEMO - Expire le 31/08/98)"
CHEMIN="`cat $tmp/ROOT_DIR`/applix/bin"
DIALOG="$CHEMIN/dialog"
export DIALOG
export DIALOGRC="$CHEMIN/.dialogrc"
if [ -f $tmp/ROOT_DIR ]; then
TARGET_DIR="`cat $tmp/ROOT_DIR`"
fi
ADM_DIR=$TARGET_DIR/applix/log
LOG=$TMP/APPLIX.REMOVED
TempFile="$tmp/ligne.$$"
#
# calcul du nombre de ligne dans le fichier $TempFile
#--------------------------------------------------------
#
nb_ligne () {
`ls $ADM_DIR/packages > $TempFile`
nombre_ligne=`wc -l $TempFile | cut -d/ -f1`
rm -f $TempFile
if [ "$nombre_ligne" -le "10" ]; then
hauteur="0"
largeur="0"
menu="0"
hauteur2="0"
else
hauteur="20"
largeur="55"
menu="10"
hauteur2="17"
fi
}
keep_files() {
while read FILE ; do
if [ -f "$TARGET_DIR/$FILE" ]; then
echo " --> $FILE fait parti Θgalement d'un autre package. SautΘ." >> $LOG
fi
done
}
keep_links() {
while read LINK ; do
echo "Lien en double. Pas d'exΘcution de: $LINK" >> $LOG
done
}
delete_files() {
while read FILE ; do
if [ -f "$TARGET_DIR/$FILE" ]; then
echo " --> Effacement de $FILE" >> $LOG
rm -f $TARGET_DIR/$FILE
fi
done
}
delete_links() {
while read LINK ; do
echo "Lien unique. ExΘcution de: $LINK" >> $LOG
done
}
# Conversion to 'comm' utility by Mark Wisdom.
remove_packages() {
for package_name in $*
do
if [ -r $ADM_DIR/packages/$package_name ]; then
$DIALOG --backtitle "$BACKTITLE" \
--title "SUPPRESSION DU PACKAGE EN COURS" --infobox "\
Suppression du package $package_name.\n\
Chaque fichier devant Ωtre controlΘ pour savoir s'il ne fait pas\n\
Θgalement partie d'un autre package, ceci peut prendre beaucoup\n\
de temps.\n\
Si vous dΘsirez suivre l'avancement de cette opΘration, passez\n\
sur une autre console virtuelle (Ctrl-Alt-F2..) et tapez la commande:\n\n\
--> 'tail -f $LOG'." 0 0
sleep 2
if [ "$package_name" = "aplx-eng" ]; then
rm -f /etc/X11/wmconfig/applixUS
# ./Office
fi
if [ "$package_name" = "aplx-frn" ]; then
rm -f /etc/X11/wmconfig/applixFR
# ./Office
fi
if [ "$package_name" = "aplx-grm" ]; then
rm -f /etc/X11/wmconfig/applixGR
# ./Office
fi
echo "Retrait du package $package_name:" >> $LOG
if fgrep "./" $ADM_DIR/packages/$package_name 1> /dev/null 2>&1; then
TRIGGER=".\/"
else
TRIGGER="FILE LIST:"
fi
echo "Effacement des fichiers:" >> $LOG
sed -n "/$TRIGGER/,/^$/p" < $ADM_DIR/packages/$package_name | sort -u > $TMP/delete_list
# Pat's new-new && improved pre-removal routine.
for DIR in $ADM_DIR/removed_packages $ADM_DIR/removed_scripts ; do
if [ ! -d $DIR ] ; then mkdir -p $DIR ; chmod 755 $DIR ; fi
done
mv $ADM_DIR/packages/$package_name $ADM_DIR/removed_packages 1> /dev/null 2>&1
# Look for duplicated links and leave them in place.
if [ -r $ADM_DIR/scripts/$package_name ]; then
cat $ADM_DIR/scripts/$package_name | fgrep 'rm -rf' | sort -u > $TMP/del_link_list
mv $ADM_DIR/scripts/$package_name $ADM_DIR/removed_scripts 1> /dev/null 2>&1
cat $ADM_DIR/scripts/* | fgrep 'rm -rf' | sort -u > $TMP/required_links 2> /dev/null #joel
comm -12 $TMP/del_link_list $TMP/required_links | keep_links
comm -23 $TMP/del_link_list $TMP/required_links | delete_links
comm -23 $TMP/del_link_list $TMP/required_links > $TMP/delscript
( cd $TARGET_DIR ; sh $TMP/delscript )
rm -f $TMP/del_link_list $TMP/required_links $TMP/delscript
fi
cat $ADM_DIR/packages/* | sort -u > $TMP/required_files 2> /dev/null #joel
comm -12 $TMP/delete_list $TMP/required_files | keep_files
comm -23 $TMP/delete_list $TMP/required_files | delete_files
rm -f $TMP/delete_list
rm -f $TMP/required_files
else
echo "Package $package_name inexistant. Retrait impossible." >> $LOG
fi
#-----------------------------------
if [ "$package_name" = "aplx-eng" ]; then
# rm -f /etc/X11/wmconfig/applixUS
./Office
fi
if [ "$package_name" = "aplx-frn" ]; then
# rm -f /etc/X11/wmconfig/applixFR
./Office
fi
if [ "$package_name" = "aplx-grm" ]; then
# rm -f /etc/X11/wmconfig/applixGR
./Office
fi
#-----------------------------------
done
}
# Here, we read the list of arguments passed to the pkgtool script.
if [ $# -gt 0 ]; then # there are arguments to the command
while [ $# -gt 0 ]; do
case "$1" in
"-target_dir")
TARGET_DIR=$2
ADM_DIR=$TARGET_DIR/applix/log
shift 2 ;;
esac
done
else # there were no arguments, so we'll get the needed information from the
# user and then go on.
while [ 0 ]; do
$DIALOG --backtitle "$BACKTITLE" --title "GESTION DES PACKAGES" \
--menu "Bienvenue dans le gestionnaire de packages. \n\
Votre choix ?" 11 65 3 \
"Retrait" "Retrait d'un package de APPLIXware Office." \
"Voir" "Voir la liste des fichiers d'un package." \
"Quitter" "Quitte le gestionnaire de packages." 2> $tmp/reply
if [ $? = 1 -o $? = 255 ]; then
rm -f $tmp/reply
# reset
exit
fi
REPLY="`cat $tmp/reply`"
rm -f $tmp/reply
if [ "$REPLY" = "Quitter" ]; then
# reset
exit
fi
if [ "$REPLY" = "Voir" ]; then
nb_ligne
$DIALOG --backtitle "$BACKTITLE" --title "RECHERCHE" --infobox "\
Veuillez patienter pendant la recherche des\n\
packages installΘs sur votre systΦme et la\n\
prΘparation de la liste." 0 0
sleep 2
cat << EOF > $tmp/viewscr
#!/bin/bash
$DIALOG --backtitle "$BACKTITLE" --title "CONTENU DES PACKAGES" --menu "Choisissez le package α examiner." $hauteur2 $largeur $menu \\
EOF
for name in `ls $ADM_DIR/packages` ; do
BLURB="`grep "A:$name:" $ADM_DIR/packages/$name | sed -n "s/^.*:.*://p" | cut -c1-25`"
if [ -z "$BLURB" ]; then
BLURB="`grep "AON:$name:" $ADM_DIR/packages/$name | sed -n "s/^.*:.*://p" | cut -c1-25`"
fi
echo " \"$name\" \"$BLURB\" \\" >> $tmp/viewscr
done
echo "2> $tmp/return" >> $tmp/viewscr
while [ 0 ]; do
. $tmp/viewscr
if [ ! "`cat $tmp/return`" = "" ]; then
$DIALOG --backtitle "$BACKTITLE" --title "CONTENU DU PACKAGE: `cat $tmp/return`" --textbox "$ADM_DIR/packages/`cat $tmp/return`" \
20 70 2> /dev/null
else
break
fi
done
rm -f $tmp/return $tmp/viewscr $tmp/tmpmsg
chmod 755 /
chmod 1777 $tmp
continue
fi
if [ "$REPLY" = "Retrait" ]; then
nb_ligne
$DIALOG --backtitle "$BACKTITLE" --title "RECHERCHE" --infobox "\
Veuillez patienter pendant la recherche des\n\
packages installΘs sur votre systΦme et la\n\
prΘparation de la liste." 0 0
sleep 2
cat << EOF > $TMP/rmscript
#!/bin/bash
$DIALOG --backtitle "$BACKTITLE" --title "CHOIX DES PACKAGES A DESINSTALLER" \
--checklist "\
Choisissez les packages α dΘsinstaller. Utilisez\n\
la barre d'espace pour sΘlectionner les packages α\n\
retirer et les flΦches pour vous dΘplacer α\n\
l'interieur de la liste." $hauteur $largeur $menu \\
EOF
for name in `ls $ADM_DIR/packages` ; do
BLURB="`grep "AON:$name:" $ADM_DIR/packages/$name | sed -n "s/^.*:.*://p" | cut -c1-25`"
if [ -z "$BLURB" ]; then
BLURB="`grep "A:$name:" $ADM_DIR/packages/$name | sed -n "s/^.*:.*://p" | cut -c1-25`"
fi
echo " \"$name\" \"$BLURB\" off \\" >> $TMP/rmscript
done
echo "2> $tmp/return" >> $TMP/rmscript
if [ -L $LOG -o -r $LOG ]; then
rm -f $LOG
fi
cat /dev/null > $LOG
chmod 600 $LOG
chmod 755 $TMP/rmscript
export ADM_DIR;
$TMP/rmscript
remove_packages `cat $tmp/return | tr -d "\042"`
if [ "`cat $TMP/APPLIX.REMOVED`" = "" ]; then
rm -f $TMP/APPLIX.REMOVED
else
$DIALOG --backtitle "$BACKTITLE" --title "DESINSTALLATION EFFECTUEE" \
--msgbox "\
Les packages on ΘtΘ retirΘs. Une liste complΦte des fichiers\n\
supprimΘs a ΘtΘ crΘe dans:\n\n\
--> $TMP/APPLIX.REMOVED\n\n\
Le gestionnaire de package n'efface PAS les rΘpertoires vides,\n\
vous devez le faire manuellement si vous le dΘsirez." 0 0
fi
rm -f $TMP/rmscript $tmp/return $tmp/tmpmsg
chmod 755 /
chmod 1777 $tmp
fi
done
fi