wok-current diff mirror-tools/stuff/usr/bin/mkpkgiso @ rev 1725

Add mirror-tools
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Nov 19 10:32:58 2008 +0000 (2008-11-19)
parents
children a6b13b5d9e03
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/mirror-tools/stuff/usr/bin/mkpkgiso	Wed Nov 19 10:32:58 2008 +0000
     1.3 @@ -0,0 +1,204 @@
     1.4 +#!/bin/sh
     1.5 +# mkpkgiso, build packages ISO image.
     1.6 +# (C) 2007-TODAY SliTaz - GNU General Public License v3.
     1.7 +#
     1.8 +# Authors : Eric Joseph-Alexandre <erjo@slitaz.org>
     1.9 +#	    Pascal Bellard <pascal.bellard@slitaz.org>
    1.10 +
    1.11 +VERSION=0.2
    1.12 +
    1.13 +ROOT=/home/slitaz/iso
    1.14 +TEMP_DIR=${ROOT}/_iso.$$
    1.15 +PKG_VER=$1
    1.16 +shift
    1.17 +OPTIONS=$@
    1.18 +PKG_DIR=$TEMP_DIR/packages/$PKG_VER
    1.19 +REPOS=/var/www/slitaz/mirror/packages/$PKG_VER
    1.20 +ISO_DIR=/var/www/slitaz/mirror/iso/$PKG_VER
    1.21 +LOG=$PWD/$(basename $0).log
    1.22 +
    1.23 +#
    1.24 +VOLUME_ID="packages-${PKG_VER}"
    1.25 +PUBLISHER="SliTaz http://www.slitaz.org/"
    1.26 +IMAGE="packages-${PKG_VER}.iso"
    1.27 +OUTPUT="$ROOT/$IMAGE"
    1.28 +
    1.29 +# Check command line option.
    1.30 +if [ -z $PKG_VER ]; then
    1.31 +	echo "Usage: $(basename $0) <Version> [--boot|--webboot][--filter]"
    1.32 +	exit 1
    1.33 +fi
    1.34 +
    1.35 +# Check if we provide a valide version
    1.36 +if [ ! -d $REPOS ]; then
    1.37 +	echo "Boooh! $PKG_VER is not a valid version."
    1.38 +	exit 1
    1.39 +fi
    1.40 +
    1.41 +# Status function.
    1.42 +status()
    1.43 +{
    1.44 +    local CHECK=$?
    1.45 +    echo -en "\\033[70G[ "
    1.46 +    if [ $CHECK = 0 ]; then
    1.47 +        echo -en "\\033[1;33mOK"
    1.48 +    else
    1.49 +        echo -en "\\033[1;31mFailed"
    1.50 +    fi
    1.51 +    echo -e "\\033[0;39m ]"
    1.52 +}
    1.53 +
    1.54 +# Create temp directory
    1.55 +mkdir -p $TEMP_DIR/packages/$PKG_VER
    1.56 +
    1.57 +# Prepare evrything for ISO
    1.58 +
    1.59 +echo ""
    1.60 +echo "Building ISO for packages  $PKG_VER"
    1.61 +echo "==============================================================================="
    1.62 +echo -n "Creating working dir $(basename $TEMP_DIR)"
    1.63 +status 
    1.64 +echo -n "Creating symlink"
    1.65 +status
    1.66 +
    1.67 +# Link every packages to temp dir
    1.68 +cd $PKG_DIR
    1.69 +for i in $REPOS/*
    1.70 +do
    1.71 +	ln -s $i >> $LOG 2>&1
    1.72 +done
    1.73 +
    1.74 +echo -n "Creating install script"
    1.75 +# Create install script as suggested by Pascal.
    1.76 +cat >$TEMP_DIR/install.sh<<EOF
    1.77 +#!/bin/sh
    1.78 +#
    1.79 +
    1.80 +DIR=\$(cd \$(dirname \$0); pwd)
    1.81 +
    1.82 +[ -d /var/cache/tazpkg ] || mkdir -p /var/cache/tazpkg
    1.83 +ls -d \$DIR/packages/* > /var/lib/tazpkg/mirror
    1.84 +ln -fs \$DIR/packages/*/*.tazpkg /var/cache/tazpkg/
    1.85 +ln -fs \$DIR/packages/*/packages.* /var/lib/tazpkg
    1.86 +EOF
    1.87 +[ -e files.list.lzma ] && cat >>$TEMP_DIR/install.sh<<EOF
    1.88 +ln -fs \$DIR/packages/*/files.list.lzma /var/lib/tazpkg
    1.89 +EOF
    1.90 +
    1.91 +status
    1.92 +chmod 755  $TEMP_DIR/install.sh
    1.93 +
    1.94 +case " $OPTIONS " in
    1.95 +*\ --filter\ *)
    1.96 +	SIZE=0
    1.97 +	for i in *.tazpkg; do
    1.98 +		while read f; do
    1.99 +			case "$i" in
   1.100 +			$f*) continue 2;;
   1.101 +			esac
   1.102 +		done < packages.list
   1.103 +		echo -n "Filter out $i ($(du -hs $(readlink $i) | awk '{ print $1 }'))..."
   1.104 +		SIZE=$(( $SIZE + $(stat -c %s $(readlink $i)) ))
   1.105 +		rm $i
   1.106 +		status
   1.107 +	done
   1.108 +	UNIT=" bytes"
   1.109 +	if [ $SIZE -gt 10240 ]; then
   1.110 +		SIZE=$(( $SIZE / 1024 ))
   1.111 +		UNIT="K"
   1.112 +	fi
   1.113 +	if [ $SIZE -gt 10240 ]; then
   1.114 +		SIZE=$(( $SIZE / 1024 ))
   1.115 +		UNIT="M"
   1.116 +	fi
   1.117 +	echo "$SIZE$UNIT removed.";;
   1.118 +esac
   1.119 +case " $OPTIONS " in
   1.120 +*\ --website\ *)
   1.121 +	if [ -d /slitaz/home/slitaz/hg/website ]; then
   1.122 +		echo -n "Adding web site"
   1.123 +		mkdir $TEMP_DIR/website
   1.124 +		cp -a /slitaz/home/slitaz/hg/website/* $TEMP_DIR/website
   1.125 +		cat >>$TEMP_DIR/install.sh<<EOF
   1.126 +[ -d /var/www ] || mkdir -p /var/www
   1.127 +ln -s \$DIR/website /var/www
   1.128 +EOF
   1.129 +		status
   1.130 +		echo "$(du -hs $TEMP_DIR/website | awk '{ print $1 }') used by web site."
   1.131 +	fi;;
   1.132 +esac
   1.133 +
   1.134 +# Extract boot package function
   1.135 +extract_boot()
   1.136 +{
   1.137 +f=$(ls $REPOS/$1-[0-9]*.tazpkg 2> /dev/null)
   1.138 +[ -f "$f" ] || return 1
   1.139 +[ -d $TEMP_DIR/boot ] || mkdir $TEMP_DIR/boot
   1.140 +( cd $TEMP_DIR/boot ; cpio -i fs.cpio.gz < $f 2> /dev/null ) 
   1.141 +( cd $TEMP_DIR/boot ; zcat fs.cpio.gz | cpio -id 2> /dev/null )
   1.142 +mv $TEMP_DIR/boot/fs/boot/* $TEMP_DIR/boot
   1.143 +rm -rf $TEMP_DIR/boot/fs.cpio.gz $TEMP_DIR/boot/fs
   1.144 +return 0
   1.145 +}
   1.146 +
   1.147 +# Gen boot part
   1.148 +BOOT_OPT=""
   1.149 +iso=$ISO_DIR/slitaz-$PKG_VER.iso
   1.150 +case " $OPTIONS " in
   1.151 +*\ --boot\ *)
   1.152 +    echo -n "Creating boot tree"
   1.153 +	isoinfo -R -l -i $iso | awk '/^Directory/ { path=$4 } /^-/ { print path$12  }' | while read file; do
   1.154 +		[ "$file" = "/boot/isolinux/boot.cat" ] && continue
   1.155 +		[ -d "$(dirname $TEMP_DIR/$file)" ] ||
   1.156 +			mkdir -p "$(dirname $TEMP_DIR/$file)"
   1.157 +		isoinfo -R -x "$file" -i $iso > "$TEMP_DIR/$file"
   1.158 +	done
   1.159 +	status
   1.160 +	BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
   1.161 +-no-emul-boot -boot-load-size 4 -boot-info-table"
   1.162 +	;;
   1.163 +*\ --webboot\ *)
   1.164 +	if extract_boot gpxe; then
   1.165 +    	echo -n "Creating web boot tree"
   1.166 +		mkdir $TEMP_DIR/boot/isolinux/
   1.167 +		isoinfo -x "/BOOT/ISOLINUX/ISOLINUX.BIN;1" -i $iso > \
   1.168 +			$TEMP_DIR/boot/isolinux/isolinux.bin
   1.169 +		mv $TEMP_DIR/boot/gpxe $TEMP_DIR/boot/isolinux
   1.170 +		cat > $TEMP_DIR/boot/isolinux/isolinux.cfg <<EOT
   1.171 +default gpxe
   1.172 +append http://mirror.slitaz.org/pxe/pxelinux.0
   1.173 +EOT
   1.174 +		status
   1.175 +		BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
   1.176 +-no-emul-boot -boot-load-size 4 -boot-info-table"
   1.177 +	fi
   1.178 +	;;
   1.179 +esac
   1.180 +
   1.181 +if [ -n "$BOOT_OPT" ]; then
   1.182 +	echo "$(du -hs $TEMP_DIR/boot | awk '{ print $1 }') used by boot."
   1.183 +fi
   1.184 +
   1.185 +# Gen ISO
   1.186 +echo -n "Generating iso image"
   1.187 +/usr/bin/genisoimage -R -J -f -V $VOLUME_ID \
   1.188 + -P "$PUBLISHER" -md5-list $REPOS/packages.md5 \
   1.189 + -quiet -o $OUTPUT $BOOT_OPT $TEMP_DIR
   1.190 +status 
   1.191 +
   1.192 +echo "$(du -hs $OUTPUT | awk '{ print $1 }') used by iso image."
   1.193 +
   1.194 +echo -n "Calculate md5sum"
   1.195 +cd ${ROOT}
   1.196 +/usr/bin/md5sum $IMAGE > $(basename $IMAGE .iso).md5
   1.197 +status
   1.198 +
   1.199 +echo -n "Moving file to mirror"
   1.200 +mv $IMAGE $ISO_DIR
   1.201 +mv $(basename $IMAGE .iso).md5 $ISO_DIR
   1.202 +status
   1.203 +
   1.204 +
   1.205 +# Cleaning temp files
   1.206 +rm -rf $TEMP_DIR
   1.207 +