tazlito diff 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 |
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.