wok-next diff syslinux/stuff/iso2exe/init @ rev 17489

syslinux/iso2exe: add knoppix support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Thu Jan 01 22:09:19 2015 +0100 (2015-01-01)
parents 877def710e44
children 2c2a6dd5ba40
line diff
     1.1 --- a/syslinux/stuff/iso2exe/init	Mon Dec 29 18:24:44 2014 +0100
     1.2 +++ b/syslinux/stuff/iso2exe/init	Thu Jan 01 22:09:19 2015 +0100
     1.3 @@ -18,6 +18,71 @@
     1.4  	sed "/$1=/!d;s/.*$1=\\([^ ]*\\).*/\\1/" /proc/cmdline
     1.5  }
     1.6  
     1.7 +clear()
     1.8 +{
     1.9 +	echo -e "\x1B[1;1H\x1B[J"
    1.10 +}
    1.11 +
    1.12 +tinydialog()
    1.13 +{
    1.14 +	clear
    1.15 +	label=""
    1.16 +	while [ "$1" ]; do
    1.17 +		case "$1" in
    1.18 +		--title) title="   \x1B[30;47m$2\x1B[37;40m\n"
    1.19 +			 echo -e $title; shift ;;
    1.20 +		--yes-label) label="$2" ; shift ;;
    1.21 +		--textbox)
    1.22 +			less "$2" < /dev/tty0 > /dev/tty0
    1.23 +			break;;
    1.24 +		--gauge)
    1.25 +			t="        "
    1.26 +			echo -e "$t$2\n"
    1.27 +			while read pct ; do
    1.28 +				s="                              "
    1.29 +				s="$s$pct%$s"
    1.30 +				pct=$((($pct*63)/100))
    1.31 +				echo -en "\r$t\x1B[30;47m$(echo "$s" | cut -c-$pct)\x1B[37;40m$(echo "$s" | cut -c$(($pct+1))-)"
    1.32 +			done
    1.33 +			break;;
    1.34 +		--yesno)
    1.35 +			while true; do
    1.36 +				clear
    1.37 +				echo "$2" | sed 's/\\n/\n/g'
    1.38 +				echo -en "\n  <-  1:${label:-Yes}  2:Cancel\r"
    1.39 +				read x
    1.40 +				case "$x" in
    1.41 +				''|Y*|y*|1) return 0;;
    1.42 +				N*|n*|2|0) return 1;;
    1.43 +				esac
    1.44 +			done ;;
    1.45 +		--menu|--radiolist)
    1.46 +			label="$2"
    1.47 +			shift 5
    1.48 +			echo -e "$title\n$label\n0	Cancel" > /tmp/data
    1.49 +			n=1
    1.50 +			while [ "$1" ]; do
    1.51 +				eval key_$n='$1'
    1.52 +				echo "$((n++))	$2"
    1.53 +				case "$3" in on|off) shift;; esac
    1.54 +				shift 2
    1.55 +			done >> /tmp/data
    1.56 +			while ! grep -q "^$n	" /tmp/data ; do
    1.57 +				clear
    1.58 +				[ $(wc -l < /tmp/data) -gt 20 ] && 
    1.59 +				less /tmp/data || cat /tmp/data
    1.60 +				echo -en "\n   <- Enter the selection number\r"
    1.61 +				read n
    1.62 +			done 2> /dev/null
    1.63 +			rm -f /tmp/data
    1.64 +			[ $n -eq 0 ] && return 1
    1.65 +			eval echo -n \$key_$n 1>&2
    1.66 +			return 0;;
    1.67 +		esac
    1.68 +		shift
    1.69 +	done
    1.70 +}
    1.71 +
    1.72  mount_proc()
    1.73  {
    1.74  	mount -t proc /proc /proc
    1.75 @@ -69,11 +134,11 @@
    1.76  getiso()
    1.77  {
    1.78  	mkdir -p /media/cdrom
    1.79 -	blkid | while read dev info ; do
    1.80 -		mount ${dev%:} /mnt
    1.81 +	for dev in /sys/block/?d?/?d??* ; do
    1.82 +		mount /dev/$(basename $dev) /mnt
    1.83  		if checkmagic /mnt/$ISO; then
    1.84  			mount -o loop,ro /mnt/$ISO /media/cdrom
    1.85 -			echo "Found $ISO on ${dev%:}"
    1.86 +			echo "Found $ISO on $(basename $dev)"
    1.87  			break
    1.88  		fi
    1.89  		umount /mnt
    1.90 @@ -82,6 +147,7 @@
    1.91  
    1.92  uncpio()
    1.93  {
    1.94 +	[ -s "$1" ] || return
    1.95  	echo -en "\n Extracting $(basename $1) ..."
    1.96  	case $(get 0 $1) in
    1.97  	*35615)	( zcat || gunzip ) ;;
    1.98 @@ -363,10 +429,10 @@
    1.99  any linux kernel, multiple initramfs, a kernel command line and
   1.100  an ISO image file loopback (retrieves files from an ISO file).\n\n
   1.101  Usage: tazboot.exe [[@commands]|[kernel=<bzimage>] 
   1.102 -[initrd=<rootfs>[,<rootfs2>...]] [iso=<isofile>] cmdline args ...]\n\n
   1.103 +[initrd=<rootfs>[,<rootfs2>...]] [bootfrom=<isofile>] cmdline args ...]\n\n
   1.104  Defaults: tazboot @tazboot.cmd or tazboot kernel=bzImage auto\n\n\
   1.105  Examples for tazboot.cmd:\n\n\
   1.106 -  iso=\\isos\\slitaz-4.0.iso\n\
   1.107 +  bootfrom=\\isos\\slitaz-4.0.iso\n\
   1.108    kernel=boot/bzImage\n\
   1.109    initrd=boot/rootfs4.gz,boot/rootfs3.gz,boot/rootfs2.gz,boot/rootfs1.gz\n\
   1.110    rw root=/dev/null autologin\n\n\
   1.111 @@ -380,7 +446,7 @@
   1.112  md5()
   1.113  {
   1.114  	dotwait "Checking files"
   1.115 -	( cd /media/cdrom ; md5sum -c md5sum* ) > /tmp/data
   1.116 +	( cd /media/cdrom ; ${1:-md5sum -c md5sum*} ) > /tmp/data
   1.117  	rm -f /tmp/wait
   1.118  	$DIALOG --clear \
   1.119  		--title " Checked files " \
   1.120 @@ -388,11 +454,19 @@
   1.121  	rm -f /tmp/data
   1.122  }
   1.123  
   1.124 +sha()
   1.125 +{
   1.126 +	gotcdfile sha*sum*
   1.127 +	sha=$(basename $file)
   1.128 +	md5 "${sha%sum*}sum -c ${file#/media/cdrom/}"
   1.129 +}
   1.130 +
   1.131  readme()
   1.132  {
   1.133 +	gotcdfile README*
   1.134  	$DIALOG --clear \
   1.135  		--title " Readme " \
   1.136 -		--textbox /media/cdrom/README 24 78
   1.137 +		--textbox $file 24 78
   1.138  }
   1.139  
   1.140  bootlog()
   1.141 @@ -424,14 +498,11 @@
   1.142  computers. BIOS based memory tests are a quick, cursory check and often
   1.143  miss many of the failures that are detected by Memtest86.\n
   1.144  " 12 70
   1.145 -	[ $? -eq 0 ] || return
   1.146 -	cp /media/cdrom/boot/memtest /mnt/memtest.exe
   1.147 +	[ $? -eq 0 ] && gotcdfile memtest* && cp $file /mnt/memtest.exe
   1.148  }
   1.149  
   1.150 -mkfloppy()
   1.151 +mkfat12()
   1.152  {
   1.153 -	dotwait "Create a $(basename $1) boot floppy"
   1.154 -	ddq if=$1 of=/dev/fd0
   1.155  	[ $(($(get 0 $1) - 0x5A4D)) -eq 0 ] || return
   1.156  	J=$(($(get 3 $1 1) + 0x02))
   1.157  	R=$((1 + $(get 497 $1 1) + 1 + ($(get 500 $1)-1)/32))
   1.158 @@ -452,6 +523,13 @@
   1.159  		bytes2bin 0xF0 0xFF 0xFF | ddq bs=512 seek=$i of=/dev/fd0
   1.160  	done
   1.161  	echo -n $(basename $1) | ddq bs=1 seek=3 count=8 of=/dev/fd0
   1.162 +}
   1.163 +
   1.164 +mkfloppy()
   1.165 +{
   1.166 +	dotwait "Create a $(basename $1) boot floppy"
   1.167 +	ddq if=$1 of=/dev/fd0
   1.168 +	mkfat12 $1
   1.169  	rm -f /tmp/wait
   1.170  }
   1.171  
   1.172 @@ -465,12 +543,13 @@
   1.173  miss many of the failures that are detected by Memtest86.\n\n
   1.174  Please insert a blank disk in floppy drive.\n
   1.175  " 12 70
   1.176 -	[ $? -eq 0 ] && mkfloppy /media/cdrom/boot/memtest
   1.177 +	[ $? -eq 0 ] && gotcdfile memtest* && mkfloppy $file
   1.178  }
   1.179  
   1.180  pxe()
   1.181  {
   1.182 -	pxe=$(ls /media/cdrom/boot/?pxe)
   1.183 +	gotcdfile ?pxe
   1.184 +	pxe=$(ls $file)
   1.185  	$DIALOG --clear \
   1.186  		--title " Create $(basename $pxe).exe ? " \
   1.187  		--yes-label "Install" --yesno \
   1.188 @@ -494,7 +573,7 @@
   1.189  from the Web using PXE and HTTP protocols.\n\n
   1.190  Please insert a blank disk in floppy drive.\n
   1.191  " 12 70
   1.192 -	[ $? -eq 0 ] && mkfloppy /media/cdrom/boot/?pxe
   1.193 +	[ $? -eq 0 ] && gotcdfile ?pxe && mkfloppy $file
   1.194  }
   1.195  
   1.196  gotposixovl()
   1.197 @@ -508,11 +587,17 @@
   1.198  	[ "$(which $1)" ] && echo -en "\"$2\"	\"$3\""
   1.199  }
   1.200  
   1.201 +gotcdfile()
   1.202 +{
   1.203 +	for file in /media/cdrom/$1 /media/cdrom/*/$1 \
   1.204 +		    /media/cdrom/*/isolinux/$1 ; do
   1.205 +		[ -s $file ] && break
   1.206 +	done
   1.207 +}
   1.208 +
   1.209  cdfile()
   1.210  {
   1.211 -	for i in ${1//,/ }; do
   1.212 -		[ -s /media/cdrom/$i ] && echo -en "\"$2\"	\"$3\"" && break
   1.213 -	done
   1.214 +	gotcdfile "$1" && echo -en "\"$2\"	\"$3\""
   1.215  }
   1.216  
   1.217  cdfilex()
   1.218 @@ -522,7 +607,8 @@
   1.219  
   1.220  cdexe()
   1.221  {
   1.222 -	[ $(get 0 /media/cdrom/$1 2> /dev/null || echo 0) -eq 23117 ] &&
   1.223 +	gotcdfile "$1" &&
   1.224 +	[ $(get 0 $file 2>/dev/null || echo 0) -eq 23117 ] &&
   1.225  	echo -en "\"$2\"	\"$3\""
   1.226  }
   1.227  
   1.228 @@ -723,18 +809,21 @@
   1.229  	poweroff -f
   1.230  }
   1.231  
   1.232 -runmemtest()
   1.233 +dokexec()
   1.234  {
   1.235 -	kexec -l /media/cdrom/boot/memtest
   1.236 +	kexec -l $file
   1.237  	dosync
   1.238  	kexec -e
   1.239  }
   1.240  
   1.241 +runmemtest()
   1.242 +{
   1.243 +	gotcdfile memtest* && dokexec
   1.244 +}
   1.245 +
   1.246  runpxe()
   1.247  {
   1.248 -	kexec -l /media/cdrom/boot/?pxe
   1.249 -	dosync
   1.250 -	kexec -e
   1.251 +	gotcdfile ?pxe && dokexec
   1.252  }
   1.253  
   1.254  shell()
   1.255 @@ -744,9 +833,9 @@
   1.256  
   1.257  BIN=bin/mount.posixovl
   1.258  [ -x /usr/s$BIN ] || mv /bin/mount.posixovl.iso2exe \
   1.259 -/usr/s$BIN 2> /dev/null || mv /bin/mount.posixovl.iso2exe /$BIN
   1.260 +/usr/s$BIN 2> /dev/null || mv /bin/mount.posixovl.iso2exe /$BIN 2> /dev/null
   1.261  mount_proc
   1.262 -ISO="$(getarg iso | sed 's/.://;s|\\|/|g')"
   1.263 +ISO="$(getarg bootfrom | sed 's/.://;s|\\|/|g')"
   1.264  getiso
   1.265  mount_loram
   1.266  case "${ISO##*/}$(getarg mode)" in
   1.267 @@ -754,7 +843,7 @@
   1.268  *live*|*LIVE*)		live ;;
   1.269  *text*|*TEXT*)		text ;;
   1.270  esac
   1.271 -which $DIALOG 2> /dev/null || live
   1.272 +which $DIALOG 2> /dev/null || DIALOG=tinydialog
   1.273  dmesg > /tmp/dmesg
   1.274  
   1.275  while true; do
   1.276 @@ -762,14 +851,15 @@
   1.277  	locale="$(sed '/^LANG=/!d;s/.*=//' /etc/locale.conf 2> /dev/null)"
   1.278  	cat > /tmp/dialog <<EOT
   1.279  $DIALOG  --clear \
   1.280 -	--title " Welcome to SliTaz " \
   1.281 +	--title " Welcome to Linux " \
   1.282  	--menu "" 23 70 17 \
   1.283 -$(xfile tazkeymap	"tazkeymap"	"Select keyboard ($keymap)") \
   1.284 -$(xfile tazlocale	"tazlocale"	"Select locale ($locale)") \
   1.285 -$(cdfile boot/bzImage	"live"		"SliTaz RAM boot") \
   1.286 -			"text"		"SliTaz RAM boot (text mode only)" \
   1.287 -$(cdfile README		"readme"	"Show the README file") \
   1.288 +$(xfile tazkeymap	"tazkeymap"	"Select keyboard (${keymap:-none})") \
   1.289 +$(xfile tazlocale	"tazlocale"	"Select locale (${locale:-none})") \
   1.290 +$(cdfile boot/bzImage	"live"		"Linux RAM boot (full desktop)") \
   1.291 +			"text"		"Linux RAM boot" \
   1.292 +$(cdfile README*	"readme"	"Show the README file") \
   1.293  $(cdfile md5sum*	"md5"		"Check ISO files") \
   1.294 +$(cdfile sha*sum*	"sha"		"Check ISO files") \
   1.295  $(gotposixovl		"install"	"Hard disk installation (UMSDOS way)") \
   1.296  $(gotposixovl		"installtaz"	"Hard disk installation (TAZUSB way)") \
   1.297  $(xfile tazusb		"usbkey"	"USB key read/write installation") \
   1.298 @@ -777,14 +867,12 @@
   1.299  $(fddata		"fdbootstrap"	"Create a floppy bootstrap") \
   1.300  $(cdfile boot/bzImage	"tazboot"	"Get tazboot.exe Linux loader") \
   1.301  $(cdexe boot/bzImage	"bzimage"	"Get linux DOS/EXE file") \
   1.302 -$(cdexe boot/memtest	"memtest"	"Get Memtest86 DOS/EXE file") \
   1.303 -$(cdfile boot/memtest,boot/isolinux/memtest \
   1.304 -			"fdmemtest"	"Create a Memtest86 boot floppy") \
   1.305 -$(cdfilex boot/memtest,boot/isolinux/memtest \
   1.306 -			"runmemtest"	"Start Memtest86") \
   1.307 -$(cdexe boot/?pxe	"pxe"		"Get SliTaz Web boot DOS/EXE utility") \
   1.308 -$(cdfile boot/?pxe	"fdpxe"		"Create a SliTaz Web boot floppy") \
   1.309 -$(cdfilex boot/?pxe	"runpxe"	"Start the SliTaz Web boot utility") \
   1.310 +$(cdexe memtest*	"memtest"	"Get Memtest86 DOS/EXE file") \
   1.311 +$(cdfile memtest*	"fdmemtest"	"Create a Memtest86 boot floppy") \
   1.312 +$(cdfilex memtest*	"runmemtest"	"Start Memtest86") \
   1.313 +$(cdexe ?pxe		"pxe"		"Get SliTaz Web boot DOS/EXE utility") \
   1.314 +$(cdfile ?pxe		"fdpxe"		"Create a SliTaz Web boot floppy") \
   1.315 +$(cdfilex ?pxe		"runpxe"	"Start the SliTaz Web boot utility") \
   1.316  $(xfile reboot		"restart"	"Restart the computer") \
   1.317  $(xfile poweroff	"stop"		"Power off") \
   1.318  			"bootlog"	"Linux boot messages" \
   1.319 @@ -792,7 +880,7 @@
   1.320  
   1.321  EOT
   1.322  	exec 3>&1
   1.323 -	value=$(sh /tmp/dialog 2>&1 1>&3)
   1.324 +	value=$(. /tmp/dialog 2>&1 1>&3)
   1.325  	retval=$?
   1.326  	exec 3>&-
   1.327  	[ $retval -eq 0 ] || continue