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 +