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

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