wok-current rev 4513
syslinux: add isohybrid (shell version)
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Thu Nov 26 16:44:48 2009 +0100 (2009-11-26) |
parents | a8ca1e0896fe |
children | 4ab9080e26aa |
files | syslinux-extra/receipt syslinux/receipt syslinux/stuff/tools/isohybrid.sh |
line diff
1.1 --- a/syslinux-extra/receipt Wed Nov 25 10:51:12 2009 +0000 1.2 +++ b/syslinux-extra/receipt Thu Nov 26 16:44:48 2009 +0100 1.3 @@ -12,15 +12,15 @@ 1.4 # Rules to gen a SliTaz package suitable for Tazpkg. 1.5 genpkg_rules() 1.6 { 1.7 - mkdir -p $fs/usr/share/boot 1.8 + mkdir -p $fs/usr/share/boot $fs/usr/bin $fs/bin 1.9 lzma e $src/memdisk/memdisk $fs/usr/share/boot/memdisk.lzma 2> /dev/null 1.10 cp -a $src/mbr/mbr.bin $fs/usr/share/boot 1.11 lzma e $src/core/pxelinux.0 $fs/usr/share/boot/pxelinux.0.lzma 2> /dev/null 1.12 #lzma e $src/com32/menu/vesamenu.c32 $fs/usr/share/boot/vesamenu.c32.lzma 1.13 #lzma e $src/com32/modules/mboot.c32 $fs/usr/share/boot/mboot.c32.lzma 1.14 cp $src/com32/modules/sdi.c32 $fs/usr/share/boot/ 1.15 - mkdir -p $fs/bin 1.16 cp -a $src/linux/syslinux-nomtools $fs/bin/syslinux 1.17 cp -a $src/extlinux/extlinux $fs/bin 1.18 + cp -a $src/isohybrid.sh $fs/usr/bin/isohybrid 1.19 chown root.root $fs/usr/share/boot/* $fs/bin/* 1.20 }
2.1 --- a/syslinux/receipt Wed Nov 25 10:51:12 2009 +0000 2.2 +++ b/syslinux/receipt Thu Nov 26 16:44:48 2009 +0100 2.3 @@ -16,11 +16,13 @@ 2.4 compile_rules() 2.5 { 2.6 cd $src 2.7 + cp ../stuff/tools/isohybrid.sh . 2.8 cp ../stuff/tools/keytab-lilo.pl . 2.9 cp ../stuff/extra/ifmem.c com32/modules 2.10 grep -q ifmem.c32 com32/modules/Makefile || 2.11 sed -i 's/ifcpu64.c32/ifcpu64.c32 ifmem.c32/' com32/modules/Makefile 2.12 make -C com32 2.13 + ./isohybrid.sh --build 2.14 for i in /usr/share/kbd/keymaps/i386/*/*.map.gz; do 2.15 [ "$(basename $(dirname $i))" = "include" ] && continue 2.16 j=$(basename $i)
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/syslinux/stuff/tools/isohybrid.sh Thu Nov 26 16:44:48 2009 +0100 3.3 @@ -0,0 +1,86 @@ 3.4 +#!/bin/sh 3.5 + 3.6 +build="--build" 3.7 +if [ "$1" == "$build" ]; then 3.8 + cat >> $0 <<EOM 3.9 +$(uuencode -m mbr/isohdpfx.bin -) 3.10 +EOT 3.11 +EOM 3.12 + sed -i "/$build/{NNNNNNNNNd}" $0 3.13 + exit 3.14 +fi 3.15 + 3.16 +if [ -z "$1" ]; then 3.17 + cat << EOT 3.18 +usage: $0 isoimage 3.19 +EOT 3.20 + exit 1 3.21 +fi 3.22 +iso=$1 3.23 +heads=64 # zipdrive-style geometry 3.24 +sectors=32 3.25 +partype=23 # "Windows hidden IFS" 3.26 + 3.27 +readiso() 3.28 +{ 3.29 + dd if=$iso bs=2k skip=$1 count=1 2> /dev/null | \ 3.30 + dd bs=1 skip=$2 count=$3 2> /dev/null 3.31 +} 3.32 + 3.33 +# read a 32 bits data 3.34 +readlong() 3.35 +{ 3.36 + readiso $1 $2 4 | hexdump -e '"" 1/4 "%d" "\n"' 3.37 +} 3.38 + 3.39 +# write a 32 bits data 3.40 +storelong() 3.41 +{ 3.42 + printf "00000 %02X %02X %02X %02X \n" \ 3.43 + $(( $2 & 255 )) $(( ($2>>8) & 255 )) \ 3.44 + $(( ($2>>16) & 255 )) $(( ($2>>24) & 255 )) | \ 3.45 + hexdump -R | dd bs=1 conv=notrunc of=$iso seek=$(( $1 )) 2> /dev/null 3.46 +} 3.47 + 3.48 +setmbr() 3.49 +{ 3.50 + uudecode | dd of=$iso conv=notrunc 2> /dev/null 3.51 + storelong 432 $(( $lba * 4 )) 3.52 + storelong 440 $(( ($RANDOM << 16) + $RANDOM )) 3.53 + storelong 446 $(( 0x80 + ( 1 << 16) )) 3.54 + esect=$(( $sectors + ((($cylinders -1) & 0x300) >> 2) )) 3.55 + ecyl=$(( ($cylinders - 1) & 0xff )) 3.56 + storelong 450 $(( $partype + (($heads - 1) << 8) + ($esect << 16) + ($ecyl <<24) )) 3.57 + storelong 458 $(( $cylinders * $heads * $sectors )) 3.58 + storelong 510 $(( 0xAA55 )) 3.59 +} 3.60 + 3.61 +if [ "$(readiso 17 7 23)" != "EL TORITO SPECIFICATION" ]; then 3.62 + echo "$iso: no boot record found."; 3.63 + exit 1 3.64 +fi 3.65 +catalog=$(readlong 17 71) 3.66 +if [ "$(readiso $catalog 0 32 | md5sum | awk '{ print $1 }')" != \ 3.67 + "788e7bfdad52cc6aae525725f24a7f89" ]; then 3.68 + echo "$iso: invalid boot catalog."; 3.69 + exit 1 3.70 +fi 3.71 +lba=$(readlong $catalog 40) 3.72 +if [ $(readlong $lba 64) -ne 1886961915 ]; then 3.73 + echo "$iso: bootloader does not have a isolinux.bin hybrid signature."; 3.74 + exit 1 3.75 +fi 3.76 +size=$(stat -c "%s" $iso) 3.77 +pad=$(( $size % (512 * $heads * $sectors) )) 3.78 +[ $pad -eq 0 ] || pad=$(( (512 * $heads * $sectors) - $pad )) 3.79 +[ $pad -eq 0 ] || dd if=/dev/zero bs=512 count=$(( $pad / 512 )) >> $iso 2> /dev/null 3.80 +cylinders=$(( ($size + $pad) / (512 * $heads * $sectors) )) 3.81 +if [ $cylinders -gt 1024 ]; then 3.82 + cat 1>&2 <<EOT 3.83 +Warning: more than 1024 cylinders ($cylinders). 3.84 +Not all BIOSes will be able to boot this device. 3.85 +EOT 3.86 + cylinders=1024 3.87 +fi 3.88 + 3.89 +setmbr <<EOT