home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Applix / install.cd / uninstal < prev   
Text File  |  1998-05-09  |  8KB  |  278 lines

  1. #!/bin/bash
  2. #
  3. # Ce shell est tirΘ du code de l'utilitaire pkgtool de la distribution 
  4. # Slackware 3.2. 
  5. #----------------------------------------------------------------------------
  6. #
  7. # Copyright 1993, 1994, 1995, 1996, 1997 Patrick Volkerding, Moorhead, MN USA
  8. # All rights reserved.
  9. #
  10.  
  11. umask 000
  12. TMP="/var/lib/applix-setup"
  13. tmp="$TMP"
  14. TARGET_DIR=/opt
  15. BACKTITLE="DΘsinstallation d'APPLIXware 4.3.7 Office (DEMO - Expire le 31/08/98)"
  16.  
  17. CHEMIN="`cat $tmp/ROOT_DIR`/applix/bin"
  18. DIALOG="$CHEMIN/dialog"
  19. export DIALOG
  20. export DIALOGRC="$CHEMIN/.dialogrc"
  21.  
  22. if [ -f $tmp/ROOT_DIR ]; then
  23.    TARGET_DIR="`cat $tmp/ROOT_DIR`"
  24. fi   
  25.  
  26. ADM_DIR=$TARGET_DIR/applix/log
  27. LOG=$TMP/APPLIX.REMOVED
  28. TempFile="$tmp/ligne.$$"
  29.  
  30. #
  31. # calcul du nombre de ligne dans le fichier $TempFile
  32. #--------------------------------------------------------
  33. #
  34.  
  35. nb_ligne () {
  36.   `ls $ADM_DIR/packages > $TempFile`
  37.   nombre_ligne=`wc -l $TempFile | cut -d/ -f1`
  38.   rm -f $TempFile 
  39.   if [ "$nombre_ligne" -le "10" ]; then
  40.     hauteur="0"
  41.     largeur="0"
  42.     menu="0"
  43.     hauteur2="0"
  44.   else
  45.     hauteur="20"
  46.     largeur="55"
  47.     menu="10"
  48.     hauteur2="17"
  49.   fi
  50. }
  51.  
  52.  
  53. keep_files() {
  54.  while read FILE ; do
  55.   if [ -f "$TARGET_DIR/$FILE" ]; then
  56.     echo " --> $FILE fait parti Θgalement d'un autre package. SautΘ." >> $LOG
  57.   fi
  58.  done
  59. }
  60.  
  61. keep_links() {
  62.  while read LINK ; do
  63.   echo "Lien en double. Pas d'exΘcution de: $LINK" >> $LOG
  64.  done
  65. }
  66.  
  67. delete_files() {
  68.  while read FILE ; do
  69.   if [ -f "$TARGET_DIR/$FILE" ]; then
  70.     echo "  --> Effacement de $FILE" >> $LOG
  71.     rm -f $TARGET_DIR/$FILE
  72.   fi
  73.  done
  74. }
  75.  
  76. delete_links() {
  77.  while read LINK ; do
  78.   echo "Lien unique. ExΘcution de: $LINK" >> $LOG
  79.  done
  80. }
  81.  
  82. # Conversion to 'comm' utility by Mark Wisdom.
  83. remove_packages() {
  84.  for package_name in $* 
  85.  do
  86.   if [ -r $ADM_DIR/packages/$package_name ]; then
  87.      $DIALOG --backtitle "$BACKTITLE" \
  88.      --title "SUPPRESSION DU PACKAGE EN COURS" --infobox "\
  89. Suppression du package $package_name.\n\
  90. Chaque fichier devant Ωtre controlΘ pour  savoir  s'il  ne  fait  pas\n\
  91. Θgalement  partie  d'un  autre  package, ceci  peut  prendre beaucoup\n\
  92. de  temps.\n\
  93. Si vous  dΘsirez  suivre  l'avancement  de  cette  opΘration,  passez\n\
  94. sur une autre console virtuelle (Ctrl-Alt-F2..) et tapez la commande:\n\n\
  95. --> 'tail -f $LOG'." 0 0
  96.      sleep 2     
  97.      
  98.      if [ "$package_name" = "aplx-eng" ]; then
  99.         rm -f /etc/X11/wmconfig/applixUS
  100. #    ./Office
  101.      fi
  102.      if [ "$package_name" = "aplx-frn" ]; then
  103.     rm -f /etc/X11/wmconfig/applixFR
  104. #    ./Office
  105.      fi
  106.      if [ "$package_name" = "aplx-grm" ]; then
  107.     rm -f /etc/X11/wmconfig/applixGR
  108. #    ./Office
  109.      fi
  110.      
  111.      echo "Retrait du package $package_name:" >> $LOG
  112.    if fgrep "./" $ADM_DIR/packages/$package_name 1> /dev/null 2>&1; then
  113.     TRIGGER=".\/"
  114.    else
  115.     TRIGGER="FILE LIST:"
  116.    fi
  117.    echo "Effacement des fichiers:" >> $LOG
  118.    sed -n "/$TRIGGER/,/^$/p" < $ADM_DIR/packages/$package_name | sort -u > $TMP/delete_list
  119.    # Pat's new-new && improved pre-removal routine.
  120.    for DIR in $ADM_DIR/removed_packages $ADM_DIR/removed_scripts ; do
  121.     if [ ! -d $DIR ] ; then mkdir -p $DIR ; chmod 755 $DIR ; fi
  122.    done
  123.    mv $ADM_DIR/packages/$package_name $ADM_DIR/removed_packages 1> /dev/null 2>&1
  124.    # Look for duplicated links and leave them in place.
  125.    if [ -r $ADM_DIR/scripts/$package_name ]; then
  126.     cat $ADM_DIR/scripts/$package_name | fgrep 'rm -rf' | sort -u > $TMP/del_link_list
  127.     mv $ADM_DIR/scripts/$package_name $ADM_DIR/removed_scripts 1> /dev/null 2>&1
  128.     cat $ADM_DIR/scripts/* | fgrep 'rm -rf' | sort -u > $TMP/required_links 2> /dev/null #joel
  129.     comm -12 $TMP/del_link_list $TMP/required_links | keep_links
  130.     comm -23 $TMP/del_link_list $TMP/required_links | delete_links
  131.     comm -23 $TMP/del_link_list $TMP/required_links > $TMP/delscript
  132.     ( cd $TARGET_DIR ; sh $TMP/delscript )
  133.     rm -f $TMP/del_link_list $TMP/required_links $TMP/delscript
  134.    fi
  135.    cat $ADM_DIR/packages/* | sort -u > $TMP/required_files 2> /dev/null #joel
  136.    comm -12 $TMP/delete_list $TMP/required_files | keep_files
  137.    comm -23 $TMP/delete_list $TMP/required_files | delete_files
  138.    rm -f $TMP/delete_list
  139.    rm -f $TMP/required_files
  140.   else
  141.    echo "Package $package_name inexistant. Retrait impossible." >> $LOG
  142.   fi
  143.  #-----------------------------------
  144.      if [ "$package_name" = "aplx-eng" ]; then
  145. #           rm -f /etc/X11/wmconfig/applixUS
  146.        ./Office
  147.      fi
  148.      if [ "$package_name" = "aplx-frn" ]; then
  149. #       rm -f /etc/X11/wmconfig/applixFR
  150.        ./Office
  151.      fi
  152.      if [ "$package_name" = "aplx-grm" ]; then
  153. #           rm -f /etc/X11/wmconfig/applixGR
  154.        ./Office
  155.      fi
  156.  #----------------------------------- 
  157.  done
  158. }
  159.  
  160. # Here, we read the list of arguments passed to the pkgtool script.
  161. if [ $# -gt 0 ]; then # there are arguments to the command
  162.  while [ $# -gt 0 ]; do
  163.   case "$1" in
  164.   "-target_dir")
  165.    TARGET_DIR=$2
  166.    ADM_DIR=$TARGET_DIR/applix/log
  167.    shift 2 ;;
  168.   esac
  169.  done
  170. else  # there were no arguments, so we'll get the needed information from the
  171.       # user and then go on.
  172.  
  173.  while [ 0 ]; do
  174.  $DIALOG --backtitle "$BACKTITLE" --title "GESTION DES PACKAGES" \
  175. --menu "Bienvenue dans le gestionnaire de packages. \n\
  176. Votre choix ?" 11 65 3 \
  177. "Retrait" "Retrait d'un package de APPLIXware Office." \
  178. "Voir"    "Voir la liste des fichiers d'un package." \
  179. "Quitter" "Quitte le gestionnaire de packages." 2> $tmp/reply
  180.   if [ $? = 1 -o $? = 255 ]; then
  181.    rm -f $tmp/reply
  182. #   reset
  183.    exit
  184.   fi
  185.   REPLY="`cat $tmp/reply`"
  186.   rm -f $tmp/reply
  187.   if [ "$REPLY" = "Quitter" ]; then
  188. #   reset
  189.    exit
  190.   fi
  191.   if [ "$REPLY" = "Voir" ]; then
  192.     nb_ligne
  193.     $DIALOG --backtitle "$BACKTITLE" --title "RECHERCHE" --infobox "\
  194. Veuillez patienter pendant la recherche des\n\
  195. packages installΘs sur votre systΦme  et la\n\
  196. prΘparation de la liste." 0 0
  197.    sleep 2
  198.  
  199.       cat << EOF > $tmp/viewscr
  200.       #!/bin/bash
  201.       $DIALOG --backtitle "$BACKTITLE" --title "CONTENU DES PACKAGES" --menu "Choisissez le package α examiner." $hauteur2 $largeur $menu \\
  202. EOF
  203.  
  204.    for name in `ls $ADM_DIR/packages` ; do
  205.       BLURB="`grep "A:$name:" $ADM_DIR/packages/$name | sed -n "s/^.*:.*://p" | cut -c1-25`"
  206.       if [ -z "$BLURB" ]; then
  207.          BLURB="`grep "AON:$name:" $ADM_DIR/packages/$name | sed -n "s/^.*:.*://p" | cut -c1-25`"
  208.       fi
  209.    echo " \"$name\" \"$BLURB\" \\" >> $tmp/viewscr
  210.    done  
  211.    echo "2> $tmp/return" >> $tmp/viewscr
  212.    while [ 0 ]; do
  213.     . $tmp/viewscr
  214.     if [ ! "`cat $tmp/return`" = "" ]; then
  215.      $DIALOG --backtitle "$BACKTITLE" --title "CONTENU DU PACKAGE: `cat $tmp/return`" --textbox "$ADM_DIR/packages/`cat $tmp/return`" \
  216.      20 70  2> /dev/null
  217.     else
  218.      break 
  219.     fi
  220.    done
  221.    rm -f $tmp/return $tmp/viewscr $tmp/tmpmsg
  222.    chmod 755 /
  223.    chmod 1777 $tmp
  224.    continue
  225.   fi  
  226.   if [ "$REPLY" = "Retrait" ]; then
  227.     nb_ligne   
  228.     $DIALOG --backtitle "$BACKTITLE" --title "RECHERCHE" --infobox "\
  229. Veuillez patienter pendant la recherche des\n\
  230. packages installΘs sur votre systΦme  et la\n\
  231. prΘparation de la liste." 0 0
  232. sleep 2
  233.  
  234. cat << EOF > $TMP/rmscript
  235. #!/bin/bash
  236. $DIALOG --backtitle "$BACKTITLE" --title "CHOIX DES PACKAGES A DESINSTALLER" \
  237. --checklist "\
  238. Choisissez  les  packages α dΘsinstaller. Utilisez\n\
  239. la barre d'espace pour sΘlectionner les packages α\n\
  240. retirer  et  les  flΦches  pour  vous  dΘplacer  α\n\
  241. l'interieur de la liste." $hauteur $largeur $menu \\
  242. EOF
  243.  
  244.    for name in `ls $ADM_DIR/packages` ; do
  245.     BLURB="`grep "AON:$name:" $ADM_DIR/packages/$name | sed -n "s/^.*:.*://p" | cut -c1-25`"
  246.     if [ -z "$BLURB" ]; then
  247.        BLURB="`grep "A:$name:" $ADM_DIR/packages/$name | sed -n "s/^.*:.*://p" | cut -c1-25`"
  248.     fi
  249.     echo " \"$name\" \"$BLURB\" off \\" >> $TMP/rmscript
  250.    done 
  251.    echo "2> $tmp/return" >> $TMP/rmscript
  252.    if [ -L $LOG -o -r $LOG ]; then
  253.      rm -f $LOG
  254.    fi
  255.    cat /dev/null > $LOG
  256.    chmod 600 $LOG
  257.    chmod 755 $TMP/rmscript
  258.    export ADM_DIR;
  259.    $TMP/rmscript
  260.    remove_packages `cat $tmp/return | tr -d "\042"`
  261.    if [ "`cat $TMP/APPLIX.REMOVED`" = "" ]; then
  262.     rm -f $TMP/APPLIX.REMOVED
  263.    else
  264.     $DIALOG --backtitle "$BACKTITLE" --title "DESINSTALLATION EFFECTUEE" \
  265.     --msgbox "\
  266. Les packages on ΘtΘ retirΘs. Une liste complΦte  des  fichiers\n\
  267. supprimΘs a ΘtΘ crΘe dans:\n\n\
  268. --> $TMP/APPLIX.REMOVED\n\n\
  269. Le gestionnaire de package n'efface PAS les rΘpertoires  vides,\n\
  270. vous  devez le faire manuellement si vous le dΘsirez." 0 0
  271.    fi    
  272.    rm -f $TMP/rmscript $tmp/return $tmp/tmpmsg
  273.    chmod 755 /
  274.    chmod 1777 $tmp
  275.   fi 
  276.  done
  277. fi
  278.