wok-current rev 19848
syslinux/iso2exe: do not update hybrid mbr partitions
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Wed Mar 15 12:56:01 2017 +0100 (2017-03-15) |
parents | f226094b72d6 |
children | 3378a0c35726 |
files | linld/stuff/src/_BEG.ASM syslinux/stuff/iso2exe/iso2exe.sh |
line diff
1.1 --- a/linld/stuff/src/_BEG.ASM Tue Mar 14 21:00:20 2017 +0200 1.2 +++ b/linld/stuff/src/_BEG.ASM Wed Mar 15 12:56:01 2017 +0100 1.3 @@ -35,19 +35,14 @@ 1.4 ;*************************************************************** 1.5 1.6 ; Check for oldies 1.7 - pushf 1.8 - mov bh, 0F0h 1.9 - push bx ; < 286 : flags[12..15] are forced 1 1.10 - popf ; = 286 : flags[12..15] are forced 0 1.11 - pushf ; > 286 : only flags[15] is forced 0 1.12 - pop dx 1.13 - popf 1.14 - add dh,bh ; NS=386+, NC=286 1.15 + push sp 1.16 + pop ax 1.17 mov bx,offset msg_badcpu 1.18 + sub ax,sp 1.19 ifndef NO386 1.20 - js no_vcpi ;it is a 86/186/286, not a 386+ 1.21 + jnz no_vcpi ;it is a 86/186 not a 286+ 1.22 else 1.23 - js endcpu 1.24 + jnz endcpu 1.25 endif 1.26 p386 1.27 ifdef EXTRA
2.1 --- a/syslinux/stuff/iso2exe/iso2exe.sh Tue Mar 14 21:00:20 2017 +0200 2.2 +++ b/syslinux/stuff/iso2exe/iso2exe.sh Wed Mar 15 12:56:01 2017 +0100 2.3 @@ -34,21 +34,8 @@ 2.4 add_rootfs() 2.5 { 2.6 TMP=/tmp/iso2exe$$ 2.7 - mkdir -p $TMP/dev 2.8 - cp -a /dev/tty /dev/tty0 $TMP/dev 2.9 - $0 --get init > $TMP/init.exe 2.10 -# mount -o loop,ro $1 $TMP 2.11 -# oldslitaz="$(ls $TMP/boot/isolinux/splash.lss 2> /dev/null)" 2.12 -# umount -d $TMP 2.13 -# [ "$oldslitaz" ] && # for SliTaz <= 3.0 only... 2.14 -# grep -q mount.posixovl.iso2exe $TMP/init.exe && mkdir $TMP/bin && 2.15 -# cp /usr/sbin/mount.posixovl $TMP/bin/mount.posixovl.iso2exe \ 2.16 -# 2> /dev/null && echo "Store mount.posixovl ($(wc -c \ 2.17 -# < /usr/sbin/mount.posixovl) bytes) ..." 2.18 - find $TMP -type f -print0 | xargs -0 chmod +x 2.19 - find $TMP -print0 | xargs -0 touch -t 197001010100.00 2.20 - ( cd $TMP ; find * | grep -v rootfs.gz | cpio -o -H newc ) | \ 2.21 - compress $TMP/rootfs.gz 2.22 + mkdir -p $TMP 2.23 + $0 --get rootfs.gz > $TMP/rootfs.gz 2.24 SIZE=$(wc -c < $TMP/rootfs.gz) 2.25 store 24 $SIZE $1 2.26 OFS=$(( $OFS - $SIZE )) 2.27 @@ -203,6 +190,53 @@ 2.28 esac 2.29 } 2.30 2.31 +trailer() 2.32 +{ 2.33 + OFFSET=$(stat -c %s "$1") 2.34 + [ $OFFSET -gt $HEAP ] && 2.35 + printf "%d free bytes in %04X..%04X\n" $(($OFFSET - $HEAP)) $HEAP $OFFSET 2.36 + if [ $(get 510 "$1") -eq 43605 ]; then 2.37 + echo "MBR partitions :" 2.38 + for i in 0 1 2 3; do 2.39 + SIZE=$(get $((446+12+16*i)) "$1" 4) 2.40 + [ $SIZE -eq 0 ] && continue 2.41 + OFFSET=$(get $((446+8+16*i)) "$1" 4) 2.42 + printf " $i:%08X %08X %02X\n" $OFFSET $SIZE \ 2.43 + $(get $((446+4+16*i)) "$1" 1) 2.44 + done 2.45 + if [ $(get 466 "$1") -eq 65263 ]; then 2.46 + echo "EFI partitions :" 2.47 + n=$(get 584 "$1" 1) 2.48 + s=$(get 596 "$1") 2.49 + o=$((($(get 552 "$1" 1)*512)-($(get 592 "$1")*$s))) 2.50 + i=0 2.51 + while [ $n -gt $i ]; do 2.52 + f=$(get $(($o+0x20)) "$1" 4) 2.53 + l=$(($(get $(($o+0x28)) "$1" 4)-$f)) 2.54 + [ $l -eq 0 ] && break 2.55 + printf " $i:%08X %08X %s\n" $f $(($l+1)) \ 2.56 + "$(od -An -N 36 -w -j $(($o+0x38)) -t a "$1" \ 2.57 + | sed 's/\( nul\)*//g;s/ //g;s/ sp//')" 2.58 + o=$(($o+$s)) 2.59 + i=$(($i+1)) 2.60 + done 2.61 + fi 2.62 + fi 2.63 + o=2048 2.64 + if [ $(get $o "$1") -eq 19792 ]; then 2.65 + echo "Apple partitions :" 2.66 + i=0 2.67 + while [ $(get $o "$1") -eq 19792 ]; do 2.68 + f=$((0x$(od -An -N 4 -j $(($o+8)) -t x1 "$1" | sed 's/ //g'))) 2.69 + l=$((0x$(od -An -N 4 -j $(($o+0x54)) -t x1 "$1" | sed 's/ //g'))) 2.70 + printf " $i:%08X %08X %s\n" $f $l \ 2.71 + "$(ddq bs=1 skip=$(($o+16)) count=32 if="$1")" 2.72 + o=$(($o+2048)) 2.73 + i=$(($i+1)) 2.74 + done 2.75 + fi 2.76 +} 2.77 + 2.78 list() 2.79 { 2.80 HEAP=0 2.81 @@ -219,49 +253,7 @@ 2.82 [ $OFFSET -ge $HEAP ] && HEAP=$(($OFFSET+$SIZE)) 2.83 printf "$f at %04X ($SIZE bytes).\n" $OFFSET 2.84 done 2.85 - OFFSET=$(stat -c %s "$ISO") 2.86 - [ $OFFSET -gt $HEAP ] && 2.87 - printf "%d free bytes in %04X..%04X\n" $(($OFFSET - $HEAP)) $HEAP $OFFSET 2.88 - if [ $(get 510 "$ISO") -eq 43605 ]; then 2.89 - echo "MBR partitions :" 2.90 - for i in 0 1 2 3; do 2.91 - SIZE=$(get $((446+12+16*i)) "$ISO" 4) 2.92 - [ $SIZE -eq 0 ] && continue 2.93 - OFFSET=$(get $((446+8+16*i)) "$ISO" 4) 2.94 - printf " $i:%08X %08X %02X\n" $OFFSET $SIZE \ 2.95 - $(get $((446+4+16*i)) "$ISO" 1) 2.96 - done 2.97 - if [ $(get 466 "$ISO") -eq 65263 ]; then 2.98 - echo "EFI partitions :" 2.99 - n=$(get 584 "$ISO" 1) 2.100 - s=$(get 596 "$ISO") 2.101 - o=$((($(get 552 "$ISO" 1)*512)-($(get 592 "$ISO")*$s))) 2.102 - i=0 2.103 - while [ $n -gt $i ]; do 2.104 - f=$(get $(($o+0x20)) "$ISO" 4) 2.105 - l=$(($(get $(($o+0x28)) "$ISO" 4)-$f)) 2.106 - [ $l -eq 0 ] && break 2.107 - printf " $i:%08X %08X %s\n" $f $(($l+1)) \ 2.108 - "$(od -An -N 36 -w -j $(($o+0x38)) -t a "$ISO" \ 2.109 - | sed 's/\( nul\)*//g;s/ //g;s/ sp//')" 2.110 - o=$(($o+$s)) 2.111 - i=$(($i+1)) 2.112 - done 2.113 - fi 2.114 - fi 2.115 - o=2048 2.116 - if [ $(get $o "$ISO") -eq 19792 ]; then 2.117 - echo "Apple partitions :" 2.118 - i=0 2.119 - while [ $(get $o "$ISO") -eq 19792 ]; do 2.120 - f=$((0x$(od -An -N 4 -j $(($o+8)) -t x1 "$ISO" | sed 's/ //g'))) 2.121 - l=$((0x$(od -An -N 4 -j $(($o+0x54)) -t x1 "$ISO" | sed 's/ //g'))) 2.122 - printf " $i:%08X %08X %s\n" $f $l \ 2.123 - "$(ddq bs=1 skip=$(($o+16)) count=32 if="$ISO")" 2.124 - o=$(($o+2048)) 2.125 - i=$(($i+1)) 2.126 - done 2.127 - fi 2.128 + trailer $ISO 2.129 } 2.130 2.131 restore_hybrid_mbr() 2.132 @@ -298,9 +290,18 @@ 2.133 case "$1" in 2.134 --build) 2.135 shift 2.136 - ls -l $@ 2.137 + TMP=/tmp/iso2exe$$ 2.138 + mkdir -p $TMP/dev 2.139 + cp -a /dev/tty /dev/tty0 $TMP/dev 2.140 + cat init > $TMP/init.exe 2.141 + find $TMP -type f -print0 | xargs -0 chmod +x 2.142 + find $TMP -print0 | xargs -0 touch -t 197001010100.00 2.143 + ( cd $TMP ; find * | grep -v rootfs.gz | cpio -o -H newc ) | \ 2.144 + compress rootfs.gz 2.145 + rm -rf $TMP 2.146 + ls -l $@ rootfs.gz 2.147 cat >> $0 <<EOM 2.148 -$(tar cf - $@ | compress | uuencode -m -) 2.149 +$(tar cf - ${@/init/rootfs.gz} | compress | uuencode -m -) 2.150 EOT 2.151 EOM 2.152 sed -i '/^case/,/^esac/d' $0 2.153 @@ -574,6 +575,7 @@ 2.154 md5sum | cut -c-32 | sed 's/\(..\)/\\x\1/g')" | \ 2.155 ddq bs=16 seek=2047 conv=notrunc of=$1 2.156 fi 2.157 + HEAP=$(($(custom_config_sector $1)*2048)) 2.158 if [ "$append$initrd" ]; then 2.159 echo -n "Adding custom config... " 2.160 DATA=/tmp/$(basename $0)$$ 2.161 @@ -583,16 +585,15 @@ 2.162 [ -s "$initrd" ] && echo "initrd:$(stat -c %s $initrd)" >> $DATA && 2.163 cat $initrd >> $DATA 2.164 echo "#!boot $(md5sum $DATA | sed 's/ .*//')" | cat - $DATA | \ 2.165 - ddq bs=2k seek=$(custom_config_sector $1) of=$1 conv=notrunc 2.166 + ddq bs=2k seek=$(custom_config_sector $1) of=$1 2.167 newsz=$(stat -c %s $1) 2.168 + mb=$(((($newsz -1)/1048576)+1)) 2.169 + HEAP=$(($mb*1048576)) 2.170 + ddq bs=1048576 seek=$mb count=0 of=$1 2.171 + h=$(get 417 "$1" 1) 2.172 + [ -z "$RECURSIVE_PARTITION" ] || h=0 2.173 for i in 0 1 2 3 ; do 2.174 [ $(get $((0x1BE+16*i)) $1 2) == $((0x0080)) ] || continue 2.175 - mb=$(((($newsz -1)/1024/1024)+1)) 2.176 - h=$((512*$(get 417 "$1" 1))) 2.177 - store $((0x1C5+16*i)) $(($mb-1)) $1 8 2.178 - store $(($h+0x1C5+16*i)) $(($mb-1)) $1 8 2.179 - store $(($h+0x1CA+16*i)) $(($mb*2048)) $1 32 2.180 - [ -z "$RECURSIVE_PARTITION" ] || h=0 2.181 store $((0x1CA+16*i)) $(($mb*2048-$h)) $1 32 2.182 done 2.183 if [ $newsz -gt $isosz ]; then 2.184 @@ -612,6 +613,7 @@ 2.185 store 18 $(( (-$n -1) % 65536 )) $1 2.186 fi 2.187 echo " done." 2.188 + trailer $1 2.189 } 2.190 2.191 main "$@" <<EOT