tazlito rev 404

iso2flavor: use iso flavor infos
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Nov 24 12:56:25 2015 +0100 (2015-11-24)
parents 639fcd94f19b
children 66f7dad7972b
files tazlito
line diff
     1.1 --- a/tazlito	Mon Nov 23 12:22:17 2015 +0100
     1.2 +++ b/tazlito	Tue Nov 24 12:56:25 2015 +0100
     1.3 @@ -1185,6 +1185,20 @@
     1.4  	cd - > /dev/null
     1.5  }
     1.6  
     1.7 +# get byte(s) form a binary file 
     1.8 +get()
     1.9 +{
    1.10 +	od -v -j $1 -N ${3:-2} -t u${3:-2} -w${3:-2} -An $2 2>/dev/null
    1.11 +}
    1.12 +
    1.13 +# get cpio flavor info from the ISO image
    1.14 +flavordata()
    1.15 +{
    1.16 +	[ $(get 1024 $1) -eq 35615 ] && n=2 || n=$((1+$(get 417 $1 1)))
    1.17 +	dd if=$1 bs=512 skip=$n count=20 2>/dev/null | zcat 2>/dev/null
    1.18 +}
    1.19 +
    1.20 +
    1.21  ####################
    1.22  # Tazlito commands #
    1.23  ####################
    1.24 @@ -1793,6 +1807,7 @@
    1.25  				status
    1.26  			fi
    1.27  			infos="$FLAVOR.desc"
    1.28 +			[ -s $TMP_DIR/$FLAVOR.receipt ] && infos="$infos\n$FLAVOR.receipt"
    1.29  			for i in rootcd rootfs; do
    1.30  				if [ -f $TMP_DIR/$FLAVOR.$i ]; then
    1.31  					echo -n "Adding $i files... "
    1.32 @@ -1843,18 +1858,22 @@
    1.33  			exit 1
    1.34  		fi
    1.35  		FLAVOR=${3%.flavor}
    1.36 -		mkdir -p $TMP_DIR/iso $TMP_DIR/rootfs
    1.37 +		mkdir -p $TMP_DIR/iso $TMP_DIR/rootfs $TMP_DIR/flavor
    1.38  		mount -o loop,ro $2 $TMP_DIR/iso
    1.39 -		if [ -s $TMP_DIR/iso/boot/rootfs1.gz ]; then
    1.40 +		flavordata $2 | (cd $TMP_DIR/flavor ; cpio -i 2> /dev/null)
    1.41 +		if [ -s $TMP_DIR/iso/boot/rootfs1.gz -a \
    1.42 +		     ! -s $TMP_DIR/flavor/*.desc ]; then
    1.43  			echo "META flavors are not supported."
    1.44  			umount -d $TMP_DIR/iso
    1.45 -		elif [ ! -s $TMP_DIR/iso/boot/rootfs.gz ]; then
    1.46 +		elif [ ! -s $TMP_DIR/iso/boot/rootfs.gz -a \
    1.47 +		       ! -s $TMP_DIR/iso/boot/rootfs1.gz ]; then
    1.48  			echo "No /boot/rootfs.gz in iso image. Needs a SliTaz iso."
    1.49  			umount -d $TMP_DIR/iso
    1.50  		else
    1.51 -			( zcat < $TMP_DIR/iso/boot/rootfs.gz || \
    1.52 -			  unlzma < $TMP_DIR/iso/boot/rootfs.gz ) | \
    1.53 +			for i in $(ls -r $TMP_DIR/iso/boot/rootfs*gz); do
    1.54 +				( zcat < $i || unlzma < $i ) | \
    1.55  				( cd $TMP_DIR/rootfs ; cpio -idmu > /dev/null 2>&1 )
    1.56 +			done
    1.57  			if [ ! -s $TMP_DIR/rootfs/etc/slitaz-release ]; then
    1.58  				echo "No file /etc/slitaz-release in /boot/rootfs.gz of iso image. Needs a non loram SliTaz iso."
    1.59  				umount -d $TMP_DIR/iso
    1.60 @@ -1865,29 +1884,37 @@
    1.61  				ISO_SIZE=$(df -h $TMP_DIR/iso | awk 'END { print $2 }')
    1.62  				BUILD_DATE=$(date +%Y%m%d\ \at\ \%H:%M:%S -r $TMP_DIR/iso/md5sum)
    1.63  				umount -d $TMP_DIR/iso
    1.64 -				INITRAMFS_SIZE=$(du -chs $TMP_DIR/rootcd/boot/rootfs.gz | awk '{ s=$1 } END { print $1 }')
    1.65 +				INITRAMFS_SIZE=$(du -chs $TMP_DIR/rootcd/boot/rootfs*.gz | awk 'END { print $1 }')
    1.66  				rm -f $TMP_DIR/rootcd/boot/rootfs.gz $TMP_DIR/rootcd/md5sum
    1.67  				mv $TMP_DIR/rootcd/boot $TMP_DIR/rootfs
    1.68  				sed 's/.*  \(.*\).tazpkg*/\1/' > $TMP_DIR/$FLAVOR.pkglist \
    1.69  					< $TMP_DIR/rootfs$INSTALLED.md5
    1.70 -				#[ -s $TMP_DIR/rootfs/etc/tazlito/distro-packages.list ] &&
    1.71 -				#	mv $TMP_DIR/rootfs/etc/tazlito/distro-packages.list $TMP_DIR/$FLAVOR.pkglist
    1.72  				PKGCNT=$(grep -v ^# $TMP_DIR/$FLAVOR.pkglist | wc -l | awk '{ print $1 }')
    1.73 -				find_flavor_rootfs $TMP_DIR/rootfs
    1.74 -				[ -d $TMP_DIR/rootfs/boot ] && mv $TMP_DIR/rootfs/boot $TMP_DIR/rootcd
    1.75 -				[ -n "$(ls $TMP_DIR/rootfs)" ] && ( cd $TMP_DIR/rootfs ; find * | cpio -o -H newc ) | gzip -9 > $TMP_DIR/$FLAVOR.rootfs
    1.76 -				[ -n "$(ls $TMP_DIR/rootcd)" ] && ( cd $TMP_DIR/rootcd ; find * | cpio -o -H newc ) | gzip -9 > $TMP_DIR/$FLAVOR.rootcd
    1.77 -				rm -rf $TMP_DIR/rootcd $TMP_DIR/rootfs
    1.78 -				VERSION=""; MAINTAINER=""
    1.79 -				echo -en "Flavor short description \007: "; read -t 30 DESCRIPTION
    1.80 -				if [ -n "$DESCRIPTION" ]; then
    1.81 -					echo -en "Flavor version : "; read -t 30 VERSION
    1.82 -					echo -en "Flavor maintainer (your email) : "; read -t 30 MAINTAINER
    1.83 -				fi
    1.84 -				[ -n "$DESCRIPTION" ] || DESCRIPTION="Slitaz $FLAVOR flavor"
    1.85 -				[ -n "$VERSION" ] || VERSION="1.0"
    1.86 -				[ -n "$MAINTAINER" ] || MAINTAINER="nobody@slitaz.org"
    1.87 -				cat > $TMP_DIR/$FLAVOR.desc <<EOT
    1.88 +				if [ -s $TMP_DIR/flavor/*desc ]; then
    1.89 +					cp $TMP_DIR/flavor/*.desc $TMP_DIR/$FLAVOR.desc
    1.90 +					[ -s $TMP_DIR/$FLAVOR.receipt ] &&
    1.91 +					cp $TMP_DIR/flavor/*.receipt $TMP_DIR/$FLAVOR.receipt
    1.92 +					for i in rootfs rootcd ; do
    1.93 +						[ -s $TMP_DIR/flavor/*.list$i ] &&
    1.94 +						sed 's/.\{1,45\}//;/^\.$/d' $TMP_DIR/flavor/*.list$i | ( cd $TMP_DIR/$i ; cpio -o -H newc ) | gzip -9 > $TMP_DIR/$FLAVOR.$i
    1.95 +					done
    1.96 +				else
    1.97 +					find_flavor_rootfs $TMP_DIR/rootfs
    1.98 +					[ -d $TMP_DIR/rootfs/boot ] && mv $TMP_DIR/rootfs/boot $TMP_DIR/rootcd
    1.99 +					for i in rootfs rootcd ; do
   1.100 +						[ "$(ls $TMP_DIR/$i)" ] &&
   1.101 +						( cd $TMP_DIR/$i ; find * | cpio -o -H newc ) | gzip -9 > $TMP_DIR/$FLAVOR.$i
   1.102 +					done
   1.103 +					VERSION=""; MAINTAINER=""
   1.104 +					echo -en "Flavor short description \007: "; read -t 30 DESCRIPTION
   1.105 +					if [ -n "$DESCRIPTION" ]; then
   1.106 +						echo -en "Flavor version : "; read -t 30 VERSION
   1.107 +						echo -en "Flavor maintainer (your email) : "; read -t 30 MAINTAINER
   1.108 +					fi
   1.109 +					[ -n "$DESCRIPTION" ] || DESCRIPTION="Slitaz $FLAVOR flavor"
   1.110 +					[ -n "$VERSION" ] || VERSION="1.0"
   1.111 +					[ -n "$MAINTAINER" ] || MAINTAINER="nobody@slitaz.org"
   1.112 +					cat > $TMP_DIR/$FLAVOR.desc <<EOT
   1.113  Flavor          : $FLAVOR
   1.114  Description     : $DESCRIPTION
   1.115  Version         : $VERSION
   1.116 @@ -1901,8 +1928,7 @@
   1.117  ================================================================================
   1.118  
   1.119  EOT
   1.120 -				( cd $TMP_DIR ; ls $FLAVOR.* | cpio -o -H newc ) | gzip -9 > $FLAVOR.flavor
   1.121 -				cat <<EOT
   1.122 +					cat <<EOT
   1.123  Tazlito can't detect each file installed during a package post_install.
   1.124  You should extract this flavor (tazlito extract-flavor $FLAVOR),
   1.125  check the files in /home/slitaz/flavors/$(cat /etc/slitaz-release)/$FLAVOR/rootfs tree and remove
   1.126 @@ -1910,6 +1936,8 @@
   1.127  Check /home/slitaz/flavors/$(cat /etc/slitaz-release)/$FLAVOR/receipt too and repack the flavor
   1.128  (tazlito pack-flavor $FLAVOR)
   1.129  EOT
   1.130 +				fi
   1.131 +				( cd $TMP_DIR ; ls $FLAVOR.* | cpio -o -H newc ) | gzip -9 > $FLAVOR.flavor
   1.132  			fi
   1.133  		fi
   1.134  		rm -rf $TMP_DIR ;;