# HG changeset patch # User Pascal Bellard # Date 1254599950 -7200 # Node ID 536536d6001ade79546fcc274caa4647837146f7 # Parent c80d5cd9e93ce17d5fbad63c4c703188aa38ac6c tazlito: add ROOTFS_SELECTION support for flavors diff -r c80d5cd9e93c -r 536536d6001a tazlito --- a/tazlito Thu Oct 01 22:08:34 2009 +0200 +++ b/tazlito Sat Oct 03 21:59:10 2009 +0200 @@ -159,8 +159,8 @@ genisohooks() { local here=`pwd` - cd $ROOTFS for i in $(ls etc/tazlito/*.$1 2> /dev/null); do + cd $ROOTFS . $i $ROOTCD done cd $here @@ -293,6 +293,11 @@ echo $n } +lzma_switches() +{ + echo "-d$(lzma_history_bits $1) -mt$(grep ^processor < /proc/cpuinfo | wc -l)" +} + # Pack rootfs pack_rootfs() { @@ -302,7 +307,7 @@ cat > $2 elif [ -x /usr/bin/lzma -a "$COMPRESSION" != "gzip" ]; then echo -n "Generating lzma'ed initramfs... " - lzma e -si -so -d$(lzma_history_bits $1) > $2 + lzma e -si -so $(lzma_switches $1) > $2 else echo -n "Generating gziped initramfs... " gzip -9 > $2 @@ -316,7 +321,7 @@ rm -f $DISTRO/gen # Some packages may want to alter rootfs genisohooks rootfs - cd $ROOTFS + cd $1 echo "" # Link duplicate files @@ -337,17 +342,17 @@ ) # Use lzma if installed - pack_rootfs . $DISTRO/$INITRAMFS + pack_rootfs . $DISTRO/$(basename $1).gz cd $DISTRO - mv $INITRAMFS $ROOTCD/boot + mv $(basename $1).gz $ROOTCD/boot } distro_sizes() { echo "Build date : `date +%Y%m%d\ \at\ \%H:%M:%S`" - echo "Packages : `ls -1 $ROOTFS$INSTALLED | wc -l`" - echo "Rootfs size : `du -sh $ROOTFS | awk '{ print $1 }'`" - echo "Initramfs size : `du -sh $ROOTCD/boot/$INITRAMFS | awk '{ print $1 }'`" + echo "Packages : `ls -1 $ROOTFS*$INSTALLED/*/receipt | wc -l`" + echo "Rootfs size : `du -csh $ROOTFS*/ | awk '{ s=$1 } END { print s }'`" + echo "Initramfs size : `du -csh $ROOTCD/boot/rootfs*.gz | awk '{ s=$1 } END { print s }'`" echo "ISO image size : `du -sh $ISO_NAME.iso | awk '{ print $1 }'`" echo "================================================================================" echo "Image is ready: $ISO_NAME.iso" @@ -409,6 +414,8 @@ # Remove duplicate files mergefs() { + echo -n "Merge $(basename $1) ($(du -hs $1 | awk '{ print $1}')) into " + echo -n "$(basename $2) ($(du -hs $2 | awk '{ print $1}'))" # merge symlinks files and devices ( cd $1; find ) | while read file; do if [ -L $1/$file ]; then @@ -436,6 +443,7 @@ fi done true + status } cleanup_merge() @@ -475,6 +483,87 @@ done } +# Display package list with version, set packed_size and unpacked_size +get_pkglist() +{ +packed_size=0; unpacked_size=0 +grep -v ^# $FLAVORS_REPOSITORY/$1/packages.list > $TMP_DIR/flavor.pkg +while read pkg; do + set -- $(get_size $pkg) + packed_size=$(( $packed_size + $1 )) + unpacked_size=$(( $unpacked_size + $2 )) + for i in $(grep ^$pkg /var/lib/tazpkg/packages.list); do + echo $i + break + done +done < $TMP_DIR/flavor.pkg +rm -f $TMP_DIR/flavor.pkg +} + +# Update isolinux config files for multiple rootfs +update_bootconfig() +{ + echo -n "Update boot config files" + grep -l 'include common' $1/*.cfg | \ + while read file ; do + awk -v n=$(echo $2 | awk '{ print NF/2 }') '{ +if (/label/) label=$0; +else if (/kernel/) kernel=$0; +else if (/append/) { + i=index($0,"rootfs.gz"); + append=substr($0,i+9); +} +else if (/include/) { + for (i = 1; i <= n; i++) { + print label i + print kernel; + initrd="initrd=/boot/rootfs" n ".gz" + for (j = n - 1; j >= i; j--) { + initrd=initrd ",/boot/rootfs" j ".gz"; + } + printf "\tappend %s%s\n",initrd,append; + print ""; + } + print; +} +else print; +}' < $file > $file.$$ + mv -f $file.$$ $file + done + cat >> $1/common.cfg < $1/noram.cfg <> \ $FLAVORS_REPOSITORY/$FLAVOR/receipt - grep ^Rootfs $TMP_DIR/$FLAVOR.desc | \ + grep -q '^Rootfs list' $TMP_DIR/$FLAVOR.desc && \ + grep '^Rootfs list' $TMP_DIR/$FLAVOR.desc | \ + sed 's/.*: \(.*\)$/ROOTFS_SELECTION="\1"/' >> \ + $FLAVORS_REPOSITORY/$FLAVOR/receipt + grep '^Rootfs size' $TMP_DIR/$FLAVOR.desc | \ sed 's/.*: \(.*\)$/ROOTFS_SIZE="\1"/' >> \ $FLAVORS_REPOSITORY/$FLAVOR/receipt grep ^Initramfs $TMP_DIR/$FLAVOR.desc | \ @@ -905,19 +998,17 @@ [ -s $FLAVORS_REPOSITORY/$FLAVOR/mirrors ] && cp $FLAVORS_REPOSITORY/$FLAVOR/mirrors \ $TMP_DIR/$FLAVOR.mirrors - packed_size=0; unpacked_size=0 - grep -v ^# $FLAVORS_REPOSITORY/$FLAVOR/packages.list > \ - $TMP_DIR/$FLAVOR.pkg - while read pkg; do - set -- $(get_size $pkg) - packed_size=$(( $packed_size + $1 )) - unpacked_size=$(( $unpacked_size + $2 )) - for i in $(grep ^$pkg /var/lib/tazpkg/packages.list); do - echo $i - break - done - done > $TMP_DIR/$FLAVOR.pkglist < $TMP_DIR/$FLAVOR.pkg - rm -f $TMP_DIR/$FLAVOR.pkg + [ -s $FLAVORS_REPOSITORY/$FLAVOR/packages.list ] && + get_pkglist $FLAVOR > $TMP_DIR/$FLAVOR.pkglist + if grep -q ^ROOTFS_SELECTION \ + $FLAVORS_REPOSITORY/$FLAVOR/receipt; then + . $FLAVORS_REPOSITORY/$FLAVOR/receipt + set -- $ROOTFS_SELECTION + [ -n "$FRUGAL_RAM" ] || FRUGAL_RAM=$1 + [ -f $FLAVORS_REPOSITORY/$2/packages.list ] || + tazlito extract-flavor $2 + get_pkglist $2 > $TMP_DIR/$FLAVOR.pkglist + fi for i in rootcd rootfs; do [ -d $FLAVORS_REPOSITORY/$FLAVOR/$i ] || \ continue @@ -939,6 +1030,7 @@ fi VERSION="" MAINTAINER="" + ROOTFS_SELECTION="" ROOTFS_SIZE="$(cent2human $unpacked_size) (estimated)" INITRAMFS_SIZE="$(cent2human $packed_size) (estimated)" ISO_SIZE="$(cent2human $iso_size) (estimated)" @@ -956,9 +1048,12 @@ [ -n "$FRUGAL_RAM" ] && cat >> $TMP_DIR/$FLAVOR.desc <> $TMP_DIR/$FLAVOR.desc <> $TMP_DIR/$FLAVOR.desc < /etc/tazlito/rootfs.list echo -n "Update tazlito.conf..." [ -f tazlito.conf ] || cp /etc/tazlito/tazlito.conf . cat tazlito.conf | grep -v "^#VOLUM_NAME" | \ @@ -1238,8 +1337,48 @@ echo "Executing distro script..." sh $DISTRO_SCRIPT $DISTRO fi - # Initramfs and ISO image stuff. - gen_initramfs + if [ -s /etc/tazlito/rootfs.list ]; then + [ -f $ROOTCD/boot/isolinux/ifmem.c32 ] || + cp /boot/isolinux/ifmem.c32 $ROOTCD/boot/isolinux + n=0 + last=$ROOTFS + while read flavor; do + n=$(($n+1)) + echo "Building $flavor rootfs..." + download $flavor.flavor + zcat $flavor.flavor | cpio -i $flavor.pkglist + sed 's/.*/&.tazpkg/' < $flavor.pkglist \ + > $DISTRO/list-packages0$n + mkdir ${ROOTFS}0$n + cd $PACKAGES_REPOSITORY + yes y | tazpkg install-list \ + $DISTRO/list-packages0$n --root=${ROOTFS}0$n + rm -rf ${ROOTFS}0$n/boot + status + cd $DISTRO + mv $flavor.pkglist ${ROOTFS}0$n/etc/tazlito/distro-packages.list + rm -f $flavor.flavor install-list + mergefs ${ROOTFS}0$n $last + last=${ROOTFS}0$n + done <= i; j--) { - initrd=initrd ",/boot/rootfs" j ".gz"; - } - printf "\tappend %s%s\n",initrd,append; - print ""; - } - print; -} -else print; -}' < $file > $file.$$ - mv -f $file.$$ $file - done - cat >> $TMP_DIR/iso/boot/isolinux/common.cfg <> $TMP_DIR/iso/boot/isolinux/noram.cfg </dev/null > $TMP_DIR/rootfs lzma e $TMP_DIR/rootfs $i \ - -d$(lzma_history_bits $TMP_DIR/rootfs) + $(lzma_switches $TMP_DIR/rootfs) status done @@ -1518,3 +1601,4 @@ esac exit 0 +