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

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