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

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