wok annotate mirror-tools/stuff/usr/bin/mkpkgiso @ rev 2119
mkpkgiso: do hg update website
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Jan 31 14:36:40 2009 +0000 (2009-01-31) |
parents | 2452b18a0620 |
children | b49b77ea5976 |
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@1725 | 79 [ -d /var/cache/tazpkg ] || mkdir -p /var/cache/tazpkg |
pascal@1725 | 80 ls -d \$DIR/packages/* > /var/lib/tazpkg/mirror |
pascal@1725 | 81 ln -fs \$DIR/packages/*/*.tazpkg /var/cache/tazpkg/ |
pascal@1725 | 82 ln -fs \$DIR/packages/*/packages.* /var/lib/tazpkg |
pascal@1725 | 83 EOF |
pascal@1725 | 84 [ -e files.list.lzma ] && cat >>$TEMP_DIR/install.sh<<EOF |
pascal@1725 | 85 ln -fs \$DIR/packages/*/files.list.lzma /var/lib/tazpkg |
pascal@1725 | 86 EOF |
pascal@1725 | 87 |
pascal@1725 | 88 status |
pascal@1725 | 89 chmod 755 $TEMP_DIR/install.sh |
pascal@1725 | 90 |
pascal@1725 | 91 case " $OPTIONS " in |
pascal@1725 | 92 *\ --filter\ *) |
pascal@1725 | 93 SIZE=0 |
pascal@1725 | 94 for i in *.tazpkg; do |
pascal@1725 | 95 while read f; do |
pascal@1725 | 96 case "$i" in |
pascal@1725 | 97 $f*) continue 2;; |
pascal@1725 | 98 esac |
pascal@1725 | 99 done < packages.list |
pascal@1725 | 100 echo -n "Filter out $i ($(du -hs $(readlink $i) | awk '{ print $1 }'))..." |
pascal@1725 | 101 SIZE=$(( $SIZE + $(stat -c %s $(readlink $i)) )) |
pascal@1725 | 102 rm $i |
pascal@1725 | 103 status |
pascal@1725 | 104 done |
pascal@1725 | 105 UNIT=" bytes" |
pascal@1725 | 106 if [ $SIZE -gt 10240 ]; then |
pascal@1725 | 107 SIZE=$(( $SIZE / 1024 )) |
pascal@1725 | 108 UNIT="K" |
pascal@1725 | 109 fi |
pascal@1725 | 110 if [ $SIZE -gt 10240 ]; then |
pascal@1725 | 111 SIZE=$(( $SIZE / 1024 )) |
pascal@1725 | 112 UNIT="M" |
pascal@1725 | 113 fi |
pascal@1725 | 114 echo "$SIZE$UNIT removed.";; |
pascal@1725 | 115 esac |
pascal@1725 | 116 case " $OPTIONS " in |
pascal@1725 | 117 *\ --website\ *) |
pascal@1725 | 118 if [ -d /slitaz/home/slitaz/hg/website ]; then |
pascal@1725 | 119 echo -n "Adding web site" |
pascal@2119 | 120 chroot /slitaz hg --repository /home/slitaz/hg/website pull >/dev/null |
pascal@2119 | 121 chroot /slitaz hg --repository /home/slitaz/hg/website update >/dev/null |
pascal@1725 | 122 mkdir $TEMP_DIR/website |
pascal@1725 | 123 cp -a /slitaz/home/slitaz/hg/website/* $TEMP_DIR/website |
pascal@1725 | 124 cat >>$TEMP_DIR/install.sh<<EOF |
pascal@1725 | 125 [ -d /var/www ] || mkdir -p /var/www |
pascal@1725 | 126 ln -s \$DIR/website /var/www |
pascal@1725 | 127 EOF |
pascal@1725 | 128 status |
pascal@1725 | 129 echo "$(du -hs $TEMP_DIR/website | awk '{ print $1 }') used by web site." |
pascal@1725 | 130 fi;; |
pascal@1725 | 131 esac |
pascal@1725 | 132 |
pascal@1725 | 133 # Extract boot package function |
pascal@1725 | 134 extract_boot() |
pascal@1725 | 135 { |
pascal@1725 | 136 f=$(ls $REPOS/$1-[0-9]*.tazpkg 2> /dev/null) |
pascal@1725 | 137 [ -f "$f" ] || return 1 |
pascal@1725 | 138 [ -d $TEMP_DIR/boot ] || mkdir $TEMP_DIR/boot |
pascal@1725 | 139 ( cd $TEMP_DIR/boot ; cpio -i fs.cpio.gz < $f 2> /dev/null ) |
pascal@1725 | 140 ( cd $TEMP_DIR/boot ; zcat fs.cpio.gz | cpio -id 2> /dev/null ) |
pascal@1725 | 141 mv $TEMP_DIR/boot/fs/boot/* $TEMP_DIR/boot |
pascal@1725 | 142 rm -rf $TEMP_DIR/boot/fs.cpio.gz $TEMP_DIR/boot/fs |
pascal@1725 | 143 return 0 |
pascal@1725 | 144 } |
pascal@1725 | 145 |
pascal@1725 | 146 # Gen boot part |
pascal@1725 | 147 BOOT_OPT="" |
pascal@1725 | 148 iso=$ISO_DIR/slitaz-$PKG_VER.iso |
pascal@1725 | 149 case " $OPTIONS " in |
pascal@1725 | 150 *\ --boot\ *) |
pascal@1725 | 151 echo -n "Creating boot tree" |
pascal@1725 | 152 isoinfo -R -l -i $iso | awk '/^Directory/ { path=$4 } /^-/ { print path$12 }' | while read file; do |
pascal@2118 | 153 [ "$(basename $file)" == ".." ] && continue |
pascal@1725 | 154 [ "$file" = "/boot/isolinux/boot.cat" ] && continue |
pascal@1725 | 155 [ -d "$(dirname $TEMP_DIR/$file)" ] || |
pascal@1725 | 156 mkdir -p "$(dirname $TEMP_DIR/$file)" |
pascal@1725 | 157 isoinfo -R -x "$file" -i $iso > "$TEMP_DIR/$file" |
pascal@1725 | 158 done |
pascal@1725 | 159 status |
pascal@1725 | 160 BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \ |
pascal@1725 | 161 -no-emul-boot -boot-load-size 4 -boot-info-table" |
pascal@1725 | 162 ;; |
pascal@1725 | 163 *\ --webboot\ *) |
pascal@1725 | 164 if extract_boot gpxe; then |
pascal@1725 | 165 echo -n "Creating web boot tree" |
pascal@1725 | 166 mkdir $TEMP_DIR/boot/isolinux/ |
pascal@1725 | 167 isoinfo -x "/BOOT/ISOLINUX/ISOLINUX.BIN;1" -i $iso > \ |
pascal@1725 | 168 $TEMP_DIR/boot/isolinux/isolinux.bin |
pascal@1725 | 169 mv $TEMP_DIR/boot/gpxe $TEMP_DIR/boot/isolinux |
pascal@1725 | 170 cat > $TEMP_DIR/boot/isolinux/isolinux.cfg <<EOT |
pascal@1725 | 171 default gpxe |
pascal@1725 | 172 append http://mirror.slitaz.org/pxe/pxelinux.0 |
pascal@1725 | 173 EOT |
pascal@1725 | 174 status |
pascal@1725 | 175 BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \ |
pascal@1725 | 176 -no-emul-boot -boot-load-size 4 -boot-info-table" |
pascal@1725 | 177 fi |
pascal@1725 | 178 ;; |
pascal@1725 | 179 esac |
pascal@1725 | 180 |
pascal@1725 | 181 if [ -n "$BOOT_OPT" ]; then |
pascal@1725 | 182 echo "$(du -hs $TEMP_DIR/boot | awk '{ print $1 }') used by boot." |
pascal@1725 | 183 fi |
pascal@1725 | 184 |
pascal@1725 | 185 # Gen ISO |
pascal@1725 | 186 echo -n "Generating iso image" |
pascal@1725 | 187 /usr/bin/genisoimage -R -J -f -V $VOLUME_ID \ |
pascal@1725 | 188 -P "$PUBLISHER" -md5-list $REPOS/packages.md5 \ |
pascal@1725 | 189 -quiet -o $OUTPUT $BOOT_OPT $TEMP_DIR |
pascal@1725 | 190 status |
pascal@1725 | 191 |
pascal@1725 | 192 echo "$(du -hs $OUTPUT | awk '{ print $1 }') used by iso image." |
pascal@1725 | 193 |
pascal@2118 | 194 cd ${ROOT} |
pascal@2115 | 195 echo -n "Create hybrid DVD/CDROM" |
pascal@2118 | 196 [ -x /usr/bin/isohybrid ] && /usr/bin/isohybrid $IMAGE 2> /dev/null |
pascal@2115 | 197 status |
pascal@2115 | 198 |
pascal@1725 | 199 echo -n "Calculate md5sum" |
pascal@1725 | 200 /usr/bin/md5sum $IMAGE > $(basename $IMAGE .iso).md5 |
pascal@1725 | 201 status |
pascal@1725 | 202 |
pascal@1725 | 203 echo -n "Moving file to mirror" |
pascal@1725 | 204 mv $IMAGE $ISO_DIR |
pascal@1725 | 205 mv $(basename $IMAGE .iso).md5 $ISO_DIR |
pascal@1725 | 206 status |
pascal@1725 | 207 |
pascal@1725 | 208 |
pascal@1725 | 209 # Cleaning temp files |
pascal@1725 | 210 rm -rf $TEMP_DIR |
pascal@1725 | 211 |