tazlito rev 414

tazlito: fix setup_mirrors(), add install_list_to_rootfs(). Working in progress, please don't update tazlito receipt.
Bug: for multi-rootfs $DISTRO/rootfs/var/lib/tazpkg not cleaned and spammed with PKGDB files.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Mon Feb 22 11:24:41 2016 +0200 (2016-02-22)
parents bd4b1f42430b
children 6ac6d30d100b
files tazlito
line diff
     1.1 --- a/tazlito	Sun Feb 21 04:51:59 2016 +0200
     1.2 +++ b/tazlito	Mon Feb 22 11:24:41 2016 +0200
     1.3 @@ -140,7 +140,7 @@
     1.4  		Y|y) answer="y";;
     1.5  		N|n) answer="n";;
     1.6  		*)
     1.7 -			read answer
     1.8 +			read -t 30 answer
     1.9  			[ -z "$answer" ] && answer="$2"
    1.10  			[ "$answer" != 'y' -a "$answer" != 'n' ] && answer="$2"
    1.11  			;;
    1.12 @@ -1350,7 +1350,7 @@
    1.13  	# And, finally, main mirror with the lowest (failsafe) priority (nothing to do)
    1.14  
    1.15  	# Show list of mirrors
    1.16 -	awk -vdb="$root$LOCALSTATE" '
    1.17 +	[ -f "$priority" ] && awk -vdb="$root$LOCALSTATE" '
    1.18  	function show(num, name, url,   pad, len) {
    1.19  		pad = "................................";
    1.20  		len = (32 - length(name));
    1.21 @@ -1550,6 +1550,7 @@
    1.22  
    1.23  
    1.24  # Display list of unknown packages (informative)
    1.25 +
    1.26  display_unknown() {
    1.27  	[ -s "$1" ] || return
    1.28  	echo "Unknown packages:" >&2
    1.29 @@ -1559,6 +1560,7 @@
    1.30  
    1.31  
    1.32  # Display warnings about critical packages absent (informative)
    1.33 +
    1.34  display_warn() {
    1.35  	[ -s "$1" ] || return
    1.36  	echo "Absent critical packages:" >&2
    1.37 @@ -1568,6 +1570,62 @@
    1.38  }
    1.39  
    1.40  
    1.41 +# Install packages to rootfs
    1.42 +
    1.43 +install_list_to_rootfs() {
    1.44 +	local list="$1" rootfs="$2" pkg i ii
    1.45 +
    1.46 +	# initial tazpkg setup in empty rootfs
    1.47 +	export root="$rootfs"
    1.48 +	tazpkg --root=$rootfs >/dev/null 2>&1
    1.49 +	# link rootfs packages cache to the regular packages cache
    1.50 +	rm -r "$rootfs/var/cache/tazpkg"
    1.51 +	ln -s /var/cache/tazpkg "$rootfs/var/cache/tazpkg"
    1.52 +
    1.53 +	setup_mirrors mirrors
    1.54 +
    1.55 +	# Just in case if flavor not contains "tazlito" package
    1.56 +	mkdir -p "$rootfs/etc/tazlito"
    1.57 +
    1.58 +	for pkg in $(cat $list); do
    1.59 +		action 'Installing package: %s' "$pkg"
    1.60 +		yes y | tazpkg -gi $pkg --root=$rootfs --quiet >> $log || exit 1
    1.61 +		status
    1.62 +	done
    1.63 +	newline
    1.64 +
    1.65 +	restore_mirrors
    1.66 +	# Remove 'fresh' and 'repacked' undigest repos leaving all other
    1.67 +	for i in fresh repacked; do
    1.68 +		ii="$rootfs/var/lib/tazpkg/undigest/$i"
    1.69 +		[ -d "$ii" ] && rm -rf "$ii"
    1.70 +		ii="$rootfs/var/lib/tazpkg/priority"
    1.71 +		if [ -f "$ii" ]; then
    1.72 +			sed -i "/$i/d" "$ii"
    1.73 +			[ -s "$ii" ] || rm "$ii"
    1.74 +		fi
    1.75 +	done
    1.76 +	[ -d "$rootfs/var/lib/tazpkg/undigest" ] && \
    1.77 +	for i in $(find "$rootfs/var/lib/tazpkg/undigest" -type f); do
    1.78 +		# Remove all undigest PKGDB files but 'mirror'
    1.79 +		[ "$(basename "$i")" != 'mirror' ] && rm "$i"
    1.80 +	done
    1.81 +	[ -d "$rootfs/var/lib/tazpkg/undigest" ] && \
    1.82 +		rmdir --ignore-fail-on-non-empty "$rootfs/var/lib/tazpkg/undigest"
    1.83 +
    1.84 +	# Un-link packages cache
    1.85 +	rm "$rootfs/var/cache/tazpkg"
    1.86 +
    1.87 +	# Clean /var/lib/tazpkg
    1.88 +	rm  $rootfs/var/lib/tazpkg/ID* \
    1.89 +		$rootfs/var/lib/tazpkg/descriptions.txt \
    1.90 +		$rootfs/var/lib/tazpkg/extra.list \
    1.91 +		$rootfs/var/lib/tazpkg/files* \
    1.92 +		$rootfs/var/lib/tazpkg/packages.* \
    1.93 +		2>/dev/null
    1.94 +}
    1.95 +
    1.96 +
    1.97  
    1.98  
    1.99  ####################
   1.100 @@ -2289,18 +2347,6 @@
   1.101  			rm -r "$tmp_dir"
   1.102  		fi
   1.103  
   1.104 -		# initial tazpkg setup in empty rootfs
   1.105 -		export root="$ROOTFS"
   1.106 -		tazpkg >/dev/null 2>&1
   1.107 -		# link rootfs packages cache to the regular packages cache
   1.108 -		rm -r "$ROOTFS/var/cache/tazpkg"
   1.109 -		ln -s /var/cache/tazpkg "$ROOTFS/var/cache/tazpkg"
   1.110 -
   1.111 -		setup_mirrors mirrors
   1.112 -
   1.113 -		# Just in case if flavor not contains "tazlito" package
   1.114 -		mkdir -p "$ROOTFS/etc/tazlito"
   1.115 -
   1.116  		if [ -f non-free.list ]; then
   1.117  			# FIXME: working in the ROOTFS chroot?
   1.118  			newline
   1.119 @@ -2322,28 +2368,7 @@
   1.120  		cp $LIST_NAME $DISTRO/distro-packages.list
   1.121  		newline
   1.122  
   1.123 -		for pkg in $(cat $DISTRO/distro-packages.list); do
   1.124 -			action 'Installing package: %s' "$pkg"
   1.125 -			yes y | tazpkg -gi $pkg --root=$ROOTFS --quiet >> $log || exit 1
   1.126 -			status
   1.127 -		done
   1.128 -		newline
   1.129 -
   1.130 -		restore_mirrors
   1.131 -
   1.132 -		# Un-link packages cache
   1.133 -		rm $ROOTFS/var/cache/tazpkg
   1.134 -		# Clean /var/lib/tazpkg
   1.135 -		rm  $ROOTFS/var/lib/tazpkg/ID* \
   1.136 -			$ROOTFS/var/lib/tazpkg/descriptions.txt \
   1.137 -			$ROOTFS/var/lib/tazpkg/extra.list \
   1.138 -			$ROOTFS/var/lib/tazpkg/files* \
   1.139 -			$ROOTFS/var/lib/tazpkg/packages* \
   1.140 -			$ROOTFS/var/lib/tazpkg/priority \
   1.141 -		-rf $ROOTFS/var/lib/tazpkg/undigest \
   1.142 -			2>/dev/null
   1.143 -		# Back to default mirror
   1.144 -		echo "$DEFAULT_MIRROR" > $ROOTFS/var/lib/tazpkg/mirror
   1.145 +		install_list_to_rootfs "$DISTRO/distro-packages.list" "$ROOTFS"
   1.146  
   1.147  		cd $DISTRO
   1.148  		cp distro-packages.list $ROOTFS/etc/tazlito
   1.149 @@ -2441,46 +2466,10 @@
   1.150  				# Install packages
   1.151  				cd $PACKAGES_REPOSITORY
   1.152  
   1.153 -				# initial tazpkg setup in empty rootfs
   1.154 -				export root="${ROOTFS}0$n"
   1.155 -				tazpkg >/dev/null 2>&1
   1.156 -				# link rootfs packages cache to the regular packages cache
   1.157 -				rm -r "${ROOTFS}0$n/var/cache/tazpkg"
   1.158 -				ln -s /var/cache/tazpkg "${ROOTFS}0$n/var/cache/tazpkg"
   1.159 -
   1.160 -				setup_mirrors mirrors
   1.161 -
   1.162 -				# Just in case if flavor not contains "tazlito" package
   1.163 -				mkdir -p "${ROOTFS}0$n/etc/tazlito"
   1.164 -
   1.165 -
   1.166 -				for pkg in $(cat $DISTRO/list-packages0$n); do
   1.167 -					action 'Installing package: %s' "$pkg"
   1.168 -					yes y | tazpkg -gi $pkg --root=${ROOTFS}0$n --quiet >> $log || exit 1
   1.169 -					status
   1.170 -				done
   1.171 -
   1.172 -				restore_mirrors
   1.173 +				install_list_to_rootfs "$DISTRO/list-packages0$n" "${ROOTFS}0$n"
   1.174  
   1.175  				rm -rf ${ROOTFS}0$n/boot
   1.176  
   1.177 -				# Un-link packages cache
   1.178 -				rm ${ROOTFS}0$n/var/cache/tazpkg
   1.179 -
   1.180 -				# Clean /var/lib/tazpkg
   1.181 -				rm  ${ROOTFS}0$n/var/lib/tazpkg/ID* \
   1.182 -					${ROOTFS}0$n/var/lib/tazpkg/descriptions.txt \
   1.183 -					${ROOTFS}0$n/var/lib/tazpkg/extra.list \
   1.184 -					${ROOTFS}0$n/var/lib/tazpkg/files* \
   1.185 -					${ROOTFS}0$n/var/lib/tazpkg/packages.* \
   1.186 -					${ROOTFS}0$n/var/lib/tazpkg/priority \
   1.187 -				-rf ${ROOTFS}0$n/var/lib/tazpkg/undigest \
   1.188 -					2>/dev/null
   1.189 -
   1.190 -				# Back to default mirror
   1.191 -				echo "$DEFAULT_MIRROR" > ${ROOTFS}0$n/var/lib/tazpkg/mirror
   1.192 -
   1.193 -
   1.194  				cd $DISTRO
   1.195  				if [ -s $flavor.rootfs ]; then
   1.196  					echo -n "Adding $flavor rootfs extra files..."