Smarter packman that unifies cdrom and network packages.

This commit is contained in:
Ben Gras 2006-03-26 15:48:55 +00:00
parent 7b58dd7f9b
commit bfb0e87265

View File

@ -2,9 +2,9 @@
RC=/usr/etc/rc.package RC=/usr/etc/rc.package
CDDIR=PACKAGES CDDIR=PACKAGES
MP=/mnt CDMP=/mnt
CDPACK=${MP}/install/packages CDPACK=${CDMP}/install/packages
CDSRC=${MP}/install/package-sources CDSRC=${CDMP}/install/package-sources
SRC=/usr/src/commands SRC=/usr/src/commands
LISTFILE=/etc/packages LISTFILE=/etc/packages
LISTURL=http://www.minix3.org/packages/List LISTURL=http://www.minix3.org/packages/List
@ -15,100 +15,132 @@ URL2=http://www.minix3.org/beta_packages
SRCURL1=http://www.minix3.org/software SRCURL1=http://www.minix3.org/software
SRCURL2=http://www.minix3.org/beta_software SRCURL2=http://www.minix3.org/beta_software
if id | fgrep "uid=0(" >/dev/null
then :
else echo "Please run $0 as root."
exit 1
fi
if [ -f "$RC" ] if [ -f "$RC" ]
then . "$RC" then . "$RC"
fi fi
cd / cd /
cdpackages=""
if [ -n "$cddrive" ] if [ -n "$cddrive" ]
then pack=${cddrive}p2 then pack=${cddrive}p2
umount $pack >/dev/null 2>&1 || true umount $pack >/dev/null 2>&1 || true
if mount -r $pack $MP if mount -r $pack $CDMP
then then fn="$CDPACK/List"
cd $CDPACK cdpackages=$fn
for package in `ls *.tar.bz2` if [ ! -f $cdpackages ]
do grep $package List then cdpackages=""
echo -n "Install $package (y/N) ? " echo "No package list found on CD in $fn."
read y
if [ "$y" = y -o "$y" = Y ]
then echo "Extracting $CDPACK/$package .."
cat $package | packit -
srcname="`echo $package | sed 's/.tar.bz2/-src.tar.bz2/'`"
srcarc="$CDSRC/$srcname"
if [ -f "$srcarc" ]
then echo -n "Install its source (y/N) ? "
read y
if [ "$y" = y -o "$y" = Y ]
then echo "Installing $srcarc into $SRC."
smallbunzip2 -dc "$srcarc" | (cd $SRC && tar xf - )
fi fi
else : else echo "CD mount failed."
fi
fi
done
else echo "CD mount failed - skipping CD packages."
fi fi
else echo "Don't know where the install CD is. You can set it in $RC." else echo "Don't know where the install CD is. You can set it in $RC."
fi fi
if [ "$cdpackages" = "" ]
then echo "Skipping CD packages."
fi
TMPF=/tmp/list.$$ TMPF=/tmp/list.$$
netpackages=""
if </dev/tcp if </dev/tcp
then if [ -f $LISTFILE ] then if [ -f $LISTFILE ]
then echo -n "Update package list from network? (y/N) " then echo -n "Update package list from network? (y/N) "
read y read y
else y=y else echo "No package list found - retrieving initial version."
y=y
fi fi
if [ "$y" = y -o "$y" = Y ] if [ "$y" = y -o "$y" = Y ]
then echo "Fetching package list." then echo "Fetching package list."
urlget $LISTURL >$TMPF && mv $TMPF $LISTFILE || echo Not done. urlget $LISTURL >$TMPF && mv $TMPF $LISTFILE || echo "Update not successful."
fi fi
cont=y netpackages=$LISTFILE
while [ "$cont" = y ] if [ ! -f "$netpackages" -o ! `cat "$netpackages" 2>/dev/null | wc -l | awk '{ print $1 }'` -gt 1 ]
do cd $TMPDIR then netpackages=""
fi
else echo "No working network detected."
fi
if [ "$netpackages" = "" ]
then echo "Skipping network packages."
if [ "$cdpackages" = "" ]
then echo "No packages found."
exit 1
fi
fi
cont=y
while [ "$cont" = y ]
do cd $TMPDIR
echo ""
echo "Showing you a list of packages using more. Press q when"
echo "you want to leave the list."
echo -n "Press RETURN to continue.."
read xyzzy
echo "Package list:" echo "Package list:"
awk -F'|' <$LISTFILE '{ printf "%3s %-20s %s\n", $1, $2, $3 }' | more ( echo "No.|Source|Package|Description"
(
if [ -f "$netpackages" ]
then sed <$netpackages 's/^/net\|/'
fi
if [ -f "$cdpackages" ]
then sed <$cdpackages 's/^/cdrom\|/'
fi
) | sort -n -t'|' +2 | awk '{ n++; printf "%d|%s\n", n, $0 }'
) >$TMPF
awk -F'|' <$TMPF '{ printf "%3s %-6s %-15s %s\n", $1, $2, $3, $4 }' | more
echo -n "Package to install? [RETURN for none] " echo -n "Package to install? [RETURN for none] "
read packno read packno
if [ -n "$packno" ] if [ -n "$packno" ]
then file="`grep "^$packno|" $LISTFILE | awk -F'|' '{ print $2 }'`" then source="`grep "^$packno|" $TMPF | awk -F'|' '{ print $2 }'`"
url=$file.tar.bz2 packagename="`grep "^$packno|" $TMPF | awk -F'|' '{ print $3 }'`"
srcfile=$file.tar.bz2 file=$packagename.tar.bz2
if [ -n "$url" ] echo -n "Get source of $packagename? (y/N) "
then echo -n "Try to get source too? (y/N) "
read src read src
echo "Trying to fetch from $URL1/$url.." case $source in
srcurl=$SRCURL1/$srcfile net*) echo "Retrieving binary from primary location into $TMPDIR .."
if urlget $URL1/$url >$url srcurl=""
then echo Installing. if urlget $URL1/$file >$file
packit $url then packit $file && echo Installed ok.
else echo "Trying to fetch from $URL2/$url.." srcurl=$SRCURL1/$file
srcurl=$SRCURL2/$srcfile else echo "Retrying from Beta binary location.."
if urlget $URL2/$url >$url if urlget $URL2/$file >$file
then echo Installing Beta. then packit $file && echo Installed ok.
packit $url srcurl=$SRCURL2/$file
else echo "Retrieval failed." else echo "Retrieval failed."
fi fi
fi fi
if [ "$src" = y -o "$src" = Y ] if [ "$src" = y -o "$src" = Y ]
then cd $SRC then ( cd $SRC || exit
echo "Trying $srcurl" srcfile=${packagename}-src.tar.bz2
if urlget $srcurl >$srcfile echo "Retrieving source from $srcurl .."
then echo "Extracting source into $SRC" urlget $srcurl >$srcfile || exit
smallbunzip2 -dc $srcfile | tar xf - echo "Source retrieved in $SRC/$srcfile."
echo "Done" smallbunzip2 -dc $srcfile | tar xf - >/dev/null || exit
else echo "$srcurl not retrieved." echo "Source unpacked in $SRC."
)
fi fi
;;
cdrom*)
if -f [ $CDPACK/$file ]
then packit $CDPACK/$file
fi fi
else echo "Package $packno not found." if [ "$src" = y -o "$src" = Y ]
then ( cd $SRC || exit
srcfile=$CDSRC/${packagename}-src.tar.bz2
smallbunzip2 -dc $srcfile | tar xf - || exit
echo "Source $srcfile unpacked in $SRC."
)
fi fi
echo "Press RETURN to continue .." ;;
read xyzzy esac
else cont=n else cont=n
fi fi
done done
else echo "No working network detected.
Please re-run this script with networking enabled to download
packages."
fi