242 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			242 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| RC=/usr/etc/rc.package
 | |
| CDDIR=PACKAGES
 | |
| CDMP=/mnt
 | |
| CDPACK=${CDMP}/install/packages
 | |
| CDSRC=${CDMP}/install/package-sources
 | |
| SRC=/usr/src/commands
 | |
| LISTFILE=/etc/packages
 | |
| LISTURL=http://www.minix3.org/packages/List
 | |
| TMPDIR=/usr/tmp/packages
 | |
| mkdir -p $TMPDIR
 | |
| URL1=http://www.minix3.org/packages
 | |
| URL2=http://www.minix3.org/beta_packages
 | |
| SRCURL1=http://www.minix3.org/software
 | |
| SRCURL2=http://www.minix3.org/beta_software
 | |
| 
 | |
| # can we execute bunzip2?
 | |
| if bunzip2 --help 2>&1 | grep usage >/dev/null
 | |
| then    BUNZIP2=bunzip2 
 | |
| else    BUNZIP2=smallbunzip2
 | |
| fi
 | |
| 
 | |
| if id | fgrep "uid=0(" >/dev/null
 | |
| then	:
 | |
| else	echo "Please run $0 as root."
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| chmod 700 $TMPDIR
 | |
| 
 | |
| if [ -f "$RC" ]
 | |
| then	. "$RC"
 | |
| fi
 | |
| 
 | |
| cd /
 | |
| 
 | |
| cdpackages=""
 | |
| if [ -n "$cddrive" ]
 | |
| then	pack=${cddrive}p2
 | |
| 	umount $pack >/dev/null 2>&1 || true
 | |
| 	if mount -r $pack $CDMP
 | |
| 	then	fn="$CDPACK/List"
 | |
| 		cdpackages=$fn
 | |
| 		if [ ! -f $cdpackages ]
 | |
| 		then	cdpackages=""
 | |
| 			echo "No package list found on CD in $fn."
 | |
| 		fi
 | |
| 	else	echo "CD mount failed."
 | |
| 	fi
 | |
| else	echo "Don't know where the install CD is. You can set it in $RC."
 | |
| fi
 | |
| 
 | |
| # For local testing
 | |
| #cdpackages=/usr/bigports/Packages/List
 | |
| #CDPACK=/usr/bigports/Packages
 | |
| #CDSRC=/usr/bigports/Sources
 | |
| 
 | |
| if [ "$cdpackages" = "" ]
 | |
| then	echo "Skipping CD packages."
 | |
| else	cont=y
 | |
| 	while [ $cont = y ]
 | |
| 	do	n="`wc -l $cdpackages | awk '{ print $1 }'`"
 | |
| 		sourcef=$CDSRC/SizeMB
 | |
| 		binf=$CDPACK/SizeMB
 | |
| 		if [ -f $binf -a -f $sourcef ]
 | |
| 		then	sourcemb="`cat $sourcef`"
 | |
| 			binmb="`cat $binf`"
 | |
| 			sourcesize=" (`expr $binmb + $sourcemb` MB uncompressed)"
 | |
| 		else	sourcesize=""
 | |
| 		fi
 | |
| 		if [ -f $binf ]
 | |
| 		then	binmb="`cat $binf`"
 | |
| 			binsize=" ($binmb MB uncompressed)"
 | |
| 		else	binsize=""
 | |
| 		fi
 | |
| 
 | |
| 		echo "There are $n CD packages."
 | |
| 		echo "Please choose:"
 | |
| 		echo " 1  Install all $n binary packages$binsize from CD"
 | |
| 		echo " 2  Install all $n binary packages + sources from CD$sourcesize"
 | |
| 		echo " 3  Display the list of packages on CD"
 | |
| 		echo " 4  Let me select individual packages to install from CD or network."
 | |
| 		echo " 5  Exit."
 | |
| 		echo -n "Choice: [4] "
 | |
| 		read in
 | |
| 		case "$in" in
 | |
| 		1|2)
 | |
| 			cd $CDPACK || exit
 | |
| 			echo " * Installing binaries .."
 | |
| 			for f in *.tar.bz2
 | |
| 			do	echo "Installing $f binaries .."
 | |
| 				packit $f && echo Installed $f
 | |
| 			done
 | |
| 			if [ "$in" = 2 ]
 | |
| 			then
 | |
| 				cd $SRC || exit
 | |
| 				echo " * Installing sources in $SRC .."
 | |
