tazlito rev 19

pave the road to flavors. May use cdrom to repack packages such as [sys]linux
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Dec 16 14:46:01 2007 +0000 (2007-12-16)
parents 12ae06f2655a
children 3f99b39ad0f4
files tazlito
line diff
     1.1 --- a/tazlito	Fri Dec 14 20:40:12 2007 +0000
     1.2 +++ b/tazlito	Sun Dec 16 14:46:01 2007 +0000
     1.3 @@ -17,6 +17,7 @@
     1.4  COMMAND=$1
     1.5  LIST_NAME=$2
     1.6  TMP_DIR=/tmp/tazlito-$$-$RANDOM
     1.7 +TMP_MNT=/media/tazlito-$$-$RANDOM
     1.8  TOP_DIR=`pwd`
     1.9  INITRAMFS=rootfs.gz
    1.10  LOCALSTATE=/var/lib/tazpkg
    1.11 @@ -121,6 +122,15 @@
    1.12  	cd $here
    1.13  }
    1.14  
    1.15 +cleanup()
    1.16 +{
    1.17 +	if [ -d $TMP_MNT ]; then
    1.18 +		umount $TMP_MNT
    1.19 +		rmdir $TMP_MNT
    1.20 +		rm -f /boot
    1.21 +	fi
    1.22 +}
    1.23 +
    1.24  # echo the package name if the tazpkg is already installed
    1.25  installed_package_name()
    1.26  {
    1.27 @@ -183,6 +193,7 @@
    1.28  	genisohooks iso
    1.29  	if [ ! -f "$ROOTCD/boot/isolinux/isolinux.bin" ] ; then
    1.30  		echo -e "\nUnable to find isolinux binary.\n"
    1.31 +		cleanup
    1.32  		exit 0
    1.33  	fi
    1.34  	cd $DISTRO
    1.35 @@ -222,7 +233,7 @@
    1.36  	echo -e "\033[1mDistro statistics\033[0m"
    1.37  	echo "================================================================================"
    1.38  	echo "Build date      : `date +%Y%m%d\ \at\ \%H:%M:%S`"
    1.39 -	echo "Packages        : `ls -1 $ROOTFS/var/lib/tazpkg/installed | wc -l`"
    1.40 +	echo "Packages        : `ls -1 $ROOTFS$INSTALLED | wc -l`"
    1.41  	echo "Rootfs size     : `du -sh $ROOTFS`"
    1.42  	echo "Initramfs size  : `du -sh $ROOTCD/boot/$INITRAMFS`"
    1.43  	echo "ISO image size  : `du -sh $ISO_NAME.iso`"
    1.44 @@ -431,23 +442,33 @@
    1.45  			echo -e "Please clean the distro tree or change directory path.\n"
    1.46  			exit 0
    1.47  		fi
    1.48 -		# First check for the main packages list then
    1.49 -		# for a distro-packages.list in the current directory
    1.50 -		# if none, check if a package list was specified on cmdline.
    1.51 -		if [ -f "/etc/slitaz-tools/distro-packages.list" ] ; then
    1.52 -			LIST_NAME="distro-packages.list"
    1.53 -		fi
    1.54 -		if [ -f "distro-packages.list" ] ; then
    1.55 -			LIST_NAME="distro-packages.list"
    1.56 -		fi
    1.57 -		if [ -n "$2" ] ; then
    1.58 -			if [ ! -f "$2" ] ; then
    1.59 -				echo -e "\nUnable to find the specified packages list."
    1.60 -				echo -e "List name : $2\n"
    1.61 -				exit 0
    1.62 -			else
    1.63 +		# Check if a package list was specified on cmdline.
    1.64 +		LIST_NAME="distro-packages.list"
    1.65 +		CDROM=""
    1.66 +		while [ -n "$2" ]; do
    1.67 +			case "$2" in
    1.68 +			--iso=*)
    1.69 +				CDROM="-o loop ${2#--iso=}"
    1.70 +				;;
    1.71 +			--cdrom)
    1.72 +				CDROM="/dev/cdrom"
    1.73 +				;;
    1.74 +			*)	if [ ! -f "$2" ] ; then
    1.75 +					echo -e "\nUnable to find the specified packages list."
    1.76 +					echo -e "List name : $2\n"
    1.77 +					exit 1
    1.78 +				fi
    1.79  				LIST_NAME=$2
    1.80 -			fi
    1.81 +				;;
    1.82 +			esac
    1.83 +			shift
    1.84 +		done
    1.85 +		if [ ! -f "$LIST_NAME" -a -d $INSTALLED ] ; then
    1.86 +		# Build list with installed packages
    1.87 +			for i in $(ls $INSTALLED); do
    1.88 +				eval $(grep ^VERSION= $INSTALLED/$i/receipt)
    1.89 +				echo "$i-$VERSION" >> $LIST_NAME
    1.90 +			done
    1.91  		fi
    1.92  		# Exit if no list name.
    1.93  		if [ ! -f "$LIST_NAME" ]; then
    1.94 @@ -468,6 +489,7 @@
    1.95  		DOWNLOAD=""
    1.96  		for pkg in $LIST
    1.97  		do
    1.98 +			[ "$pkg" = "" ] && continue
    1.99  			pkg=${pkg%.tazpkg}
   1.100  			[ -f $PACKAGES_REPOSITORY/$pkg.tazpkg ] && continue
   1.101  			PACKAGE=$(installed_package_name $pkg)
   1.102 @@ -493,12 +515,31 @@
   1.103  			fi
   1.104  			[ "$REPACK" = "n" -a "$DOWNLOAD" = "n" ] && exit 1
   1.105  		done
   1.106 +		
   1.107 +		# mount cdrom to be able to repack boot-loader packages
   1.108 +		if [ ! -e /boot -a -n "$CDROM" ]; then
   1.109 +			mkdir $TMP_MNT
   1.110 +			if mount -r /dev/cdrom $TMP_MNT 2> /dev/null; then
   1.111 +				ln -s $TMP_MNT/boot /
   1.112 +				if [ ! -d "$ADDFILES/rootcd" ] ; then
   1.113 +					mkdir -p $ADDFILES/rootcd
   1.114 +					for i in $(ls $TMP_MNT); do
   1.115 +						[ "$i" = "boot" ] && continue
   1.116 +						cp -a $TMP_MNT/$i $ADDFILES/rootcd
   1.117 +					done
   1.118 +				fi
   1.119 +			else
   1.120 +				rmdir $TMP_MNT
   1.121 +			fi
   1.122 +		fi
   1.123 +
   1.124  		# Root fs stuff.
   1.125  		echo "Preparing the rootfs directory..."
   1.126  		mkdir -p $ROOTFS
   1.127  		sleep 2
   1.128  		for pkg in $LIST
   1.129  		do
   1.130 +			[ "$pkg" = "" ] && continue
   1.131  			# First copy and extract the package in tmp dir.
   1.132  			pkg=${pkg%.tazpkg}
   1.133  			PACKAGE=$(installed_package_name $pkg)
   1.134 @@ -521,10 +562,12 @@
   1.135  			fi
   1.136  			if [ ! -f $PACKAGES_REPOSITORY/$pkg.tazpkg ]; then
   1.137  				echo "Missing package $pkg."
   1.138 +				cleanup
   1.139  				exit 1
   1.140  			fi
   1.141  			yes "" | tazpkg install $PACKAGES_REPOSITORY/$pkg.tazpkg --root=$ROOTFS
   1.142  		done
   1.143 +		cp $LIST_NAME $ROOTFS/etc/tazlito/distro-packages.list
   1.144  		echo ""
   1.145  		cd $DISTRO
   1.146  		# Copy all files from $ADDFILES/rootfs to the rootfs.
   1.147 @@ -558,6 +601,7 @@
   1.148  		gen_initramfs
   1.149  		gen_livecd_isolinux
   1.150  		distro_stats
   1.151 +		cleanup
   1.152  		;;
   1.153  	clean-distro)
   1.154  		# Remove old distro tree.