You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							180 lines
						
					
					
						
							4.0 KiB
						
					
					
				
			
		
		
	
	
							180 lines
						
					
					
						
							4.0 KiB
						
					
					
				| #!/bin/sh | |
| # --- SDE-COPYRIGHT-NOTE-BEGIN --- | |
| # This copyright note is auto-generated by ./scripts/Create-CopyPatch. | |
| # | |
| # Filename: package/.../bize/bize.sh | |
| # Copyright (C) 2008 The OpenSDE Project | |
| # Copyright (C) 2004 - 2006 The T2 SDE Project | |
| # | |
| # More information can be found in the files COPYING and README. | |
| # | |
| # This program is free software; you can redistribute it and/or modify | |
| # it under the terms of the GNU General Public License as published by | |
| # the Free Software Foundation; version 2 of the License. A copy of the | |
| # GNU General Public License can be found in the file COPYING. | |
| # --- SDE-COPYRIGHT-NOTE-END --- | |
|  | |
| bize_usage() | |
| { | |
| 	echo "usage: bize -i [-t] [-v] [-f] [-R root] package1.tar.bz2 ..." 1>&2 | |
| 	echo "       bize -r [-t] [-v] [-f] [-R root] package1 ..." 1>&2 | |
| } | |
|  | |
| bize_remove() | |
| { | |
| 	local line base tag md5s="$adm/md5sums/$pkg" | |
|  | |
| 	if [ "$keep" ] ; then | |
| 		if [ ! -f "$md5s" ] ; then | |
| 			echo "$0: $md5s: no such file, skipping remove" 1>&2 | |
| 			return | |
| 		fi | |
|  | |
| 		(cd "$root/" && md5sum -c "var/adm/md5sums/$pkg" 2> /dev/null) | | |
| 		while read line ; do | |
| 			base="${line%: *}" | |
| 			stat="${line##*: }" | |
| 			file="$root/$base" | |
| 			if [ -z "$base" -o -z "$stat" ] ; then | |
| 				echo "$0: invalid md5sum output '$line'" 1>&2 | |
| 			elif [ -f "$file" -a ! -L "$file" ] ; then | |
| 				if [ "$stat" = OK ] ; then | |
| 					$unlink "$file" | |
| 				elif [ "$stat" != FAILED ] ; then | |
| 					echo "$0: $file: $stat" | |
| 				elif [ "$test" ] ; then | |
| 					echo "$0: $file: modified, skipping" | |
| 				fi | |
| 			fi | |
| 		done | |
| 	fi | |
|  | |
| 	sort -r "$list" | while read tag base ; do | |
| 		file="$root/$base" | |
| 		if [ "$tag" != "$pkg:" ] ; then | |
| 			echo "$0: invalid tag '$tag' in $list" 1>&2 | |
| 		elif [ -z "$base" ] ; then | |
| 			echo "$0: missing file name in $list" 1>&2 | |
| 		elif [ -L "$file" ] ; then | |
| 			$unlink "$file" | |
| 		elif [ -d "$file" ] ; then | |
| 			$test rmdir $voption "$file" | |
| 		elif [ "${base#var/adm/}" != "$base" -a -f "$file" ] ; then | |
| 			$unlink "$file" | |
| 		elif [ "$keep" -a -f "$file" ] ; then | |
| 			[ "$test" ] || echo "$0: $file: modified, skipping" | |
| 		else | |
| 			$unlink "$file" | |
| 		fi | |
| 	done | |
| } | |
|  | |
| bize_install() | |
| { | |
| 	if [ ! -f "$arch" ] ; then | |
| 		echo "$0: $arch: no such file, skipping install" 1>&2 | |
| 		return | |
| 	fi | |
|  | |
| 	pkg="${arch%.tar.bz2}" | |
| 	if [ "$arch" = "$pkg" ] ; then | |
| 		echo "$0: $arch: not a .tar.bz2 file" 1>&2 | |
| 		return | |
| 	fi | |
| 	pkg="${pkg%-[0-9]*}" | |
| 	pkg="${pkg##*/}" | |
|  | |
| 	if [ -z "$pkg" ] ; then | |
| 		echo "$0: $arch: missing package name" 1>&2 | |
| 		return | |
| 	fi | |
| 	[ "${arch#-}" = "$arch" ] || arch="./$arch" | |
|  | |
| 	list="$adm/flists/$pkg" | |
| 	if [ -f "$list" ] ; then | |
| 		[ "$verbose" ] && echo "updating $pkg ..." | |
| 		bize_remove | |
| 	else | |
| 		[ "$verbose" ] && echo "installing $pkg ..." | |
| 	fi | |
|  | |
| 	$test mkdir -p$verbose "$root/" | |
| 	if [ "$test" ] ; then | |
| 		echo "bzip2 -c -d $arch | tar $taropt -C $root/" | |
| 	else | |
| 		bzip2 -c -d "$arch" | tar $taropt -C "$root/" | |
| 	fi | |
| } | |
|  | |
| bize_uninstall() | |
| { | |
| 	[ "$verbose" ] && echo "removing $pkg" | |
| 	list="$adm/flists/$pkg" | |
| 	if [ -f "$list" ] ; then | |
| 		bize_remove | |
| 	else | |
| 		echo "$0: $list: no such file, skipping remove" 1>&2 | |
| 	fi | |
| } | |
|  | |
| bize_main() | |
| { | |
| 	local which=which file arch list="sort rm rmdir mkdir tar bzip2" | |
| 	local install remove test verbose voption keep=k root=/ taropt | |
|  | |
| 	while [ "$1" ] ; do | |
| 		case "$1" in | |
| 			-i) install=1 ;; | |
| 			-r) remove=1 ;; | |
| 			-t) test=echo ;; | |
| 			-f) keep= ;; | |
| 			-v) verbose=v ; voption=-v ;; | |
| 			-R) shift ; root="$1" ;; | |
| 			-R*) root="${1#-R}" ;; | |
| 			--) break ;; | |
| 			-*) bize_usage ; return 1 ;; | |
| 			*) break;; | |
| 		esac | |
| 		shift | |
| 	done | |
|  | |
| 	if type sh > /dev/null 2>&1 ; then | |
| 		which=type | |
| 	elif ! which sh > /dev/null ; then | |
| 		echo "$0: unable to find 'type' or 'which'" 1>&2 | |
| 		return 1 | |
| 	fi | |
|  | |
| 	[ "$keep" ] && list="$list md5sum" | |
| 	for file in $list ; do | |
| 		if ! $which $file > /dev/null ; then | |
| 			echo "$0: unable to find '$file'" 1>&2 | |
| 			return 1 | |
| 		fi | |
| 	done | |
|  | |
| 	if [ "$install" = "$remove" -o -z "$root" -o -z "$*" ] ; then | |
| 		bize_usage | |
| 		return 1 | |
| 	fi | |
|  | |
| 	root="${root%/}" | |
| 	[ "${root#-}" = "$root" ] || root="./$root" | |
|  | |
| 	local adm="$root/var/adm" unlink="$test rm -f$verbose" pkg | |
|  | |
| 	if [ "$install" ] ; then | |
| 		taropt="xp${verbose}${keep}" | |
| 		for arch do | |
| 			bize_install | |
| 		done | |
| 	else | |
| 		for pkg do | |
| 			bize_uninstall | |
| 		done | |
| 	fi | |
|  | |
| 	return 0 | |
| } | |
|  | |
| bize_main "$@"
 | |
| 
 |