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