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

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