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

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