Smarter packman that unifies cdrom and network packages.
This commit is contained in:
parent
7b58dd7f9b
commit
bfb0e87265
1 changed files with 108 additions and 76 deletions
|
@ -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
|
fi
|
||||||
if [ "$y" = y -o "$y" = Y ]
|
else echo "CD mount failed."
|
||||||
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
|
|
||||||
else :
|
|
||||||
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=""
|
||||||
echo "Package list:"
|
fi
|
||||||
awk -F'|' <$LISTFILE '{ printf "%3s %-20s %s\n", $1, $2, $3 }' | more
|
else echo "No working network detected."
|
||||||
echo -n "Package to install? [RETURN for none] "
|
|
||||||
read packno
|
|
||||||
if [ -n "$packno" ]
|
|
||||||
then file="`grep "^$packno|" $LISTFILE | awk -F'|' '{ print $2 }'`"
|
|
||||||
url=$file.tar.bz2
|
|
||||||
srcfile=$file.tar.bz2
|
|
||||||
if [ -n "$url" ]
|
|
||||||
then echo -n "Try to get source too? (y/N) "
|
|
||||||
read src
|
|
||||||
echo "Trying to fetch from $URL1/$url.."
|
|
||||||
srcurl=$SRCURL1/$srcfile
|
|
||||||
if urlget $URL1/$url >$url
|
|
||||||
then echo Installing.
|
|
||||||
packit $url
|
|
||||||
else echo "Trying to fetch from $URL2/$url.."
|
|
||||||
srcurl=$SRCURL2/$srcfile
|
|
||||||
if urlget $URL2/$url >$url
|
|
||||||
then echo Installing Beta.
|
|
||||||
packit $url
|
|
||||||
else echo "Retrieval failed."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ "$src" = y -o "$src" = Y ]
|
|
||||||
then cd $SRC
|
|
||||||
echo "Trying $srcurl"
|
|
||||||
if urlget $srcurl >$srcfile
|
|
||||||
then echo "Extracting source into $SRC"
|
|
||||||
smallbunzip2 -dc $srcfile | tar xf -
|
|
||||||
echo "Done"
|
|
||||||
else echo "$srcurl not retrieved."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else echo "Package $packno not found."
|
|
||||||
fi
|
|
||||||
echo "Press RETURN to continue .."
|
|
||||||
read xyzzy
|
|
||||||
else cont=n
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else echo "No working network detected.
|
|
||||||
Please re-run this script with networking enabled to download
|
|
||||||
packages."
|
|
||||||
fi
|
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 "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] "
|
||||||
|
read packno
|
||||||
|
if [ -n "$packno" ]
|
||||||
|
then source="`grep "^$packno|" $TMPF | awk -F'|' '{ print $2 }'`"
|
||||||
|
packagename="`grep "^$packno|" $TMPF | awk -F'|' '{ print $3 }'`"
|
||||||
|
file=$packagename.tar.bz2
|
||||||
|
echo -n "Get source of $packagename? (y/N) "
|
||||||
|
read src
|
||||||
|
case $source in
|
||||||
|
net*) echo "Retrieving binary from primary location into $TMPDIR .."
|
||||||
|
srcurl=""
|
||||||
|
if urlget $URL1/$file >$file
|
||||||
|
then packit $file && echo Installed ok.
|
||||||
|
srcurl=$SRCURL1/$file
|
||||||
|
else echo "Retrying from Beta binary location.."
|
||||||
|
if urlget $URL2/$file >$file
|
||||||
|
then packit $file && echo Installed ok.
|
||||||
|
srcurl=$SRCURL2/$file
|
||||||
|
else echo "Retrieval failed."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$src" = y -o "$src" = Y ]
|
||||||
|
then ( cd $SRC || exit
|
||||||
|
srcfile=${packagename}-src.tar.bz2
|
||||||
|
echo "Retrieving source from $srcurl .."
|
||||||
|
urlget $srcurl >$srcfile || exit
|
||||||
|
echo "Source retrieved in $SRC/$srcfile."
|
||||||
|
smallbunzip2 -dc $srcfile | tar xf - >/dev/null || exit
|
||||||
|
echo "Source unpacked in $SRC."
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
cdrom*)
|
||||||
|
if -f [ $CDPACK/$file ]
|
||||||
|
then packit $CDPACK/$file
|
||||||
|
fi
|
||||||
|
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
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else cont=n
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
Loading…
Reference in a new issue