wok diff syslinux/stuff/iso2exe/iso2exe.sh @ rev 13691
syslinux: add iso2exe
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Thu Dec 13 14:33:27 2012 +0100 (2012-12-13) |
parents | |
children | 87a217af01ea |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/syslinux/stuff/iso2exe/iso2exe.sh Thu Dec 13 14:33:27 2012 +0100 1.3 @@ -0,0 +1,73 @@ 1.4 +#!/bin/sh 1.5 +if [ "$1" == "--build" ]; then 1.6 + shift 1.7 + [ $(tar cf - $@ | wc -c) -gt $((32 * 1024)) ] && 1.8 + echo "The file set $@ is too large (31K max) :" && 1.9 + ls -l $@ && exit 1 1.10 + cat >> $0 <<EOM 1.11 +$(tar cf - $@ | lzma e -si -so | uuencode -m -) 1.12 +EOT 1.13 +EOM 1.14 + sed -i '/--build/,/^fi/d' $0 1.15 + exit 1.16 +fi 1.17 + 1.18 +ddq() 1.19 +{ 1.20 + dd $@ 2> /dev/null 1.21 +} 1.22 + 1.23 +store() 1.24 +{ 1.25 + n=$2; for i in $(seq 8 8 ${4:-16}); do 1.26 + printf '\\\\x%02X' $(($n & 255)) 1.27 + n=$(($n >> 8)) 1.28 + done | xargs echo -en | ddq bs=1 conv=notrunc of=$3 seek=$(($1)) 1.29 +} 1.30 + 1.31 +main() 1.32 +{ 1.33 + case "$1" in 1.34 + --get) shift 1.35 + uudecode | unlzma | tar xOf - $@ 1.36 + exit ;; 1.37 + *) cat > /dev/null 1.38 + esac 1.39 + 1.40 + [ ! -s "$1" ] && echo "usage: $0 image.iso" 1>&2 && exit 1 1.41 + case "$(od -N 2 -t x2 -An $1)" in 1.42 + *5a4d) echo "The file $1 is already an EXE file." 1>&2 && exit 1;; 1.43 + *0000) [ -x /usr/bin/isohybrid ] && isohybrid $1 1.44 + esac 1.45 + [ ! -x /usr/sbin/mount.posixovl ] && 1.46 + echo "No file mount.posixovl. Abort." 1>&2 && exit 1 1.47 + 1.48 + echo "Move syslinux hybrid boot record..." 1.49 + ddq if=$1 bs=512 count=1 | ddq of=$1 bs=512 count=1 seek=1 conv=notrunc 1.50 + 1.51 + echo "Insert EXE boot record..." 1.52 + $0 --get bootiso.bin | ddq of=$1 conv=notrunc 1.53 + 1.54 + # keep the largest room for the tazlito info file 1.55 + TMP=/tmp/iso2exe$$ 1.56 + mkdir -p $TMP/usr/sbin 1.57 + cp /usr/sbin/mount.posixovl $TMP/usr/sbin/mount.posixovl.iso2exe 1.58 + $0 --get init > $TMP/init.exe 1.59 + chmod +x $TMP/init.exe $TMP/usr/sbin/mount.posixov* 1.60 + ( cd $TMP ; ls init.exe usr/sbin/mount.posixov* | cpio -o -H newc ) | \ 1.61 + lzma e $TMP/rootfs.gz -si 2> /dev/null 1.62 + SIZE=$(wc -c < $TMP/rootfs.gz) 1.63 + store 28 $SIZE $1 1.64 + OFS=$(( 0x8000 - $SIZE )) 1.65 + printf "Add rootfs.gz file at %04X...\n" $OFS 1.66 + cat $TMP/rootfs.gz | ddq of=$1 bs=1 seek=$OFS conv=notrunc 1.67 + rm -rf $TMP 1.68 + SIZE=$($0 --get lzcom.bin boot.com.lzma | wc -c) 1.69 + OFS=$(( $OFS - $SIZE )) 1.70 + printf "Add DOS boot file at %04X...\n" $OFS 1.71 + $0 --get lzcom.bin boot.com.lzma | ddq of=$1 bs=1 seek=$OFS conv=notrunc 1.72 + store 36 $(($OFS+0xE0)) $1 1.73 + store 30 ${RANDOM:-0} $1 1.74 +} 1.75 + 1.76 +main $@ <<EOT