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