wok-current annotate mirror-tools/stuff/usr/bin/mkpkgiso @ rev 2121

mkpkgiso: may install lighttpd in install.sh
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Jan 31 14:58:52 2009 +0000 (2009-01-31)
parents c914d88b8a12
children e842068dc30c
rev   line source
pascal@1725 1 #!/bin/sh
pascal@1725 2 # mkpkgiso, build packages ISO image.
pascal@1725 3 # (C) 2007-TODAY SliTaz - GNU General Public License v3.
pascal@1725 4 #
pascal@1725 5 # Authors : Eric Joseph-Alexandre <erjo@slitaz.org>
pascal@1725 6 # Pascal Bellard <pascal.bellard@slitaz.org>
pascal@1725 7
pascal@2118 8 VERSION=0.3
pascal@1725 9
pascal@1725 10 ROOT=/home/slitaz/iso
pascal@1725 11 TEMP_DIR=${ROOT}/_iso.$$
pascal@1725 12 PKG_VER=$1
pascal@1725 13 shift
pascal@1725 14 OPTIONS=$@
pascal@1725 15 PKG_DIR=$TEMP_DIR/packages/$PKG_VER
pascal@1725 16 REPOS=/var/www/slitaz/mirror/packages/$PKG_VER
pascal@1725 17 ISO_DIR=/var/www/slitaz/mirror/iso/$PKG_VER
pascal@1725 18 LOG=$PWD/$(basename $0).log
pascal@1725 19
pascal@1725 20 #
pascal@1725 21 VOLUME_ID="packages-${PKG_VER}"
pascal@1725 22 PUBLISHER="SliTaz http://www.slitaz.org/"
pascal@1725 23 IMAGE="packages-${PKG_VER}.iso"
pascal@1725 24 OUTPUT="$ROOT/$IMAGE"
pascal@1725 25
pascal@1725 26 # Check command line option.
pascal@1725 27 if [ -z $PKG_VER ]; then
pascal@1725 28 echo "Usage: $(basename $0) <Version> [--boot|--webboot][--filter]"
pascal@1725 29 exit 1
pascal@1725 30 fi
pascal@1725 31
pascal@1725 32 # Check if we provide a valide version
pascal@1725 33 if [ ! -d $REPOS ]; then
pascal@1725 34 echo "Boooh! $PKG_VER is not a valid version."
pascal@1725 35 exit 1
pascal@1725 36 fi
pascal@1725 37
pascal@1725 38 # Status function.
pascal@1725 39 status()
pascal@1725 40 {
pascal@1725 41 local CHECK=$?
pascal@1725 42 echo -en "\\033[70G[ "
pascal@1725 43 if [ $CHECK = 0 ]; then
pascal@1725 44 echo -en "\\033[1;33mOK"
pascal@1725 45 else
pascal@1725 46 echo -en "\\033[1;31mFailed"
pascal@1725 47 fi
pascal@1725 48 echo -e "\\033[0;39m ]"
pascal@1725 49 }
pascal@1725 50
pascal@1725 51 # Create temp directory
pascal@1725 52 mkdir -p $TEMP_DIR/packages/$PKG_VER
pascal@1725 53
pascal@1725 54 # Prepare evrything for ISO
pascal@1725 55
pascal@1725 56 echo ""
pascal@1725 57 echo "Building ISO for packages $PKG_VER"
pascal@1725 58 echo "==============================================================================="
pascal@1725 59 echo -n "Creating working dir $(basename $TEMP_DIR)"
pascal@1725 60 status
pascal@1725 61 echo -n "Creating symlink"
pascal@1725 62 status
pascal@1725 63
pascal@1725 64 # Link every packages to temp dir
pascal@1725 65 cd $PKG_DIR
pascal@1725 66 for i in $REPOS/*
pascal@1725 67 do
pascal@1725 68 ln -s $i >> $LOG 2>&1
pascal@1725 69 done
pascal@1725 70
pascal@1725 71 echo -n "Creating install script"
pascal@1725 72 # Create install script as suggested by Pascal.
pascal@1725 73 cat >$TEMP_DIR/install.sh<<EOF
pascal@1725 74 #!/bin/sh
pascal@1725 75 #
pascal@1725 76
pascal@1725 77 DIR=\$(cd \$(dirname \$0); pwd)
pascal@1725 78
pascal@2121 79 echo "Install packages..."
pascal@1725 80 [ -d /var/cache/tazpkg ] || mkdir -p /var/cache/tazpkg
pascal@1725 81 ls -d \$DIR/packages/* > /var/lib/tazpkg/mirror
pascal@1725 82 ln -fs \$DIR/packages/*/*.tazpkg /var/cache/tazpkg/
pascal@1725 83 ln -fs \$DIR/packages/*/packages.* /var/lib/tazpkg
pascal@1725 84 EOF
pascal@1725 85 [ -e files.list.lzma ] && cat >>$TEMP_DIR/install.sh<<EOF
pascal@1725 86 ln -fs \$DIR/packages/*/files.list.lzma /var/lib/tazpkg
pascal@1725 87 EOF
pascal@1725 88
pascal@1725 89 status
pascal@1725 90 chmod 755 $TEMP_DIR/install.sh
pascal@1725 91
pascal@1725 92 case " $OPTIONS " in
pascal@1725 93 *\ --filter\ *)
pascal@1725 94 SIZE=0
pascal@1725 95 for i in *.tazpkg; do
pascal@1725 96 while read f; do
pascal@1725 97 case "$i" in
pascal@1725 98 $f*) continue 2;;
pascal@1725 99 esac
pascal@1725 100 done < packages.list
pascal@1725 101 echo -n "Filter out $i ($(du -hs $(readlink $i) | awk '{ print $1 }'))..."
pascal@1725 102 SIZE=$(( $SIZE + $(stat -c %s $(readlink $i)) ))
pascal@1725 103 rm $i
pascal@1725 104 status
pascal@1725 105 done
pascal@1725 106 UNIT=" bytes"
pascal@1725 107 if [ $SIZE -gt 10240 ]; then
pascal@1725 108 SIZE=$(( $SIZE / 1024 ))
pascal@1725 109 UNIT="K"
pascal@1725 110 fi
pascal@1725 111 if [ $SIZE -gt 10240 ]; then
pascal@1725 112 SIZE=$(( $SIZE / 1024 ))
pascal@1725 113 UNIT="M"
pascal@1725 114 fi
pascal@1725 115 echo "$SIZE$UNIT removed.";;
pascal@1725 116 esac
pascal@1725 117 case " $OPTIONS " in
pascal@1725 118 *\ --website\ *)
pascal@1725 119 if [ -d /slitaz/home/slitaz/hg/website ]; then
pascal@1725 120 echo -n "Adding web site"
pascal@2119 121 chroot /slitaz hg --repository /home/slitaz/hg/website pull >/dev/null
pascal@2119 122 chroot /slitaz hg --repository /home/slitaz/hg/website update >/dev/null
pascal@1725 123 mkdir $TEMP_DIR/website
pascal@1725 124 cp -a /slitaz/home/slitaz/hg/website/* $TEMP_DIR/website
pascal@1725 125 cat >>$TEMP_DIR/install.sh<<EOF
pascal@2121 126 echo "Install http://127.0.0.1/website ..."
pascal@1725 127 [ -d /var/www ] || mkdir -p /var/www
pascal@1725 128 ln -s \$DIR/website /var/www
pascal@2121 129 tazpkg list | grep -q ^lighttpd || yes y | tazpkg get-install lighttpd
pascal@1725 130 EOF
pascal@1725 131 status
pascal@1725 132 echo "$(du -hs $TEMP_DIR/website | awk '{ print $1 }') used by web site."
pascal@1725 133 fi;;
pascal@1725 134 esac
pascal@1725 135
pascal@1725 136 # Extract boot package function
pascal@1725 137 extract_boot()
pascal@1725 138 {
pascal@1725 139 f=$(ls $REPOS/$1-[0-9]*.tazpkg 2> /dev/null)
pascal@1725 140 [ -f "$f" ] || return 1
pascal@1725 141 [ -d $TEMP_DIR/boot ] || mkdir $TEMP_DIR/boot
pascal@1725 142 ( cd $TEMP_DIR/boot ; cpio -i fs.cpio.gz < $f 2> /dev/null )
pascal@1725 143 ( cd $TEMP_DIR/boot ; zcat fs.cpio.gz | cpio -id 2> /dev/null )
pascal@1725 144 mv $TEMP_DIR/boot/fs/boot/* $TEMP_DIR/boot
pascal@1725 145 rm -rf $TEMP_DIR/boot/fs.cpio.gz $TEMP_DIR/boot/fs
pascal@1725 146 return 0
pascal@1725 147 }
pascal@1725 148
pascal@1725 149 # Gen boot part
pascal@1725 150 BOOT_OPT=""
pascal@1725 151 iso=$ISO_DIR/slitaz-$PKG_VER.iso
pascal@1725 152 case " $OPTIONS " in
pascal@1725 153 *\ --boot\ *)
pascal@1725 154 echo -n "Creating boot tree"
pascal@1725 155 isoinfo -R -l -i $iso | awk '/^Directory/ { path=$4 } /^-/ { print path$12 }' | while read file; do
pascal@2118 156 [ "$(basename $file)" == ".." ] && continue
pascal@1725 157 [ "$file" = "/boot/isolinux/boot.cat" ] && continue
pascal@1725 158 [ -d "$(dirname $TEMP_DIR/$file)" ] ||
pascal@1725 159 mkdir -p "$(dirname $TEMP_DIR/$file)"
pascal@1725 160 isoinfo -R -x "$file" -i $iso > "$TEMP_DIR/$file"
pascal@1725 161 done
pascal@1725 162 status
pascal@1725 163 BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
pascal@1725 164 -no-emul-boot -boot-load-size 4 -boot-info-table"
pascal@1725 165 ;;
pascal@1725 166 *\ --webboot\ *)
pascal@1725 167 if extract_boot gpxe; then
pascal@1725 168 echo -n "Creating web boot tree"
pascal@1725 169 mkdir $TEMP_DIR/boot/isolinux/
pascal@1725 170 isoinfo -x "/BOOT/ISOLINUX/ISOLINUX.BIN;1" -i $iso > \
pascal@1725 171 $TEMP_DIR/boot/isolinux/isolinux.bin
pascal@1725 172 mv $TEMP_DIR/boot/gpxe $TEMP_DIR/boot/isolinux
pascal@1725 173 cat > $TEMP_DIR/boot/isolinux/isolinux.cfg <<EOT
pascal@1725 174 default gpxe
pascal@1725 175 append http://mirror.slitaz.org/pxe/pxelinux.0
pascal@1725 176 EOT
pascal@1725 177 status
pascal@1725 178 BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
pascal@1725 179 -no-emul-boot -boot-load-size 4 -boot-info-table"
pascal@1725 180 fi
pascal@1725 181 ;;
pascal@1725 182 esac
pascal@1725 183
pascal@1725 184 if [ -n "$BOOT_OPT" ]; then
pascal@1725 185 echo "$(du -hs $TEMP_DIR/boot | awk '{ print $1 }') used by boot."
pascal@1725 186 fi
pascal@1725 187
pascal@1725 188 # Gen ISO
pascal@1725 189 echo -n "Generating iso image"
pascal@1725 190 /usr/bin/genisoimage -R -J -f -V $VOLUME_ID \
pascal@1725 191 -P "$PUBLISHER" -md5-list $REPOS/packages.md5 \
pascal@1725 192 -quiet -o $OUTPUT $BOOT_OPT $TEMP_DIR
pascal@1725 193 status
pascal@1725 194
pascal@1725 195 echo "$(du -hs $OUTPUT | awk '{ print $1 }') used by iso image."
pascal@1725 196
pascal@2118 197 cd ${ROOT}
pascal@2115 198 echo -n "Create hybrid DVD/CDROM"
pascal@2118 199 [ -x /usr/bin/isohybrid ] && /usr/bin/isohybrid $IMAGE 2> /dev/null
pascal@2115 200 status
pascal@2115 201
pascal@1725 202 echo -n "Calculate md5sum"
pascal@1725 203 /usr/bin/md5sum $IMAGE > $(basename $IMAGE .iso).md5
pascal@1725 204 status
pascal@1725 205
pascal@1725 206 echo -n "Moving file to mirror"
pascal@1725 207 mv $IMAGE $ISO_DIR
pascal@1725 208 mv $(basename $IMAGE .iso).md5 $ISO_DIR
pascal@1725 209 status
pascal@1725 210
pascal@1725 211
pascal@1725 212 # Cleaning temp files
pascal@1725 213 rm -rf $TEMP_DIR
pascal@1725 214