#!/bin/sh setglobal TAG = "$[uname -p]-$[uname -r].$[uname -v]" setglobal PACKDIR = "$[uname -p]/$[uname -r].$[uname -v]" setglobal RC = '/usr/etc/rc.package' setglobal CDDIR = 'PACKAGES' setglobal CDMP = '/mnt' setglobal CDPACK = "$(CDMP)/install/packages" setglobal CDSRC = "$(CDMP)/install/package-sources" setglobal SRC = '/usr/bigsrc' setglobal LISTFILE = "/etc/packages-$TAG" setglobal LISTURL = "http://www.minix3.org/packages/$PACKDIR/List" setglobal TMPDIR = '/usr/tmp/packages' mkdir -p $TMPDIR setglobal URL1 = "http://www.minix3.org/packages/$PACKDIR" setglobal SRCURL1 = 'http://www.minix3.org/software' setglobal PATH = '/bin:/sbin:/usr/bin:/usr/sbin' setglobal pack = ''"" setglobal cdpackages = ''"" setglobal netpackages = ''"" setglobal cdmounted = ''"" if test ! $PAGER { setglobal PAGER = 'more' } if test $1 = -y { setglobal YESMODE = '1' setglobal PAGER = 'cat' } proc myread { if test $YESMODE { echo "all" } else { read ans echo $ans } } proc myexit { if test -n $cdmounted -a -n $pack { umount $pack || true } exit $1 } # can we execute bunzip2? if bunzip2 --help 2>&1 | grep usage >/dev/null { setglobal BUNZIP2 = 'bunzip2' } else { setglobal BUNZIP2 = 'smallbunzip2' } if id | fgrep "uid=0(" >/dev/null { : } else { echo "Please run $0 as root." myexit 1 } chmod 700 $TMPDIR if test -f $RC { source "$RC" } cd / # Make sure there is a $SRC dir if test ! -d $SRC { mkdir $SRC || myexit 1 } # Is there a usable CD to install packages from? if test -n $cddrive { setglobal pack = "$(cddrive)p2" umount $pack >/dev/null 2>&1 || true echo "Checking for CD in $pack." if mount -r $pack $CDMP 2>/dev/null { setglobal fn = ""$CDPACK/List"" echo "Found." setglobal cdmounted = '1' setglobal cdpackages = $fn if test ! -f $cdpackages { setglobal cdpackages = ''"" echo "No package list found on CD in $fn." } } else { echo "Not found." } } else { echo "Don't know where the install CD is. You can set it in $RC." } setglobal TMPF = "$TMPDIR/.list.$Pid" rm -f $TMPF rm -f $TMPDIR/.* # Remove any remaining .postinstall script or .list* # Check for network packages too if shell { : /dev/null { echo -n "Update package list from network? (Y/n) " setglobal y = $[myread] if test $y != n -a $y != N { echo "Fetching package list from $LISTURL." urlget $LISTURL >$TMPF && mv $TMPF $LISTFILE || echo "Update not successful." } setglobal netpackages = $LISTFILE if test ! -f $netpackages -o ! $[cat $netpackages 2>/dev/null | wc -l | awk '{ print $1 }] -gt 1 { setglobal netpackages = ''"" } } else { echo "No working network detected." } # Is there at least one package type? if test ! -n $netpackages -a ! -n $cdpackages { echo "No packages found." myexit 1 } # Is there more than one package type? if test -n $netpackages -a -n $cdpackages { echo -n "Would you like to install from (C)D or (N)etwork? [C] " setglobal whichsrc = $[myread] if test $whichsrc = N -o $whichsrc = n { unset cdpackages } else { unset netpackages } } if test -n $netpackages { setglobal source = 'net' } else { setglobal source = 'cdrom' } setglobal cont = 'y' while [ "$cont" = y ] { cd $TMPDIR echo "" echo "Showing you a list of packages using $PAGER. Press q when" echo "you want to leave the list." echo -n "Press RETURN to continue.." setglobal xyzzy = $[myread] echo "Package list:" shell { echo "No.|Package|Description" shell { if test -f $netpackages -a $source = net { cat $netpackages } if test -f $cdpackages -a $source = cdrom { cat $cdpackages } } | sort -f -t'|' +0 | awk '{ n++; printf "%d|%s\n", n, $0 }' } >$TMPF setglobal highest = $[wc -l $TMPF | awk '{ print $1 - 1 }] awk -F'|' <$TMPF '{ printf "%3s %-15s %s\n", $1, $2, $3 }' | $PAGER echo "Format examples: '3', '3,6', '3-9', '3-9,11-15', 'all'" echo -n "Package(s) to install (RETURN or q to exit)? " setglobal packnolist = $[myread] if test $packnolist = "" -o $packnolist = "q" { myexit 0 } if test $packnolist = all { setglobal packnolist = "1-$highest" } setglobal IFS = '','' set $packnolist echo -n "Get source(s) too? (y/N) " setglobal getsources = $[myread] for packrange in [$packnolist] { # Get a-b range. setglobal IFS = ''-'' set $packrange setglobal start = $1 if test $Argc = 2 { setglobal end = $2 } else { setglobal end = $1 } setglobal IFS = '' '' # use awk to make the range list for packno in [$[awk $file { echo "Retrieved ok. Installing .." packit $file && echo Installed ok. setglobal srcurl = "$SRCURL1/$file" } else { echo "Retrieval failed." } if test $getsources = y -o $getsources = Y { shell { cd $SRC || myexit 2 setglobal srcfile = "$(packagename)-src.tar.bz2" echo "Retrieving source from $srcurl .." urlget $srcurl >$srcfile || myexit 3 echo "Source retrieved in $SRC/$srcfile." $BUNZIP2 -dc $srcfile | tar xf - >/dev/null || myexit 3 echo "Source unpacked in $SRC." } } with cdrom* if test -f $CDPACK/$file { echo "Installing from $CDPACK/$file .." packit $CDPACK/$file && echo Installed ok. } else { echo "$CDPACK/$file not found." } setglobal srcfile = "$CDSRC/$(packagename).tar.bz2" if test -f $srcfile -a $getsources = y { shell { cd $SRC || myexit 2 $BUNZIP2 -dc $srcfile | tar xf - || myexit 3 echo "Source $srcfile unpacked in $SRC." } } } } } else { setglobal cont = 'n' } } # Iterate package range } # Iterate package range list } rm -f $TMPDIR/.* # Remove any remaining .postinstall script or .list* myexit 0