tazpanel annotate installer.cgi @ rev 303

3 weeks forging ;) Some bugs fixed, maybe all i18n improved (please, recheck 'po's!), couple of new features added... Enjoy!
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri May 04 13:00:43 2012 +0300 (2012-05-04)
parents e1b450c92890
children 42367a53cf50
rev   line source
pascal@208 1 #!/bin/sh
pascal@208 2 #
pascal@208 3 # Main CGI interface for Tazinst, the SliTaz installer.
pascal@208 4 #
pankso@254 5 # Copyright (C) 2012 SliTaz GNU/Linux - BSD License
pascal@208 6 #
pascal@208 7 # Authors : Dominique Corbex <domcox@slitaz.org>
pascal@208 8 #
pascal@208 9
domcox@294 10 VERSION=0.30
pascal@208 11
pascal@208 12 # Common functions from libtazpanel
pascal@208 13 . lib/libtazpanel
pascal@208 14 header
pascal@208 15 get_config
pascal@208 16
pascal@208 17 # Include gettext helper script.
pascal@208 18 . /usr/bin/gettext.sh
pascal@208 19
pascal@208 20 # Export package name for gettext.
al@303 21 #TEXTDOMAIN='installer'
al@303 22 #export TEXTDOMAIN
pascal@208 23
domcox@295 24 TITLE=$(gettext 'TazPanel - Installer')
pascal@208 25
pascal@208 26 # Tazinst required version
pascal@208 27 TAZINST_REQUIRED_VERSION="3.3"
pascal@208 28
pascal@208 29 # Tazinst setup file
pascal@208 30 INSTFILE=/var/lib/tazinst.conf
pascal@208 31
pascal@208 32
pascal@208 33 write_setup()
pascal@208 34 {
pascal@208 35 if [ -e "$INSTFILE" ]; then
pascal@208 36 # Install type
pascal@208 37 INST_TYPE=$(GET INST_TYPE)
pascal@208 38 # Source File
pascal@208 39 case "$INST_TYPE" in
pascal@208 40 usb)
pascal@208 41 SRC_FILE=$(GET SRC_USB) ;;
pascal@208 42 iso)
pascal@208 43 SRC_FILE=$(GET SRC_ISO) ;;
pascal@208 44 web)
pascal@208 45 SRC_FILE=$(GET SRC_WEB) ;;
pascal@208 46 esac
pascal@208 47 SRC_FILE=$(echo "$SRC_FILE" | sed 's/\//\\\//'g)
pascal@208 48 [ -n $(GET URL) ] && SRC_WEB=$(GET URL)
pascal@208 49 # Main Partition
pascal@208 50 TGT_PARTITION=$(echo "$(GET TGT_PARTITION)" | sed 's/\//\\\//'g)
pascal@208 51 [ -n "$(GET MAIN_FMT)" ] && TGT_FS=$(GET MAIN_FS) || TGT_FS=""
pascal@208 52 # Home Partition
domcox@258 53 if [ -n "$(GET HOME_SELECT)" ] ; then
domcox@258 54 TGT_HOME=$(echo "$(GET TGT_HOME)" | sed 's/\//\\\//'g)
domcox@294 55 [ -n "$(GET HOME_FMT)" ] && TGT_HOME_FS=$(GET HOME_FS) || TGT_HOME_FS=""
pascal@208 56 else
pascal@208 57 TGT_HOME=""
pascal@208 58 TGT_HOME_FS=""
pascal@208 59 fi
pascal@208 60 # Hostname
pascal@208 61 TGT_HOSTNAME=$(GET TGT_HOSTNAME)
pascal@208 62 # Root pwd
pascal@208 63 TGT_ROOT_PWD=$(GET TGT_ROOT_PWD)
pascal@208 64 # User Login
pascal@208 65 TGT_USER=$(GET TGT_USER)
pascal@208 66 # User Pwd
pascal@208 67 TGT_USER_PWD=$(GET TGT_USER_PWD)
pascal@208 68 # Grub
pascal@208 69 TGT_GRUB=$(GET TGT_GRUB)
pascal@208 70 [ "$TGT_GRUB" == "yes" ] || TGT_GRUB=no
pascal@208 71 # Win Dual-Boot
pascal@208 72 TGT_WINBOOT=$(GET TGT_WINBOOT)
pascal@208 73
pascal@208 74 # Save changes to INSTFILE
pascal@208 75 sed -i s/"^INST_TYPE=.*"/"INST_TYPE=\"$INST_TYPE\"/" $INSTFILE
pascal@208 76 sed -i s/"^SRC_FILE=.*"/"SRC_FILE=\"$SRC_FILE\"/" $INSTFILE
pascal@208 77 sed -i s/"^TGT_PARTITION=.*"/"TGT_PARTITION=\"$TGT_PARTITION\"/" $INSTFILE
pascal@208 78 sed -i s/"^TGT_FS=.*"/"TGT_FS=\"$TGT_FS\"/" $INSTFILE
pascal@208 79 sed -i s/"^TGT_HOME=.*"/"TGT_HOME=\"$TGT_HOME\"/" $INSTFILE
pascal@208 80 sed -i s/"^TGT_HOME_FS=.*"/"TGT_HOME_FS=\"$TGT_HOME_FS\"/" $INSTFILE
pascal@208 81 sed -i s/"^TGT_HOSTNAME=.*"/"TGT_HOSTNAME=\"$TGT_HOSTNAME\"/" $INSTFILE
pascal@208 82 sed -i s/"^TGT_ROOT_PWD=.*"/"TGT_ROOT_PWD=\"$TGT_ROOT_PWD\"/" $INSTFILE
pascal@208 83 sed -i s/"^TGT_USER=.*"/"TGT_USER=\"$TGT_USER\"/" $INSTFILE
pascal@208 84 sed -i s/"^TGT_USER_PWD=.*"/"TGT_USER_PWD=\"$TGT_USER_PWD\"/" $INSTFILE
pascal@208 85 sed -i s/"^TGT_GRUB=.*"/"TGT_GRUB=\"$TGT_GRUB\"/" $INSTFILE
pascal@208 86 sed -i s/"^TGT_WINBOOT=.*"/"TGT_WINBOOT=\"$TGT_WINBOOT\"/" $INSTFILE
pascal@208 87 fi
pascal@208 88 }
pascal@208 89
domcox@258 90 read_setup()
pascal@208 91 {
domcox@258 92 # various checks on setup file
domcox@258 93 if [ -e "$INSTFILE" ]; then
domcox@258 94 # validity check + reformat output
domcox@266 95 tazinst check $INSTFILE | awk '
domcox@266 96 BEGIN{
domcox@266 97 fmt1="<span class=\"msg-nok\">"
domcox@266 98 fmt2="<br /></span>"
domcox@266 99 OFS=""
domcox@266 100 }
domcox@266 101 {
domcox@266 102 # make html compliant
domcox@266 103 str=$0
domcox@266 104 gsub(/\[1m/,"",str)
domcox@266 105 gsub(/\[0m/,"",str)
domcox@266 106 gsub(/\s/,"\\&nbsp;",str)
domcox@266 107 gsub(/</,"\\&lt",str)
domcox@266 108 gsub(/>/,"\\&gt",str)
domcox@266 109 a[i++]=str
domcox@266 110 } END {
domcox@266 111 {print fmt1,a[i-1],fmt2}
domcox@266 112 {for (j=0; j<i-1;) print fmt1,substr(a[j++],3),fmt2}
domcox@266 113 }'
domcox@258 114 else
domcox@258 115 # no setup file found: creating
al@303 116 eval_gettext 'Creating setup file $INSTFILE.'
domcox@258 117 tazinst new $INSTFILE
domcox@258 118 if [ ! -e "$INSTFILE" ]; then
domcox@258 119 cat <<EOT
al@303 120 <span class="msg-nok">$(gettext 'Setup File Error')<br />
al@303 121 $(eval_gettext "The setup file <strong>\$INSTFILE</strong> doesn't \
al@303 122 exist.")</span><br />
domcox@258 123 EOT
domcox@258 124 else
domcox@258 125 if [ ! -r $INSTFILE ]; then
domcox@258 126 cat <<EOT
al@303 127 <span class="msg-nok">$(gettext 'Setup File Error')<br />
al@303 128 $(eval_gettext "The setup file <strong>$INSTFILE</strong> is not readable. \
domcox@265 129 Check permissions and ownership.")</span><br />
domcox@258 130 EOT
al@303 131 fi
domcox@258 132 fi
domcox@258 133 fi
domcox@258 134 # read setup file
domcox@258 135 . $INSTFILE
pascal@208 136 }
pascal@208 137
pascal@208 138 select_action()
pascal@208 139 {
pascal@208 140 cat <<EOT
pascal@208 141 <div id="wrapper">
al@303 142 <h2>$(gettext 'SliTaz Installer')</h2>
al@303 143
al@303 144 <p>$(gettext "The SliTaz Installer installs or upgrades SliTaz to a hard disk \
al@303 145 drive from a device like a Live-CD or LiveUSB key, from a SliTaz ISO file, or \
al@303 146 from the web by downloading an ISO file.")</p>
pascal@208 147 </div>
pascal@208 148 EOT
pascal@208 149 }
pascal@208 150
pascal@208 151 select_install()
pascal@208 152 {
pascal@208 153 cat <<EOT
pankso@254 154 <div class="box">
al@303 155 <h4>$(gettext 'Install')</h4>
al@303 156
al@303 157 <p>$(gettext "Install SliTaz on a partition of your hard disk drive. If you \
al@303 158 decide to format your partition, all data will be lost. If you do not format, \
al@303 159 all data except for any existing /home directory will be removed, the home \
al@303 160 directory will be kept as is.")</p>
al@303 161
al@303 162 <p>$(gettext "Before installation, you may need to create or resize partitions \
al@303 163 on your hard disk drive in order to make space for SliTaz GNU/Linux. You can \
al@303 164 graphically manage your partitions with Gparted")</p>
pankso@254 165 </div>
al@303 166 <p><a class="button" href="$SCRIPT_NAME?page=partitioning">$(gettext "Install \
al@303 167 SliTaz")</a>
pascal@208 168 EOT
pascal@208 169 }
pascal@208 170
pascal@208 171 select_upgrade()
pascal@208 172 {
pascal@208 173 cat <<EOT
pankso@254 174 <div class="box">
al@303 175 <h4>$(gettext 'Upgrade')</h4>
al@303 176
al@303 177 <p>$(gettext "Upgrade an already installed SliTaz system on your hard disk \
al@303 178 drive. Your /home /etc /var/www directories will be kept, all other \
al@303 179 directories will be removed. Any additional packages added to your old Slitaz \
al@303 180 system will be updated as long you have an active internet connection.")</p>
pankso@254 181 </div>
al@303 182 <p><a class="button" href="$SCRIPT_NAME?page=upgrade">$(gettext "Upgrade \
al@303 183 SliTaz")</a></p>
pascal@208 184 EOT
pascal@208 185 }
pascal@208 186
domcox@277 187 select_gparted()
domcox@277 188 {
domcox@277 189 cat <<EOT
al@303 190 <h4>$(gettext 'Partitioning')</h4>
domcox@277 191 <div class="box">
al@303 192
al@303 193 <p>$(gettext "On most used systems, the hard drive is already dedicated to \
al@303 194 partitions for Windows<sup>&trade;</sup>, or Linux, or another operating \
al@303 195 system. You'll need to resize these partitions in order to make space for \
al@303 196 SliTaz GNU/Linux. SliTaz will co-exist with other operating systems already \
al@303 197 installed on your hard drive.")</p>
al@303 198
al@303 199 <p>$(gettext "The amount of space needed depends on how much software you plan \
al@303 200 to install and how much space you require for users. It's conceivable that you \
al@303 201 could run a minimal SliTaz system in 300 megs or less, but 2 gigs is indeed \
al@303 202 more comfy.")</p>
al@303 203
al@303 204 <p>$(gettext "A separate home partition, and a partition that will be used as \
al@303 205 Linux swap space may be created if needed. Slitaz detects and uses swap \
al@303 206 partitions automatically.")</p>
al@303 207
domcox@277 208 </div>
al@303 209
domcox@277 210 <div class="box">
al@303 211
al@303 212 <p>$(gettext "You can graphically manage your partitions with Gparted. GParted \
al@303 213 is a partition editor for graphically managing your disk partitions. Gparted \
al@303 214 allows you to create, destroy, resize and copy partitions without data loss.")</p>
al@303 215
al@303 216 <p>$(gettext "Gparted supports ext2, ext3, ext4, linux swap, ntfs and fat32 \
al@303 217 filesystems right out of the box. Support for xjs, jfs, hfs and other \
al@303 218 filesystems is available as well but you first need to add drivers for these \
al@303 219 filesystems by installing the related packages xfsprogs, jfsutils, linux-hfs \
al@303 220 and so on.")</p>
domcox@277 221 </div>
al@303 222
al@303 223 <a class="button" href="$SCRIPT_NAME?page=gparted">$(gettext 'Execute Gparted')</a>
al@303 224
al@303 225 <h5>$(gettext 'Continue installation')</h5>
al@303 226
al@303 227 <p>$(gettext "Once you've made room for SliTaz on your drive, you should be \
al@303 228 able to continue installation.")
domcox@277 229
domcox@277 230 <hr />
domcox@277 231 <a class="button" value="$1" href="$SCRIPT_NAME?page=home" >
al@303 232 $(gettext 'Back to Installer Start Page')</a>
domcox@277 233 <a class="button" value="$2" href="$SCRIPT_NAME?page=install">
al@303 234 $(gettext 'Continue Installation')</a>
domcox@277 235 EOT
domcox@277 236 }
domcox@277 237
pascal@208 238 display_action()
pascal@208 239 {
pascal@208 240 case $1 in
pascal@208 241 install)
pascal@208 242 cat << EOT
pascal@208 243 <div id="wrapper">
al@303 244 <h3>$(gettext 'Install SliTaz')</h3>
al@303 245
al@303 246 <p>$(gettext "You're going to install SliTaz on a partition of your hard disk \
al@303 247 drive. If you decide to format your HDD, all data will be lost. If you do not \
al@303 248 format, all data except for any existing /home directory will be removed, the \
al@303 249 home directory will be kept as is.")<p>
pascal@208 250 </div>
pascal@208 251 <input type="hidden" name="INST_ACTION" value="$1">
pascal@208 252 EOT
pascal@208 253 ;;
pascal@208 254 upgrade)
pascal@208 255 cat << EOT
pascal@208 256 <div id="wrapper">
al@303 257 <h2>$(gettext 'Upgrade SliTaz')</h2>
al@303 258
al@303 259 <p>$(gettext "You're going to upgrade an already installed SliTaz system on \
al@303 260 your hard disk drive. Your /home /etc /var/www directories will be kept, all \
al@303 261 other directories will be removed. Any additional packages added to your old \
al@303 262 Slitaz system will be updated as long you have an active internet connection.")<p>
pascal@208 263 </div>
pascal@208 264 <input type="hidden" name="INST_ACTION" value="$1">
pascal@208 265 EOT
pascal@208 266 ;;
pascal@208 267 esac
pascal@208 268 }
pascal@208 269
pascal@208 270 select_source()
pascal@208 271 {
pascal@208 272 cat <<EOT
al@303 273 <h4 id="source">$(gettext 'Slitaz source media')</h4>
al@303 274
domcox@260 275 <div class="box">
domcox@260 276 <input type="radio" name="INST_TYPE" value="cdrom" $([ "$INST_TYPE" == "cdrom" ] && echo "checked") id="cdrom" />
al@303 277 <label for="cdrom">$(gettext 'LiveCD')</label>
domcox@260 278 <br />
domcox@260 279 <input type="radio" name="INST_TYPE" value="usb" $([ "$INST_TYPE" == "usb" ] && echo "checked") id="usb" />
al@303 280 <label for="usb">$(gettext 'LiveUSB:')
domcox@260 281 <select name="SRC_USB">
pascal@208 282 EOT
pascal@208 283 # List disks if plugged USB device
pascal@208 284 usb=0
pascal@208 285 if [ -d /proc/scsi/usb-storage ]; then
pascal@208 286 for DEV in /sys/block/sd* ; do
pascal@208 287 if readlink $DEV | grep -q usb; then
pascal@208 288 DEV=$(basename $DEV)
pascal@208 289 if [ -d /sys/block/${DEV}/${DEV}1 ]; then
pascal@208 290 for i in $(fdisk -l /dev/$DEV | awk '/^\/dev/ {printf "%s ", $1}') ; do
al@303 291 echo "<option value='$i' $([ "$i" == "$SRC_FILE" ] && echo 'selected') >$i</option>"
pascal@208 292 usb=$usb+1
pascal@208 293 done
pascal@208 294 fi
pascal@208 295 fi
pascal@208 296 done
pascal@208 297 fi
pascal@208 298 if [ $usb -lt 1 ]; then
al@303 299 echo "<option value="">$(gettext 'Not found')</option>"
pascal@208 300 fi
pascal@208 301 cat << EOT
domcox@260 302 </select>
domcox@260 303 </label>
domcox@260 304 <br />
domcox@260 305 <input type="radio" name="INST_TYPE" value="iso" $([ "$INST_TYPE" == "iso" ] && echo "checked") id="iso" />
al@303 306 <label for="iso">$(gettext 'ISO file:')</label>
al@303 307 <input type="url" size="50" name="SRC_ISO" $([ "$INST_TYPE" == "iso" ] && echo -e "value=\"$SRC_FILE\"") placeholder="$(gettext 'Full path to the ISO image file')" />
domcox@260 308 <br />
domcox@260 309 <input type="radio" name="INST_TYPE" value="web" $([ "$INST_TYPE" == "web" ] && echo "checked") id="web" />
al@303 310 <label for="web">$(gettext 'Web:')
al@303 311 <a class="button" onclick="document.forms['ConfigForm'].url.value = '$(tazinst showurl stable)'; return true;">$(gettext 'Stable')</a>
al@303 312 <a class="button" onclick="document.forms['ConfigForm'].url.value = '$(tazinst showurl cooking)'; return true;">$(gettext 'Cooking')</a>
al@303 313
al@303 314 $(gettext 'URL:')
al@303 315 <input id="url" type="url" size="55" name="SRC_WEB" $([ "$INST_TYPE" == "web" ] && echo -e "value=\"$SRC_FILE\"") placeholder="$(gettext 'Full url to an ISO image file')" />
domcox@260 316 </label>
domcox@260 317 </div>
pascal@208 318 EOT
pascal@208 319 }
pascal@208 320
domcox@277 321 select_hdd()
domcox@277 322 {
domcox@277 323 cat <<EOT
al@303 324 <h4 id="hdd">$(gettext 'Hard Disk Drive')</h4>
domcox@277 325 EOT
domcox@277 326 }
domcox@277 327
pascal@208 328 select_partition()
pascal@208 329 {
domcox@260 330 cat <<EOT
domcox@277 331 <div class="box">
pascal@208 332 <a name="partition"></a>
al@303 333 $(gettext 'Install Slitaz to partition:')
domcox@260 334 <select name="TGT_PARTITION">
pascal@208 335 EOT
pascal@208 336 # List partitions
pascal@208 337 if fdisk -l | grep -q ^/dev/ ; then
al@303 338 echo "<option value="">$(gettext 'None')</option>"
pascal@208 339 for i in $(fdisk -l | awk '/^\/dev/ {printf "%s " $1}'); do
al@303 340 echo "<option value='$i' $([ "$i" == "$TGT_PARTITION" ] && echo 'selected')>$i</option>"
pascal@208 341 done
pascal@208 342 else
al@303 343 echo "<option value="">$(gettext 'Not found')</option>"
pascal@208 344 fi
pascal@208 345 cat << EOT
domcox@277 346 </select>
domcox@260 347 <br />
domcox@260 348 <input type="checkbox" name="MAIN_FMT" value="yes" $([ -n "$TGT_FS" ] && echo "checked") id="mainfs" />
al@303 349 <label for="mainfs">$(gettext 'Format partition as:')</label>
domcox@260 350 <select name="MAIN_FS">
pascal@208 351 EOT
pascal@208 352 scan_mkfs
pascal@208 353 for i in $FS
pascal@208 354 do
al@303 355 echo "<option value='$i' $([ "$i" == "$TGT_FS" ] && echo 'selected')>$i</option>"
pascal@208 356 done
pascal@208 357 cat <<EOT
pascal@208 358 </select>
domcox@260 359 </div>
pascal@208 360 EOT
pascal@208 361 }
pascal@208 362
pascal@208 363 select_old_slitaz()
pascal@208 364 {
domcox@260 365 cat <<EOT
domcox@277 366 <div class="box">
pascal@208 367 <a name="partition"></a>
al@303 368 $(gettext 'Existing SliTaz partition to upgrade:')
domcox@260 369 <select name="TGT_PARTITION">
pascal@208 370 EOT
pascal@208 371 # List partitions
pascal@208 372 if fdisk -l | grep -q ^/dev/ ; then
al@303 373 echo "<option value="">$(gettext 'None')</option>"
al@303 374 for i in $(blkid | cut -d ":" -f 1); do
al@303 375 echo "<option value='$i' $([ "$i" == "$TGT_PARTITION" ] && echo 'selected')>$i</option>"
pascal@208 376 done
pascal@208 377 else
al@303 378 echo "<option value="">$(gettext 'Not found')</option>"
pascal@208 379 fi
pascal@208 380 cat <<EOT
pascal@208 381 </select>
domcox@260 382 </div>
pascal@208 383 EOT
pascal@208 384 }
pascal@208 385
domcox@277 386 select_options()
domcox@277 387 {
domcox@277 388 cat <<EOT
al@303 389 <h4 id="options">$(gettext 'Options')</h4>
domcox@277 390 EOT
domcox@277 391 }
domcox@277 392
pascal@208 393 select_home()
pascal@208 394 {
pascal@208 395 cat <<EOT
domcox@277 396 <div>
al@303 397 <h5 id="home">$(gettext 'home partition')</h5>
al@303 398
domcox@258 399 <input type="checkbox" name="HOME_SELECT" value="yes" $([ -n "$TGT_HOME" ] && echo "checked") id="homepart" />
al@303 400 <label for="homepart">$(gettext 'Use a separate partition for /home:')</label>
domcox@260 401 <select name="TGT_HOME">
pascal@208 402 EOT
pascal@208 403 # List disk if plugged USB device
pascal@208 404 if fdisk -l | grep -q ^/dev/ ; then
al@303 405 echo "<option value="">$(gettext 'None')</option>"
pascal@208 406 for i in $(fdisk -l | awk '/^\/dev/ {printf "%s " $1}'); do
al@303 407 echo "<option value='$i' $([ "$i" == "$TGT_HOME" ] && echo 'selected')>$i</option>"
pascal@208 408 done
pascal@208 409 else
al@303 410 echo "<option value="">$(gettext 'Not found')</option>"
pascal@208 411 fi
pascal@208 412 cat <<EOT
domcox@260 413 </select>
al@303 414
domcox@260 415 <input type="checkbox" name="HOME_FMT" value="yes" $([ -n "$TGT_HOME_FS" ] && echo "checked") id="homefs" />
al@303 416 <label for="homefs">$(gettext 'Format partition as:')</label>
domcox@260 417 <select name="HOME_FS">"
pascal@208 418 EOT
pascal@208 419 for i in $FS
pascal@208 420 do
al@303 421 echo "<option value='$i' $([ "$i" == "$TGT_HOME_FS" ] && echo 'selected')>$i</option>"
pascal@208 422 done
domcox@277 423 cat <<EOT
domcox@277 424 </select>
domcox@277 425 </div>
domcox@277 426 EOT
pascal@208 427 }
pascal@208 428
pascal@208 429 select_hostname()
pascal@208 430 {
pascal@208 431 cat << EOT
domcox@277 432 <div>
al@303 433 <h5 id="hostname">$(gettext 'Hostname')</h5>
al@303 434
al@303 435 $(gettext 'Set Hostname to:')
al@303 436 <input type="text" id="hostname" name="TGT_HOSTNAME" value="$TGT_HOSTNAME" placeholder="$(gettext 'Name of your system')" onkeyup="checkLogin('hostname','msgHostname'); return false;" />
al@303 437 <span id="msgHostname"></span>
domcox@277 438 </div>
pascal@208 439 EOT
pascal@208 440 }
pascal@208 441
pascal@208 442 select_root()
pascal@208 443 {
pascal@208 444 cat << EOT
domcox@277 445 <div class="box2">
al@303 446 <h5 id="root">$(gettext 'Root')</h5>
al@303 447
al@303 448 $(gettext 'Root passwd:')
al@303 449 <input type="password" id="rootPwd1" name="TGT_ROOT_PWD" value="$TGT_ROOT_PWD" placeholder="$(gettext 'Password of root')" onkeyup="checkPwd('rootPwd1','rootPwd2','msgRootPwd'); return false;" />
al@303 450
al@303 451 $(gettext 'Confirm password:')
al@303 452 <input type="password" id="rootPwd2" value="$TGT_ROOT_PWD" placeholder="$(gettext 'Password of root')" onkeyup="checkPwd('rootPwd1','rootPwd2','msgRootPwd'); return false;" />
al@303 453
al@303 454 <span id="msgRootPwd"></span>
domcox@277 455 </div>
pascal@208 456 EOT
pascal@208 457 }
pascal@208 458
pascal@208 459 select_user()
pascal@208 460 {
pascal@208 461 cat << EOT
domcox@277 462 <div class="box2">
al@303 463 <h5 id="user">$(gettext 'User')</h5>
al@303 464
al@303 465 $(gettext 'User login:')
al@303 466 <input type="text" id="user" name="TGT_USER" value="$TGT_USER" placeholder="$(gettext 'Name of the first user')" onkeyup="checkLogin('user','msgUser'); return false;" />
al@303 467 <span id="msgUser"></span>
al@303 468 <br /><br />
al@303 469
al@303 470 $(gettext 'User passwd:')
al@303 471 <input type="password" id="userPwd1" name="TGT_USER_PWD" value="$TGT_USER_PWD" placeholder="$(gettext 'Password of the first user')" onkeyup="checkPwd('userPwd1','userPwd2','msgUserPwd'); return false;" />
al@303 472
al@303 473 $(gettext 'Confirm password:')
al@303 474 <input class="confirm" type="password" id="userPwd2" value="$TGT_USER_PWD" placeholder="$(gettext 'Password of the first user')" onkeyup="checkPwd('userPwd1','userPwd2','msgUserPwd'); return false;" />
al@303 475 <span id="msgUserPwd"></span>
domcox@277 476 </div>
pascal@208 477 EOT
pascal@208 478 }
pascal@208 479
pascal@208 480 select_grub()
pascal@208 481 {
pascal@208 482 cat << EOT
domcox@277 483 <div>
al@303 484 <h5 id="grub">$(gettext 'Grub')</h5>
al@303 485
al@303 486 <input type="checkbox" name="TGT_GRUB" value="yes" $([ "$TGT_GRUB" == "yes" ] && echo "checked") id="grub" />
al@303 487 <label for="grub">$(gettext "Install Grub bootloader. Usually you should \
al@303 488 answer yes, unless you want to install grub by hand yourself.")<br /></label>
al@303 489 <input type="checkbox" name="TGT_WINBOOT" value="auto" $([ -n "$TGT_WINBOOT" ] && echo "checked") id="dualboot" />
al@303 490 <label for="dualboot">$(gettext 'Enable Windows Dual-Boot.')</label>
domcox@277 491 </div>
pascal@208 492 EOT
pascal@208 493 }
pascal@208 494
pascal@208 495 moveto_page()
pascal@208 496 {
pascal@208 497 case $1 in
domcox@277 498 partitioning)
al@303 499 title1=$(gettext 'Back to partitioning') ;;
pascal@208 500 *)
pascal@208 501 page=home
al@303 502 title1=$(gettext 'Back to Installer Start Page') ;;
pascal@208 503 esac
pascal@208 504 case $2 in
pascal@208 505 write|run)
al@303 506 title2=$(gettext 'Proceed to SliTaz installation') ;;
pascal@208 507 reboot)
al@303 508 title2=$(gettext 'Installation complete. You can now restart (reboot)') ;;
pascal@208 509 failed)
al@303 510 title2=$(gettext 'Installation failed. See log') ;;
pascal@208 511 *)
pascal@208 512 page=home
al@303 513 title2=$(gettext 'Back to Installer Start Page') ;;
pascal@208 514 esac
pascal@208 515 cat <<EOT
pascal@208 516 <hr />
pascal@208 517 <input type="hidden" name="page" value="$2" />
pascal@208 518 <a class="button" value="$1" href="$SCRIPT_NAME?page=$1" >$title1</a>
domcox@277 519 <input type="submit" value="$title2">
pascal@208 520 EOT
pascal@208 521 }
pascal@208 522
pascal@208 523 page_redirection()
pascal@208 524 {
pascal@208 525 cat <<EOT
al@303 526 <!DOCTYPE html>
pascal@208 527 <html>
pascal@208 528 <head>
al@303 529 <meta charset="utf-8">
al@303 530 <title>$(gettext "A web page that points a browser to a different page after \
al@303 531 2 seconds")</title>
pascal@208 532 <meta http-equiv="refresh" content="0; URL=$SCRIPT_NAME?page=$1">
pascal@208 533 <meta name="keywords" content="automatic redirection">
pascal@208 534 </head>
pascal@208 535 <body>
al@303 536 <p>$(gettext "If your browser doesn't automatically redirect within a few \
al@303 537 seconds, you may want to go there manually")</p>
al@303 538 <p><a href="$SCRIPT_NAME?page=$1">$1</a></p>
pascal@208 539 </body>
pascal@208 540 </html>
pascal@208 541 EOT
pascal@208 542 }
pascal@208 543
pascal@208 544 check_ressources()
pascal@208 545 {
al@303 546 local code
pascal@208 547 code=0
pascal@208 548 # Check tazinst
domcox@296 549 if ! [ -x /usr/sbin/tazinst ] ; then
pascal@208 550 cat <<EOT
al@303 551 <h3>$(gettext 'Tazinst Error')</h3>
al@303 552 <p>$(gettext "<strong>tazinst</strong>, the lightweight SliTaz HDD installer \
paul@209 553 is missing. Any installation can not be done without tazinst.")</p>
al@303 554
al@303 555 <p>$(gettext "Check tazinst' permissions, or reinstall the slitaz-tools \
al@303 556 package:")</p>
pascal@208 557 <code># tazpkg get-install slitaz-tools --forced</code>
pascal@208 558 EOT
pascal@208 559 code=1
pascal@208 560 else
pascal@208 561 # Check tazinst required version
pascal@208 562 v=$(tazinst version | tr -d '[:alpha:]')
pascal@208 563 r=$TAZINST_REQUIRED_VERSION
pascal@208 564 if ! (echo "$v" | awk -v r=$r '{v=$v+0}{ if (v < r) exit 1}') ; then
pascal@208 565 cat <<EOT
al@303 566 <h3>$(gettext 'Tazinst Error')</h3>
al@303 567
al@303 568 <p>$(eval_gettext "<strong>tazinst</strong> ($v) is not at the required \
al@303 569 version ($r), use tazinst in a xterm or reinstall the slitaz-tools package:")</p>
pascal@208 570 <code># tazpkg get-install slitaz-tools --forced</code>
pascal@208 571 EOT
pascal@208 572 code=1
pascal@208 573 fi
pascal@208 574 fi
pascal@208 575 return $code
pascal@208 576 }
pascal@208 577
pascal@208 578 run_tazinst()
pascal@208 579 {
al@303 580 cat << EOT
al@303 581 <h4>$(gettext 'Proceeding: ()')</h4>
al@303 582 <p>$(gettext 'Please wait until processing is complete')</p>
al@303 583 EOT
pascal@208 584 table_start
pascal@208 585 tazinst $(GET INST_ACTION) $INSTFILE | \
pascal@208 586 awk '{print "<tr><td><tt>" $0 "</tt></td></tr>"}'
pascal@208 587 table_end
al@303 588 echo "<p>$(gettext 'Completed.')</p>"
pascal@208 589 return $(grep -c "cancelled on error" $INSTFILE)
pascal@208 590 }
pascal@208 591
pascal@208 592 tazinst_log()
pascal@208 593 {
al@303 594 echo "<pre>$(tazinst log)</pre>"
pascal@208 595 }
pascal@208 596
pascal@208 597 scan_mkfs()
pascal@208 598 {
pascal@208 599 for path in /bin /sbin /usr/bin /usr/sbin
pascal@208 600 do
pascal@208 601 [ -e $path/mkfs.btrfs ] && FS=btrfs
pascal@208 602 [ -e $path/mkfs.cramfs ] && FS="$FS cramfs"
pascal@208 603 [ -e $path/mkfs.ext2 ] && FS="$FS ext2"
pascal@208 604 [ -e $path/mkfs.ext3 ] && FS="$FS ext3"
pascal@208 605 [ -e $path/mkfs.ext4 ] && FS="$FS ext4"
pascal@208 606 [ -e $path/mkfs.jfs ] && FS="$FS jfs"
pascal@208 607 [ -e $path/mkfs.minix ] && FS="$FS minix"
pascal@208 608 [ -e $path/mkfs.reiserfs ] && FS="$FS reiserfs"
pascal@208 609 [ -e $path/mkfs.xfs ] && FS="$FS xfs"
pascal@208 610 done
pascal@208 611 }
pascal@208 612
pascal@208 613 form_start()
pascal@208 614 {
pascal@208 615 cat <<EOT
domcox@277 616 <script src="lib/user.js"></script>
domcox@277 617 <script type="text/javascript">
domcox@277 618 function Validate(page) {
domcox@277 619 if (page == "install") {
domcox@277 620 // hostname
domcox@277 621 if (false == checkLogin('hostname','msgHostname')) {
al@303 622 alert("$(gettext 'Hostname error')");
domcox@277 623 return false;
domcox@277 624 // root pwd
domcox@277 625 } else if (false == checkPwd('rootPwd1','rootPwd2','msgRootPwd')) {
al@303 626 alert("$(gettext 'Root password error')");
domcox@277 627 return false;
domcox@277 628 // user
domcox@277 629 } else if (false == checkLogin('user','msgUser')) {
al@303 630 alert("$(gettext 'User login error')");
domcox@277 631 return false;
domcox@277 632 // user pwd
domcox@277 633 } else if (false == checkPwd('userPwd1','userPwd2','msgUserPwd')) {
al@303 634 alert("$(gettext 'User password error')");
domcox@277 635 return false;
domcox@277 636 } else {
al@303 637 var r=confirm("$(gettext 'Do you really want to continue?')");
domcox@277 638 if (r==true)
domcox@277 639 {
domcox@277 640 document.ConfigForm.submit();
domcox@277 641 } else {
domcox@277 642 return false;
domcox@277 643 }
domcox@277 644 }
domcox@277 645 } else if (page == "write") {
domcox@277 646 return true;
domcox@277 647 } else {
al@303 648 var r=confirm("$(gettext 'Do you really want to continue?')");
domcox@277 649 if (r==true)
domcox@277 650 {
domcox@277 651 document.ConfigForm.submit();
domcox@277 652 } else {
domcox@277 653 return false;
domcox@277 654 }
domcox@277 655 }
domcox@277 656 }
domcox@277 657 </script>
domcox@277 658 <form name="ConfigForm" method="get" onsubmit="return Validate('$1')" action="$SCRIPT_NAME">
pascal@208 659 EOT
pascal@208 660 }
pascal@208 661
pascal@208 662 form_end()
pascal@208 663 {
pascal@208 664 echo "</form>"
pascal@208 665 }
pascal@208 666
pascal@208 667 #
pascal@208 668 # Main
pascal@208 669 #
pascal@208 670
pascal@208 671 case "$(GET page)" in
domcox@277 672 home)
domcox@277 673 xhtml_header
domcox@277 674 select_action
domcox@277 675 select_install
domcox@277 676 select_upgrade
domcox@277 677 ;;
domcox@277 678 partitioning)
domcox@277 679 xhtml_header
domcox@277 680 display_action install
domcox@277 681 select_gparted
domcox@277 682 ;;
pascal@208 683 gparted)
domcox@272 684 su - -c "exec env DISPLAY=':0.0' XAUTHORITY='/var/run/slim.auth' /usr/sbin/gparted"
pascal@208 685 xhtml_header
domcox@277 686 page_redirection partitioning
pascal@208 687 ;;
pascal@208 688 install)
pascal@208 689 xhtml_header
domcox@277 690 form_start install
pascal@208 691 display_action install
domcox@258 692 read_setup
pascal@208 693 select_source
domcox@277 694 select_hdd
pascal@208 695 select_partition
domcox@277 696 select_options
pascal@208 697 select_home
pascal@208 698 select_hostname
pascal@208 699 select_root
pascal@208 700 select_user
pascal@208 701 select_grub
domcox@277 702 moveto_page partitioning write
pascal@208 703 form_end
pascal@208 704 ;;
pascal@208 705 upgrade)
pascal@208 706 xhtml_header
domcox@277 707 form_start upgrade
pascal@208 708 display_action upgrade
domcox@258 709 read_setup
pascal@208 710 select_source
domcox@277 711 select_hdd
pascal@208 712 select_old_slitaz
domcox@277 713 select_options
pascal@208 714 select_grub
pascal@208 715 moveto_page home write
pascal@208 716 form_end
pascal@208 717 ;;
pascal@208 718 write)
pascal@208 719 write_setup
pascal@208 720 xhtml_header
pascal@208 721 if ! (tazinst check $INSTFILE); then
pascal@208 722 page_redirection $(GET INST_ACTION)
pascal@208 723 else
pascal@208 724 read_setup
domcox@277 725 form_start write
pascal@208 726 display_action $(GET INST_ACTION)
pascal@208 727 if run_tazinst; then
pascal@208 728 moveto_page home reboot
pascal@208 729 else
pascal@208 730 moveto_page home failed
pascal@208 731 fi
pascal@208 732 form_end
pascal@208 733 fi
pascal@208 734 ;;
pascal@208 735 reboot)
pascal@208 736 reboot ;;
pascal@208 737 failed)
pascal@208 738 xhtml_header
pascal@208 739 display_log
pascal@208 740 ;;
domcox@234 741 menu_install)
domcox@234 742 xhtml_header
domcox@234 743 if check_ressources; then
domcox@277 744 page_redirection partitioning
domcox@234 745 fi
domcox@234 746 ;;
domcox@234 747 menu_upgrade)
domcox@234 748 xhtml_header
domcox@234 749 if check_ressources; then
domcox@258 750 page_redirection upgrade
domcox@234 751 fi
domcox@234 752 ;;
pascal@208 753 *)
pascal@208 754 xhtml_header
pascal@208 755 if check_ressources; then
pascal@208 756 page_redirection home
pascal@208 757 fi
pascal@208 758 ;;
pascal@208 759 esac
pascal@208 760
pascal@208 761 xhtml_footer
pascal@208 762
pascal@208 763 exit 0