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

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