wok-current rev 23947
syslinux/taziso/usbbootkey: gpt supprt
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sun Sep 20 15:59:25 2020 +0000 (2020-09-20) |
parents | 09d8c12d6514 |
children | 3996eb426001 |
files | syslinux/stuff/iso2exe/taziso |
line diff
1.1 --- a/syslinux/stuff/iso2exe/taziso Sun Sep 20 14:15:26 2020 +0000 1.2 +++ b/syslinux/stuff/iso2exe/taziso Sun Sep 20 15:59:25 2020 +0000 1.3 @@ -33,6 +33,23 @@ 1.4 done | xargs echo -en 1.5 } 1.6 1.7 +word32s2bin() 1.8 +{ 1.9 + for i in $@ ; do 1.10 + printf '\\\\x%02X\\\\x%02X\\\\x%02X\\\\x%02X' $(($i&255)) \ 1.11 + $((($i>>8)&255)) $((($i>>16)&255)) $((($i>>24)&255)) 1.12 + done | xargs echo -en 1.13 +} 1.14 + 1.15 +word64s2bin() 1.16 +{ 1.17 + for i in $@ ; do 1.18 + printf '\\\\x%02X\\\\x%02X\\\\x%02X\\\\x%02X\\\\x%02X\\\\x%02X\\\\x%02X\\\\x%02X' \ 1.19 + $(($i&255)) $((($i>>8)&255)) $((($i>>16)&255)) $((($i>>24)&255)) \ 1.20 + $((($i>>32)&255)) $((($i>>40)&255)) $((($i>>48)&255)) $((($i>>56)&255)) 1.21 + done | xargs echo -en 1.22 +} 1.23 + 1.24 gettazboot() 1.25 { 1.26 echo -e "\nCreating $(basename $1) ..." 1.27 @@ -54,6 +71,16 @@ 1.28 grep -q ' lm ' /proc/cpuinfo && [ -s ${1}64 ] && echo 64 1.29 } 1.30 1.31 +size() 1.32 +{ 1.33 + [ -L "$1" ] && case "$(readlink "$1")" in 1.34 + /*) set -- $(readlink "$1") ;; 1.35 + *) set -- $(dirname "$1")/$(readlink "$1") ;; 1.36 + esac 1.37 + [ ! -b "$1" ] && echo $(stat -c %s "$1") || 1.38 + echo $(($(cat /sys/block/${1#/dev/}/size)*512) 1.39 +} 1.40 + 1.41 uncpio() 1.42 { 1.43 i=$1 1.44 @@ -90,7 +117,7 @@ 1.45 1.46 tazusbinitfs() 1.47 { 1.48 - PAD=$(($(stat -c %s $1) % 4)) 1.49 + PAD=$(($(size $1) % 4)) 1.50 [ $PAD -ne 0 ] && ddq if=/dev/zero bs=1 count=$((4 - $PAD)) >> $1 1.51 mkdir -p /tmp/fs$$/etc /tmp/fs$$/lib /tmp/fs$$/home 1.52 cp -a /etc/locale.conf /etc/locale.conf /tmp/fs$$/etc 2> /dev/null 1.53 @@ -623,7 +650,7 @@ 1.54 for i in $(ls_r $media/boot/rootfs*gz); do 1.55 i=$(maybe64 $i) 1.56 cat $i 1.57 - n=$((4 - ($(stat -c %s $i) % 4))) 1.58 + n=$((4 - ($(size $i) % 4))) 1.59 [ $n -eq 4 ] || dd if=/dev/zero bs=1 count=$n 1.60 done > initrd$$ 1.61 cmdline="root=/dev/null autologin lang=$LANG" 1.62 @@ -1081,6 +1108,84 @@ 1.63 able to save the package updates or your own configuration and data files.\n\n" 1.64 } 1.65 1.66 +gpt_crc32() 1.67 +{ 1.68 + t0=00000000; t1=77073096; t2=EE0E612C; t3=990951BA; 1.69 + t4=076DC419; t5=706AF48F; t6=E963A535; t7=9E6495A3; 1.70 + t8=0EDB8832; t9=79DCB8A4; t10=E0D5E91E; t11=97D2D988; 1.71 + t12=09B64C2B; t13=7EB17CBD; t14=E7B82D07; t15=90BF1D91; 1.72 + t16=1DB71064; t17=6AB020F2; t18=F3B97148; t19=84BE41DE; 1.73 + t20=1ADAD47D; t21=6DDDE4EB; t22=F4D4B551; t23=83D385C7; 1.74 + t24=136C9856; t25=646BA8C0; t26=FD62F97A; t27=8A65C9EC; 1.75 + t28=14015C4F; t29=63066CD9; t30=FA0F3D63; t31=8D080DF5; 1.76 + t32=3B6E20C8; t33=4C69105E; t34=D56041E4; t35=A2677172; 1.77 + t36=3C03E4D1; t37=4B04D447; t38=D20D85FD; t39=A50AB56B; 1.78 + t40=35B5A8FA; t41=42B2986C; t42=DBBBC9D6; t43=ACBCF940; 1.79 + t44=32D86CE3; t45=45DF5C75; t46=DCD60DCF; t47=ABD13D59; 1.80 + t48=26D930AC; t49=51DE003A; t50=C8D75180; t51=BFD06116; 1.81 + t52=21B4F4B5; t53=56B3C423; t54=CFBA9599; t55=B8BDA50F; 1.82 + t56=2802B89E; t57=5F058808; t58=C60CD9B2; t59=B10BE924; 1.83 + t60=2F6F7C87; t61=58684C11; t62=C1611DAB; t63=B6662D3D; 1.84 + t64=76DC4190; t65=01DB7106; t66=98D220BC; t67=EFD5102A; 1.85 + t68=71B18589; t69=06B6B51F; t70=9FBFE4A5; t71=E8B8D433; 1.86 + t72=7807C9A2; t73=0F00F934; t74=9609A88E; t75=E10E9818; 1.87 + t76=7F6A0DBB; t77=086D3D2D; t78=91646C97; t79=E6635C01; 1.88 + t80=6B6B51F4; t81=1C6C6162; t82=856530D8; t83=F262004E; 1.89 + t84=6C0695ED; t85=1B01A57B; t86=8208F4C1; t87=F50FC457; 1.90 + t88=65B0D9C6; t89=12B7E950; t90=8BBEB8EA; t91=FCB9887C; 1.91 + t92=62DD1DDF; t93=15DA2D49; t94=8CD37CF3; t95=FBD44C65; 1.92 + t96=4DB26158; t97=3AB551CE; t98=A3BC0074; t99=D4BB30E2; 1.93 + t100=4ADFA541; t101=3DD895D7; t102=A4D1C46D; t103=D3D6F4FB; 1.94 + t104=4369E96A; t105=346ED9FC; t106=AD678846; t107=DA60B8D0; 1.95 + t108=44042D73; t109=33031DE5; t110=AA0A4C5F; t111=DD0D7CC9; 1.96 + t112=5005713C; t113=270241AA; t114=BE0B1010; t115=C90C2086; 1.97 + t116=5768B525; t117=206F85B3; t118=B966D409; t119=CE61E49F; 1.98 + t120=5EDEF90E; t121=29D9C998; t122=B0D09822; t123=C7D7A8B4; 1.99 + t124=59B33D17; t125=2EB40D81; t126=B7BD5C3B; t127=C0BA6CAD; 1.100 + t128=EDB88320; t129=9ABFB3B6; t130=03B6E20C; t131=74B1D29A; 1.101 + t132=EAD54739; t133=9DD277AF; t134=04DB2615; t135=73DC1683; 1.102 + t136=E3630B12; t137=94643B84; t138=0D6D6A3E; t139=7A6A5AA8; 1.103 + t140=E40ECF0B; t141=9309FF9D; t142=0A00AE27; t143=7D079EB1; 1.104 + t144=F00F9344; t145=8708A3D2; t146=1E01F268; t147=6906C2FE; 1.105 + t148=F762575D; t149=806567CB; t150=196C3671; t151=6E6B06E7; 1.106 + t152=FED41B76; t153=89D32BE0; t154=10DA7A5A; t155=67DD4ACC; 1.107 + t156=F9B9DF6F; t157=8EBEEFF9; t158=17B7BE43; t159=60B08ED5; 1.108 + t160=D6D6A3E8; t161=A1D1937E; t162=38D8C2C4; t163=4FDFF252; 1.109 + t164=D1BB67F1; t165=A6BC5767; t166=3FB506DD; t167=48B2364B; 1.110 + t168=D80D2BDA; t169=AF0A1B4C; t170=36034AF6; t171=41047A60; 1.111 + t172=DF60EFC3; t173=A867DF55; t174=316E8EEF; t175=4669BE79; 1.112 + t176=CB61B38C; t177=BC66831A; t178=256FD2A0; t179=5268E236; 1.113 + t180=CC0C7795; t181=BB0B4703; t182=220216B9; t183=5505262F; 1.114 + t184=C5BA3BBE; t185=B2BD0B28; t186=2BB45A92; t187=5CB36A04; 1.115 + t188=C2D7FFA7; t189=B5D0CF31; t190=2CD99E8B; t191=5BDEAE1D; 1.116 + t192=9B64C2B0; t193=EC63F226; t194=756AA39C; t195=026D930A; 1.117 + t196=9C0906A9; t197=EB0E363F; t198=72076785; t199=05005713; 1.118 + t200=95BF4A82; t201=E2B87A14; t202=7BB12BAE; t203=0CB61B38; 1.119 + t204=92D28E9B; t205=E5D5BE0D; t206=7CDCEFB7; t207=0BDBDF21; 1.120 + t208=86D3D2D4; t209=F1D4E242; t210=68DDB3F8; t211=1FDA836E; 1.121 + t212=81BE16CD; t213=F6B9265B; t214=6FB077E1; t215=18B74777; 1.122 + t216=88085AE6; t217=FF0F6A70; t218=66063BCA; t219=11010B5C; 1.123 + t220=8F659EFF; t221=F862AE69; t222=616BFFD3; t223=166CCF45; 1.124 + t224=A00AE278; t225=D70DD2EE; t226=4E048354; t227=3903B3C2; 1.125 + t228=A7672661; t229=D06016F7; t230=4969474D; t231=3E6E77DB; 1.126 + t232=AED16A4A; t233=D9D65ADC; t234=40DF0B66; t235=37D83BF0; 1.127 + t236=A9BCAE53; t237=DEBB9EC5; t238=47B2CF7F; t239=30B5FFE9; 1.128 + t240=BDBDF21C; t241=CABAC28A; t242=53B39330; t243=24B4A3A6; 1.129 + t244=BAD03605; t245=CDD70693; t246=54DE5729; t247=23D967BF; 1.130 + t248=B3667A2E; t249=C4614AB8; t250=5D681B02; t251=2A6F2B94; 1.131 + t252=B40BBE37; t253=C30C8EA1; t254=5A05DF1B; t255=2D02EF8D; 1.132 + crc=$((0xFFFFFFFF)) 1.133 + dd if=$iso bs=1 skip=$(($1)) count=$(($2)) 2> /dev/null | \ 1.134 + od -v -w1 -t u1 -An | { 1.135 + while read n; do 1.136 + local x=$((($crc ^ $n) & 255)) 1.137 + eval x=0x\$t$x 1.138 + crc=$(((($crc >> 8) & 0x00FFFFFF) ^ $x)) 1.139 + done 1.140 + echo $(($crc ^ 0xFFFFFFFF)) 1.141 + } 1.142 +} 1.143 + 1.144 usbbootkey() 1.145 { 1.146 if [ -b "$1" ]; then 1.147 @@ -1100,7 +1205,7 @@ 1.148 fi 1.149 1.150 # perform dd in progress bar 1.151 - max=$(($(stat -c %s "$ISO")/1024/1024)) 1.152 + max=$(($(size "$ISO")/1024/1024)) 1.153 i=0; while [ $i -le $max ]; do 1.154 ddq if="$ISO" bs=1024k count=1 skip=$i seek=$i of=$device 1.155 echo $((($i*100)/$max)) 1.156 @@ -1108,30 +1213,33 @@ 1.157 done | dialog --gauge " The ISO image transfer can be long. Please wait..." \ 1.158 6 70 0 > /dev/tty 2>&1 1.159 1.160 - # partition + fat32 format for the remaining space 1.161 - for p in 0 16; do 1.162 - get $((450+$p)) $device 2 12 | xargs echo | { 1.163 - read dx cx ol oh ll lh 1.164 - [ $dx -eq $((0x3F17)) ] || continue 1.165 - cx=$(($cx & 0xFF00)) 1.166 - ofs=$(($ll+($lh<<16))) 1.167 - n=$(($(cat /sys/block/${device#/dev/}/size)-$ofs)) 1.168 - m=$(($cx+($n/8))) 1.169 - [ $m -gt $((0x3FF00)) ] && m=$((0x3FF00)) 1.170 - m=$((($m & 0xFF00)+(($m>>16)<<6))) 1.171 - words2bin 0 $((0x101+$cx)) 0x3F0B $((32+$m)) \ 1.172 - $ll $lh $(($n & 0xFFFF)) $(($n >> 16)) | \ 1.173 - ddq bs=1 seek=$((462-$p)) of=$device 1.174 - if [ "$(which mkdosfs 2> /dev/null)" ]; then 1.175 - losetup -o $((512*$ofs)) /dev/loop2 $device 1.176 - mkdosfs -n "SLITAZ BOOT" /dev/loop2 1.177 - words2bin $(($ofs & 0xFFFF)) $(($ofs >> 16)) | \ 1.178 - ddq bs=1 seek=28 of=/dev/loop2 1.179 - sync 1.180 - losetup -d /dev/loop2 1.181 - fi 1.182 - } 1.183 - done 1.184 + # GPT partition + fat32 format for the remaining space 1.185 + sectors=$(($(size $device)/512)) 1.186 + word32s2bin $(($sectors-1)) | ddq bs=1 seek=458 of=$device # pmbr 1.187 + word32s2bin 0 | ddq bs=1 seek=$((512+16)) of=$device 1.188 + word64s2bin $(($sectors-3)) | ddq bs=1 seek=$((512+48)) of=$device 1.189 + uudecode - <<EOT | gunzip | ddn bs=128 seek=9 of=$device # partiton fat32 1.190 +begin-base64 644 - 1.191 +H4sIAAAAAAACA1u04MLrpzuNXdoPZGzbrjbz+C/fHwyfEro9Z7E93Fi5/8sH 1.192 +BhzAiSGRoZghkyGZQYEhBcguAWIFhgIgWQRkZ4JxPkMeAyEAAOuEo7uAAAAA 1.193 +==== 1.194 +EOT 1.195 + last=$(($(size "$ISO")/512)) 1.196 + custom=$((4*$(get 32848 $device 4))) 1.197 + [ $custom -gt $(($last-4)) ] && last=$(($custom+4)) # room for cmdline 1.198 + word64s2bin $last | ddq bs=1 seek=$((1024+128+32)) of=$device # vfat first address 1.199 + word64s2bin $(($sectors-3)) | ddq bs=1 seek=$((1024+128+40)) of=$device # vfat last address 1.200 + word32s2bin $(gpt_crc32 1024 $(($(get 596 $device 4)*$(get 592 $device 4)))) | ddq bs=1 seek=$((512+88)) # CRC32 partitions 1.201 + ddn of=$device if=$device bs=512 skip=1 seek=$(($sectors-1)) count=1 1.202 + ddn of=$device if=$device bs=512 skip=2 seek=$(($sectors-2)) count=1 1.203 + word64s2bin $(($sectors-1)) 1 | ddq bs=1 seek=$(($sectors*512-512+24)) of=$device # my gpt, alt gpt 1.204 + word64s2bin $(($sectors-1)) | ddq bs=1 seek=$((512+32)) of=$device # alt gpt 1.205 + word64s2bin $(($sectors-2)) | ddq bs=1 seek=$(($sectors*512-512+72)) of=$device 1.206 + word32s2bin $(gpt_crc32 $(($sectors*512-512)) $(get 525 $device 4)) | ddq bs=1 seek=$(($sectors*512-512+16)) # CRC32 header 1.207 + word32s2bin $(gpt_crc32 512 $(get 524 $device 4)) | ddq bs=1 seek=$((512+16)) # CRC32 header 1.208 + partprobe $device 1.209 + homedev=/dev/$(basename /sys/block/${device#/dev/}/${device#/dev/}*2) 1.210 + mkdosfs -n 'SLITAZ HOME' $homedev 1.211 1.212 # update boot/exe crc16 1.213 i=$(($(get 2 $1) - 1 + ($(get 4 $1) - 1)*512)) 1.214 @@ -1139,6 +1247,19 @@ 1.215 awk '{ i+= $0 } END { print (i % 65536) }') \ 1.216 + $(get $(($i+1)) $device 1))) 1.217 words2bin $(( (-$i -1) % 65536 )) | ddq bs=1 seek=18 of=$device 1.218 + 1.219 + $DIALOG --clear --title " Set /home persistent " \ 1.220 + --yes-label "Continue" --yesno \ 1.221 +"\nThe USB key will run fully in ram. The datas will be lost after reboot.\n\n 1.222 +This option will mount /home on the USB key during the boot process.\n" 16 70 1.223 + if [ $? -eq 0 ]; then 1.224 + data="append=home=$(blkid $homedev | sed 's|.* UUID="||;s|".*||') kmap=$(cat /etc/keymap.conf) lang=${LANG%.UTF*} tz=$(cat /etc/TZ) loadfs" 1.225 + cat <<EOT | ddn bs=512 seek=$custom of=$device 1.226 +#!boot $(echo "$data" | md5sum | sed 's/ .*//') 1.227 +$data 1.228 +-- 1.229 +EOT 1.230 + fi 1.231 } 1.232 1.233 usbkey() 1.234 @@ -1225,7 +1346,7 @@ 1.235 1.236 if [ "$1" = "--build" ]; then #install-begin 1.237 uuencode -m - < header.com | sed -e '/^HEADERCODE$/r/dev/stdin' \ 1.238 - -e "s|HEADERSZ|$(stat -c %s header.com)|" -e '/^HEADERCODE$/d' -i $0 1.239 + -e "s|HEADERSZ|$(size header.com)|" -e '/^HEADERCODE$/d' -i $0 1.240 uuencode -m - < ifmem.bin | sed -e '/^ifmemcode$/r/dev/stdin' \ 1.241 -e '/^ifmemcode$/d' -i $0 1.242 uuencode -m - < bootloader.bin | sed -e '/^bootloader$/r/dev/stdin' \ 1.243 @@ -1317,7 +1438,7 @@ 1.244 syssize=$(echo $(get 500 /tmp/fd$$ 4)) 1.245 ddq bs=512 skip=$n if=$KERNEL | cat - /dev/zero | \ 1.246 ddq bs=512 count=$((($syssize+31)/32)) conv=sync >> /tmp/fd$$ 1.247 - base=$(stat -c %s /tmp/fd$$) 1.248 + base=$(size /tmp/fd$$) 1.249 len= 1.250 if [ "$INITRD" ]; then 1.251 l=0 1.252 @@ -1328,7 +1449,7 @@ 1.253 [ -n "$j" ] && i=$j && break 1.254 done 1.255 ddq if=$i >> /tmp/fd$$ 1.256 - l=$(($l+$(stat -c %s $i))) 1.257 + l=$(($l+$(size $i))) 1.258 r=$((4 - ($l % 4))) 1.259 if [ $r -ne 4 ]; then 1.260 ddq if=/dev/zero bs=1 count=$r >> /tmp/fd$$ 1.261 @@ -1491,7 +1612,7 @@ 1.262 $(gotposixovlzip "inst2zip" "ZIP installation archive (UMSDOS way)") \ 1.263 $(gotposixovlzip "insttaz2zip" "ZIP installation archive (TAZUSB way)") \ 1.264 $(gottazusb "usbkey" "USB key read/write installation") \ 1.265 -$(ishybrid "usbbootkey" "USB boot key (read only)") \ 1.266 +$(ishybrid "usbbootkey" "USB boot key (not upgradable)") \ 1.267 $(hasflavinfo "showfavinfo" "Show flavor extra info") \ 1.268 $(hasflavor "flavor" "Get flavor file") \ 1.269 $(cdfile isolinux.cfg "floppyset" "Boot floppy set") \