| 1 | #!/bin/sh | 
|---|
| 2 |  | 
|---|
| 3 | # This script gets and installs a package from the Website. | 
|---|
| 4 | # It is called by getpack package1 ... | 
|---|
| 5 | # A package must be in the form of pack.tar.bz2 and must | 
|---|
| 6 | # include a build script that makes and installs it. | 
|---|
| 7 | # The build script should succeed if installation works, else fail | 
|---|
| 8 |  | 
|---|
| 9 | # Examples: | 
|---|
| 10 | #       easypack awk elle telnet        # fetch and install 3 packages | 
|---|
| 11 | #       easypack -o awk elle telnet     # fetch and replace existing packs | 
|---|
| 12 |  | 
|---|
| 13 | SOURCE_DIR=/usr/src/commands            # where the source is deposited | 
|---|
| 14 | OVERWRITE=0                             # can an installed package be overwritten? | 
|---|
| 15 | SOFTWARE_DIR="http://www.minix3.org/software"   # Tested and approved S/W | 
|---|
| 16 | BETA_DIR="http://www.minix3.org/beta_software"  # Untested software | 
|---|
| 17 |  | 
|---|
| 18 |  | 
|---|
| 19 | # Check for at least one parameter | 
|---|
| 20 | case $# in | 
|---|
| 21 | 0)      echo Usage: $0 package ... | 
|---|
| 22 | exit ;; | 
|---|
| 23 | esac | 
|---|
| 24 |  | 
|---|
| 25 | # Change to source directory | 
|---|
| 26 | ORIG_DIR=`pwd` | 
|---|
| 27 | rm -f Log                       # remove old debugging log | 
|---|
| 28 | cd $SOURCE_DIR || exit | 
|---|
| 29 |  | 
|---|
| 30 | if [ "`id -u`" -ne 0 ] | 
|---|
| 31 | then | 
|---|
| 32 | # Check for write permission here | 
|---|
| 33 | if test ! -w . | 
|---|
| 34 | then echo You do not have write permission for $SOURCE_DIR | 
|---|
| 35 | exit 1 | 
|---|
| 36 | fi | 
|---|
| 37 | fi | 
|---|
| 38 |  | 
|---|
| 39 | # Check for -o flag; if found, set OVERWRITE | 
|---|
| 40 | if test $1 = "-o" | 
|---|
| 41 | then OVERWRITE=1 | 
|---|
| 42 | shift | 
|---|
| 43 | fi | 
|---|
| 44 |  | 
|---|
| 45 | # Loop on the packages | 
|---|
| 46 | for i | 
|---|
| 47 | do # Check to see if it exists. Don't overwrite unless -o given | 
|---|
| 48 | echo " " ; echo Start fetching package $i | 
|---|
| 49 | echo " " >>$ORIG_DIR/Log | 
|---|
| 50 | echo ------------- Start fetching $i ------------------ >>$ORIG_DIR/Log | 
|---|
| 51 | if test -r $i | 
|---|
| 52 | then # Directory already exists. May it be overwritten? | 
|---|
| 53 | if test $OVERWRITE = 0 | 
|---|
| 54 | then echo $i already exists. Skipping this package | 
|---|
| 55 | continue | 
|---|
| 56 | else # Remove the directory | 
|---|
| 57 | rm -rf $i | 
|---|
| 58 | echo Existing directory $i removed | 
|---|
| 59 | fi | 
|---|
| 60 | fi | 
|---|
| 61 |  | 
|---|
| 62 | # Remove any junk from previous attempts | 
|---|
| 63 | rm -f $i.tar.bz2 $i.tar | 
|---|
| 64 |  | 
|---|
| 65 | # Get the package | 
|---|
| 66 | URL=$SOFTWARE_DIR/$i.tar.bz2 | 
|---|
| 67 | URL1=$URL | 
|---|
| 68 | TARBZ=$i.tar.bz2 | 
|---|
| 69 | if urlget $URL >$TARBZ 2>/dev/null | 
|---|
| 70 | then : | 
|---|
| 71 | else # It is not in the directory of tested software. Try beta dir. | 
|---|
| 72 | URL=$BETA_DIR/$TARBZ | 
|---|
| 73 | if urlget $URL >$TARBZ 2>/dev/null | 
|---|
| 74 | then : | 
|---|
| 75 | else | 
|---|
| 76 | echo Cannot get $i. | 
|---|
| 77 | echo "   " Tried $URL1 | 
|---|
| 78 | echo "   " Tried $URL | 
|---|
| 79 | echo "   " Skipping this package | 
|---|
| 80 | rm -f $TARBZ | 
|---|
| 81 | continue | 
|---|
| 82 | fi | 
|---|
| 83 | fi | 
|---|
| 84 |  | 
|---|
| 85 | # We got it. Unpack it. | 
|---|
| 86 | echo Package $i fetched | 
|---|
| 87 | bunzip2 $TARBZ || smallbunzip2 $TARBZ | 
|---|
| 88 | tar xf $i.tar | 
|---|
| 89 | if test ! -d $i | 
|---|
| 90 | then echo Unable to unpack $i | 
|---|
| 91 | continue | 
|---|
| 92 | else echo Package $i unpacked | 
|---|
| 93 | fi | 
|---|
| 94 |  | 
|---|
| 95 | # It is now unpacked. Build it | 
|---|
| 96 | cd $i | 
|---|
| 97 | binsizes big | 
|---|
| 98 | if [ -f build.minix ] | 
|---|
| 99 | then sh build.minix >>$ORIG_DIR/Log 2>&1 | 
|---|
| 100 | r=$? | 
|---|
| 101 | else sh build >>$ORIG_DIR/Log 2>&1 | 
|---|
| 102 | r=$? | 
|---|
| 103 | fi | 
|---|
| 104 | if [ $r -eq 0 ] | 
|---|
| 105 | then echo Package $i installed | 
|---|
| 106 | else echo Package $i failed to install, see Log | 
|---|
| 107 | fi | 
|---|
| 108 | if [ -f .postinstall ] | 
|---|
| 109 | then echo Running postinstall script. | 
|---|
| 110 | sh -e .postinstall | 
|---|
| 111 | fi | 
|---|
| 112 | binsizes normal | 
|---|
| 113 |  | 
|---|
| 114 | # Clean up | 
|---|
| 115 | cd .. | 
|---|
| 116 | rm -f $i.tar $TARBZ # Remove whatever is still lying around | 
|---|
| 117 | done | 
|---|
| 118 |  | 
|---|