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

temporary fix : slitaz installer: tazx does not copy .xinitrc and .config files (please check if we need to do this when tazx works correctly)
author Rohit Joshi <jozee@slitaz.org>
date Wed Nov 10 20:33:57 2010 -0500 (2010-11-10)
parents 423776a7bd8b
children 61d571a99d20
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 cp /root/.xinitrc /home/$USER
589 mkdir -p /home/$USER/.config/slitaz
590 cp -a /etc/slitaz/applications.conf /home/$USER/.config/slitaz
591 chown -R $USER.$USER /home/$USER
592 # Path for user desktop files.
593 for i in /home/$USER/.local/share/applications/*.desktop
594 do
595 sed -i s/"user_name"/"$USER"/g \$i
596 done
597 fi
598 # Slim default user.
599 if [ -f /etc/slim.conf ]; then
600 sed -i s/"default_user .*"/"default_user $USER"/ \
601 /etc/slim.conf
602 fi
603 _EOF_
604 chmod +x $TARGET_ROOT/users.sh
605 chroot $TARGET_ROOT ./users.sh
606 rm $TARGET_ROOT/users.sh
607 }
609 # /home can be on a separate partition. If default user exist in /home
610 # we remove default file crated by users_settings().
611 home_config()
612 {
613 echo "home_config: $HOME_DEV" >> $LOG
614 cd $TARGET_ROOT
615 mv home/$USER tmp
616 mount $HOME_DEV home
617 if [ -d $TARGET_ROOT/home/$USER ]; then
618 rm -rf tmp/$USER
619 else
620 mv tmp/$USER home
621 fi
622 echo "$HOME_DEV /home ext3 defaults 0 2" \
623 >> etc/fstab
624 umount home
625 }
627 # Determine GRUB partition number and GRUB disk number.
628 grub_config()
629 {
630 DISK_LETTER=${TARGET_DEV#/dev/[h-s]d}
631 DISK_LETTER=${DISK_LETTER%[0-9]}
632 GRUB_PARTITION=$((${TARGET_DEV#/dev/[h-s]d[a-z]}-1))
633 for disk in a b c d e f g h
634 do
635 nb=$(($nb+1))
636 if [ "$disk" = "$DISK_LETTER" ]; then
637 GRUB_DISK=$(($nb-1))
638 break
639 fi
640 done
641 GRUB_ROOT="(hd${GRUB_DISK},${GRUB_PARTITION})"
642 # Create the target GRUB configuration.
643 mkdir -p $TARGET_ROOT/boot/grub
644 cat > $TARGET_ROOT/boot/grub/menu.lst << _EOF_
645 # /boot/grub/menu.lst: GRUB boot loader configuration.
646 #
648 # By default, boot the first entry.
649 default 0
651 # Boot automatically after 8 secs.
652 timeout 8
654 # Change the colors.
655 color yellow/brown light-green/black
657 # For booting SliTaz from : $TARGET_DEV
658 #
659 title SliTaz GNU/Linux (cooking) (Kernel $KERNEL)
660 root $GRUB_ROOT
661 kernel /boot/$KERNEL root=$TARGET_DEV
663 _EOF_
664 # log
665 echo "grub_config: $TARGET_ROOT/boot/grub/menu.lst" >>$LOG
666 sleep 2
667 }
669 # Files install with gauge, calling for functions or with cmds.
670 install_files()
671 {
672 (
674 echo "XXX" && echo 10
675 echo -e "\nCleaning the root partition if necessary..."
676 echo "XXX"
677 clean_target
679 echo "XXX" && echo 20
680 echo -e "\nInstalling the kernel ($KERNEL)..."
681 echo "XXX"
682 install_kernel
684 echo "XXX" && echo 30
685 echo -e "\nCopying the bootloader syslinux/isolinux..."
686 echo "XXX"
687 copy_bootloaders
689 echo "XXX" && echo 50
690 echo -e "\nExtracting the root system..."
691 echo "XXX"
692 extract_rootfs /media/cdrom/boot
694 echo "XXX" && echo 60
695 echo -e "\nPreconfiguring the system..."
696 echo "XXX"
697 pre_config_system
699 echo "XXX" && echo 70
700 echo -e "\nConfiguring root and default $USER account..."
701 echo "XXX"
702 users_settings
703 sleep 2
705 if [ "$HOME_DEV" != "" ]; then
706 echo "XXX" && echo 80
707 echo -e "\nConfiguring $HOME_DEV to be used as /home..."
708 echo "XXX"
709 home_config
710 sleep 2
711 fi
713 echo "XXX" && echo 90
714 echo -e "\nCreating the configuration file for GRUB (menu.lst)..."
715 echo "XXX"
716 grub_config
718 echo "XXX" && echo 100
719 echo -e "\nFinishing the files installation..."
720 echo "XXX"
721 echo "install_files: OK" >>$LOG
722 sleep 2
724 ) |
725 $DIALOG --title " Install files " \
726 --backtitle "$BACKLIST" \
727 --gauge "Starting to install files..." 18 70 0
728 }
730 # GRUB info with disk name used for grub-install.
731 grub_install()
732 {
733 TARGET_DISK=`echo $TARGET_DEV | sed s/"[0-9]"/''/`
734 set_messages
735 $DIALOG --title " GRUB install " \
736 --backtitle "$BACKLIST" \
737 --clear --colors --yesno "$GRUB_INSTALL_MSG" 18 70
738 retval=$?
739 case $retval in
740 0)
741 (
742 echo "XXX" && echo 50
743 echo -e "\nRunning grub-install on : $TARGET_DISK"
744 echo "XXX"
745 grub-install --no-floppy \
746 --root-directory=$TARGET_ROOT $TARGET_DISK 2>>$LOG
747 echo "XXX" && echo 100
748 echo -e "\nFinished installation..."
749 echo "XXX"
750 sleep 2
751 ) |
752 $DIALOG --title " GRUB install " \
753 --backtitle "$BACKLIST" \
754 --gauge "Installing GRUB..." 18 70 0 ;;
755 1)
756 echo "grub_install: NO" >>$LOG ;;
757 255)
758 echo -e "ESC pressed.\n" && exit 0 ;;
759 esac
760 }
762 # Copy log file, umount target and eject cdrom.
763 umount_devices()
764 {
765 (
766 echo "XXX" && echo 25
767 echo -e "\nCopying the log files ($LOG)..."
768 echo "XXX"
769 cp -a $LOG $TARGET_ROOT/var/log
770 sleep 2
771 echo "XXX" && echo 50
772 echo -e "\nUnmounting the target ($TARGET_DEV)..."
773 echo "XXX"
774 if mount | grep -q $TARGET_ROOT; then
775 umount $TARGET_ROOT 2>/dev/null
776 fi
777 echo "XXX" && echo 75
778 echo -e "\nUnmounting and ejecting the cdrom..."
779 echo "XXX"
780 if mount | grep -q /media/cdrom; then
781 umount /media/cdrom
782 grep -q slitaz-loram-cdrom /etc/init.d/rcS || eject
783 fi
784 sleep 2
785 echo "XXX" && echo 100
786 echo -e "\n$TITLE..."
787 echo "XXX"
788 sleep 2
789 ) |
790 $DIALOG --title " $TITLE " \
791 --backtitle "$BACKLIST" \
792 --gauge "$TITLE starting..." 18 70 0
793 }
795 # End of installation.
796 end_of_install()
797 {
798 echo "end_of_install: `date`" >>$LOG
799 $DIALOG --title " Installation complete " \
800 --backtitle "$BACKLIST" \
801 --yes-label "Exit" \
802 --no-label "Reboot" \
803 --clear --colors --yesno "$END_OF_INSTALL_MSG" 18 70
804 retval=$?
805 case $retval in
806 0)
807 TITLE="Exiting"
808 umount_devices ;;
809 1)
810 TITLE="Rebooting"
811 umount_devices
812 reboot || reboot -f ;;
813 255)
814 echo -e "ESC pressed.\n" && exit 0 ;;
815 esac
816 }
818 #####################
819 # Upgrade functions #
820 #####################
822 # We need a partition to upgrade SliTaz.
823 ask_for_upgrade_dev()
824 {
825 exec 3>&1
826 UPGRADE_DEV=`$DIALOG --title " Target to upgrade " \
827 --backtitle "$BACKLIST" --clear \
828 --extra-label "List" --extra-button \
829 --colors --inputbox "\n
830 The installer will upgrade the target by saving all configuration files and \
831 the list of installed packages. Then, it will clean the partition and install the \
832 version of SliTaz contained on the cdrom, restore the configuration files and \
833 reinstall any packages which are not present on the cdrom. You will need an active \
834 internet connection before upgrading.\n\n
835 \Z2Partition containing the system upgrade:\Zn" 18 70 2>&1 1>&3`
836 retval=$?
837 exec 3>&-
838 check_retval
839 # Display list and come back.
840 if [ "$retval" = "3" ]; then
841 fdisk_list
842 ask_for_upgrade_dev
843 fi
844 # Empty value.
845 if [ -z $UPGRADE_DEV ]; then
846 ask_for_upgrade_dev
847 fi
848 # Check if specified device exists in /proc/partitions.
849 DEV_NAME=${UPGRADE_DEV#/dev/}
850 if cat /proc/partitions | grep -q $DEV_NAME; then
851 echo "ask_for_target_dev: $TARGET_DEV" >>$LOG
852 else
853 ERROR_MSG="The partition \Z2$UPGRADE_DEV\Zn doesn't seem to exist."
854 error_message
855 ask_for_upgrade_dev
856 fi
857 echo "partition to upgrade: $UPGRADE_DEV" >>$LOG
858 }
860 # Prepare the partition to upgrade, backup, install, restore configs
861 # and reinstall pkgs.
862 upgrade_process()
863 {
864 (
865 echo "XXX" && echo 5
866 echo -e "\nPreparing the target partition..."
867 echo "XXX"
868 # Mount point can be already used.
869 if mount | grep -q $TARGET_ROOT; then
870 umount $TARGET_ROOT 2>$LOG
871 fi
872 mkdir -p $TARGET_ROOT && sleep 2
873 # Mount target.
874 mount $UPGRADE_DEV $TARGET_ROOT >>$LOG 2>>$LOG
875 cd $TARGET_ROOT
876 TARGET_DEV=$UPGRADE_DEV
877 set_messages
879 echo "XXX" && echo 10
880 echo -e "\nSearch for /etc/slitaz-release"
881 echo "XXX"
882 if [ -f etc/slitaz-release ]; then
883 release=`cat etc/slitaz-release`
884 echo "XXX" && echo 15
885 echo -e "\nSliTaz release: $release"
886 echo "XXX"
887 else
888 ERROR_MSG="The partition \Z2$UPGRADE_DEV\Zn doesn't appear to contain \
889 a SliTaz system, the file: /etc/slitaz-release doesn't exist."
890 error_message
891 exit 0
892 fi && sleep 2
894 echo "XXX" && echo 20
895 echo -e "\nBackup /etc, /home and the packages list..."
896 echo "XXX"
897 # Backup target packages list.
898 ls -1 var/lib/tazpkg/installed > home/packages-selection.list
899 for dir in *
900 do
901 case "$dir" in
902 boot)
903 # Upgrade doesn't prompt for grub install, so backup and
904 # create a new grub menu.lst.
905 rm -rf $TARGET_ROOT/boot/vmlinuz-*
906 mv $TARGET_ROOT/boot/grub/menu.lst \
907 $TARGET_ROOT/boot/grub/menu.lst.bak 2>/dev/null
908 grub_config ;;
909 home)
910 mv $TARGET_ROOT/home $TARGET_ROOT/home.bak
911 echo "keeping /home found on: $UPGRADE_DEV" >>$LOG ;;
912 etc)
913 tar czf $TARGET_ROOT/etc.tar.gz etc
914 mv $TARGET_ROOT/etc $TARGET_ROOT/etc.bak
915 echo "keeping /etc found on: $UPGRADE_DEV" >>$LOG ;;
916 var)
917 if [ -d $TARGET_ROOT/var/www ]; then
918 mv $TARGET_ROOT/var/www $TARGET_ROOT/www.bak
919 fi
920 rm -rf $TARGET_ROOT/var ;;
921 lost+found)
922 continue ;;
923 *)
924 echo "removing target: $dir" >>$LOG
925 rm -rf $TARGET_ROOT/$dir 2>>$LOG ;;
926 esac
927 done
928 if [ -d $TARGET_ROOT/mklost+found ]; then
929 mklost+found 2>>$LOG
930 fi
931 sleep 2
933 echo "XXX" && echo 25
934 echo -e "\nInstalling the kernel ($KERNEL)..."
935 echo "XXX"
936 install_kernel
938 echo "XXX" && echo 30
939 echo -e "\nCopying the bootloader syslinux/isolinux..."
940 echo "XXX"
941 copy_bootloaders
943 echo "XXX" && echo 40
944 echo -e "\nExtracting the root system..."
945 echo "XXX"
946 extract_rootfs /media/cdrom/boot
948 # Restore backups.
949 echo "XXX" && echo 42
950 echo -e "\nRestoring configuration files..."
951 echo "XXX"
952 rm -rf $TARGET_ROOT/home
953 mv $TARGET_ROOT/home.bak $TARGET_ROOT/home
954 rm -rf $TARGET_ROOT/etc
955 mv $TARGET_ROOT/etc.bak $TARGET_ROOT/etc
956 if [ -d $TARGET_ROOT/www.bak ]; then
957 rm -rf $TARGET_ROOT/var/www
958 mv $TARGET_ROOT/www.bak $TARGET_ROOT/var/www
959 fi
960 echo "backups restored: `date`" >> $LOG
962 # /var/lib/slitaz-installer
963 mkdir $TARGET_ROOT/var/lib/slitaz-installer
964 mv $TARGET_ROOT/etc.tar.gz $TARGET_ROOT/var/lib/slitaz-installer
965 mv $TARGET_ROOT/home/packages-selection.list $TARGET_ROOT/var/lib/slitaz-installer
966 cd $TARGET_ROOT/var/lib/slitaz-installer
968 # LiveCD packages list.
969 echo "XXX" && echo 46
970 echo -e "\nCreating package lists..."
971 echo "XXX"
972 ls -1 $TARGET_ROOT/var/lib/tazpkg/installed > packages-cdrom.list || exit 1
973 echo "packages-cdrom.list: done" >> $LOG
974 # Diff
975 diff packages-cdrom.list packages-selection.list | \
976 grep ^+[a-z] | sed s/^+// > packages-selection.diff
977 echo "packages-selection.diff: done" >> $LOG
978 # Get mirror list.
979 tazpkg recharge >>$LOG 2>>$LOG
980 if [ ! -f /var/lib/tazpkg/packages.list ]; then
981 ERROR_MSG="The list of available packages on the mirror could not be \
982 downloaded. No missing packages will be reinstalled now, but \
983 you can do so later by looking at the following list: \n\n
985 /var/lib/slitaz-installer/packages-selection.diff"
986 error_message
987 fi
988 sleep 2
990 # Check if the pkg is on the mirror.
991 echo "XXX" && echo 48
992 echo -e "\nChecking the availability of packages..."
993 echo "XXX"
994 touch packages-to-install.list
995 packages=0
996 diff=`cat packages-selection.diff | sort`
997 for pkg in $diff
998 do
999 if grep -q ^$pkg-[0-9] /var/lib/tazpkg/packages.list; then
1000 packages=$(($packages+1))
1001 echo "$pkg" >> packages-to-install.list
1002 fi
1003 done
1005 # Calculate the percent for one package and install.
1006 echo "XXX" && echo 50
1007 echo -e "\nInstalling any packages..."
1008 echo "XXX"
1009 sleep 2
1010 if [ "$packages" == "0" ]; then
1011 echo "packages to install: 0" >> $LOG
1012 else
1013 onepkg=$((48/$packages))
1014 pct=50
1015 # Get-install all missing pkgs.
1016 for pkg in `cat packages-to-install.list`
1017 do
1018 pct=$(($pct+$onepkg))
1019 echo "XXX" && echo $pct
1020 echo -e "\nInstallation of: $pkg..."
1021 echo "XXX"
1022 # Log please.
1023 echo "get-install: $pkg" >>$LOG
1024 # Get install package and answer yes in case of dependencies.
1025 pkgname=`grep ^$pkg /var/lib/tazpkg/packages.list`
1026 tazpkg get $pkg >/dev/null 2>/dev/null
1027 yes "" | tazpkg install $pkgname.tazpkg --root=$TARGET_ROOT >/dev/null 2>/dev/null
1028 rm -f $pkgname.tazpkg
1029 done
1030 fi
1031 echo "XXX" && echo 100
1032 echo -e "\nInstallation of packages complete..."
1033 echo "XXX"
1034 sleep 2
1035 ) |
1036 $DIALOG --title " Processing system upgrade " \
1037 --backtitle "$BACKLIST" \
1038 --gauge "Target in preparation..." 18 70 0
1041 # End of system upgrade.
1042 end_of_upgrade()
1044 TARGET_DEV=$UPGRADE_DEV
1045 set_messages
1046 pkgscd=`cat $TARGET_ROOT/var/lib/slitaz-installer/packages-cdrom.list | wc -l`
1047 pkginst=`cat $TARGET_ROOT/var/lib/slitaz-installer/packages-to-install.list | wc -l`
1048 echo "end_of_upgrade: `date`" >>$LOG
1049 $DIALOG --title " Upgrade completed " \
1050 --backtitle "$BACKLIST" \
1051 --yes-label "Exit" \
1052 --no-label "Reboot" \
1053 --clear --colors --yesno "\n
1054 Upgrade finished. You can now restart (reboot) \
1055 from your SliTaz GNU/Linux system.\n\n
1056 Packages on the cdrom : $pkgscd\n
1057 Packages installed from the mirror : $pkginst\n" 18 70
1058 retval=$?
1059 case $retval in
1060 0)
1061 TITLE="Exiting"
1062 umount_devices ;;
1063 1)
1064 TITLE="Rebooting"
1065 umount_devices
1066 reboot || reboot -f ;;
1067 255)
1068 echo -e "ESC pressed.\n" && exit 0 ;;
1069 esac
1072 ######################
1073 # Installer sequence #
1074 ######################
1076 set_messages
1077 check_root
1078 start_installer
1080 case $ACTION in
1081 upgrade)
1082 BACKLIST="$BACKLIST (Upgrade)"
1083 mount_cdrom
1084 ask_for_upgrade_dev
1085 upgrade_process
1086 end_of_upgrade ;;
1087 install|*)
1088 mount_cdrom
1089 ask_for_target_dev
1090 ask_for_mkfs_target_dev
1091 ask_for_home
1092 if [ -n "$HOME_DEV" ]; then
1093 ask_for_mkfs_home
1094 fi
1095 ask_for_hostname
1096 ask_for_users_settings
1097 summary
1098 prepare_partitions
1099 install_files
1100 grub_install
1101 end_of_install ;;
1102 esac
1104 exit 0