| 				for f in $CDSRC/*.tar.bz2
 | |
| 				do	echo "$f .."
 | |
| 					$BUNZIP2 -dc $f | tar xf - 
 | |
| 				done
 | |
| 			fi
 | |
| 			;;
 | |
| 		3)
 | |
| 			( echo "Displaying list; press q to leave it, space for more."
 | |
| 			  cat "$CDPACK/List" | awk -F'|' '{ printf "%-20s %s\n", $1, $2 }'
 | |
| 			) | more
 | |
| 			;;
 | |
| 		""|4)
 | |
| 			echo "Ok, showing packages to install." ; echo
 | |
| 			cont=n
 | |
| 			;;
 | |
| 		5)
 | |
| 			exit 0
 | |
| 			;;
 | |
| 		esac
 | |
| 	done
 | |
| 	echo -n "Press RETURN to continue .. "
 | |
| 	read xyzzy
 | |
| fi
 | |
| 
 | |
| TMPF=$TMPDIR/.list.$$
 | |
| rm -f $TMPF
 | |
| rm -f $TMPDIR/.*	# Remove any remaining .postinstall script or .list*
 | |
| 
 | |
| netpackages=""
 | |
| if ( : </dev/tcp ) 2>/dev/null
 | |
| then	if [ -f $LISTFILE ]
 | |
| 	then	echo -n "Update package list from network? (y/N) "
 | |
| 		read y
 | |
| 	else	echo "No package list found - retrieving initial version."
 | |
| 		y=y
 | |
| 	fi
 | |
| 	if [ "$y" = y -o "$y" = Y ]
 | |
| 	then	echo "Fetching package list."
 | |
| 		urlget $LISTURL >$TMPF && mv $TMPF $LISTFILE || echo "Update not successful."
 | |
| 	fi
 | |
| 	netpackages=$LISTFILE
 | |
| 	if [ ! -f "$netpackages" -o ! `cat "$netpackages" 2>/dev/null | wc -l | awk '{ print $1 }'` -gt 1 ]
 | |
| 	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 "No.|Source|Package|Description"
 | |
| 		(
 | |
| 		if [ -f "$netpackages" ]
 | |
| 		then	sed <$netpackages 's/^/net\|/'
 | |
| 		fi
 | |
| 		if [ -f "$cdpackages" ]
 | |
| 		then	sed <$cdpackages 's/^/cdrom\|/'
 | |
| 		fi
 | |
| 		) | sort -t'|' +1 | 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
 | |
| 	ok=y
 | |
| 	pat="^$packno|"
 | |
| 	if [ "`grep $pat $TMPF | wc -l | awk '{ print $1 }'`" -ne 1 ]
 | |
| 	then	if [ "$packno" ]
 | |
| 		then	echo "Wrong package number."
 | |
| 		fi
 | |
| 		ok=n
 | |
| 	fi
 | |
| 	if [ $ok = y ]
 | |
| 	then	source="`grep $pat $TMPF | awk -F'|' '{ print $2 }'`"
 | |
| 		packagename="`grep $pat $TMPF | awk -F'|' '{ print $3 }'`"
 | |
| 		file=$packagename.tar.bz2
 | |
| 		case $source in
 | |
| 		net*)	echo -n "Get source of $packagename? (y/N) "
 | |
| 			read src
 | |
| 			echo "Retrieving binary from primary location into $TMPDIR .."
 | |
| 			srcurl=""
 | |
| 			if urlget $URL1/$file >$file
 | |
| 			then	echo "Retrieved ok. Installing .."
 | |
| 				packit $file && echo Installed ok.
 | |
| 				srcurl=$SRCURL1/$file
 | |
| 			else	echo "Retrying from Beta binary location.."
 | |
| 				if urlget $URL2/$file >$file
 | |
| 				then	echo "Retrieved ok. Installing .."
 | |
| 					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."
 | |
| 					$BUNZIP2 -dc $srcfile | tar xf - >/dev/null || exit
 | |
| 					echo "Source unpacked in $SRC."
 | |
| 				)
 | |
| 			fi
 | |
| 			;;
 | |
| 		cdrom*)
 | |
| 			if [ -f $CDPACK/$file ]
 | |
| 			then	echo "Installing from $CDPACK/$file .."
 | |
| 				packit $CDPACK/$file
 | |
| 			else	echo "$CDPACK/$file not found."
 | |
| 			fi
 | |
| 			srcfile=$CDSRC/${packagename}-src.tar.bz2
 | |
| 			if [ -f $srcfile ]
 | |
| 			then
 | |
| 				echo -n "Get source of $packagename? (y/N) "
 | |
| 				read src
 | |
| 				if [ "$src" = y -o "$src" = Y ]
 | |
| 				then	(	cd $SRC || exit
 | |
| 						$BUNZIP2 -dc $srcfile | tar xf - || exit
 | |
| 						echo "Source $srcfile unpacked in $SRC."
 | |
| 					)
 | |
| 				fi
 | |
| 			else	echo "No source on CD for $packagename."
 | |
| 			fi
 | |
| 			;;
 | |
| 		esac
 | |
| 	else	cont=n
 | |
| 	fi
 | |
| done
 | |
| 
 | |
| rm -f $TMPDIR/.*	# Remove any remaining .postinstall script or .list*
 | 
