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

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