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