wok-current annotate 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 |
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@1725 | 8 VERSION=0.2 |
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@1725 | 120 mkdir $TEMP_DIR/website |
pascal@1725 | 121 cp -a /slitaz/home/slitaz/hg/website/* $TEMP_DIR/website |
pascal@1725 | 122 cat >>$TEMP_DIR/install.sh<<EOF |
pascal@1725 | 123 [ -d /var/www ] || mkdir -p /var/www |
pascal@1725 | 124 ln -s \$DIR/website /var/www |
pascal@1725 | 125 EOF |
pascal@1725 | 126 status |
pascal@1725 | 127 echo "$(du -hs $TEMP_DIR/website | awk '{ print $1 }') used by web site." |
pascal@1725 | 128 fi;; |
pascal@1725 | 129 esac |
pascal@1725 | 130 |
pascal@1725 | 131 # Extract boot package function |
pascal@1725 | 132 extract_boot() |
pascal@1725 | 133 { |
pascal@1725 | 134 f=$(ls $REPOS/$1-[0-9]*.tazpkg 2> /dev/null) |
pascal@1725 | 135 [ -f "$f" ] || return 1 |
pascal@1725 | 136 [ -d $TEMP_DIR/boot ] || mkdir $TEMP_DIR/boot |
pascal@1725 | 137 ( cd $TEMP_DIR/boot ; cpio -i fs.cpio.gz < $f 2> /dev/null ) |
pascal@1725 | 138 ( cd $TEMP_DIR/boot ; zcat fs.cpio.gz | cpio -id 2> /dev/null ) |
pascal@1725 | 139 mv $TEMP_DIR/boot/fs/boot/* $TEMP_DIR/boot |
pascal@1725 | 140 rm -rf $TEMP_DIR/boot/fs.cpio.gz $TEMP_DIR/boot/fs |
pascal@1725 | 141 return 0 |
pascal@1725 | 142 } |
pascal@1725 | 143 |
pascal@1725 | 144 # Gen boot part |
pascal@1725 | 145 BOOT_OPT="" |
pascal@1725 | 146 iso=$ISO_DIR/slitaz-$PKG_VER.iso |
pascal@1725 | 147 case " $OPTIONS " in |
pascal@1725 | 148 *\ --boot\ *) |
pascal@1725 | 149 echo -n "Creating boot tree" |
pascal@1725 | 150 isoinfo -R -l -i $iso | awk '/^Directory/ { path=$4 } /^-/ { print path$12 }' | while read file; do |
pascal@1725 | 151 [ "$file" = "/boot/isolinux/boot.cat" ] && continue |
pascal@1725 | 152 [ -d "$(dirname $TEMP_DIR/$file)" ] || |
pascal@1725 | 153 mkdir -p "$(dirname $TEMP_DIR/$file)" |
pascal@1725 | 154 isoinfo -R -x "$file" -i $iso > "$TEMP_DIR/$file" |
pascal@1725 | 155 done |
pascal@1725 | 156 status |
pascal@1725 | 157 BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \ |
pascal@1725 | 158 -no-emul-boot -boot-load-size 4 -boot-info-table" |
pascal@1725 | 159 ;; |
pascal@1725 | 160 *\ --webboot\ *) |
pascal@1725 | 161 if extract_boot gpxe; then |
pascal@1725 | 162 echo -n "Creating web boot tree" |
pascal@1725 | 163 mkdir $TEMP_DIR/boot/isolinux/ |
pascal@1725 | 164 isoinfo -x "/BOOT/ISOLINUX/ISOLINUX.BIN;1" -i $iso > \ |
pascal@1725 | 165 $TEMP_DIR/boot/isolinux/isolinux.bin |
pascal@1725 | 166 mv $TEMP_DIR/boot/gpxe $TEMP_DIR/boot/isolinux |
pascal@1725 | 167 cat > $TEMP_DIR/boot/isolinux/isolinux.cfg <<EOT |
pascal@1725 | 168 default gpxe |
pascal@1725 | 169 append http://mirror.slitaz.org/pxe/pxelinux.0 |
pascal@1725 | 170 EOT |
pascal@1725 | 171 status |
pascal@1725 | 172 BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \ |
pascal@1725 | 173 -no-emul-boot -boot-load-size 4 -boot-info-table" |
pascal@1725 | 174 fi |
pascal@1725 | 175 ;; |
pascal@1725 | 176 esac |
pascal@1725 | 177 |
pascal@1725 | 178 if [ -n "$BOOT_OPT" ]; then |
pascal@1725 | 179 echo "$(du -hs $TEMP_DIR/boot | awk '{ print $1 }') used by boot." |
pascal@1725 | 180 fi |
pascal@1725 | 181 |
pascal@1725 | 182 # Gen ISO |
pascal@1725 | 183 echo -n "Generating iso image" |
pascal@1725 | 184 /usr/bin/genisoimage -R -J -f -V $VOLUME_ID \ |
pascal@1725 | 185 -P "$PUBLISHER" -md5-list $REPOS/packages.md5 \ |
pascal@1725 | 186 -quiet -o $OUTPUT $BOOT_OPT $TEMP_DIR |
pascal@1725 | 187 status |
pascal@1725 | 188 |
pascal@1725 | 189 echo "$(du -hs $OUTPUT | awk '{ print $1 }') used by iso image." |
pascal@1725 | 190 |
pascal@1725 | 191 echo -n "Calculate md5sum" |
pascal@1725 | 192 cd ${ROOT} |
pascal@1725 | 193 /usr/bin/md5sum $IMAGE > $(basename $IMAGE .iso).md5 |
pascal@1725 | 194 status |
pascal@1725 | 195 |
pascal@1725 | 196 echo -n "Moving file to mirror" |
pascal@1725 | 197 mv $IMAGE $ISO_DIR |
pascal@1725 | 198 mv $(basename $IMAGE .iso).md5 $ISO_DIR |
pascal@1725 | 199 status |
pascal@1725 | 200 |
pascal@1725 | 201 |
pascal@1725 | 202 # Cleaning temp files |
pascal@1725 | 203 rm -rf $TEMP_DIR |
pascal@1725 | 204 |