slitaz-tools view installer/slitaz-installer @ rev 500

Serverbox: typos
author Paul Issott <paul@slitaz.org>
date Tue Oct 19 19:26:04 2010 +0000 (2010-10-19)
parents bcf8cdeaf6fc
children 7f85db867875
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 [ -n "$DRIVE_NAME" ] || DRIVE_NAME=cdrom
19 CDROM=/dev/$DRIVE_NAME
20 KERNEL=vmlinuz-`uname -r`
21 TARGET_ROOT=/mnt/target
22 LOG=/var/log/slitaz-installer.log
23 BACKLIST="SliTaz GNU/Linux installer"
24 ACTION=$1
26 #######################
27 # Installer functions #
28 #######################
30 # Messages language setting.
31 set_messages()
32 {
33 case $LANG in
34 de*)
35 . /usr/share/slitaz/messages/de/installer.msg ;;
36 fr*)
37 . /usr/share/slitaz/messages/fr/installer.msg ;;
38 hu*)
39 . /usr/share/slitaz/messages/hu/installer.msg ;;
40 pt*)
41 . /usr/share/slitaz/messages/pt/installer.msg ;;
42 *)
43 . /usr/share/slitaz/messages/en/installer.msg ;;
44 esac
45 }
47 # Display error message.
48 error_message()
49 {
50 $DIALOG --title " Error " \
51 --colors --backtitle "$BACKLIST" \
52 --clear --msgbox "\n$ERROR_MSG" 18 70
53 }
55 # Exit install if user is not root.
56 check_root()
57 {
58 if test $(id -u) != 0 ; then
59 ERROR_MSG="\
60 [\Z6en\Zn] You must be root administrator to start SliTaz installer, please \
61 use 'su' to get a root SHell and restart installation.\n\n
62 [\Z6fr\Zn] Vous devez ĂȘtre root pour installer SLiTaz GNU/Linux. Vous pouvez \
63 utiliser 'su' suivi du mot de passe administrateur pour devenir root \
64 et relancer l'installation."
65 error_message
66 exit 0
67 fi
68 }
70 # This function is used after each screen to contine or abort install.
71 check_retval()
72 {
73 case $retval in
74 0)
75 continue ;;
76 1)
77 echo -e "\nVoluntary exit.\n" && exit 0 ;;
78 3)
79 continue ;;
80 255)
81 echo -e "ESC pressed.\n" && exit 0 ;;
82 esac
83 }
85 # Start install with basic information.
86 start_installer()
87 {
88 $DIALOG --title " Install or Upgrade " \
89 --backtitle "$BACKLIST" \
90 --extra-button --extra-label "Upgrade" \
91 --ok-label "Install" \
92 --clear --colors --yesno "$START_INSTALL_MSG" 18 70
93 retval=$?
94 case $retval in
95 0)
96 ACTION=install ;;
97 1)
98 echo -e "\nVoluntary exit.\n" && exit 0 ;;
99 3)
100 ACTION=upgrade ;;
101 255)
102 echo -e "ESC pressed.\n" && exit 0 ;;
103 esac
104 echo "start_installer: `date`" > $LOG
105 }
107 # Mount cdrom and verify if it's really SliTaz CD.
108 mount_cdrom()
109 {
110 ERROR_MSG=""
111 (
112 echo "XXX" && echo 30
113 echo -e "\nCreating mount point (/media/cdrom)..."
114 echo "XXX"
115 mkdir -p /media/cdrom
116 sleep 1
117 # First try to mount a cdrom
118 if mount -t iso9660 $CDROM /media/cdrom 2>>$LOG; then
119 echo "XXX" && echo 60
120 echo -e "\nUsing files from cdrom ($CDROM)..."
121 echo "XXX"
122 sleep 2
123 # We may be in LiveUSB mode
124 elif [ -d /home/boot ]; then
125 echo "XXX" && echo 60
126 echo -e "\nUsing files from USB device..."
127 echo "XXX"
128 rm /media/cdrom/boot 2>/dev/null
129 ln -s /home/boot /media/cdrom/boot
130 sleep 2
131 # We may be in Tiny Web boot mode
132 elif [ -d /cdrom/boot ]; then
133 echo "XXX" && echo 60
134 echo -e "\nUsing files from HTTP device..."
135 echo "XXX"
136 rm /media/cdrom/boot 2>/dev/null
137 ln -s /cdrom/boot /media/cdrom/boot
138 sleep 2
139 fi
141 echo "XXX" && echo 90
142 echo -e "\nChecking installation media..."
143 echo "XXX"
144 sleep 2
145 ) |
146 $DIALOG --title " Mounting cdrom " \
147 --backtitle "$BACKLIST" \
148 --gauge "Preparing the installation media..." 18 70 0
149 # Exit with error msg if no rootfs.gz found.
150 if [ ! -f /media/cdrom/boot/rootfs.gz -a \
151 ! -f /media/cdrom/boot/rootfs1.gz ]; then
152 ERROR_MSG="$MOUNT_CDROM_ERROR_MSG"
153 error_message
154 echo "missing: /media/cdrom/boot/rootfs.gz" >>$LOG
155 exit 1
156 fi
157 }
159 # Display a list of available partitions.
160 fdisk_list()
161 {
162 LIST_PARTITIONS=`fdisk -l | grep ^/dev | sed s/'e Win95'/'e'/g`
163 $DIALOG --title " Partition tables " \
164 --backtitle "$BACKLIST" \
165 --clear --msgbox "\n
166 Available partitions :\n\n
167 $LIST_PARTITIONS" 18 70
168 }
170 # We need a partition to install to (inputbox).
171 ask_for_target_dev()
172 {
173 exec 3>&1
174 TARGET_DEV=`$DIALOG --title " Root Partition " \
175 --backtitle "$BACKLIST" --clear \
176 --extra-label "List" --extra-button \
177 --colors --inputbox "$ASK_FOR_TARGET_DEV_MSG" 18 70 2>&1 1>&3`
178 retval=$?
179 exec 3>&-
180 check_retval
181 # Display list and come back.
182 if [ "$retval" = "3" ]; then
183 fdisk_list
184 ask_for_target_dev
185 fi
186 # Empty value.
187 if [ -z $TARGET_DEV ]; then
188 ask_for_target_dev
189 fi
190 set_messages
191 # Check if specified device exists in /proc/partitions.
192 DEV_NAME=${TARGET_DEV#/dev/}
193 if cat /proc/partitions | grep -q $DEV_NAME; then
194 if [ "$DEV_NAME" = "$TARGET_DEV" ]; then
195 TARGET_DEV="/dev/$DEV_NAME"
196 fi
197 echo "ask_for_target_dev: $TARGET_DEV" >>$LOG
198 else
199 ERROR_MSG="Partition \Z2$TARGET_DEV\Zn doesn't exist."
200 error_message
201 ask_for_target_dev
202 fi
203 }
205 # Mkfs if needed/wanted on /.
206 ask_for_mkfs_target_dev()
207 {
208 $DIALOG --title " Format " \
209 --backtitle "$BACKLIST" \
210 --clear --colors --yesno "$ASK_FOR_MKFS_TARGET_DEV_MSG" 18 70
211 retval=$?
212 case $retval in
213 0)
214 MKFS_TARGET_DEV="ext3"
215 echo "mkfs_target_dev: ext3" >>$LOG ;;
216 1)
217 CLEAN="clean"
218 echo "mkfs_target_dev: clean" >>$LOG ;;
219 255)
220 echo -e "ESC pressed.\n" && exit 0 ;;
221 esac
223 }
225 # We can have a separate partition for /home.
226 ask_for_home()
227 {
228 exec 3>&1
229 HOME_DEV=`$DIALOG --title " Home Partition " \
230 --backtitle "$BACKLIST" --clear \
231 --extra-label "List" --extra-button \
232 --colors --inputbox "
233 On most GNU/Linux systems users personal files are stored in the directory \
234 /home. Home can be on a separate partition or another hard disk.
236 \Z2Home partition to use (Optional):\Zn" 18 70 2>&1 1>&3`
237 retval=$?
238 exec 3>&-
239 check_retval
240 # Display list and come back.
241 if [ "$retval" = "3" ]; then
242 fdisk_list
243 ask_for_home
244 fi
245 if [ -n "$HOME_DEV" ]; then
246 # Check if specified device exists in /proc/partitions.
247 DEV_NAME=${HOME_DEV#/dev/}
248 if cat /proc/partitions | grep -q $DEV_NAME; then
249 if [ "$DEV_NAME" = "$HOME_DEV" ]; then
250 HOME_DEV="/dev/$DEV_NAME"
251 fi
252 echo "ask_for_home: $HOME_DEV" >>$LOG
253 else
254 ERROR_MSG="Partition \Z2$HOME_DEV\Zn doesn't exist."
255 error_message
256 ask_for_home
257 fi
258 fi
259 }
261 # Mkfs if needed/wanted on /.
262 ask_for_mkfs_home()
263 {
264 $DIALOG --title " Format " \
265 --backtitle "$BACKLIST" \
266 --clear --colors --yesno "
267 Here you can format the /home partition: $HOME_DEV
269 SliTaz uses ext3 by default but another filesystem can be used if wanted, \
270 for this please adjust /etc/fstab after installation.
272 \Z2Do you want to format (Option): $HOME_DEV\Zn" 18 70
273 retval=$?
274 case $retval in
275 0)
276 MKFS_HOME="ext3"
277 echo "mkfs_home: ext3" >>$LOG ;;
278 1)
279 MKFS_HOME=""
280 echo "mkfs_home: no" >>$LOG ;;
281 255)
282 echo -e "ESC pressed.\n" && exit 0 ;;
283 esac
285 }
287 # Ask for hostname before installing files.
288 ask_for_hostname()
289 {
290 exec 3>&1
291 HOSTNAME=`$DIALOG --title " Hostname " \
292 --backtitle "$BACKLIST" --clear \
293 --colors --inputbox "$ASK_FOR_HOSTNAME_MSG" 18 70 "slitaz" 2>&1 1>&3`
294 retval=$?
295 exec 3>&-
296 check_retval
297 # Empty value.
298 if [ -z $HOSTNAME ]; then
299 HOSTNAME="slitaz"
300 fi
301 }
303 # Ask for root password and default user settings.
304 ask_for_users_settings()
305 {
306 # Root passwd
307 exec 3>&1
308 ROOT_PASSWD=`$DIALOG --title " Root password " \
309 --backtitle "$BACKLIST" --clear \
310 --colors --nocancel --inputbox "
311 The root administrator privilege lets you manage and configure the full \
312 system. A root user can damage your system so you should always setup a \
313 strong password with special characters and/or numbers.
315 \Z2Please specify the Root password for your new system:\Zn" 18 70 "root" 2>&1 1>&3`
316 retval=$?
317 exec 3>&-
318 check_retval
319 # Prevent empty value.
320 if [ -z $ROOT_PASSWD ]; then
321 ROOT_PASSWD="root"
322 fi
323 # Default user
324 exec 3>&1
325 USER=`$DIALOG --title " User name " \
326 --backtitle "$BACKLIST" --clear \
327 --colors --nocancel --inputbox "
328 The default user for the system will have their personal files stored \
329 in /home/*user* (and will be automatically added to the audio group).
331 \Z2Default user name login:\Zn" 18 70 "tux" 2>&1 1>&3`
332 retval=$?
333 exec 3>&-
334 check_retval
335 # Prevent empty value.
336 if [ -z $USER ]; then
337 USER="tux"
338 fi
339 # User passwd
340 exec 3>&1
341 USER_PASSWD=`$DIALOG --title " User password " \
342 --backtitle "$BACKLIST" --clear \
343 --colors --nocancel --inputbox "
344 The password for default user $USER. It may be a security risk if too \
345 weak and should always be strong if you use a SSH connection through the web.
347 \Z2Please specify $USER password:\Zn" 18 70 "tux" 2>&1 1>&3`
348 retval=$?
349 exec 3>&-
350 check_retval
351 # Prevent empty value.
352 if [ -z $USER_PASSWD ]; then
353 USER_PASSWD="tux"
354 fi
355 }
357 # Tiny summary and last chance to cancel or restart for user.
358 summary()
359 {
360 $DIALOG --title " Summary " \
361 --backtitle "$BACKLIST" \
362 --clear --colors --yesno "
363 Installation settings summary and last chance to cancel or restart all \
364 installation steps.
366 Root partition: $TARGET_DEV
367 Home partition: $HOME_DEV
368 Hostname: $HOSTNAME
369 Default user: $USER
371 \Z2Go and install SliTaz or cancel?\Zn" 18 70
372 retval=$?
373 check_retval
374 }
376 # Mount and mkfs with progress.
377 prepare_partitions()
378 {
379 (
380 echo "XXX" && echo 30
381 echo -e "\nPreparing target partition..."
382 echo "XXX"
383 # Mount point can be already used.
384 if mount | grep -q $TARGET_ROOT; then
385 umount $TARGET_ROOT 2>$LOG
386 fi
387 sleep 2
389 if [ "$MKFS_TARGET_DEV" == "ext3" ]; then
390 echo "XXX" && echo 50
391 echo -e "\nExecuting mkfs.ext3 on $TARGET_DEV"
392 echo "XXX"
393 mkfs.ext3 $TARGET_DEV >>$LOG 2>>$LOG
394 else
395 echo "XXX" && echo 50
396 echo -e "\nThe partition ($TARGET_DEV) will be cleaned..."
397 echo "XXX"
398 sleep 2
399 fi
401 if [ "$MKFS_HOME" == "ext3" ]; then
402 echo "XXX" && echo 70
403 echo -e "\nExecuting mkfs.ext3 on $HOME_DEV"
404 echo "XXX"
405 mkfs.ext3 -L "Home" $HOME_DEV >>$LOG 2>>$LOG
406 else
407 echo "XXX" && echo 70
408 echo -e "\nThe partition ($HOME_DEV) will be kept..."
409 echo "XXX"
410 sleep 2
411 fi
413 echo "XXX" && echo 90
414 echo -e "\nCreating mount point: $TARGET_ROOT"
415 echo "XXX"
416 mkdir -p $TARGET_ROOT
417 sleep 2
419 ) |
420 $DIALOG --title " Prepare the target " \
421 --backtitle "$BACKLIST" \
422 --gauge "Target in preparation..." 18 70 0
423 # Mount target.
424 mount $TARGET_DEV $TARGET_ROOT >>$LOG 2>>$LOG
425 }
427 # Get a clean target device (15%).
428 clean_target()
429 {
430 if [ "$CLEAN" == "clean" ]; then
431 echo "XXX" && echo 15
432 echo -e "\nCleaning the root partition ($TARGET_DEV)..."
433 echo "XXX"
434 # Keep /home in case of reinstall.
435 cd $TARGET_ROOT
436 for dir in *
437 do
438 case "$dir" in
439 home)
440 mv $TARGET_ROOT/home $TARGET_ROOT/home.bak
441 echo "keeping /home found on: $TARGET_DEV" >>$LOG ;;
442 lost+found)
443 continue ;;
444 *)
445 echo "removing target: $dir" >>$LOG
446 rm -rf $dir 2>>$LOG ;;
447 esac
448 done
449 if [ -d $TARGET_ROOT/mklost+found ]; then
450 mklost+found 2>>$LOG
451 fi
452 fi
453 sleep 2
454 }
456 # Kernel is renamed to standard vmlinuz-$VERSION.
457 install_kernel()
458 {
459 mkdir -p $TARGET_ROOT/boot
460 cp /media/cdrom/boot/bzImage $TARGET_ROOT/boot/$KERNEL
461 echo "install_kernel: $KERNEL" >> $LOG
462 sleep 2
463 }
465 # Copy isolinux r/w files (not syslinux, some files are read only).
466 copy_bootloaders()
467 {
468 if [ -d "/media/cdrom/boot/isolinux" ]; then
469 mkdir -p $TARGET_ROOT/boot/isolinux
470 cp -a /media/cdrom/boot/isolinux/*.cfg $TARGET_ROOT/boot/isolinux
471 cp -a /media/cdrom/boot/isolinux/*.kbd $TARGET_ROOT/boot/isolinux
472 cp -a /media/cdrom/boot/isolinux/*.txt $TARGET_ROOT/boot/isolinux
473 cp -a /media/cdrom/boot/isolinux/*.bin $TARGET_ROOT/boot/isolinux
474 cp -a /media/cdrom/boot/isolinux/*.msg $TARGET_ROOT/boot/isolinux
475 cp -a /media/cdrom/boot/isolinux/*.lss $TARGET_ROOT/boot/isolinux
476 cp -a /media/cdrom/boot/isolinux/*.c32 $TARGET_ROOT/boot/isolinux
477 fi
478 }
480 need_package()
481 {
482 [ -d /var/lib/tazpkg/installed/$1 ] || tazpkg get-install $1
483 }
485 # extract packed rootfs: squashfs or cromfs
486 extract_loramfs()
487 {
488 local i
489 for i in $(cpio -idvum 2> /dev/null); do
490 case "$i" in
491 rootfs*)
492 need_package squashfs
493 if ! unsquashfs $i ; then
494 need_package cromfs
495 unmkcromfs $i squashfs-root
496 fi
497 mv -f squashfs-root/* .
498 rmdir squashfs-root
499 rm -f $i
500 esac
501 done
502 }
504 # This is a loram rootfs.gz, skip loram bootstrap and extract
505 extract_first_loramfs()
506 {
507 ofs=$(awk '/07070100/ { o+=index($0,"07070100"); print o/4 ; exit } { o+=1+length() }' < $1)
508 dd if=$1 skip=$(($ofs / 1024)) bs=4k count=1 2> /dev/null | \
509 ( dd skip=$(($ofs % 1024)) bs=4 2> /dev/null ; \
510 dd if=$1 skip=$((1 + ($ofs / 1024) )) bs=4k ) | extract_loramfs
511 }
513 # Extract lzma'ed or gziped rootfs.
514 extract_rootfs()
515 {
516 local isloramfs
517 isloramfs=
518 cd $TARGET_ROOT
519 if [ -d $1/../fs/etc ]; then
520 # This is a tazlitobox loram (cdrom)
521 cp -a $1/../fs/. .
522 else
523 for i in $(ls $1/rootfs* | sort -r); do
524 if [ ! -d etc ]; then
525 if [ $( (zcat $i 2>/dev/null || lzma d $i -so) | wc -c) \
526 -lt $(stat -c %s $i) ]; then
527 # This is a tazlitobox loram (ram)
528 isloramfs=$i
529 extract_first_loramfs $i
530 continue
531 fi
532 fi
533 if [ -n "$isloramfs" ]; then
534 extract_loramfs < $i
535 continue
536 fi
537 ( zcat $i 2>/dev/null || lzma d $i -so || \
538 cat $i ) 2>>$LOG | cpio -idu
539 done 2>>$LOG > /dev/null
540 fi
541 # unpack /usr (double check...)
542 if ls etc/tazlito | grep -q ".extract"; then
543 for i in etc/tazlito/*.extract; do
544 [ -f "$i" ] && . $i /media/cdrom
545 done
546 fi
547 }
549 # Pre configure freshly installed system (60 - 80%).
550 pre_config_system()
551 {
552 cd $TARGET_ROOT
553 # Restore backup of existing /home if exists.
554 # (created by prepare_target_dev)
555 if [ -d home.bak ]; then
556 echo "XXX" && echo 65
557 echo -e "\nRestoring directory: /home..."
558 echo "XXX"
559 rm -rf home
560 mv home.bak home
561 sleep 1
562 fi
563 # Add root device to CHECK_FS in rcS.conf to check filesystem
564 # on each boot.
565 echo "XXX" && echo 70
566 echo -e "\nAdding $TARGET_DEV and CHECK_FS to file /etc/rcS.conf..."
567 echo "XXX"
568 sed -i s#'CHECK_FS=\"\"'#"CHECK_FS=\"$TARGET_DEV\""# etc/rcS.conf
569 sleep 2
570 # Set hostname.
571 echo "XXX" && echo 80
572 echo -e "\nConfiguring host name: $HOSTNAME"
573 echo "XXX"
574 echo $HOSTNAME > etc/hostname
575 }
577 # Set root passwd and create user after rootfs extraction.
578 users_settings()
579 {
580 cat > $TARGET_ROOT/users.sh << _EOF_
581 #!/bin/sh
582 echo "root:$ROOT_PASSWD" | chpasswd
583 adduser -D -H $USER
584 addgroup $USER audio
585 echo "$USER:$USER_PASSWD" | chpasswd
586 if [ ! -d /home/$USER ]; then
587 cp -a /etc/skel /home/$USER
588 chown -R $USER.$USER /home/$USER
589 # Path for user desktop files.
590 for i in /home/$USER/.local/share/applications/*.desktop
591 do
592 sed -i s/"user_name"/"$USER"/g \$i
593 done
594 fi
595 # Slim default user.
596 if [ -f /etc/slim.conf ]; then
597 sed -i s/"default_user .*"/"default_user $USER"/ \
598 /etc/slim.conf
599 fi
600 _EOF_
601 chmod +x $TARGET_ROOT/users.sh
602 chroot $TARGET_ROOT ./users.sh
603 rm $TARGET_ROOT/users.sh
604 }
606 # /home can be on a separate partition. If default user exist in /home
607 # we remove default file crated by users_settings().
608 home_config()
609 {
610 echo "home_config: $HOME_DEV" >> $LOG
611 cd $TARGET_ROOT
612 mv home/$USER tmp
613 mount $HOME_DEV home
614 if [ -d $TARGET_ROOT/home/$USER ]; then
615 rm -rf tmp/$USER
616 else
617 mv tmp/$USER home
618 fi
619 echo "$HOME_DEV /home ext3 defaults 0 2" \
620 >> etc/fstab
621 umount home
622 }
624 # Determine GRUB partition number and GRUB disk number.
625 grub_config()
626 {
627 DISK_LETTER=${TARGET_DEV#/dev/[h-s]d}
628 DISK_LETTER=${DISK_LETTER%[0-9]}
629 GRUB_PARTITION=$((${TARGET_DEV#/dev/[h-s]d[a-z]}-1))
630 for disk in a b c d e f g h
631 do
632 nb=$(($nb+1))
633 if [ "$disk" = "$DISK_LETTER" ]; then
634 GRUB_DISK=$(($nb-1))
635 break
636 fi
637 done
638 GRUB_ROOT="(hd${GRUB_DISK},${GRUB_PARTITION})"
639 # Create the target GRUB configuration.
640 mkdir -p $TARGET_ROOT/boot/grub
641 cat > $TARGET_ROOT/boot/grub/menu.lst << _EOF_
642 # /boot/grub/menu.lst: GRUB boot loader configuration.
643 #
645 # By default, boot the first entry.
646 default 0
648 # Boot automatically after 8 secs.
649 timeout 8
651 # Change the colors.
652 color yellow/brown light-green/black
654 # For booting SliTaz from : $TARGET_DEV
655 #
656 title SliTaz GNU/Linux (cooking) (Kernel $KERNEL)
657 root $GRUB_ROOT
658 kernel /boot/$KERNEL root=$TARGET_DEV
660 _EOF_
661 # log
662 echo "grub_config: $TARGET_ROOT/boot/grub/menu.lst" >>$LOG
663 sleep 2
664 }
666 # Files install with gauge, calling for functions or with cmds.
667 install_files()
668 {
669 (
671 echo "XXX" && echo 10
672 echo -e "\nCleaning the root partition if necessary..."
673 echo "XXX"
674 clean_target
676 echo "XXX" && echo 20
677 echo -e "\nInstalling the kernel ($KERNEL)..."
678 echo "XXX"
679 install_kernel
681 echo "XXX" && echo 30
682 echo -e "\nCopying the bootloader syslinux/isolinux..."
683 echo "XXX"
684 copy_bootloaders
686 echo "XXX" && echo 50
687 echo -e "\nExtracting the root system..."
688 echo "XXX"
689 extract_rootfs /media/cdrom/boot
691 echo "XXX" && echo 60
692 echo -e "\nPreconfiguring the system..."
693 echo "XXX"
694 pre_config_system
696 echo "XXX" && echo 70
697 echo -e "\nConfiguring root and default $USER account..."
698 echo "XXX"
699 users_settings
700 sleep 2
702 if [ "$HOME_DEV" != "" ]; then
703 echo "XXX" && echo 80
704 echo -e "\nConfiguring $HOME_DEV to be used as /home..."
705 echo "XXX"
706 home_config
707 sleep 2
708 fi
710 echo "XXX" && echo 90
711 echo -e "\nCreating the configuration file for GRUB (menu.lst)..."
712 echo "XXX"
713 grub_config
715 echo "XXX" && echo 100
716 echo -e "\nFinishing the files installation..."
717 echo "XXX"
718 echo "install_files: OK" >>$LOG
719 sleep 2
721 ) |
722 $DIALOG --title " Install files " \
723 --backtitle "$BACKLIST" \
724 --gauge "Starting to install files..." 18 70 0
725 }
727 # GRUB info with disk name used for grub-install.
728 grub_install()
729 {
730 TARGET_DISK=`echo $TARGET_DEV | sed s/"[0-9]"/''/`
731 set_messages
732 $DIALOG --title " GRUB install " \
733 --backtitle "$BACKLIST" \
734 --clear --colors --yesno "$GRUB_INSTALL_MSG" 18 70
735 retval=$?
736 case $retval in
737 0)
738 (
739 echo "XXX" && echo 50
740 echo -e "\nRunning grub-install on : $TARGET_DISK"
741 echo "XXX"
742 grub-install --no-floppy \
743 --root-directory=$TARGET_ROOT $TARGET_DISK 2>>$LOG
744 echo "XXX" && echo 100
745 echo -e "\nFinished installation..."
746 echo "XXX"
747 sleep 2
748 ) |
749 $DIALOG --title " GRUB install " \
750 --backtitle "$BACKLIST" \
751 --gauge "Installing GRUB..." 18 70 0 ;;
752 1)
753 echo "grub_install: NO" >>$LOG ;;
754 255)
755 echo -e "ESC pressed.\n" && exit 0 ;;
756 esac
757 }
759 # Copy log file, umount target and eject cdrom.
760 umount_devices()
761 {
762 (
763 echo "XXX" && echo 25
764 echo -e "\nCopying the log files ($LOG)..."
765 echo "XXX"
766 cp -a $LOG $TARGET_ROOT/var/log
767 sleep 2
768 echo "XXX" && echo 50
769 echo -e "\nUnmounting the target ($TARGET_DEV)..."
770 echo "XXX"
771 if mount | grep -q $TARGET_ROOT; then
772 umount $TARGET_ROOT 2>/dev/null
773 fi
774 echo "XXX" && echo 75
775 echo -e "\nUnmounting and ejecting the cdrom..."
776 echo "XXX"
777 if mount | grep -q /media/cdrom; then
778 umount /media/cdrom
779 grep -q slitaz-loram-cdrom /etc/init.d/rcS || eject
780 fi
781 sleep 2
782 echo "XXX" && echo 100
783 echo -e "\n$TITLE..."
784 echo "XXX"
785 sleep 2
786 ) |
787 $DIALOG --title " $TITLE " \
788 --backtitle "$BACKLIST" \
789 --gauge "$TITLE starting..." 18 70 0
790 }
792 # End of installation.
793 end_of_install()
794 {
795 echo "end_of_install: `date`" >>$LOG
796 $DIALOG --title " Installation complete " \
797 --backtitle "$BACKLIST" \
798 --yes-label "Exit" \
799 --no-label "Reboot" \
800 --clear --colors --yesno "$END_OF_INSTALL_MSG" 18 70
801 retval=$?
802 case $retval in
803 0)
804 TITLE="Exiting"
805 umount_devices ;;
806 1)
807 TITLE="Rebooting"
808 umount_devices
809 reboot || reboot -f ;;
810 255)
811 echo -e "ESC pressed.\n" && exit 0 ;;
812 esac
813 }
815 #####################
816 # Upgrade functions #
817 #####################
819 # We need a partition to upgrade SliTaz.
820 ask_for_upgrade_dev()
821 {
822 exec 3>&1
823 UPGRADE_DEV=`$DIALOG --title " Target to upgrade " \
824 --backtitle "$BACKLIST" --clear \
825 --extra-label "List" --extra-button \
826 --colors --inputbox "\n
827 The installer will upgrade the target by saving all configuration files and \
828 the list of installed packages. Then, it will clean the partition and install the \
829 version of SliTaz contained on the cdrom, restore the configuration files and \
830 reinstall any packages which are not present on the cdrom. You will need an active \
831 internet connection before upgrading.\n\n
832 \Z2Partition containing the system upgrade:\Zn" 18 70 2>&1 1>&3`
833 retval=$?
834 exec 3>&-
835 check_retval
836 # Display list and come back.
837 if [ "$retval" = "3" ]; then
838 fdisk_list
839 ask_for_upgrade_dev
840 fi
841 # Empty value.
842 if [ -z $UPGRADE_DEV ]; then
843 ask_for_upgrade_dev
844 fi
845 # Check if specified device exists in /proc/partitions.
846 DEV_NAME=${UPGRADE_DEV#/dev/}
847 if cat /proc/partitions | grep -q $DEV_NAME; then
848 echo "ask_for_target_dev: $TARGET_DEV" >>$LOG
849 else
850 ERROR_MSG="The partition \Z2$UPGRADE_DEV\Zn doesn't seem to exist."
851 error_message
852 ask_for_upgrade_dev
853 fi
854 echo "partition to upgrade: $UPGRADE_DEV" >>$LOG
855 }
857 # Prepare the partition to upgrade, backup, install, restore configs
858 # and reinstall pkgs.
859 upgrade_process()
860 {
861 (
862 echo "XXX" && echo 5
863 echo -e "\nPreparing the target partition..."
864 echo "XXX"
865 # Mount point can be already used.
866 if mount | grep -q $TARGET_ROOT; then
867 umount $TARGET_ROOT 2>$LOG
868 fi
869 mkdir -p $TARGET_ROOT && sleep 2
870 # Mount target.
871 mount $UPGRADE_DEV $TARGET_ROOT >>$LOG 2>>$LOG
872 cd $TARGET_ROOT
873 TARGET_DEV=$UPGRADE_DEV
874 set_messages
876 echo "XXX" && echo 10
877 echo -e "\nSearch for /etc/slitaz-release"
878 echo "XXX"
879 if [ -f etc/slitaz-release ]; then
880 release=`cat etc/slitaz-release`
881 echo "XXX" && echo 15
882 echo -e "\nSliTaz release: $release"
883 echo "XXX"
884 else
885 ERROR_MSG="The partition \Z2$UPGRADE_DEV\Zn doesn't appear to contain \
886 a SliTaz system, the file: /etc/slitaz-release doesn't exist."
887 error_message
888 exit 0
889 fi && sleep 2
891 echo "XXX" && echo 20
892 echo -e "\nBackup /etc, /home and the packages list..."
893 echo "XXX"
894 # Backup target packages list.
895 ls -1 var/lib/tazpkg/installed > home/packages-selection.list
896 for dir in *
897 do
898 case "$dir" in
899 boot)
900 # Upgrade doesn't prompt for grub install, so backup and
901 # create a new grub menu.lst.
902 rm -rf $TARGET_ROOT/boot/vmlinuz-*
903 mv $TARGET_ROOT/boot/grub/menu.lst \
904 $TARGET_ROOT/boot/grub/menu.lst.bak 2>/dev/null
905 grub_config ;;
906 home)
907 mv $TARGET_ROOT/home $TARGET_ROOT/home.bak
908 echo "keeping /home found on: $UPGRADE_DEV" >>$LOG ;;
909 etc)
910 tar czf $TARGET_ROOT/etc.tar.gz etc
911 mv $TARGET_ROOT/etc $TARGET_ROOT/etc.bak
912 echo "keeping /etc found on: $UPGRADE_DEV" >>$LOG ;;
913 var)
914 if [ -d $TARGET_ROOT/var/www ]; then
915 mv $TARGET_ROOT/var/www $TARGET_ROOT/www.bak
916 fi
917 rm -rf $TARGET_ROOT/var ;;
918 lost+found)
919 continue ;;
920 *)
921 echo "removing target: $dir" >>$LOG
922 rm -rf $TARGET_ROOT/$dir 2>>$LOG ;;
923 esac
924 done
925 if [ -d $TARGET_ROOT/mklost+found ]; then
926 mklost+found 2>>$LOG
927 fi
928 sleep 2
930 echo "XXX" && echo 25
931 echo -e "\nInstalling the kernel ($KERNEL)..."
932 echo "XXX"
933 install_kernel
935 echo "XXX" && echo 30
936 echo -e "\nCopying the bootloader syslinux/isolinux..."
937 echo "XXX"
938 copy_bootloaders
940 echo "XXX" && echo 40
941 echo -e "\nExtracting the root system..."
942 echo "XXX"
943 extract_rootfs /media/cdrom/boot
945 # Restore backups.
946 echo "XXX" && echo 42
947 echo -e "\nRestoring configuration files..."
948 echo "XXX"
949 rm -rf $TARGET_ROOT/home
950 mv $TARGET_ROOT/home.bak $TARGET_ROOT/home
951 rm -rf $TARGET_ROOT/etc
952 mv $TARGET_ROOT/etc.bak $TARGET_ROOT/etc
953 if [ -d $TARGET_ROOT/www.bak ]; then
954 rm -rf $TARGET_ROOT/var/www
955 mv $TARGET_ROOT/www.bak $TARGET_ROOT/var/www
956 fi
957 echo "backups restored: `date`" >> $LOG
959 # /var/lib/slitaz-installer
960 mkdir $TARGET_ROOT/var/lib/slitaz-installer
961 mv $TARGET_ROOT/etc.tar.gz $TARGET_ROOT/var/lib/slitaz-installer
962 mv $TARGET_ROOT/home/packages-selection.list $TARGET_ROOT/var/lib/slitaz-installer
963 cd $TARGET_ROOT/var/lib/slitaz-installer
965 # LiveCD packages list.
966 echo "XXX" && echo 46
967 echo -e "\nCreating package lists..."
968 echo "XXX"
969 ls -1 $TARGET_ROOT/var/lib/tazpkg/installed > packages-cdrom.list || exit 1
970 echo "packages-cdrom.list: done" >> $LOG
971 # Diff
972 diff packages-cdrom.list packages-selection.list | \
973 grep ^+[a-z] | sed s/^+// > packages-selection.diff
974 echo "packages-selection.diff: done" >> $LOG
975 # Get mirror list.
976 tazpkg recharge >>$LOG 2>>$LOG
977 if [ ! -f /var/lib/tazpkg/packages.list ]; then
978 ERROR_MSG="The list of available packages on the mirror could not be \
979 downloaded. No missing packages will be reinstalled now, but \
980 you can do so later by looking at the following list: \n\n
982 /var/lib/slitaz-installer/packages-selection.diff"
983 error_message
984 fi
985 sleep 2
987 # Check if the pkg is on the mirror.
988 echo "XXX" && echo 48
989 echo -e "\nChecking the availability of packages..."
990 echo "XXX"
991 touch packages-to-install.list
992 packages=0
993 diff=`cat packages-selection.diff | sort`
994 for pkg in $diff
995 do
996 if grep -q ^$pkg-[0-9] /var/lib/tazpkg/packages.list; then
997 packages=$(($packages+1))
998 echo "$pkg" >> packages-to-install.list
999 fi
1000 done
1002 # Calculate the percent for one package and install.
1003 echo "XXX" && echo 50
1004 echo -e "\nInstalling any packages..."
1005 echo "XXX"
1006 sleep 2
1007 if [ "$packages" == "0" ]; then
1008 echo "packages to install: 0" >> $LOG
1009 else
1010 onepkg=$((48/$packages))
1011 pct=50
1012 # Get-install all missing pkgs.
1013 for pkg in `cat packages-to-install.list`
1014 do
1015 pct=$(($pct+$onepkg))
1016 echo "XXX" && echo $pct
1017 echo -e "\nInstallation of: $pkg..."
1018 echo "XXX"
1019 # Log please.
1020 echo "get-install: $pkg" >>$LOG
1021 # Get install package and answer yes in case of dependencies.
1022 pkgname=`grep ^$pkg /var/lib/tazpkg/packages.list`
1023 tazpkg get $pkg >/dev/null 2>/dev/null
1024 yes "" | tazpkg install $pkgname.tazpkg --root=$TARGET_ROOT >/dev/null 2>/dev/null
1025 rm -f $pkgname.tazpkg
1026 done
1027 fi
1028 echo "XXX" && echo 100
1029 echo -e "\nInstallation of packages complete..."
1030 echo "XXX"
1031 sleep 2
1032 ) |
1033 $DIALOG --title " Processing system upgrade " \
1034 --backtitle "$BACKLIST" \
1035 --gauge "Target in preparation..." 18 70 0
1038 # End of system upgrade.
1039 end_of_upgrade()
1041 TARGET_DEV=$UPGRADE_DEV
1042 set_messages
1043 pkgscd=`cat $TARGET_ROOT/var/lib/slitaz-installer/packages-cdrom.list | wc -l`
1044 pkginst=`cat $TARGET_ROOT/var/lib/slitaz-installer/packages-to-install.list | wc -l`
1045 echo "end_of_upgrade: `date`" >>$LOG
1046 $DIALOG --title " Upgrade completed " \
1047 --backtitle "$BACKLIST" \
1048 --yes-label "Exit" \
1049 --no-label "Reboot" \
1050 --clear --colors --yesno "\n
1051 Upgrade finished. You can now restart (reboot) \
1052 from your SliTaz GNU/Linux system.\n\n
1053 Packages on the cdrom : $pkgscd\n
1054 Packages installed from the mirror : $pkginst\n" 18 70
1055 retval=$?
1056 case $retval in
1057 0)
1058 TITLE="Exiting"
1059 umount_devices ;;
1060 1)
1061 TITLE="Rebooting"
1062 umount_devices
1063 reboot || reboot -f ;;
1064 255)
1065 echo -e "ESC pressed.\n" && exit 0 ;;
1066 esac
1069 ######################
1070 # Installer sequence #
1071 ######################
1073 set_messages
1074 check_root
1075 start_installer
1077 case $ACTION in
1078 upgrade)
1079 BACKLIST="$BACKLIST (Upgrade)"
1080 mount_cdrom
1081 ask_for_upgrade_dev
1082 upgrade_process
1083 end_of_upgrade ;;
1084 install|*)
1085 mount_cdrom
1086 ask_for_target_dev
1087 ask_for_mkfs_target_dev
1088 ask_for_home
1089 if [ -n "$HOME_DEV" ]; then
1090 ask_for_mkfs_home
1091 fi
1092 ask_for_hostname
1093 ask_for_users_settings
1094 summary
1095 prepare_partitions
1096 install_files
1097 grub_install
1098 end_of_install ;;
1099 esac
1101 exit 0