wok diff syslinux/stuff/iso2exe/taziso @ rev 18140
syslinux/taziso: add floppyset
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Mon Jun 15 16:28:54 2015 +0200 (2015-06-15) |
parents | 551c5f787dd0 |
children | 678daaa78112 |
line diff
1.1 --- a/syslinux/stuff/iso2exe/taziso Thu May 14 13:44:28 2015 +0200 1.2 +++ b/syslinux/stuff/iso2exe/taziso Mon Jun 15 16:28:54 2015 +0200 1.3 @@ -32,18 +32,14 @@ 1.4 gettazboot() 1.5 { 1.6 echo "Creating $(basename $1) ..." 1.7 - if [ $(get 0 "$ISO") -eq 23117 ]; then 1.8 - O=$(($(get 64 "$ISO") - 0xC0)) 1.9 - L=$(($(get 20 "$ISO") - 0xC0 - $(get 24 "$ISO") - $O)) 1.10 - S=$((32+$L)) 1.11 - P=$((($S+511)/512)) 1.12 - E=$((4096-(32*$P))) 1.13 - words2bin 0x5A4D $(($S%512)) $P 0 2 $E -1 $((${2:-0}-16)) \ 1.14 - -2 0 256 -16 28 0x6C53 0x5469 0x7A61 > $1 1.15 - ddq bs=1 count=$L skip=$(echo $O) if="$ISO" >> $1 1.16 - else 1.17 - wget -O $1 http://mirror.slitaz.org/boot/tazboot.exe 1.18 - fi 1.19 + O=$(($(get 64 $ISO) - 0xC0)) 1.20 + L=$(($(get 20 $ISO) - 0xC0 - $(get 24 $ISO) - $O)) 1.21 + S=$((32+$L)) 1.22 + P=$((($S+511)/512)) 1.23 + E=$((4096-(32*$P))) 1.24 + words2bin 0x5A4D $(($S%512)) $P 0 2 $E -1 $((${2:-0}-16)) \ 1.25 + -2 0 256 -16 28 0x6C53 0x5469 0x7A61 > $1 1.26 + ddq bs=1 count=$L skip=$(echo $O) if=$ISO >> $1 1.27 } 1.28 1.29 uncpio() 1.30 @@ -415,7 +411,9 @@ 1.31 mnt=/tmp/mnt$$ 1.32 mkdir -p $mnt 1.33 $1 $2 || return 1.34 - wget -O $mnt/slitaz/boot/grldr http://mirror.slitaz.org/boot/grldr 1.35 + for i in bootlace.com grubinst.exe grldr ; do 1.36 + wget -O $mnt/slitaz/boot/$i http://mirror.slitaz.org/boot/$i 1.37 + done 1.38 readtazbootconf 1.39 cat > $mnt/slitaz/boot/menu.lst <<EOT 1.40 title SliTaz 1.41 @@ -461,11 +459,13 @@ 1.42 C:\\> attrib +r +h +s boot.ini 1.43 1.44 See http://diddy.boot-land.net/grub4dos/files/README_GRUB4DOS.txt 1.45 +and http://xpt.sourceforge.net/techdocs/nix/disk/boot/boot07-GrubForDosInfo/ar01s03.html 1.46 EOT 1.47 - ( cd $mnt ; zip -r9 $(basename "$ISO" .iso).zip slitaz ) 1.48 + ( cd $mnt ; echo 'See \slitaz\boot\install.txt to launch SliTaz.' | \ 1.49 + zip -zr9 $(basename $ISO .iso).zip slitaz ) 1.50 [ "$(which advzip)" ] && advzip -z4 $mnt/*.zip 1.51 mv $mnt/*.zip . 1.52 - ls -l $PWD/$(basename "$ISO" .iso).zip 1.53 + ls -l $PWD/$(basename $ISO .iso).zip 1.54 umount $mnt 1.55 rm -rf $mnt 1.56 } 1.57 @@ -805,17 +805,22 @@ 1.58 1.59 ishybrid() 1.60 { 1.61 - [ $(get 510 "$ISO") -eq 43605 ] || return 1.62 - C=$((2048*$(get $(((17*2048) + 71)) "$ISO" 4))) 1.63 - [ $(get $C "$ISO" 4) -eq 1 ] || return 1.64 - [ $(get $(($C+30)) "$ISO" 4) -eq $((0x88AA55)) ] || return 1.65 - C=$((2048*$(get $(($C+40)) "$ISO" 4))) 1.66 - [ $(get $(($C+64)) "$ISO" 4) -eq 1886961915 ] && menuitem "$@" 1.67 + [ $(get 510 $ISO) -eq 43605 ] || return 1.68 + C=$((2048*$(get $(((17*2048) + 71)) $ISO 4))) 1.69 + [ $(get $C $ISO 4) -eq 1 ] || return 1.70 + [ $(get $(($C+30)) $ISO 4) -eq $((0x88AA55)) ] || return 1.71 + C=$((2048*$(get $(($C+40)) $ISO 4))) 1.72 + [ $(get $(($C+64)) $ISO 4) -eq 1886961915 ] && menuitem "$@" 1.73 } 1.74 1.75 isiso() 1.76 { 1.77 - [ $(get 32769 "$ISO" 4) -eq 808469571 ] && menuitem "$@" 1.78 + [ $(get 32769 $ISO 4) -eq 808469571 ] && menuitem "$@" 1.79 +} 1.80 + 1.81 +hastazboot() 1.82 +{ 1.83 + [ $(get 0 $ISO) -eq 23117 ] && menuitem "$@" 1.84 } 1.85 1.86 burnable() 1.87 @@ -842,22 +847,22 @@ 1.88 gotisomd5() 1.89 { 1.90 [ "$(which md5sum 2> /dev/null)" ] && 1.91 - [ $(get 0 "$ISO") -eq 23117 ] && 1.92 - [ $(get 18 "$ISO") -ne 0 ] && menuitem "$@" 1.93 + [ $(get 0 $ISO) -eq 23117 ] && 1.94 + [ $(get 18 $ISO) -ne 0 ] && menuitem "$@" 1.95 } 1.96 1.97 isomd5() 1.98 { 1.99 dotwait "Checking iso image" 1.100 - [ "$(ddq if="$ISO" bs=2k skip=16 \ 1.101 - count=$(echo $(get 32848 "$ISO" 4)) | md5sum)" == \ 1.102 - "$(ddq if="$ISO" bs=16 count=1 skip=2047 | od -N 16 -t x1 -An | \ 1.103 + [ "$(ddq if=$ISO bs=2k skip=16 \ 1.104 + count=$(echo $(get 32848 $ISO 4)) | md5sum)" == \ 1.105 + "$(ddq if=$ISO bs=16 count=1 skip=2047 | od -N 16 -t x1 -An | \ 1.106 sed 's/ //g') -" ] && echo "OK" || echo "ERROR" 1.107 echo -en "\rChecking iso hybrid boot..." 1.108 - n=$(($(get 2 "$ISO")-1+($(get 4 "$ISO")-1)*512)) 1.109 + n=$(($(get 2 $ISO)-1+($(get 4 $ISO)-1)*512)) 1.110 if [ $n -lt 40000 -a $n -gt 32768 ]; then 1.111 - s=$(get 0 "$ISO" 2 $n | awk '{ i+= $0 } END { print i }') 1.112 - [ $(((1+$s+$(get $(($n+1)) "$ISO" 1)) % 65536)) -eq 0 ] && 1.113 + s=$(get 0 $ISO 2 $n | awk '{ i+= $0 } END { print i }') 1.114 + [ $(((1+$s+$(get $(($n+1)) $ISO 1)) % 65536)) -eq 0 ] && 1.115 echo "OK" || echo "ERROR" 1.116 fi 1.117 rm -f /tmp/wait 1.118 @@ -921,8 +926,8 @@ 1.119 usbdev || return 1.120 1.121 # perform dd in progress bar 1.122 - max=$(($(stat -c %s "$ISO")/2048)) 1.123 - i=0; ddq if="$ISO" bs=1024k | ( 1.124 + max=$(($(stat -c %s $ISO)/2048)) 1.125 + i=0; ddq if=$ISO bs=1024k | ( 1.126 while ddq bs=1024k count=1 ; do 1.127 i=$(($i + 1)) 1.128 [ $i -gt $max ] && break 1.129 @@ -992,7 +997,7 @@ 1.130 exec 3>&- 1.131 [ $retval -eq 0 ] || return 1.132 [ "$format" != "none" ] && tazusb format $device "SliTaz" $format 1.133 - tazusb gen-iso2usb "$ISO" $device 1.134 + tazusb gen-iso2usb $ISO $device 1.135 } 1.136 1.137 dokexec() 1.138 @@ -1014,8 +1019,8 @@ 1.139 1.140 flavdata() 1.141 { 1.142 - [ $(get 512 "$ISO") -eq 35615 ] && n=1 || n=$((1+$(get 417 "$ISO" 1))) 1.143 - dd if="$ISO" bs=512 skip=$n count=20 2>/dev/null | zcat 2>/dev/null 1.144 + [ $(get 1024 $ISO) -eq 35615 ] && n=2 || n=$((1+$(get 417 $ISO 1))) 1.145 + dd if=$ISO bs=512 skip=$n count=20 2>/dev/null | zcat 2>/dev/null 1.146 } 1.147 1.148 hasflavinfo() 1.149 @@ -1044,6 +1049,135 @@ 1.150 rm -rf /tmp/data 1.151 } 1.152 1.153 +if [ "$1" == "--build" ]; then #install-begin 1.154 + uuencode -m - < bootloader.bin | sed -e '/^bootloader$/r/dev/stdin' \ 1.155 + -e '/^bootloader$/d' -e '/install-begin$/,/install-end$/d' -i $0 1.156 + exit 1.157 +fi #install-end 1.158 +parse_isolinux() 1.159 +{ 1.160 + awk 'BEGIN { IGNORECASE=1 } 1.161 +{ 1.162 + if ($1 == "LABEL") { 1.163 + label=$2 1.164 + if (auto == "") auto=label 1.165 + } 1.166 + if ($1 == "KERNEL" || $1 == "COM32") kernel[label]=$2 1.167 + if ($1 == "INITRD") initrd[label]=$2 1.168 + if ($1 == "APPEND") { 1.169 + i=2 1.170 + if (kernel[label] ~ "ifmem.c32") { 1.171 + auto=$3 1.172 + next 1.173 + } 1.174 + if (kernel[label] ~ "c32box.c32") { 1.175 + if ($2 == "linux") { kernel[label]=$3; i=4 } 1.176 + if ($2 == "ifmem") { auto=$4; next } 1.177 + } 1.178 + if (kernel[label] ~ "ifcpu64.c32") { auto=$4; next } 1.179 + while (i <= NF) { 1.180 + if ($i ~ "^initrd=") initrd[label]=substr($i,8) 1.181 + else cmdline[label]=cmdline[label] " " $i 1.182 + i++ 1.183 + } 1.184 + } 1.185 +} 1.186 +END { 1.187 + print "KERNEL=\"" kernel[auto] "\"" 1.188 + print "INITRD=\"" initrd[auto] "\"" 1.189 + print "CMDLINE=\"" substr(cmdline[auto],2) "\"" 1.190 +}' 1.191 +} 1.192 + 1.193 +locase() 1.194 +{ 1.195 + echo "$1" | tr [A-Z] [a-z] 1.196 +} 1.197 + 1.198 +floppyset() 1.199 +{ 1.200 + gotcdfile isolinux.cfg 1.201 + parse_isolinux < $file > /tmp/var$$ 1.202 + . /tmp/var$$ 1.203 + rm -f /tmp/var$$ 1.204 + [ -e /media/cdrom/$KERNEL ] || KERNEL=$(locase $KERNEL) 1.205 + [ $(get 514 /media/cdrom/$KERNEL 4) -eq 1400005704 ] || return 1.206 + n=$(($(get 497 /media/cdrom/$KERNEL 1)+1)) 1.207 + ddq bs=512 count=$n if=/media/cdrom/$KERNEL of=/tmp/fd$$ 1.208 + uudecode <<EOT | ddq of=/tmp/fd$$ conv=notrunc 1.209 +bootloader 1.210 +EOT 1.211 + pos=$(($n*512)) 1.212 + if [ -n "$CMDLINE" ]; then 1.213 + echo -n "$CMDLINE" | ddq bs=512 count=1 conv=sync >> /tmp/fd$$ 1.214 + bytes2bin $n | ddq conv=notrunc \ 1.215 + bs=1 seek=497 count=1 of=/tmp/fd$$ 1.216 + words2bin $pos | ddq conv=notrunc \ 1.217 + bs=1 seek=34 count=2 of=/tmp/fd$$ 1.218 + [ $(get 518 /media/cdrom/$KERNEL 4) -ge 514 ] && 1.219 + words2bin $pos 9 | ddq conv=notrunc \ 1.220 + bs=1 seek=552 count=4 of=/tmp/fd$$ 1.221 + fi 1.222 + syssize=$(echo $(get 500 /tmp/fd$$ 4)) 1.223 + ddq bs=512 skip=$n if=/media/cdrom/$KERNEL | cat - /dev/zero | \ 1.224 + ddq bs=512 count=$((($syssize+31)/32)) >> /tmp/fd$$ 1.225 + base=$(stat -c %s /tmp/fd$$) 1.226 + len= 1.227 + if [ "$INITRD" ]; then 1.228 + l=0 1.229 + tot=0 1.230 + for i in ${INITRD//,/ }; do 1.231 + [ -e /media/cdrom/$i ] || i=$(locase $i) 1.232 + ddq if=/media/cdrom/$i >> /tmp/fd$$ 1.233 + l=$(($l+$(stat -c %s /media/cdrom/$i))) 1.234 + r=$((4 - ($l % 4))) 1.235 + if [ $r -ne 4 ]; then 1.236 + ddq if=/dev/zero bs=1 count=$r >> /tmp/fd$$ 1.237 + l=$(($l + $r)) 1.238 + fi 1.239 + [ "$i" == "rootfs.gz" ] && case "$INITRD" in 1.240 + rootfs.gz,rootfs*) continue # loram 1.241 + esac 1.242 + len="$len $l"; l=0 1.243 + tot=$(($tot+$l)) 1.244 + done 1.245 + page=4096 1.246 + rdadrs=$(((($syssize*16)+0x1F0000) & -$page)) 1.247 + words2bin $(($rdadrs & 0xFFFF)) $(($rdadrs >> 16)) | ddq \ 1.248 + conv=notrunc bs=1 seek=536 count=4 of=/tmp/fd$$ 1.249 + fi 1.250 + n=$(echo $len | wc -w) 1.251 + if [ $((494 - $(get 494 /tmp/fd$$))) -ge $(($n * 4)) ]; then 1.252 + i=$(($(get 494 /tmp/fd$$))) 1.253 + bytes2bin $(($i + ($n*4) - 256)) | ddq bs=1 conv=notrunc \ 1.254 + seek=496 count=1 of=/tmp/fd$$ 1.255 + else 1.256 + i=$(($pos + 0x1FC - ($n*4))) 1.257 + bytes2bin $(($i % 256)) $((i / 256)) 252 | ddq bs=1 \ 1.258 + conv=notrunc seek=494 count=3 of=/tmp/fd$$ 1.259 + fi 1.260 + for r in $len ; do 1.261 + words2bin $(($r & 0xFFFF)) $(($r >> 16)) | ddq conv=notrunc \ 1.262 + bs=1 seek=$i count=4 of=/tmp/fd$$ 1.263 + i=$(($i + 4)) 1.264 + done 1.265 + split -b 1440k /tmp/fd$$ fd$$ 1.266 + rm -f /tmp/fd$$ 1.267 + n=1; i=0; r=0 1.268 + set -- $len 1.269 + ls fd$$* | while read file ; do 1.270 + if [ $i -gt $(($1+$base)) ]; then 1.271 + shift 1.272 + r=$(($r+100)); n=0; i=0; base=0 1.273 + fi 1.274 + ddq of=$file bs=18k seek=80 count=0 1.275 + i=$(($i+1474560)) 1.276 + printf "mv %s fd%03d.img\n" $file $(($r+$n)) 1.277 + n=$(($n+1)) 1.278 + done | sh 1.279 + ls fd???.img 1.280 +} 1.281 + 1.282 quit() 1.283 { 1.284 umount -d /media/cdrom 1.285 @@ -1052,7 +1186,7 @@ 1.286 1.287 ISO="${1:-/dev/null}" 1.288 [ -z "$(isiso 2> /dev/null)" ] && echo "Usage : $0 file.iso" && exit 1 1.289 -mount -o loop,ro "$ISO" /media/cdrom 1.290 +mount -o loop,ro $ISO /media/cdrom 1.291 1.292 if [ "$2" == "list" ]; then 1.293 sed '/^\$(.*") \\/!d;s/^\$(\(.*\)").*/\1"/' $0 | while read line; do 1.294 @@ -1064,9 +1198,10 @@ 1.295 if grep -q "^$2()" $0; then 1.296 exe=$2 1.297 shift 2 1.298 - if [ "$(eval $(grep "\"$exe\"" $0 | \ 1.299 - sed '/^\$/!d;s/.(\(.*\)[\t ]*".*"[\t ]*".*/\1/'))" ]; then 1.300 + if [ -n "$(eval $(grep "\"$exe\"" $0 | sed \ 1.301 + '/^\$/!d;s/.(\(.*\)[\t ]*".*"[\t ]*".*/\1/'))" ]; then 1.302 grep "\"$exe\"" $0 | sed '/^\$/!d;s/.*"[\t ]*"\(.*\)".*/\1/' 1.303 + echo ---- 1.304 $exe "$@" 1.305 fi 1.306 quit 1.307 @@ -1091,7 +1226,8 @@ 1.308 $(xfile tazusb "usbkey" "USB key read/write installation") \ 1.309 $(ishybrid "usbbootkey" "USB boot key (read only)") \ 1.310 $(hasflavinfo "showfavinfo" "Show flavor extra info") \ 1.311 -$(menuitem "tazboot" "Get tazboot.exe Linux loader") \ 1.312 +$(cdfile isolinux.cfg "floppyset" "Boot floppy set") \ 1.313 +$(hastazboot "tazboot" "Get tazboot.exe Linux loader") \ 1.314 $(cdexe boot/bzImage "bzimage" "Get linux DOS/EXE file") \ 1.315 $(cdexe 'memtest*' "memtest" "Get Memtest86 DOS/EXE file") \ 1.316 $(cdfilef 'memtest*' "fdmemtest" "Create a Memtest86 boot floppy") \ 1.317 @@ -1107,6 +1243,6 @@ 1.318 retval=$? 1.319 exec 3>&- 1.320 rm -f /tmp/dialog$$ 1.321 - [ $retval -eq 0 ] || continue 1.322 + [ $retval -eq 0 ] || break 1.323 $value 1.324 done