slitaz-tools annotate installer/slitaz-installer @ rev 319

Translate installer
author Paul Issott <paul@slitaz.org>
date Sun Mar 22 11:08:47 2009 +0000 (2009-03-22)
parents 853df25f1fe6
children cf43c3752733
rev   line source
pankso@70 1 #!/bin/sh
pankso@70 2 # slitaz-installer - SliTaz GNU/Linux installer.
pankso@70 3 #
pankso@70 4 # So this is SliTaz installer using dialog boxes. All the comments are in
pascal@205 5 # English but displayed messages are in French. The script starts with a
MikeDSmith25@252 6 # few main variables, then all the functions and then a sequence of functions.
pankso@70 7 #
paul@319 8 # (C) 2007-2008 SliTaz - GNU General Public License v3.
pankso@70 9 #
pankso@70 10 # Author : Christophe Lincoln <pankso@slitaz.org>
pankso@70 11 #
pankso@70 12 VERSION=1.0
pankso@236 13
pankso@236 14 if [ "$1" = "gui" ]; then
pankso@236 15 : ${DIALOG=tazdialog}
pankso@236 16 else
pankso@236 17 : ${DIALOG=dialog}
pankso@236 18 fi
pankso@70 19
pankso@70 20 # Installer actions can be specified on cmdline (install or upgrade).
pankso@236 21 if [ "$1" = "upgrade" ]; then
pankso@70 22 ACTION=$1
pankso@70 23 else
pankso@70 24 ACTION=install
pankso@70 25 fi
pankso@70 26
pankso@70 27 # We need to know cdrom device and kernel version string to copy files.
pankso@70 28 DRIVE_NAME=`cat /proc/sys/dev/cdrom/info | grep "drive name" | cut -f 3`
pankso@70 29 CDROM=/dev/$DRIVE_NAME
pankso@70 30 KERNEL=vmlinuz-`uname -r`
pankso@70 31 TARGET_ROOT=/mnt/target
pankso@70 32 LOG=/var/log/slitaz-installer.log
pankso@70 33 BACKLIST="SliTaz GNU/Linux installer"
pankso@70 34
pankso@70 35 #######################
pankso@70 36 # Installer functions #
pankso@70 37 #######################
pankso@70 38
paul@319 39 # Messages language setting.
pascal@205 40 set_messages()
pascal@205 41 {
pankso@288 42 case $LANG in
pankso@288 43 de*)
pankso@288 44 . /usr/share/slitaz-tools/installer/de.msg ;;
pankso@288 45 fr*)
pankso@288 46 . /usr/share/slitaz-tools/installer/fr.msg ;;
pankso@288 47 *)
pankso@288 48 . /usr/share/slitaz-tools/installer/en.msg ;;
pankso@288 49 esac
pascal@205 50 }
pascal@205 51
pankso@70 52 # Display error message.
pankso@70 53 error_message()
pankso@70 54 {
paul@153 55 $DIALOG --title " Error " \
pankso@70 56 --colors --backtitle "$BACKLIST" \
pankso@70 57 --clear --msgbox "\n$ERROR_MSG" 18 70
pankso@70 58 }
pankso@70 59
pankso@70 60 # Exit install if user is not root.
pankso@70 61 check_root()
pankso@70 62 {
pankso@70 63 if test $(id -u) != 0 ; then
pankso@70 64 ERROR_MSG="\
pankso@148 65 [\Z6en\Zn] You must be root administrator to start SliTaz installer, please \
pankso@148 66 use 'su' to get a root SHell and restart installation.\n\n
pankso@70 67 [\Z6fr\Zn] Vous devez être root pour installer SLiTaz GNU/Linux. Vous pouvez \
pankso@70 68 utiliser 'su' suivi du mot de passe administrateur pour devenir root \
pankso@148 69 et relancer l'installation."
pankso@70 70 error_message
pankso@70 71 exit 0
pankso@70 72 fi
pankso@70 73 }
pankso@70 74
pankso@70 75 # This function is used after each screen to contine or abort install.
pankso@70 76 check_retval()
pankso@70 77 {
pankso@94 78 case $retval in
pankso@94 79 0)
pankso@94 80 continue ;;
pankso@94 81 1)
paul@153 82 echo -e "\nVoluntary exit.\n" && exit 0 ;;
pankso@94 83 3)
pankso@94 84 continue ;;
pankso@94 85 255)
pankso@94 86 echo -e "ESC pressed.\n" && exit 0 ;;
pankso@94 87 esac
pankso@70 88 }
pankso@70 89
MikeDSmith25@252 90 # Start install with basic information.
pankso@94 91 start_installer()
pankso@70 92 {
pankso@148 93 $DIALOG --title " Install or Upgrade " \
pankso@70 94 --backtitle "$BACKLIST" \
pankso@94 95 --extra-button --extra-label "Upgrade" \
pankso@94 96 --yes-label "Install" \
pankso@94 97 --no-label "Quit" \
pankso@70 98 --clear --colors --yesno "$START_INSTALL_MSG" 18 70
pankso@70 99 retval=$?
pankso@94 100 case $retval in
pankso@94 101 0)
pankso@94 102 ACTION=install ;;
pankso@94 103 1)
paul@153 104 echo -e "\nVoluntary exit.\n" && exit 0 ;;
pankso@94 105 3)
pankso@94 106 ACTION=upgrade ;;
pankso@94 107 255)
pankso@94 108 echo -e "ESC pressed.\n" && exit 0 ;;
pankso@94 109 esac
pankso@94 110 echo "start_installer: `date`" > $LOG
pankso@70 111 }
pankso@70 112
paul@319 113 # Mount cdrom and verify if it's really SliTaz CD.
pankso@70 114 mount_cdrom()
pankso@70 115 {
pankso@70 116 ERROR_MSG=""
pankso@70 117 (
pankso@70 118 echo "XXX" && echo 30
pankso@148 119 echo -e "\nCreating mount point (/media/cdrom)..."
pankso@198 120 echo "XXX"
pankso@70 121 mkdir -p /media/cdrom
pankso@70 122 sleep 1
pankso@70 123 echo "XXX" && echo 60
paul@153 124 echo -e "\nMounting cdrom ($CDROM)..."
pankso@70 125 echo "XXX"
pankso@70 126 mount -t iso9660 $CDROM /media/cdrom 2>>$LOG
pankso@70 127 echo "XXX" && echo 90
pankso@148 128 echo -e "\nChecking installation media..."
pankso@70 129 echo "XXX"
pankso@70 130 sleep 2
pankso@70 131 ) |
paul@153 132 $DIALOG --title " Mounting cdrom " \
pankso@70 133 --backtitle "$BACKLIST" \
pankso@148 134 --gauge "Preparing the installation media..." 18 70 0
paul@319 135 # Exit with error msg if no rootfs.gz found.
pankso@70 136 if [ ! -f /media/cdrom/boot/rootfs.gz ]; then
pankso@148 137 ERROR_MSG="$MOUNT_CDROM_ERROR_MSG"
pankso@70 138 error_message
pankso@70 139 echo "missing: /media/cdrom/boot/rootfs.gz" >>$LOG
pankso@70 140 exit 1
pankso@70 141 fi
pankso@70 142 }
pankso@70 143
MikeDSmith25@252 144 # Display a list of available partitions.
pankso@70 145 fdisk_list()
pankso@70 146 {
pankso@70 147 LIST_PARTITIONS=`fdisk -l | grep ^/dev | sed s/'e Win95'/'e'/g`
paul@153 148 $DIALOG --title " Partition tables " \
pankso@70 149 --backtitle "$BACKLIST" \
pankso@70 150 --clear --msgbox "\n
paul@153 151 Available partitions :\n\n
pankso@70 152 $LIST_PARTITIONS" 18 70
pankso@70 153 }
pankso@70 154
MikeDSmith25@252 155 # We need a partition to install to (inputbox).
pankso@70 156 ask_for_target_dev()
pankso@70 157 {
pankso@70 158 exec 3>&1
paul@319 159 TARGET_DEV=`$DIALOG --title " Root Partition " \
pankso@70 160 --backtitle "$BACKLIST" --clear \
pankso@70 161 --extra-label "List" --extra-button \
pankso@149 162 --colors --inputbox "$ASK_FOR_TARGET_DEV_MSG" 18 70 2>&1 1>&3`
pankso@70 163 retval=$?
pankso@70 164 exec 3>&-
pankso@70 165 check_retval
MikeDSmith25@252 166 # Display list and come back.
pankso@70 167 if [ "$retval" = "3" ]; then
pankso@70 168 fdisk_list
pankso@70 169 ask_for_target_dev
pankso@70 170 fi
pankso@70 171 # Empty value.
pankso@70 172 if [ -z $TARGET_DEV ]; then
pankso@70 173 ask_for_target_dev
pankso@70 174 fi
pascal@205 175 set_messages
MikeDSmith25@252 176 # Check if specified device exists in /proc/partitions.
pankso@70 177 DEV_NAME=${TARGET_DEV#/dev/}
pankso@70 178 if cat /proc/partitions | grep -q $DEV_NAME; then
pascal@273 179 if [ "$DEV_NAME" = "$TARGET_DEV" ]; then
pascal@273 180 TARGET_DEV="/dev/$DEV_NAME"
pascal@273 181 fi
pankso@70 182 echo "ask_for_target_dev: $TARGET_DEV" >>$LOG
pankso@70 183 else
paul@153 184 ERROR_MSG="Partition \Z2$TARGET_DEV\Zn doesn't exist."
pankso@70 185 error_message
pankso@70 186 ask_for_target_dev
pankso@70 187 fi
pankso@70 188 }
pankso@70 189
pankso@70 190 # Mkfs if needed/wanted.
pankso@70 191 ask_for_mkfs_target_dev()
pankso@70 192 {
pankso@149 193 $DIALOG --title " Format " \
pankso@70 194 --backtitle "$BACKLIST" \
pankso@149 195 --clear --colors --yesno "$ASK_FOR_MKFS_TARGET_DEV_MSG" 18 70
pankso@70 196 retval=$?
pankso@70 197 case $retval in
pankso@70 198 0)
pankso@70 199 MKFS_TARGET_DEV="ext3"
pankso@70 200 echo "mkfs_target_dev: ext3" >>$LOG ;;
pankso@70 201 1)
pankso@70 202 CLEAN="clean"
pankso@70 203 echo "mkfs_target_dev: clean" >>$LOG ;;
pankso@70 204 255)
pankso@70 205 echo -e "ESC pressed.\n" && exit 0 ;;
pankso@70 206 esac
pankso@198 207
pankso@70 208 }
pankso@70 209
pankso@70 210 # Mount and mkfs with progress.
pankso@70 211 prepare_target_dev()
pankso@70 212 {
pankso@70 213 (
pankso@70 214 echo "XXX" && echo 30
pankso@149 215 echo -e "\nPreparing target partition..."
pankso@70 216 echo "XXX"
pankso@70 217 # Mount point can be already used.
pankso@70 218 if mount | grep -q $TARGET_ROOT; then
pankso@70 219 umount $TARGET_ROOT 2>$LOG
pankso@70 220 fi
pankso@70 221 sleep 2
pankso@198 222
pankso@70 223 if [ "$MKFS_TARGET_DEV" == "ext3" ]; then
pankso@70 224 echo "XXX" && echo 60
pankso@149 225 echo -e "\nExecuting mkfs.ext3 on $TARGET_DEV"
pankso@198 226 echo "XXX"
pankso@70 227 mkfs.ext3 $TARGET_DEV >>$LOG 2>>$LOG
pankso@70 228 else
pankso@70 229 echo "XXX" && echo 60
pankso@149 230 echo -e "\nThe partition ($TARGET_DEV) will be cleaned..."
pankso@70 231 echo "XXX"
pankso@70 232 sleep 2
pankso@70 233 fi
pankso@198 234
pankso@70 235 echo "XXX" && echo 90
pankso@149 236 echo -e "\nCreating mount point: $TARGET_ROOT"
pankso@198 237 echo "XXX"
pankso@70 238 mkdir -p $TARGET_ROOT
pankso@70 239 sleep 2
pankso@198 240
pankso@70 241 ) |
paul@319 242 $DIALOG --title " Prepare the target " \
pankso@70 243 --backtitle "$BACKLIST" \
pankso@70 244 --gauge "Target in preparation..." 18 70 0
paul@319 245 # Mount target.
pankso@70 246 mount $TARGET_DEV $TARGET_ROOT >>$LOG 2>>$LOG
pankso@70 247 }
pankso@70 248
MikeDSmith25@252 249 # Ask for hostname before installing files.
pankso@70 250 ask_for_hostname()
pankso@70 251 {
pankso@70 252 exec 3>&1
pankso@70 253 HOSTNAME=`$DIALOG --title " Hostname " \
pankso@70 254 --backtitle "$BACKLIST" --clear \
pankso@149 255 --colors --inputbox "$ASK_FOR_HOSTNAME_MSG" 18 70 "slitaz" 2>&1 1>&3`
pankso@70 256 retval=$?
pankso@70 257 exec 3>&-
pankso@70 258 check_retval
pankso@70 259 # Empty value.
pankso@70 260 if [ -z $HOSTNAME ]; then
pankso@70 261 HOSTNAME="slitaz"
pankso@70 262 fi
pankso@70 263 }
pankso@70 264
pankso@70 265 # Get a clean target device (15%).
pankso@70 266 clean_target()
pankso@70 267 {
pankso@70 268 if [ "$CLEAN" == "clean" ]; then
pankso@70 269 echo "XXX" && echo 15
paul@319 270 echo -e "\nCleaning the root partition ($TARGET_DEV)..."
pankso@70 271 echo "XXX"
pankso@94 272 # Keep /home in case of reinstall.
pankso@70 273 cd $TARGET_ROOT
pankso@94 274 for dir in *
pankso@70 275 do
pankso@94 276 case "$dir" in
pankso@70 277 home)
erjo@77 278 mv $TARGET_ROOT/home $TARGET_ROOT/home.bak
pankso@70 279 echo "keeping /home found on: $TARGET_DEV" >>$LOG ;;
pankso@70 280 lost+found)
pankso@94 281 continue ;;
pankso@70 282 *)
pankso@94 283 echo "removing target: $dir" >>$LOG
erjo@77 284 rm -rf $dir 2>>$LOG ;;
pankso@70 285 esac
pankso@70 286 done
pankso@70 287 if [ -d $TARGET_ROOT/mklost+found ]; then
pankso@70 288 mklost+found 2>>$LOG
pankso@70 289 fi
pankso@70 290 fi
pankso@70 291 sleep 2
pankso@70 292 }
pankso@70 293
MikeDSmith25@252 294 # Kernel is renamed to standard vmlinuz-$VERSION.
pankso@70 295 install_kernel()
pankso@70 296 {
pankso@70 297 mkdir -p $TARGET_ROOT/boot
pankso@70 298 cp /media/cdrom/boot/bzImage $TARGET_ROOT/boot/$KERNEL
pankso@94 299 echo "install_kernel: $KERNEL" >> $LOG
pankso@70 300 sleep 2
pankso@70 301 }
pankso@70 302
pankso@70 303 # Copy isolinux r/w files (not syslinux, some files are read only).
pankso@70 304 copy_bootloaders()
pankso@70 305 {
pankso@70 306 if [ -d "/media/cdrom/boot/isolinux" ]; then
pankso@70 307 mkdir -p $TARGET_ROOT/boot/isolinux
pankso@70 308 cp -a /media/cdrom/boot/isolinux/*.cfg $TARGET_ROOT/boot/isolinux
pankso@70 309 cp -a /media/cdrom/boot/isolinux/*.kbd $TARGET_ROOT/boot/isolinux
pankso@70 310 cp -a /media/cdrom/boot/isolinux/*.txt $TARGET_ROOT/boot/isolinux
pankso@70 311 cp -a /media/cdrom/boot/isolinux/*.bin $TARGET_ROOT/boot/isolinux
pankso@70 312 cp -a /media/cdrom/boot/isolinux/*.msg $TARGET_ROOT/boot/isolinux
pankso@70 313 cp -a /media/cdrom/boot/isolinux/*.lss $TARGET_ROOT/boot/isolinux
pankso@70 314 cp -a /media/cdrom/boot/isolinux/*.c32 $TARGET_ROOT/boot/isolinux
pankso@70 315 fi
pankso@70 316 }
pankso@70 317
pankso@70 318 # Extract lzma'ed or gziped rootfs.
pankso@70 319 extract_rootfs()
pankso@70 320 {
pankso@70 321 cd $TARGET_ROOT
pankso@94 322 (zcat rootfs.gz 2>/dev/null || lzma d rootfs.gz -so || \
pascal@186 323 cat rootfs.gz) 2>>$LOG | cpio -id 2>>$LOG > /dev/null
pascal@71 324 rm -f rootfs.gz
pankso@94 325 # unpack /usr (double check...)
pankso@94 326 if ls etc/tazlito | grep -q ".extract"; then
pankso@94 327 for i in etc/tazlito/*.extract; do
pascal@186 328 [ -f "$i" ] && . $i /media/cdrom
pankso@94 329 done
pankso@94 330 fi
pankso@70 331 }
pankso@70 332
pankso@70 333 # /etc/skel (60%)
pankso@70 334 gen_etc_skel()
pankso@70 335 {
paul@319 336 # Maybe we don't have /home/hacker directory.
pankso@70 337 if [ -d $TARGET_ROOT/home/hacker ]; then
pankso@70 338 echo "XXX" && echo 60
paul@319 339 echo -e "\nCopying default user files (/etc/skel)..."
pankso@70 340 echo "XXX"
pankso@70 341 cp -a $TARGET_ROOT/home/hacker $TARGET_ROOT/etc/skel
pankso@70 342 else
pankso@70 343 echo "XXX" && echo 60
paul@319 344 echo -e "\nCreating directory (/etc/skel)..."
pankso@70 345 echo "XXX"
pankso@70 346 mkdir -p $TARGET_ROOT/etc/skel \
pankso@70 347 $TARGET_ROOT/etc/Documents \
pankso@70 348 $TARGET_ROOT/etc/skel/Images \
pankso@70 349 $TARGET_ROOT/etc/skel/.local/bin \
pankso@70 350 $TARGET_ROOT/etc/skel/.local/share
pankso@70 351 fi
pankso@70 352 sleep 2
pankso@70 353 }
pankso@70 354
pankso@70 355 # Pre configure freshly installed system (70 - 90%).
pankso@70 356 pre_config_system()
pankso@70 357 {
pankso@70 358 cd $TARGET_ROOT
MikeDSmith25@252 359 # Restore backup of existing /home if exists.
pankso@70 360 # (created by prepare_target_dev)
pankso@70 361 if [ -d home.bak ]; then
pankso@70 362 echo "XXX" && echo 75
paul@319 363 echo -e "\nThe restore directory: /home..."
pankso@70 364 echo "XXX"
pankso@70 365 rm -rf home
pankso@70 366 mv home.bak home
pankso@70 367 sleep 2
pankso@70 368 fi
pankso@198 369 # Add root device to CHECK_FS in rcS.conf to check filesystem
pankso@70 370 # on each boot.
pankso@70 371 echo "XXX" && echo 80
paul@319 372 echo -e "\nAdding $TARGET_DEV and CHECK_FS to file /etc/rcS.conf..."
pankso@70 373 echo "XXX"
pankso@70 374 sed -i s#'CHECK_FS=\"\"'#"CHECK_FS=\"$TARGET_DEV\""# etc/rcS.conf
pankso@70 375 sleep 2
pankso@70 376 # Set hostname.
pankso@70 377 echo "XXX" && echo 85
paul@319 378 echo -e "\nConfiguring host name: $HOSTNAME"
pankso@70 379 echo "XXX"
pankso@70 380 echo $HOSTNAME > etc/hostname
pankso@70 381 sleep 2
pankso@70 382 }
pankso@70 383
MikeDSmith25@252 384 # Determine GRUB partition number and GRUB disk number.
pankso@70 385 grub_config()
pankso@70 386 {
pankso@70 387 DISK_LETTER=${TARGET_DEV#/dev/[h-s]d}
pankso@70 388 DISK_LETTER=${DISK_LETTER%[0-9]}
pankso@70 389 GRUB_PARTITION=$((${TARGET_DEV#/dev/[h-s]d[a-z]}-1))
pankso@70 390 for disk in a b c d e f g h
pankso@70 391 do
pankso@70 392 nb=$(($nb+1))
pankso@70 393 if [ "$disk" = "$DISK_LETTER" ]; then
pankso@70 394 GRUB_DISK=$(($nb-1))
pankso@70 395 break
pankso@70 396 fi
pankso@70 397 done
pankso@70 398 GRUB_ROOT="(hd${GRUB_DISK},${GRUB_PARTITION})"
MikeDSmith25@252 399 # Create the target GRUB configuration.
pankso@70 400 mkdir -p $TARGET_ROOT/boot/grub
pankso@70 401 cat > $TARGET_ROOT/boot/grub/menu.lst << _EOF_
pankso@70 402 # /boot/grub/menu.lst: GRUB boot loader configuration.
pankso@70 403 #
pankso@70 404
pankso@70 405 # By default, boot the first entry.
pankso@70 406 default 0
pankso@70 407
pankso@70 408 # Boot automatically after 8 secs.
pankso@70 409 timeout 8
pankso@70 410
pankso@70 411 # Change the colors.
pankso@70 412 color yellow/brown light-green/black
pankso@70 413
pankso@70 414 # For booting SliTaz from : $TARGET_DEV
pankso@70 415 #
pankso@70 416 title SliTaz GNU/Linux (cooking) (Kernel $KERNEL)
pankso@70 417 root $GRUB_ROOT
pankso@70 418 kernel /boot/$KERNEL root=$TARGET_DEV
pankso@70 419
pankso@70 420 _EOF_
pankso@70 421 # log
pankso@70 422 echo "grub_config: $TARGET_ROOT/boot/grub/menu.lst" >>$LOG
pankso@70 423 sleep 2
pankso@70 424 }
pankso@70 425
pankso@70 426 # Files install with gauge, calling for functions or with cmds.
pankso@70 427 install_files()
pankso@70 428 {
pankso@70 429 (
pankso@198 430
pankso@70 431 echo "XXX" && echo 10
paul@319 432 echo -e "\nCleaning the root partition if necessary..."
pankso@70 433 echo "XXX"
pankso@70 434 clean_target
pankso@198 435
pankso@70 436 echo "XXX" && echo 20
paul@319 437 echo -e "\nInstalling the kernel ($KERNEL)..."
pankso@70 438 echo "XXX"
pankso@70 439 install_kernel
pankso@198 440
pankso@70 441 echo "XXX" && echo 30
paul@319 442 echo -e "\nCopying the bootloader syslinux/isolinux..."
pankso@70 443 echo "XXX"
pankso@70 444 copy_bootloaders
pankso@198 445
pankso@70 446 echo "XXX" && echo 40
paul@319 447 echo -e "\nCopying the compressed system (rootfs.gz)..."
pankso@70 448 echo "XXX"
pankso@70 449 cp /media/cdrom/boot/rootfs.gz $TARGET_ROOT
pankso@70 450 sleep 2
pankso@198 451
pankso@70 452 echo "XXX" && echo 50
paul@319 453 echo -e "\nExtracting the root system..."
pankso@70 454 echo "XXX"
pankso@70 455 extract_rootfs
pankso@198 456
pankso@70 457 echo "XXX" && echo 60
paul@319 458 echo -e "\nCopying the default user files (/etc/skel)..."
pankso@70 459 echo "XXX"
pankso@70 460 gen_etc_skel
pankso@70 461 sleep 2
pankso@198 462
pankso@70 463 echo "XXX" && echo 70
paul@319 464 echo -e "\nPreconfiguring the system..."
pankso@70 465 echo "XXX"
pankso@70 466 pre_config_system
pankso@198 467
pankso@70 468 echo "XXX" && echo 90
paul@319 469 echo -e "\nCreating the configuration file for GRUB (menu.lst)..."
pankso@70 470 echo "XXX"
pankso@70 471 grub_config
pankso@198 472
pankso@70 473 echo "XXX" && echo 100
paul@319 474 echo -e "\nFinishing the files installation..."
pankso@70 475 echo "XXX"
pankso@70 476 echo "install_files: OK" >>$LOG
pankso@70 477 sleep 4
pankso@198 478
pankso@70 479 ) |
paul@319 480 $DIALOG --title " Install files " \
pankso@70 481 --backtitle "$BACKLIST" \
pankso@70 482 --gauge "Starting to install files..." 18 70 0
pankso@70 483 }
pankso@70 484
paul@319 485 # GRUB info with disk name used for grub-install.
pankso@70 486 grub_install()
pankso@70 487 {
pankso@70 488 TARGET_DISK=`echo $TARGET_DEV | sed s/"[0-9]"/''/`
pascal@205 489 set_messages
pankso@70 490 $DIALOG --title " GRUB install " \
pankso@70 491 --backtitle "$BACKLIST" \
pankso@149 492 --clear --colors --yesno "$GRUB_INSTALL_MSG" 18 70
pankso@70 493 retval=$?
pankso@70 494 case $retval in
pankso@70 495 0)
pankso@70 496 (
pankso@70 497 echo "XXX" && echo 50
paul@319 498 echo -e "\nRunning grub-install on : $TARGET_DISK..."
pankso@198 499 echo "XXX"
pankso@70 500 grub-install --no-floppy \
pankso@70 501 --root-directory=$TARGET_ROOT $TARGET_DISK 2>>$LOG
pankso@70 502 echo "XXX" && echo 100
paul@319 503 echo -e "\nFinished installation..."
pankso@70 504 echo "XXX"
pankso@70 505 sleep 2
pankso@70 506 ) |
pankso@70 507 $DIALOG --title " GRUB install " \
pankso@70 508 --backtitle "$BACKLIST" \
paul@319 509 --gauge "Installating GRUB..." 18 70 0 ;;
pankso@70 510 1)
pankso@70 511 echo "grub_install: NO" >>$LOG ;;
pankso@70 512 255)
pankso@70 513 echo -e "ESC pressed.\n" && exit 0 ;;
pankso@70 514 esac
pankso@70 515 }
pankso@70 516
paul@319 517 # Copy log file, umount target and eject cdrom.
pankso@70 518 umount_devices()
pankso@70 519 {
pankso@70 520 (
pankso@70 521 echo "XXX" && echo 25
paul@319 522 echo -e "\nCopying the log files ($LOG)..."
pankso@70 523 echo "XXX"
pankso@70 524 cp -a $LOG $TARGET_ROOT/var/log
pankso@70 525 sleep 2
pankso@70 526 echo "XXX" && echo 50
paul@319 527 echo -e "\nUnmounting the target ($TARGET_DEV)..."
pankso@198 528 echo "XXX"
pankso@70 529 if mount | grep -q $TARGET_ROOT; then
pankso@70 530 umount $TARGET_ROOT 2>/dev/null
pankso@70 531 fi
pankso@70 532 echo "XXX" && echo 75
paul@319 533 echo -e "\nUnmounting and ejecting the cdrom..."
pankso@70 534 echo "XXX"
pankso@70 535 if mount | grep -q /media/cdrom; then
pankso@70 536 umount /media/cdrom
pascal@186 537 grep -q slitaz-loram-cdrom /etc/init.d/rcS || eject
pankso@70 538 fi
pankso@70 539 sleep 2
pankso@70 540 echo "XXX" && echo 100
pankso@70 541 echo -e "\n$TITLE..."
pankso@70 542 echo "XXX"
pankso@70 543 sleep 2
pankso@70 544 ) |
pankso@70 545 $DIALOG --title " $TITLE " \
pankso@70 546 --backtitle "$BACKLIST" \
pankso@70 547 --gauge "$TITLE starting..." 18 70 0
pankso@70 548 }
pankso@70 549
paul@319 550 # End of installation.
pankso@70 551 end_of_install()
pankso@70 552 {
pankso@70 553 echo "end_of_install: `date`" >>$LOG
paul@319 554 $DIALOG --title " Installation complete " \
pankso@70 555 --backtitle "$BACKLIST" \
pankso@70 556 --yes-label "Exit" \
pankso@70 557 --no-label "Reboot" \
pankso@149 558 --clear --colors --yesno "$END_OF_INSTALL_MSG" 18 70
pankso@70 559 retval=$?
pankso@70 560 case $retval in
pankso@70 561 0)
pankso@70 562 TITLE="Exiting"
pankso@70 563 umount_devices ;;
pankso@70 564 1)
pankso@70 565 TITLE="Rebooting"
pankso@70 566 umount_devices
pankso@70 567 reboot || reboot -f ;;
pankso@70 568 255)
pankso@70 569 echo -e "ESC pressed.\n" && exit 0 ;;
pankso@70 570 esac
pankso@70 571 }
pankso@70 572
pankso@70 573 #####################
pankso@70 574 # Upgrade functions #
pankso@70 575 #####################
pankso@70 576
pankso@94 577 # We need a partition to upgrade SliTaz.
pankso@94 578 ask_for_upgrade_dev()
pankso@70 579 {
pankso@94 580 exec 3>&1
paul@319 581 UPGRADE_DEV=`$DIALOG --title " Target to upgrade " \
pankso@94 582 --backtitle "$BACKLIST" --clear \
pankso@94 583 --extra-label "List" --extra-button \
pankso@94 584 --colors --inputbox "\n
paul@319 585 The installer will upgrade the target by saving all configuration files and \
paul@319 586 the list of installed packages. Then, it will clean the partition and install the \
paul@319 587 version of SliTaz contained on the cdrom, restore the configuration files and \
paul@319 588 reinstall all packages which are not present on the cdrom. You will need an active \
paul@319 589 internet connection before upgrading.\n\n
paul@319 590 \Z2Partition containing the system upgrade:\Zn" 18 70 2>&1 1>&3`
pankso@94 591 retval=$?
pankso@94 592 exec 3>&-
pankso@94 593 check_retval
MikeDSmith25@252 594 # Display list and come back.
pankso@94 595 if [ "$retval" = "3" ]; then
pankso@94 596 fdisk_list
pankso@94 597 ask_for_upgrade_dev
pankso@94 598 fi
pankso@94 599 # Empty value.
pankso@94 600 if [ -z $UPGRADE_DEV ]; then
pankso@94 601 ask_for_upgrade_dev
pankso@94 602 fi
MikeDSmith25@252 603 # Check if specified device exists in /proc/partitions.
pankso@94 604 DEV_NAME=${UPGRADE_DEV#/dev/}
pankso@94 605 if cat /proc/partitions | grep -q $DEV_NAME; then
pankso@94 606 echo "ask_for_target_dev: $TARGET_DEV" >>$LOG
pankso@94 607 else
paul@319 608 ERROR_MSG="The partition \Z2$UPGRADE_DEV\Zn doesn't seem to exist."
pankso@94 609 error_message
pankso@94 610 ask_for_upgrade_dev
pankso@94 611 fi
pankso@94 612 echo "partition to upgrade: $UPGRADE_DEV" >>$LOG
pankso@94 613 }
pankso@94 614
paul@319 615 # Prepare the partition to upgrade, backup, install, restore configs
pankso@94 616 # and reinstall pkgs.
pankso@94 617 upgrade_process()
pankso@94 618 {
pankso@94 619 (
pankso@94 620 echo "XXX" && echo 5
paul@319 621 echo -e "\nPreparing the target partition..."
pankso@94 622 echo "XXX"
pankso@94 623 # Mount point can be already used.
pankso@94 624 if mount | grep -q $TARGET_ROOT; then
pankso@94 625 umount $TARGET_ROOT 2>$LOG
pankso@94 626 fi
pankso@94 627 mkdir -p $TARGET_ROOT && sleep 2
paul@319 628 # Mount target.
pankso@94 629 mount $UPGRADE_DEV $TARGET_ROOT >>$LOG 2>>$LOG
pankso@94 630 cd $TARGET_ROOT
pankso@94 631 TARGET_DEV=$UPGRADE_DEV
pascal@205 632 set_messages
pankso@198 633
pankso@94 634 echo "XXX" && echo 10
paul@319 635 echo -e "\nSearch for /etc/slitaz-release"
pankso@94 636 echo "XXX"
pankso@94 637 if [ -f etc/slitaz-release ]; then
pankso@94 638 release=`cat etc/slitaz-release`
pankso@94 639 echo "XXX" && echo 15
pankso@94 640 echo -e "\nSliTaz release: $release"
pankso@94 641 echo "XXX"
pankso@94 642 else
paul@319 643 ERROR_MSG="The partition \Z2$UPGRADE_DEV\Zn doesn't appear to contain \
paul@319 644 a SliTaz system, the file: /etc/slitaz-release doesn't exist."
pankso@94 645 error_message
pankso@94 646 exit 0
pankso@94 647 fi && sleep 2
pankso@198 648
pankso@94 649 echo "XXX" && echo 20
paul@319 650 echo -e "\nBackup /etc, /home and the packages list..."
pankso@94 651 echo "XXX"
paul@319 652 # Backup target packages list.
pankso@94 653 ls -1 var/lib/tazpkg/installed > home/packages-selection.list
pankso@94 654 for dir in *
pankso@94 655 do
pankso@94 656 case "$dir" in
pankso@94 657 boot)
MikeDSmith25@252 658 # Upgrade doesn't prompt for grub install, so backup and
MikeDSmith25@252 659 # create a new grub menu.lst.
pankso@94 660 rm -rf $TARGET_ROOT/boot/vmlinuz-*
pankso@94 661 mv $TARGET_ROOT/boot/grub/menu.lst \
pankso@94 662 $TARGET_ROOT/boot/grub/menu.lst.bak 2>/dev/null
pankso@94 663 grub_config ;;
pankso@94 664 home)
pankso@94 665 mv $TARGET_ROOT/home $TARGET_ROOT/home.bak
pankso@94 666 echo "keeping /home found on: $UPGRADE_DEV" >>$LOG ;;
pankso@94 667 etc)
pankso@94 668 tar czf $TARGET_ROOT/etc.tar.gz etc
pankso@94 669 mv $TARGET_ROOT/etc $TARGET_ROOT/etc.bak
pankso@94 670 echo "keeping /etc found on: $UPGRADE_DEV" >>$LOG ;;
pankso@94 671 var)
pankso@94 672 if [ -d $TARGET_ROOT/var/www ]; then
pankso@94 673 mv $TARGET_ROOT/var/www $TARGET_ROOT/www.bak
pankso@94 674 fi
pankso@94 675 rm -rf $TARGET_ROOT/var ;;
pankso@94 676 lost+found)
pankso@94 677 continue ;;
pankso@94 678 *)
pankso@94 679 echo "removing target: $dir" >>$LOG
pankso@94 680 rm -rf $TARGET_ROOT/$dir 2>>$LOG ;;
pankso@94 681 esac
pankso@94 682 done
pankso@94 683 if [ -d $TARGET_ROOT/mklost+found ]; then
pankso@94 684 mklost+found 2>>$LOG
pankso@94 685 fi
pankso@94 686 sleep 2
pankso@198 687
pankso@94 688 echo "XXX" && echo 25
paul@319 689 echo -e "\nInstalling the kernel ($KERNEL)..."
pankso@94 690 echo "XXX"
pankso@94 691 install_kernel
pankso@198 692
pankso@94 693 echo "XXX" && echo 30
paul@319 694 echo -e "\nCopying the bootloader syslinux/isolinux..."
pankso@94 695 echo "XXX"
pankso@94 696 copy_bootloaders
pankso@198 697
pankso@94 698 echo "XXX" && echo 35
paul@319 699 echo -e "\nCopying the compressed system (rootfs.gz)..."
pankso@94 700 echo "XXX"
pankso@94 701 cp /media/cdrom/boot/rootfs.gz $TARGET_ROOT
pankso@94 702 sleep 2
pankso@198 703
pankso@94 704 echo "XXX" && echo 40
paul@319 705 echo -e "\nExtracting the root system..."
pankso@94 706 echo "XXX"
pankso@94 707 extract_rootfs
pankso@198 708
pankso@94 709 # Restore backups.
pankso@94 710 echo "XXX" && echo 42
paul@319 711 echo -e "\nRestoring configuration files..."
pankso@94 712 echo "XXX"
pankso@94 713 rm -rf $TARGET_ROOT/home
pankso@94 714 mv $TARGET_ROOT/home.bak $TARGET_ROOT/home
pankso@94 715 rm -rf $TARGET_ROOT/etc
pankso@94 716 mv $TARGET_ROOT/etc.bak $TARGET_ROOT/etc
pankso@94 717 if [ -d $TARGET_ROOT/www.bak ]; then
pankso@94 718 rm -rf $TARGET_ROOT/var/www
pankso@94 719 mv $TARGET_ROOT/www.bak $TARGET_ROOT/var/www
pankso@94 720 fi
pankso@94 721 echo "backups restored: `date`" >> $LOG
pankso@198 722
pankso@94 723 # /var/lib/slitaz-installer
pankso@94 724 mkdir $TARGET_ROOT/var/lib/slitaz-installer
pankso@94 725 mv $TARGET_ROOT/etc.tar.gz $TARGET_ROOT/var/lib/slitaz-installer
pankso@94 726 mv $TARGET_ROOT/home/packages-selection.list $TARGET_ROOT/var/lib/slitaz-installer
pankso@94 727 cd $TARGET_ROOT/var/lib/slitaz-installer
pankso@198 728
pankso@94 729 # LiveCD packages list.
pankso@94 730 echo "XXX" && echo 46
paul@319 731 echo -e "\nCreating package lists..."
pankso@94 732 echo "XXX"
pankso@94 733 ls -1 $TARGET_ROOT/var/lib/tazpkg/installed > packages-cdrom.list || exit 1
pankso@94 734 echo "packages-cdrom.list: done" >> $LOG
pankso@94 735 # Diff
pankso@94 736 diff packages-cdrom.list packages-selection.list | \
pankso@94 737 grep ^+[a-z] | sed s/^+// > packages-selection.diff
pankso@94 738 echo "packages-selection.diff: done" >> $LOG
pankso@94 739 # Get mirror list.
pankso@94 740 tazpkg recharge >>$LOG 2>>$LOG
pankso@94 741 if [ ! -f /var/lib/tazpkg/packages.list ]; then
paul@319 742 ERROR_MSG="The list of available packages on the mirror could not be \
paul@319 743 downloaded. No missing packages will be reinstalled now, but \
paul@319 744 you can do so later by looking at the following list: \n\n
pankso@94 745
pankso@94 746 /var/lib/slitaz-installer/packages-selection.diff"
pankso@94 747 error_message
pankso@94 748 fi
pankso@94 749 sleep 2
pankso@198 750
paul@319 751 # Check if the pkg is on the mirror.
pankso@94 752 echo "XXX" && echo 48
paul@319 753 echo -e "\nChecking the availability of packages..."
pankso@94 754 echo "XXX"
pankso@94 755 touch packages-to-install.list
pankso@94 756 packages=0
pankso@94 757 diff=`cat packages-selection.diff | sort`
pankso@94 758 for pkg in $diff
pankso@94 759 do
pankso@94 760 if grep -q ^$pkg-[0-9] /var/lib/tazpkg/packages.list; then
pankso@94 761 packages=$(($packages+1))
pankso@94 762 echo "$pkg" >> packages-to-install.list
pankso@94 763 fi
pankso@94 764 done
pankso@198 765
MikeDSmith25@252 766 # Calculate the percent for one package and install.
pankso@94 767 echo "XXX" && echo 50
paul@319 768 echo -e "\nInstalling any packages..."
pankso@94 769 echo "XXX"
pankso@94 770 sleep 2
pankso@198 771 if [ "$packages" == "0" ]; then
pankso@94 772 echo "packages to install: 0" >> $LOG
pankso@94 773 else
pankso@94 774 onepkg=$((48/$packages))
pankso@94 775 pct=50
pankso@94 776 # Get-install all missing pkgs.
pankso@94 777 for pkg in `cat packages-to-install.list`
pankso@94 778 do
pankso@94 779 pct=$(($pct+$onepkg))
pankso@94 780 echo "XXX" && echo $pct
paul@319 781 echo -e "\nInstallation of: $pkg..."
pankso@94 782 echo "XXX"
pankso@94 783 # Log please.
pankso@94 784 echo "get-install: $pkg" >>$LOG
MikeDSmith25@252 785 # Get install package and answer yes in case of dependencies.
pankso@94 786 pkgname=`grep ^$pkg /var/lib/tazpkg/packages.list`
pankso@94 787 tazpkg get $pkg >/dev/null 2>/dev/null
pankso@94 788 yes "" | tazpkg install $pkgname.tazpkg --root=$TARGET_ROOT >/dev/null 2>/dev/null
pankso@94 789 rm -f $pkgname.tazpkg
pankso@94 790 done
pankso@94 791 fi
pankso@94 792 echo "XXX" && echo 100
paul@319 793 echo -e "\nInstallation of packages complete..."
pankso@94 794 echo "XXX"
pankso@94 795 sleep 2
pankso@94 796 ) |
paul@319 797 $DIALOG --title " Processing system upgrade " \
pankso@70 798 --backtitle "$BACKLIST" \
pankso@94 799 --gauge "Target in preparation..." 18 70 0
pankso@94 800 }
pankso@94 801
paul@319 802 # End of system upgrade.
pankso@94 803 end_of_upgrade()
pankso@94 804 {
pankso@94 805 TARGET_DEV=$UPGRADE_DEV
pascal@205 806 set_messages
pankso@94 807 pkgscd=`cat $TARGET_ROOT/var/lib/slitaz-installer/packages-cdrom.list | wc -l`
pankso@94 808 pkginst=`cat $TARGET_ROOT/var/lib/slitaz-installer/packages-to-install.list | wc -l`
pankso@94 809 echo "end_of_upgrade: `date`" >>$LOG
paul@319 810 $DIALOG --title " Upgrade completed " \
pankso@94 811 --backtitle "$BACKLIST" \
pankso@94 812 --yes-label "Exit" \
pankso@94 813 --no-label "Reboot" \
pankso@70 814 --clear --colors --yesno "\n
paul@319 815 Upgrade finished. You can know restart (reboot) \
paul@319 816 from your SliTaz GNU/Linux system.\n\n
paul@319 817 Packages on the cdrom : $pkgscd\n
paul@319 818 Packages installed from the mirror : $pkginst\n" 18 70
pankso@70 819 retval=$?
pankso@94 820 case $retval in
pankso@94 821 0)
pankso@94 822 TITLE="Exiting"
pankso@94 823 umount_devices ;;
pankso@94 824 1)
pankso@94 825 TITLE="Rebooting"
pankso@94 826 umount_devices
pankso@94 827 reboot || reboot -f ;;
pankso@94 828 255)
pankso@94 829 echo -e "ESC pressed.\n" && exit 0 ;;
pankso@94 830 esac
pankso@70 831 }
pankso@70 832
pankso@70 833 ######################
pankso@70 834 # Installer sequence #
pankso@70 835 ######################
pankso@70 836
pascal@205 837 set_messages
pankso@94 838 check_root
pankso@94 839 start_installer
pankso@94 840
pankso@70 841 case $ACTION in
pankso@70 842 upgrade)
paul@319 843 BACKLIST="$BACKLIST (Upgrade)"
pankso@94 844 mount_cdrom
pankso@94 845 ask_for_upgrade_dev
pankso@94 846 upgrade_process
pankso@94 847 end_of_upgrade
pankso@70 848 ;;
pankso@70 849 install|*)
pankso@70 850 mount_cdrom
pankso@70 851 ask_for_target_dev
pankso@70 852 ask_for_mkfs_target_dev
pankso@70 853 prepare_target_dev
pankso@70 854 ask_for_hostname
pankso@70 855 install_files
pankso@70 856 grub_install
pankso@70 857 end_of_install
pankso@70 858 ;;
pankso@70 859 esac
pankso@70 860
pankso@70 861 exit 0