wok rev 17476

isolinux/iso2exe: fix mkfloppy
author Pascal Bellard <pascal.bellard@slitaz.org>
date Mon Dec 29 18:24:44 2014 +0100 (2014-12-29)
parents 3cf0f7376fcf
children 872c5b5c0620
files syslinux/stuff/iso2exe/init syslinux/stuff/iso2exe/iso2exe.sh
line diff
     1.1 --- a/syslinux/stuff/iso2exe/init	Sat Dec 27 20:44:28 2014 +0100
     1.2 +++ b/syslinux/stuff/iso2exe/init	Mon Dec 29 18:24:44 2014 +0100
     1.3 @@ -82,14 +82,25 @@
     1.4  
     1.5  uncpio()
     1.6  {
     1.7 -	echo "Extracting $(basename $1) ..."
     1.8 +	echo -en "\n Extracting $(basename $1) ..."
     1.9  	case $(get 0 $1) in
    1.10  	*35615)	( zcat || gunzip ) ;;
    1.11 +	*14333) unxz ;;
    1.12  	*\ 93)	unlzma ;;
    1.13  	*)	cat ;;
    1.14  	esac < $1 | ( cd ${2:-/} ; cpio -idmu > /dev/null 2>&1 )
    1.15  }
    1.16  
    1.17 +dotwait()
    1.18 +{
    1.19 +	echo -n "${1:-Install filesystem}.."
    1.20 +	touch /tmp/wait
    1.21 +	while [ -e /tmp/wait ]; do
    1.22 +		echo -n "." > /dev/tty0
    1.23 +		sleep 1
    1.24 +	done &
    1.25 +}
    1.26 +
    1.27  getuuid()
    1.28  {
    1.29  	dev=$(mount | sed '/ \/mnt /!d;s/ .*//;s|/dev/||;q')
    1.30 @@ -140,12 +151,12 @@
    1.31  
    1.32  mkinitrd()
    1.33  {
    1.34 -	echo "Creating $(basename $1) ..."
    1.35 +	dotwait "Creating $(basename $1) "
    1.36  	for i in bin lib dev proc tmp mnt etc ; do
    1.37  		mkdir -p /tmp/fs/$i
    1.38  	done
    1.39 -	for i in /dev/console /dev/null /dev/tty /dev/tty1 /dev/tty2 /dev/fuse \
    1.40 -		 /dev/hd* /dev/sd* ; do
    1.41 +	for i in /dev/console /dev/null /dev/tty /dev/tty0 /dev/tty1 /dev/tty2 \
    1.42 +		 /dev/fuse /dev/hd* /dev/sd* ; do
    1.43  		cp -a $i /tmp/fs$i
    1.44  	done
    1.45  	for i in /bin/busybox $(which mount.posixovl) $(which blkid); do
    1.46 @@ -189,7 +200,7 @@
    1.47  EOT
    1.48  	chmod +x /tmp/fs/init
    1.49  	( cd /tmp/fs ; find * | cpio -o -H newc ) | lzma e $1 -si 2> /dev/null
    1.50 -	rm -rf /tmp/fs
    1.51 +	rm -rf /tmp/fs /tmp/wait
    1.52  }
    1.53  
    1.54  is_loram()
    1.55 @@ -211,7 +222,7 @@
    1.56  		sleep 5
    1.57  		return 1
    1.58  	fi
    1.59 -	echo "Install root filesystem in /slitaz..."
    1.60 +	dowait "Install root filesystem in /slitaz.."
    1.61  	if [ "$1" ]; then
    1.62  		if [ -d /media/cdrom/fs ]; then
    1.63  			( cd /mnt/slitaz/fs; find | cpio -o -H newc ) | gzip -9
    1.64 @@ -245,7 +256,7 @@
    1.65  		initrd=initrd
    1.66  		extraargs="mount=$(getuuid) subroot=slitaz"
    1.67  	fi
    1.68 -	echo "Install boot files..."
    1.69 +	echo -en "\nInstall boot files..."
    1.70  	for i in /media/cdrom/boot/bzImage /media/cdrom/boot/*pxe* \
    1.71  		/media/cdrom/boot/isolinux/he* /media/cdrom/boot/isolinux/opt* \
    1.72  		/media/cdrom/README /media/cdrom/boot/memtest* ; do
    1.73 @@ -265,9 +276,10 @@
    1.74  		/mnt/slitaz/boot/README
    1.75  	[ -d /mnt/slitaz/usr/sbin -a ! -x /mnt/slitaz/usr/sbin/mount.posixovl ] &&
    1.76  	cp $(which mount.posixovl) /mnt/slitaz/usr/sbin
    1.77 +	rm -f /tmp/wait
    1.78  false &&
    1.79 -	! grep -qs tazboot /mnt/boot.ini && echo "Update boot.ini ..." &&
    1.80 -	unix2dos >> /mnt/boot.ini <<EOT
    1.81 +	[ -s /mnt/boot.ini ] && ! grep -qs tazboot /mnt/boot.ini &&
    1.82 +	echo "Update boot.ini ..." && unix2dos >> /mnt/boot.ini <<EOT
    1.83  C:\\slitaz\\boot\\tazboot.exe="SliTaz"
    1.84  EOT
    1.85  false &&
    1.86 @@ -321,6 +333,7 @@
    1.87  " 19 70
    1.88  	[ $? -eq 0 ] || return
    1.89  	doinstall tazusblike || return
    1.90 +	dotwait 
    1.91  	if [ -d /media/cdrom/fs ]; then
    1.92  		cp -a /media/cdrom/fs/. /
    1.93  	else
    1.94 @@ -330,6 +343,7 @@
    1.95  	fi
    1.96  	cp /tmp/fs/etc/* /etc
    1.97  	echo "/home=$(getuuid)/slitaz" > /cmdline
    1.98 +	rm -f /tmp/wait
    1.99  	[ -x /init1 ] || return
   1.100  	umount -d /media/cdrom
   1.101  	umount /mnt/slitaz
   1.102 @@ -346,7 +360,7 @@
   1.103  		--title " SliTaz bootloader for DOS " \
   1.104  		--yes-label "Install" --yesno \
   1.105  "\nThe file TAZBOOT.EXE will be created in the top directory. It supports
   1.106 -a bzImage linux kernel, multiple initramfs, a kernel command line and
   1.107 +any linux kernel, multiple initramfs, a kernel command line and
   1.108  an ISO image file loopback (retrieves files from an ISO file).\n\n
   1.109  Usage: tazboot.exe [[@commands]|[kernel=<bzimage>] 
   1.110  [initrd=<rootfs>[,<rootfs2>...]] [iso=<isofile>] cmdline args ...]\n\n
   1.111 @@ -365,8 +379,9 @@
   1.112  
   1.113  md5()
   1.114  {
   1.115 -	echo "Checking files..."
   1.116 -	( cd /media/cdrom ; md5sum -c md5sum ) > /tmp/data
   1.117 +	dotwait "Checking files"
   1.118 +	( cd /media/cdrom ; md5sum -c md5sum* ) > /tmp/data
   1.119 +	rm -f /tmp/wait
   1.120  	$DIALOG --clear \
   1.121  		--title " Checked files " \
   1.122  		--textbox /tmp/data 24 78
   1.123 @@ -387,10 +402,23 @@
   1.124  		--textbox /tmp/dmesg 24 78
   1.125  }
   1.126  
   1.127 +bzimage()
   1.128 +{
   1.129 +	$DIALOG --clear \
   1.130 +		--title " Create linux.exe ? " \
   1.131 +		--yes-label "Install" --yesno \
   1.132 +"\nLinux.exe launches the linux kernel under DOS (in real mode only).
   1.133 +The cmdline arguments are supported except initrd=, vga= (you can try 'rdev -v')
   1.134 +and mem= (partially).\n\nExample:\nC:\\> linux.exe root=/dev/hda2 ro panic=60\n
   1.135 +" 12 70
   1.136 +	[ $? -eq 0 ] || return
   1.137 +	cp /media/cdrom/boot/bzImage /mnt/linux.exe
   1.138 +}
   1.139 +
   1.140  memtest()
   1.141  {
   1.142  	$DIALOG --clear \
   1.143 -		--title " Memtest86 " \
   1.144 +		--title " Create memtest.exe ? " \
   1.145  		--yes-label "Install" --yesno \
   1.146  "\nMemtest86 is a thorough, stand alone memory test for x86 architecture
   1.147  computers. BIOS based memory tests are a quick, cursory check and often
   1.148 @@ -402,12 +430,13 @@
   1.149  
   1.150  mkfloppy()
   1.151  {
   1.152 +	dotwait "Create a $(basename $1) boot floppy"
   1.153  	ddq if=$1 of=/dev/fd0
   1.154  	[ $(($(get 0 $1) - 0x5A4D)) -eq 0 ] || return
   1.155  	J=$(($(get 3 $1 1) + 0x02))
   1.156  	R=$((1 + $(get 497 $1 1) + 1 + ($(get 500 $1)-1)/32))
   1.157  	[ $R -lt 2500 ] || return
   1.158 -	[ $((($(get 500 $file)-1) & 31)) -lt 30 ] &&
   1.159 +	[ $((($(get 500 $1)-1) & 31)) -lt 30 ] &&
   1.160  	ddq if=$file bs=32 count=1 seek=$(($R*16 - 1)) of=/dev/fd0
   1.161  	G="18 0 2 0 0 0 0 0"
   1.162  	[ $J -gt 25 ] || G=""
   1.163 @@ -423,6 +452,7 @@
   1.164  		bytes2bin 0xF0 0xFF 0xFF | ddq bs=512 seek=$i of=/dev/fd0
   1.165  	done
   1.166  	echo -n $(basename $1) | ddq bs=1 seek=3 count=8 of=/dev/fd0
   1.167 +	rm -f /tmp/wait
   1.168  }
   1.169  
   1.170  fdmemtest()
   1.171 @@ -440,8 +470,9 @@
   1.172  
   1.173  pxe()
   1.174  {
   1.175 +	pxe=$(ls /media/cdrom/boot/?pxe)
   1.176  	$DIALOG --clear \
   1.177 -		--title " SliTaz Web boot " \
   1.178 +		--title " Create $(basename $pxe).exe ? " \
   1.179  		--yes-label "Install" --yesno \
   1.180  "\nBoot your operating system from the internet and enjoy a full system
   1.181  working entirely in RAM with speed and stability in mind. The Linux Kernel
   1.182 @@ -449,7 +480,6 @@
   1.183  from the Web using PXE and HTTP protocols.\n
   1.184  " 12 70
   1.185  	[ $? -eq 0 ] || return
   1.186 -	pxe=$(ls /media/cdrom/boot/?pxe)
   1.187  	cp $pxe /mnt/$(basename $pxe).exe
   1.188  }
   1.189  
   1.190 @@ -480,7 +510,14 @@
   1.191  
   1.192  cdfile()
   1.193  {
   1.194 -	[ -s /media/cdrom/$1 ] && echo -en "\"$2\"	\"$3\""
   1.195 +	for i in ${1//,/ }; do
   1.196 +		[ -s /media/cdrom/$i ] && echo -en "\"$2\"	\"$3\"" && break
   1.197 +	done
   1.198 +}
   1.199 +
   1.200 +cdfilex()
   1.201 +{
   1.202 +	[ "$(which kexec)" ] && cdfile "$@"
   1.203  }
   1.204  
   1.205  cdexe()
   1.206 @@ -517,8 +554,9 @@
   1.207  
   1.208  usbdev()
   1.209  {
   1.210 -	echo "Wait 5 seconds for USB devices..."
   1.211 +	dotwait "Wait 5 seconds for USB devices"
   1.212  	sleep 5
   1.213 +	rm -f /tmp/wait
   1.214  	DEV="$(grep -l 1 /sys/block/*/removable | \
   1.215  		sed 's|/sys/block/\(.*\)/removable|\1|')"
   1.216  	[ "$DEV" ] || return
   1.217 @@ -559,7 +597,7 @@
   1.218  		[ $i -gt $max ] && break
   1.219  		echo $((($i*100)/$max)) | dialog --gauge \
   1.220  			" The ISO image transfer can be long. Please wait..." \
   1.221 -			6 70 0 > /dev/tty 2>&1
   1.222 +			6 70 0 > /dev/tty0 2>&1
   1.223  	done ) > $device
   1.224  
   1.225  	# partition + fat32 format for the remining space
   1.226 @@ -659,26 +697,46 @@
   1.227  live()
   1.228  {
   1.229  	n=0
   1.230 -	for i in $(ls_r /media/cdrom/boot/rootfs* 2> /dev/null); do
   1.231 +	dotwait "Extract filesystem..."
   1.232 +	for i in $(ls_r /media/cdrom/boot/rootfs*); do
   1.233  		[ $((n++)) -eq 0 ] || uncpio $i
   1.234  	done
   1.235 +	rm -f /tmp/wait
   1.236  	text
   1.237  }
   1.238  
   1.239 +dosync()
   1.240 +{
   1.241 +	sync
   1.242 +	[ ! -L /sqfs ] && umount -d /media/cdrom && umount /mnt
   1.243 +}
   1.244 +
   1.245  restart()
   1.246  {
   1.247 -	sync
   1.248 -	[ ! -L /sqfs ] && umount -d /media/cdrom && umount /mnt
   1.249 +	dosync
   1.250  	reboot -f
   1.251  }
   1.252  
   1.253  stop()
   1.254  {
   1.255 -	sync
   1.256 -	[ ! -L /sqfs ] && umount -d /media/cdrom && umount /mnt
   1.257 +	dosync
   1.258  	poweroff -f
   1.259  }
   1.260  
   1.261 +runmemtest()
   1.262 +{
   1.263 +	kexec -l /media/cdrom/boot/memtest
   1.264 +	dosync
   1.265 +	kexec -e
   1.266 +}
   1.267 +
   1.268 +runpxe()
   1.269 +{
   1.270 +	kexec -l /media/cdrom/boot/?pxe
   1.271 +	dosync
   1.272 +	kexec -e
   1.273 +}
   1.274 +
   1.275  shell()
   1.276  {
   1.277  	getty -n -l /bin/ash 38400 tty1 || sh
   1.278 @@ -711,19 +769,22 @@
   1.279  $(cdfile boot/bzImage	"live"		"SliTaz RAM boot") \
   1.280  			"text"		"SliTaz RAM boot (text mode only)" \
   1.281  $(cdfile README		"readme"	"Show the README file") \
   1.282 -$(cdfile md5sum		"md5"		"Check ISO files") \
   1.283 +$(cdfile md5sum*	"md5"		"Check ISO files") \
   1.284  $(gotposixovl		"install"	"Hard disk installation (UMSDOS way)") \
   1.285  $(gotposixovl		"installtaz"	"Hard disk installation (TAZUSB way)") \
   1.286  $(xfile tazusb		"usbkey"	"USB key read/write installation") \
   1.287  $(cdfile boot/bzImage	"usbbootkey"	"USB boot key (read only)") \
   1.288 -$(fddata		"fdbootstrap"	"Floppy bootstrap") \
   1.289 +$(fddata		"fdbootstrap"	"Create a floppy bootstrap") \
   1.290  $(cdfile boot/bzImage	"tazboot"	"Get tazboot.exe Linux loader") \
   1.291 -$(cdexe boot/memtest	"memtest"	"Get Memtest86") \
   1.292 -$(cdfile boot/memtest	"fdmemtest"	"Create a Memtest86 boot floppy") \
   1.293 -$(cdexe boot/gpxe	"pxe"		"Get SliTaz Web boot utility") \
   1.294 -$(cdfile boot/gpxe	"fdpxe"		"Create a SliTaz Web boot floppy") \
   1.295 -$(cdexe boot/ipxe	"pxe"		"Get SliTaz Web boot utility") \
   1.296 -$(cdfile boot/ipxe	"fdpxe"		"Create a SliTaz Web boot floppy") \
   1.297 +$(cdexe boot/bzImage	"bzimage"	"Get linux DOS/EXE file") \
   1.298 +$(cdexe boot/memtest	"memtest"	"Get Memtest86 DOS/EXE file") \
   1.299 +$(cdfile boot/memtest,boot/isolinux/memtest \
   1.300 +			"fdmemtest"	"Create a Memtest86 boot floppy") \
   1.301 +$(cdfilex boot/memtest,boot/isolinux/memtest \
   1.302 +			"runmemtest"	"Start Memtest86") \
   1.303 +$(cdexe boot/?pxe	"pxe"		"Get SliTaz Web boot DOS/EXE utility") \
   1.304 +$(cdfile boot/?pxe	"fdpxe"		"Create a SliTaz Web boot floppy") \
   1.305 +$(cdfilex boot/?pxe	"runpxe"	"Start the SliTaz Web boot utility") \
   1.306  $(xfile reboot		"restart"	"Restart the computer") \
   1.307  $(xfile poweroff	"stop"		"Power off") \
   1.308  			"bootlog"	"Linux boot messages" \
     2.1 --- a/syslinux/stuff/iso2exe/iso2exe.sh	Sat Dec 27 20:44:28 2014 +0100
     2.2 +++ b/syslinux/stuff/iso2exe/iso2exe.sh	Mon Dec 29 18:24:44 2014 +0100
     2.3 @@ -18,6 +18,15 @@
     2.4  	echo $(od -j $(($1)) -N ${3:-2} -t u${3:-2} -An $2)
     2.5  }
     2.6  
     2.7 +compress()
     2.8 +{
     2.9 +	if [ "$(which xz 2> /dev/null)" ]; then
    2.10 +		xz -z -e --format=lzma --lzma1=mode=normal --stdout
    2.11 +	else
    2.12 +		lzma e -si -so
    2.13 +	fi 2> /dev/null
    2.14 +}
    2.15 +
    2.16  add_rootfs()
    2.17  {
    2.18  	TMP=/tmp/iso2exe$$
    2.19 @@ -29,8 +38,7 @@
    2.20  		2> /dev/null && echo "Store mount.posixovl ($(wc -c \
    2.21  			< /usr/sbin/mount.posixovl) bytes) ..."
    2.22  	find $TMP -type f -print0 | xargs -0 chmod +x
    2.23 -	( cd $TMP ; find * | cpio -o -H newc ) | \
    2.24 -		lzma e $TMP/rootfs.gz -si 2> /dev/null
    2.25 +	( cd $TMP ; find * | cpio -o -H newc ) | compress > $TMP/rootfs.gz
    2.26  	SIZE=$(wc -c < $TMP/rootfs.gz)
    2.27  	store 24 $SIZE $1
    2.28  	OFS=$(( $OFS - $SIZE ))
    2.29 @@ -98,7 +106,7 @@
    2.30  	shift
    2.31  	ls -l $@
    2.32  	cat >> $0 <<EOM
    2.33 -$(tar cf - $@ | lzma e -si -so | uuencode -m -)
    2.34 +$(tar cf - $@ | compress | uuencode -m -)
    2.35  EOT
    2.36  EOM
    2.37  	sed -i '/^case/,/^esac/d' $0