tazpkg rev 648

tazpkg: add get repo support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Feb 16 11:19:03 2014 +0000 (2014-02-16)
parents d224faea85cc
children 192b971ccc93
files tazpkg
line diff
     1.1 --- a/tazpkg	Sun Feb 16 11:30:17 2014 +0100
     1.2 +++ b/tazpkg	Sun Feb 16 11:19:03 2014 +0000
     1.3 @@ -444,6 +444,23 @@
     1.4  	echo "$DATE - $1 - $PACKAGE ($VERSION$EXTRAVERSION)$extra" >> $LOG
     1.5  }
     1.6  
     1.7 +# Download a get-package script from this mirror
     1.8 +download_get_script()
     1.9 +{
    1.10 +	local p
    1.11 +	for p in $priority ; do
    1.12 +		local i
    1.13 +		for i in $(cat $p/mirror) ; do
    1.14 +			case "$i" in
    1.15 +			http://*|ftp://*)
    1.16 +				wget -O $2 ${i%packages/*}packages/get/$1 &&
    1.17 +				return 0 ;;
    1.18 +			esac
    1.19 +		done
    1.20 +	done
    1.21 +	return 1
    1.22 +}
    1.23 +
    1.24  # Download a file from this mirror
    1.25  download_from()
    1.26  {
    1.27 @@ -702,6 +719,63 @@
    1.28  	[ -n "$ROOT" ] || log_pkg Installed
    1.29  }
    1.30  
    1.31 +# This function may be called by a get script.
    1.32 +abort_package()
    1.33 +{
    1.34 +	cd $CUR_DIR
    1.35 +	rm -rf $TMP_DIR
    1.36 +	echo "${1:-Abort $PACKAGE.}"
    1.37 +	exit 1
    1.38 +}
    1.39 +
    1.40 +# This function installs a package form a get script in the rootfs.
    1.41 +install_package_from_get_script()
    1.42 +{
    1.43 +	SCRIPT="$1"
    1.44 +	ROOT="$2"
    1.45 +	[ -d $ROOT$INSTALLED/$PACKAGE ] && exit 1
    1.46 +
    1.47 +	grep -q no-check-certificate $SCRIPT &&
    1.48 +	[ ! -d $INSTALLED/wget ] && tazpkg get-install wget
    1.49 +
    1.50 +	mkdir -p $TMP_DIR && cd $TMP_DIR
    1.51 +
    1.52 +	unset VERSION CATEGORY WEB_SITE SHORT_DESC MAINTAINER LICENSE \
    1.53 +	      TARBALL WGET_URL CONFIG_FILES SUGGESTED PROVIDE DEPENDS
    1.54 +	set -e
    1.55 +	. $SCRIPT
    1.56 +	
    1.57 +	if [ ! -s $PACKAGE-$VERSION/receipt ]; then
    1.58 +		cat > $PACKAGE-$VERSION/receipt <<EOT
    1.59 +# SliTaz package receipt.
    1.60 +
    1.61 +PACKAGE="$PACKAGE"
    1.62 +VERSION="$VERSION"
    1.63 +CATEGORY="${CATEGORY:-non-free}"
    1.64 +WEB_SITE="$WEB_SITE"
    1.65 +SHORT_DESC="${SHORT_DESC:-$PACKAGE}"
    1.66 +MAINTAINER="${MAINTAINER:-nobody@slitaz.org}"
    1.67 +EOT
    1.68 +		for i in LICENSE TARBALL WGET_URL CONFIG_FILES SUGGESTED \
    1.69 +			 PROVIDE DEPENDS ; do
    1.70 +			eval "[ -n \"\$$i\" ] && echo \"$i=\\\"\$$i\\\"\""
    1.71 +		done >> $PACKAGE-$VERSION/receipt
    1.72 +	fi
    1.73 +
    1.74 +	tazpkg pack $PACKAGE-$VERSION
    1.75 +
    1.76 +	# Clean to save RAM memory before installation
    1.77 +	rm -rf $PACKAGE-$VERSION
    1.78 +
    1.79 +	# Install pseudo package
    1.80 +	tazpkg install $PACKAGE-$VERSION.tazpkg --root=$ROOT
    1.81 +	mv $PACKAGE-$VERSION.tazpkg $CACHE_DIR
    1.82 +
    1.83 +	# Clean
    1.84 +	cd $TOP_DIR
    1.85 +	rm -rf $TMP_DIR
    1.86 +}
    1.87 +
    1.88  # Check for loop in deps tree.
    1.89  check_for_deps_loop()
    1.90  {
    1.91 @@ -1096,7 +1170,7 @@
    1.92  		done
    1.93  	done
    1.94  	spc=""
    1.95 -	cat $TMP_DIR/depends 2> /dev/null | sort | uniq | while read file; do
    1.96 +	sort < $TMP_DIR/depends 2> /dev/null | uniq | while read file; do
    1.97  		echo -n "$spc$file"
    1.98  		spc=" "
    1.99  	done
   1.100 @@ -1106,7 +1180,7 @@
   1.101  {
   1.102  	if [ -s $TMP_DIR/unresolved ]; then
   1.103  		echo -e "BUGS=\"`gettext \"No dependency for\"`" >> $1
   1.104 -		cat $TMP_DIR/unresolved | sort | uniq | while read file; do
   1.105 +		sort < $TMP_DIR/unresolved | uniq | while read file; do
   1.106  			eval_gettext "WARNING: unknown dependency for \$lib"; echo
   1.107  			echo -n " $file" >> $1
   1.108  		done
   1.109 @@ -1257,7 +1331,7 @@
   1.110  {
   1.111  chroot \$1/ sh - << EOT
   1.112  cd /
   1.113 -$(cat $file/fs/p$i.sh | sed -e 's/\\/\\\\/g' | sed -e 's/\$/\\$/g' ; rm -f $file/fs/p$i.sh)
   1.114 +$(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < $file/fs/p$i.sh ; rm -f $file/fs/p$i.sh)
   1.115  EOT
   1.116  }
   1.117  EOM
   1.118 @@ -1372,7 +1446,7 @@
   1.119  {
   1.120  chroot \$1/ sh - << EOT
   1.121  cd /
   1.122 -$(cat $file/fs/install/doinst.sh | sed -e 's/\\/\\\\/g' | sed -e 's/\$/\\$/g')
   1.123 +$(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < $file/fs/install/doinst.sh)
   1.124  EOT
   1.125  }
   1.126  EOM
   1.127 @@ -1619,7 +1693,7 @@
   1.128  				if [ -f "$LOCALSTATE/packages.diff" ]; then
   1.129  					title 'Mirrored packages diff'
   1.130  					cat $LOCALSTATE/packages.diff
   1.131 -					num=$(cat $LOCALSTATE/packages.diff | wc -l)
   1.132 +					num=$(wc -l < $LOCALSTATE/packages.diff)
   1.133  					footer "$(eval_ngettext \
   1.134  						'$num new package listed on the mirror.' \
   1.135  						'$num new packages listed on the mirror.' $num)"
   1.136 @@ -1633,7 +1707,7 @@
   1.137  				title 'List of available packages on the mirror'
   1.138  				cat $LOCALSTATE/packages.txt ;;
   1.139  		esac
   1.140 -		pkgs=$(cat $LOCALSTATE/packages.list | wc -l)
   1.141 +		pkgs=$(wc -l < $LOCALSTATE/packages.list)
   1.142  		num=$(emsg "<c 32>$pkgs</c>")
   1.143  		footer "$(eval_ngettext \
   1.144  			'$num package in the last recharged list.' \
   1.145 @@ -1644,8 +1718,8 @@
   1.146  		check_for_package_on_cmdline
   1.147  		check_for_receipt
   1.148  		title 'Installed files by: $PACKAGE'
   1.149 -		cat $INSTALLED/$PACKAGE/files.list | sort
   1.150 -		files=$(cat $INSTALLED/$PACKAGE/files.list | wc -l)
   1.151 +		sort < $INSTALLED/$PACKAGE/files.list
   1.152 +		files=$(wc -l < INSTALLED/$PACKAGE/files.list)
   1.153  		num=$(emsg "<c 32>$files</c>")
   1.154  		footer "$(eval_ngettext \
   1.155  			'$num file installed with $PACKAGE' \
   1.156 @@ -2338,7 +2412,7 @@
   1.157  				sed -i s/+// packages.diff
   1.158  				title 'Mirrored packages diff'
   1.159  				cat packages.diff
   1.160 -				new_pkgs=`cat packages.diff | wc -l`
   1.161 +				new_pkgs=$(wc -l < packages.diff)
   1.162  				if [ "$new_pkgs" != 0 ]; then
   1.163  					num=$(emsg "<c 32>$new_pkgs</c>")
   1.164  					footer "$(eval_ngettext \
   1.165 @@ -2435,7 +2509,7 @@
   1.166  			done
   1.167  		done
   1.168  		sed -i /^$/d $UP_LIST
   1.169 -		upnb=$(cat $UP_LIST | wc -l)
   1.170 +		upnb=$(wc -l < $UP_LIST)
   1.171  		pkgs=$(ls | wc -l)
   1.172  		time=$(($(date +%s) - $time))
   1.173  		if [ "$upnb" = 0 ]; then
   1.174 @@ -2704,14 +2778,19 @@
   1.175  
   1.176  		AUTOEXEC="no"
   1.177  		if ! check_for_package_in_list check; then
   1.178 -			PACKAGE=get-$PACKAGE
   1.179 -			AUTOEXEC=$PACKAGE
   1.180 -			check_for_package_in_list
   1.181 -			if [ -n "$(get_installed_package_pathname $PACKAGE $ROOT)" ]; then
   1.182 -				CACHE_DIR="${CACHE_DIR%/*}/get"
   1.183 -				[ -d "$CACHE_DIR" ] || mkdir -p $CACHE_DIR
   1.184 -				$AUTOEXEC $ROOT
   1.185 +			CACHE_DIR="${CACHE_DIR%/*}/get"
   1.186 +			[ -d "$CACHE_DIR" ] || mkdir -p $CACHE_DIR
   1.187 +			if download_get_script $PACKAGE /tmp/$PACKAGE.$$ ; then
   1.188 +				install_package_from_get_script /tmp/$PACKAGE.$$ $ROOT
   1.189  				exit 0
   1.190 +			else
   1.191 +				PACKAGE=get-$PACKAGE
   1.192 +				AUTOEXEC=$PACKAGE
   1.193 +				check_for_package_in_list
   1.194 +				if [ -n "$(get_installed_package_pathname $PACKAGE $ROOT)" ]; then
   1.195 +					$AUTOEXEC $ROOT
   1.196 +					exit 0
   1.197 +				fi
   1.198  			fi
   1.199  		fi
   1.200  		# Check if forced install.