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

mirror-tools/mkpkgiso: do not install lighttpd
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Aug 19 15:31:08 2009 +0200 (2009-08-19)
parents 78b366b017fc
children 617322eb9d0d
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@3670 8 VERSION=0.5
pascal@1725 9
pascal@1725 10 ROOT=/home/slitaz/iso
pascal@3759 11 SORT_DIR=${ROOT}/_iso.$$
pascal@3759 12 TEMP_DIR=${ROOT}/_iso.$$
pascal@3670 13 SORT_FILE=${ROOT}/_sort.$$
pascal@1725 14 PKG_VER=$1
pascal@1725 15 shift
pascal@1725 16 OPTIONS=$@
pascal@1725 17 PKG_DIR=$TEMP_DIR/packages/$PKG_VER
pascal@1725 18 REPOS=/var/www/slitaz/mirror/packages/$PKG_VER
pascal@3670 19 PXE_DIR=/var/www/slitaz/mirror/pxe
pascal@1725 20 ISO_DIR=/var/www/slitaz/mirror/iso/$PKG_VER
pascal@1725 21 LOG=$PWD/$(basename $0).log
pascal@1725 22
pascal@1725 23 #
pascal@1725 24 VOLUME_ID="packages-${PKG_VER}"
pascal@1725 25 PUBLISHER="SliTaz http://www.slitaz.org/"
pascal@1725 26 IMAGE="packages-${PKG_VER}.iso"
pascal@1725 27 OUTPUT="$ROOT/$IMAGE"
pascal@1725 28
pascal@1725 29 # Check command line option.
pascal@1725 30 if [ -z $PKG_VER ]; then
pascal@3670 31 cat <<EOT
pascal@3670 32 Usage: $(basename $0) <Version>
pascal@3670 33 [--boot [--auto-install] [--loram-detect]]|--webboot] [--filter]
pascal@3670 34 [--wok] [--wok-stable] [--website][--dry-run]
pascal@3670 35 EOT
pascal@1725 36 exit 1
pascal@1725 37 fi
pascal@1725 38
pascal@1725 39 # Check if we provide a valide version
pascal@1725 40 if [ ! -d $REPOS ]; then
pascal@1725 41 echo "Boooh! $PKG_VER is not a valid version."
pascal@1725 42 exit 1
pascal@1725 43 fi
pascal@1725 44
pascal@1725 45 # Status function.
pascal@1725 46 status()
pascal@1725 47 {
pascal@1725 48 local CHECK=$?
pascal@1725 49 echo -en "\\033[70G[ "
pascal@1725 50 if [ $CHECK = 0 ]; then
pascal@1725 51 echo -en "\\033[1;33mOK"
pascal@1725 52 else
pascal@1725 53 echo -en "\\033[1;31mFailed"
pascal@1725 54 fi
pascal@1725 55 echo -e "\\033[0;39m ]"
pascal@1725 56 }
pascal@1725 57
pascal@1725 58 # Create temp directory
pascal@1725 59 mkdir -p $TEMP_DIR/packages/$PKG_VER
pascal@1725 60
pascal@1725 61 # Prepare evrything for ISO
pascal@1725 62
pascal@1725 63 echo ""
pascal@1725 64 echo "Building ISO for packages $PKG_VER"
pascal@1725 65 echo "==============================================================================="
pascal@1725 66 echo -n "Creating working dir $(basename $TEMP_DIR)"
pascal@1725 67 status
pascal@1725 68 echo -n "Creating symlink"
pascal@1725 69 status
pascal@1725 70
pascal@1725 71 # Link every packages to temp dir
pascal@1725 72 cd $PKG_DIR
pascal@1725 73 for i in $REPOS/*
pascal@1725 74 do
pascal@1725 75 ln -s $i >> $LOG 2>&1
pascal@1725 76 done
pascal@1725 77
pascal@1725 78 echo -n "Creating install script"
pascal@1725 79 # Create install script as suggested by Pascal.
pascal@1725 80 cat >$TEMP_DIR/install.sh<<EOF
pascal@1725 81 #!/bin/sh
pascal@1725 82 #
pascal@1725 83
pascal@3670 84 DIR=\$(cd \$(busybox dirname \$0); pwd)
pascal@3670 85
pascal@3670 86 # Handle --auto-install case
pascal@3670 87 if [ "\$DIR" == "/etc/init.d" ]; then
pascal@3670 88 DIR=/mnt
pascal@3670 89
pascal@3670 90 # Handle loram on hybrid hard disk / usb key case
pascal@3670 91 if [ ! -d /usr/bin ]; then
pascal@3925 92 echo ""
pascal@3670 93 if [ -d /.usr.rw ]; then
pascal@3670 94 echo -n "Mounting /usr read-write... "
pascal@3670 95 usr=.usr.ro
pascal@3670 96 else
pascal@3670 97 echo -n "Mounting /usr read-only... "
pascal@3670 98 usr=usr
pascal@3670 99 fi
pascal@3670 100 FS=\$DIR/usr.cromfs
pascal@3670 101 if [ -f \$FS ]; then
pascal@3670 102 /bin/cromfs-driver \$FS /\$usr -o ro,dev,suid,allow_other
pascal@3670 103 elif [ -f \$DIR/usr.sqfs ]; then
pascal@3670 104 FS=\$DIR/usr.sqfs
pascal@3670 105 mount -o loop,ro -t squashfs \$FS /\$usr
pascal@3670 106 elif [ -L /\$usr ]; then
pascal@3670 107 FS=\$DIR/usr
pascal@3670 108 fi
pascal@3670 109 status
pascal@3670 110 if [ -d /.usr.rw ]; then
pascal@3670 111 if [ -x /bin/funionfs ]; then
pascal@3670 112 /bin/funionfs -o dirs=/.usr.ro=RO:/.usr.rw -o allow_other -o suid,dev NONE /usr
pascal@3670 113 else
pascal@3670 114 /bin/mount -t aufs -o br:/.usr.rw:/.usr.ro none /usr
pascal@3670 115 fi
pascal@3670 116 fi
pascal@3670 117 fi
pascal@3670 118 fi
pascal@1725 119
pascal@1725 120 [ -d /var/cache/tazpkg ] || mkdir -p /var/cache/tazpkg
pascal@1725 121 ls -d \$DIR/packages/* > /var/lib/tazpkg/mirror
pascal@1725 122 ln -fs \$DIR/packages/*/*.tazpkg /var/cache/tazpkg/
pascal@1725 123 ln -fs \$DIR/packages/*/packages.* /var/lib/tazpkg
pascal@3670 124 echo "=> all $PKG_VER package are available for tazpkg/tazpkgbox"
pascal@1725 125 EOF
pascal@1725 126 [ -e files.list.lzma ] && cat >>$TEMP_DIR/install.sh<<EOF
pascal@1725 127 ln -fs \$DIR/packages/*/files.list.lzma /var/lib/tazpkg
pascal@1725 128 EOF
pascal@1725 129
pascal@1725 130 status
pascal@3670 131 cat > $SORT_FILE <<EOT
pascal@3757 132 $SORT_DIR/install.sh -4000
pascal@3757 133 $SORT_DIR/README -4000
pascal@3757 134 $SORT_DIR/index.html -4000
pascal@3757 135 $SORT_DIR/md5sum -4000
pascal@3757 136 $SORT_DIR/style.css -4000
pascal@3757 137 $SORT_DIR/images/header.png -4000
pascal@3757 138 $SORT_DIR/boot/bzImage 2
pascal@3757 139 $SORT_DIR/boot/rootfs.gz 1
pascal@3757 140 $SORT_DIR/packages -9000
pascal@3670 141 EOT
pascal@3757 142 ( cd $ROOT; ls $SORT_DIR/packages/*/packages* $SORT_DIR/packages/*/files.list.lzma ) | \
pascal@3757 143 awk '{ printf "%s -7000\n",$0 }' >> $SORT_FILE
pascal@1725 144 chmod 755 $TEMP_DIR/install.sh
pascal@1725 145
pascal@1725 146 case " $OPTIONS " in
pascal@1725 147 *\ --filter\ *)
pascal@1725 148 SIZE=0
pascal@1725 149 for i in *.tazpkg; do
pascal@1725 150 while read f; do
pascal@1725 151 case "$i" in
pascal@1725 152 $f*) continue 2;;
pascal@1725 153 esac
pascal@1725 154 done < packages.list
pascal@1725 155 echo -n "Filter out $i ($(du -hs $(readlink $i) | awk '{ print $1 }'))..."
pascal@1725 156 SIZE=$(( $SIZE + $(stat -c %s $(readlink $i)) ))
pascal@1725 157 rm $i
pascal@1725 158 status
pascal@1725 159 done
pascal@1725 160 UNIT=" bytes"
pascal@1725 161 if [ $SIZE -gt 10240 ]; then
pascal@1725 162 SIZE=$(( $SIZE / 1024 ))
pascal@1725 163 UNIT="K"
pascal@1725 164 fi
pascal@1725 165 if [ $SIZE -gt 10240 ]; then
pascal@1725 166 SIZE=$(( $SIZE / 1024 ))
pascal@1725 167 UNIT="M"
pascal@1725 168 fi
pascal@1725 169 echo "$SIZE$UNIT removed.";;
pascal@1725 170 esac
pascal@2569 171
pascal@2569 172 # Copy hg subtree
pascal@2569 173 get_from_hg()
pascal@2569 174 {
pascal@2569 175 [ /slitaz/home/slitaz/hg/$1 ] || return
pascal@2569 176 echo -n "Adding $2"
pascal@2569 177 /usr/sbin/chroot /slitaz hg --repository /home/slitaz/hg/$1 pull >/dev/null
pascal@2569 178 /usr/sbin/chroot /slitaz hg --repository /home/slitaz/hg/$1 update >/dev/null
pascal@2569 179 mkdir $TEMP_DIR/$1
pascal@2569 180 cp -a /slitaz/home/slitaz/hg/$1/* $TEMP_DIR/$1
pascal@2569 181 status
pascal@2569 182 echo "$(du -hs $TEMP_DIR/$1 | awk '{ print $1 }') used by $2."
pascal@2569 183 }
pascal@2569 184
pascal@2571 185 for i in $OPTIONS ; do
pascal@2571 186 case "$i" in
pascal@2571 187 --wok)
pascal@3670 188 cat >>$TEMP_DIR/install.sh<<EOF
pascal@3927 189 mkdir -p /home/slitaz
pascal@3927 190 ln -s \$DIR/wok /home/slitaz
pascal@3927 191 echo "=> Wok (cooking) is in /home/slitaz/wok"
pascal@3670 192 EOF
pascal@3670 193 if get_from_hg wok "wok (cooking)"; then
pascal@3759 194 echo "$SORT_DIR/wok -8000" >> $SORT_FILE
pascal@3670 195 fi;;
pascal@2571 196 --wok-stable)
pascal@3670 197 cat >>$TEMP_DIR/install.sh<<EOF
pascal@3927 198 mkdir -p /home/slitaz
pascal@3927 199 ln -s \$DIR/wok /home/slitaz
pascal@3927 200 echo "=> Wok (stable) is in /home/slitaz/wok"
pascal@3670 201 EOF
pascal@3670 202 if get_from_hg wok-stable "wok (stable)"; then
pascal@3670 203 mv $TEMP_DIR/wok-stable $TEMP_DIR/wok
pascal@3759 204 echo "$SORT_DIR/wok -8000" >> $SORT_FILE
pascal@3670 205 fi;;
pascal@2571 206 --website)
pascal@2569 207 if get_from_hg website "web site"; then
pascal@3759 208 echo "$SORT_DIR/website -6000" >> $SORT_FILE
pascal@3760 209 echo "$(echo $SORT_DIR/packages/*/lighttpd-[0-9]*) -7100" >> $SORT_FILE
pascal@3760 210 echo "$(echo $SORT_DIR/packages/*/pcre-[0-9]*) -7100" >> $SORT_FILE
pascal@1725 211 cat >>$TEMP_DIR/install.sh<<EOF
pascal@3927 212 echo "=> slitaz web site installed in file:///mnt/website"
pascal@1725 213 EOF
pascal@1725 214 fi;;
pascal@1725 215 esac
pascal@2571 216 done
pascal@1725 217
pascal@1725 218 # Extract boot package function
pascal@1725 219 extract_boot()
pascal@1725 220 {
pascal@1725 221 f=$(ls $REPOS/$1-[0-9]*.tazpkg 2> /dev/null)
pascal@1725 222 [ -f "$f" ] || return 1
pascal@1725 223 [ -d $TEMP_DIR/boot ] || mkdir $TEMP_DIR/boot
pascal@1725 224 ( cd $TEMP_DIR/boot ; cpio -i fs.cpio.gz < $f 2> /dev/null )
pascal@1725 225 ( cd $TEMP_DIR/boot ; zcat fs.cpio.gz | cpio -id 2> /dev/null )
pascal@1725 226 mv $TEMP_DIR/boot/fs/boot/* $TEMP_DIR/boot
pascal@1725 227 rm -rf $TEMP_DIR/boot/fs.cpio.gz $TEMP_DIR/boot/fs
pascal@1725 228 return 0
pascal@1725 229 }
pascal@1725 230
pascal@1725 231 # Gen boot part
pascal@1725 232 BOOT_OPT=""
pascal@1725 233 iso=$ISO_DIR/slitaz-$PKG_VER.iso
pascal@3670 234 isoloram=$ISO_DIR/flavors/slitaz-loram-cdrom-sqfs.iso
pascal@1725 235 case " $OPTIONS " in
pascal@1725 236 *\ --boot\ *)
pascal@1725 237 echo -n "Creating boot tree"
pascal@1725 238 isoinfo -R -l -i $iso | awk '/^Directory/ { path=$4 } /^-/ { print path$12 }' | while read file; do
pascal@2118 239 [ "$(basename $file)" == ".." ] && continue
pascal@1725 240 [ "$file" = "/boot/isolinux/boot.cat" ] && continue
pascal@1725 241 [ -d "$(dirname $TEMP_DIR/$file)" ] ||
pascal@1725 242 mkdir -p "$(dirname $TEMP_DIR/$file)"
pascal@1725 243 isoinfo -R -x "$file" -i $iso > "$TEMP_DIR/$file"
pascal@1725 244 done
pascal@3757 245 if [ -f "$(echo $TEMP_DIR/boot/vmlinuz*)" ]; then
pascal@3757 246 rm -f $TEMP_DIR/boot/bzImage
pascal@3757 247 ln $TEMP_DIR/boot/vmlinuz* $TEMP_DIR/boot/bzImage
pascal@3757 248 fi
pascal@1725 249 status
pascal@3757 250 BOOT_OPT="-sort $SORT_FILE -b boot/isolinux/isolinux.bin \
pascal@3757 251 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table"
pascal@3670 252 case " $OPTIONS " in
pascal@3670 253 *\ --auto-install\ *)
pascal@3670 254 echo -n "Enable auto install"
pascal@3670 255 cat >>$TEMP_DIR/install.sh<<EOF
pascal@3916 256 echo "[ -f /mnt/install.sh ] || mount -o ro -t iso9660 LABEL=packages-$PKG_VER /mnt" >> /etc/init.d/local.sh
pascal@3670 257 EOF
pascal@3670 258 sed -i "s/rw root/rw config=LABEL=packages-$PKG_VER,install.sh root/" \
pascal@3670 259 $TEMP_DIR/boot/isolinux/*.cfg
pascal@3670 260 status
pascal@3670 261 ;;
pascal@3670 262 esac
pascal@3670 263 [ -f $PXE_DIR/ifmem.c32 -a -f $isoloram ] && case " $OPTIONS " in
pascal@3670 264 *\ --loram-detect\ *)
pascal@3670 265 echo -n "Enable loram autodetection"
pascal@3670 266 cp $PXE_DIR/ifmem.c32 "$TEMP_DIR/boot/isolinux"
pascal@3670 267 isoinfo -R -x "/usr.sqfs" -i $isoloram > "$TEMP_DIR/usr.sqfs"
pascal@3759 268 echo "$SORT_DIR/usr.sqfs -5000" >> $SORT_FILE
pascal@3670 269 isoinfo -R -x "/boot/rootfs.gz" -i $isoloram > \
pascal@3670 270 "$TEMP_DIR/boot/loram.gz"
pascal@3759 271 cat >> $TEMP_DIR/boot/isolinux/common.cfg <<EOT
pascal@3759 272 label noram
pascal@3759 273 config noram.cfg
pascal@3759 274 EOT
pascal@3759 275 cat >> $TEMP_DIR/boot/isolinux/noram.cfg <<EOT
pascal@3759 276 display isolinux.msg
pascal@3759 277 say Not enough RAM to boot slitaz.
pascal@3759 278 default reboot
pascal@3759 279 label reboot
pascal@3759 280 com32 reboot.c32
pascal@3759 281
pascal@3759 282 implicit 0
pascal@3759 283 prompt 1
pascal@3759 284 timeout 80
pascal@3759 285 F1 help.txt
pascal@3759 286 F2 options.txt
pascal@3759 287 F3 isolinux.msg
pascal@3759 288 F4 display.txt
pascal@3759 289 F5 enhelp.txt
pascal@3759 290 F6 enopts.txt
pascal@3759 291 EOT
pascal@3759 292 sed -i -e 's|kernel /boot/bzImage|kernel /boot/isolinux/ifmem.c32\n\tappend 160768 core 29696 loram noram\n|' \
pascal@3670 293 -e 's|\(.*/\)rootfs\(.gz .*\)$|label core\n\tkernel /boot/bzImage\n\1rootfs\2\n\nlabel loram\n\tkernel /boot/bzImage\n\1loram\2|' \
pascal@3670 294 $TEMP_DIR/boot/isolinux/*.cfg
pascal@3670 295 status
pascal@3670 296 ;;
pascal@3670 297 esac
pascal@3759 298 echo "$SORT_DIR/boot 0" >> $SORT_FILE
pascal@1725 299 ;;
pascal@1725 300 *\ --webboot\ *)
pascal@1725 301 if extract_boot gpxe; then
pascal@1725 302 echo -n "Creating web boot tree"
pascal@1725 303 mkdir $TEMP_DIR/boot/isolinux/
pascal@1725 304 isoinfo -x "/BOOT/ISOLINUX/ISOLINUX.BIN;1" -i $iso > \
pascal@1725 305 $TEMP_DIR/boot/isolinux/isolinux.bin
pascal@1725 306 mv $TEMP_DIR/boot/gpxe $TEMP_DIR/boot/isolinux
pascal@3759 307 echo "$SORT_DIR/boot 0" >> $SORT_FILE
pascal@1725 308 cat > $TEMP_DIR/boot/isolinux/isolinux.cfg <<EOT
pascal@1725 309 default gpxe
pascal@1725 310 append http://mirror.slitaz.org/pxe/pxelinux.0
pascal@1725 311 EOT
pascal@1725 312 status
pascal@3757 313 BOOT_OPT="-sort $SORT_FILE -b boot/isolinux/isolinux.bin \
pascal@3757 314 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table"
pascal@1725 315 fi
pascal@1725 316 ;;
pascal@1725 317 esac
pascal@1725 318
pascal@1725 319 if [ -n "$BOOT_OPT" ]; then
pascal@3670 320 echo "$(du -chs $TEMP_DIR/boot $TEMP_DIR/usr.sqfs 2> /dev/null | \
pascal@3670 321 tail -1 | awk '{ print $1 }') used by boot."
pascal@1725 322 fi
pascal@1725 323
pascal@3670 324 case " $OPTIONS " in
pascal@3670 325 *\ --dry-run\ *)
pascal@3670 326 echo "Please check and remove $TEMP_DIR and $SORT_FILE"
pascal@3670 327 exit
pascal@3670 328 ;;
pascal@3670 329 esac
pascal@1725 330 # Gen ISO
pascal@1725 331 echo -n "Generating iso image"
pascal@1725 332 /usr/bin/genisoimage -R -J -f -V $VOLUME_ID \
pascal@1725 333 -P "$PUBLISHER" -md5-list $REPOS/packages.md5 \
pascal@1725 334 -quiet -o $OUTPUT $BOOT_OPT $TEMP_DIR
pascal@1725 335 status
pascal@1725 336
pascal@1725 337 echo "$(du -hs $OUTPUT | awk '{ print $1 }') used by iso image."
pascal@1725 338
pascal@2118 339 cd ${ROOT}
pascal@2115 340 echo -n "Create hybrid DVD/CDROM"
pascal@2118 341 [ -x /usr/bin/isohybrid ] && /usr/bin/isohybrid $IMAGE 2> /dev/null
pascal@2115 342 status
pascal@2115 343
pascal@1725 344 echo -n "Calculate md5sum"
pascal@1725 345 /usr/bin/md5sum $IMAGE > $(basename $IMAGE .iso).md5
pascal@1725 346 status
pascal@1725 347
pascal@1725 348 echo -n "Moving file to mirror"
pascal@1725 349 mv $IMAGE $ISO_DIR
pascal@1725 350 mv $(basename $IMAGE .iso).md5 $ISO_DIR
pascal@1725 351 status
pascal@1725 352
pascal@3670 353 # Cleaning temp files
pascal@3670 354 rm -rf $TEMP_DIR $SORT_FILE
pascal@1725 355