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

slitaz-installer: Paving the road for translations
author Christophe Lincoln <pankso@slitaz.org>
date Fri Apr 18 00:37:54 2008 +0200 (2008-04-18)
parents 64a7fea3e8fa
children 2994fd47d73c
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 " Erreur " \
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 "\nVolontary 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 "\nVolontary 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 "\nMonting 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 " Monting 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 " Partitions tables " \
139 --backtitle "$BACKLIST" \
140 --clear --msgbox "\n
141 Avalaibble 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 "\n
153 Veuillez indiquer la partition à utiliser pour installer SliTaz GNU/Linux, \
154 exemple: '/dev/hda1'. Vous pouvez utiliser le bouton 'List' pour afficher \
155 une liste des partitions disponibles sur le ou les disques durs et revenir \
156 ensuite à cet écran. A noter qu'il faut au minimum 100 Mb pour le coeur du \
157 système et que si vous prévoyez d'installer de nouveaux paquets, vous serez \
158 plus à l'aise avec environ 400 Mb.\n\n
159 \Z2Partition à utiliser:\Zn" 18 70 2>&1 1>&3`
160 retval=$?
161 exec 3>&-
162 check_retval
163 # Display list and comme back.
164 if [ "$retval" = "3" ]; then
165 fdisk_list
166 ask_for_target_dev
167 fi
168 # Empty value.
169 if [ -z $TARGET_DEV ]; then
170 ask_for_target_dev
171 fi
172 # Check if specified device exist in /proc/partitions.
173 DEV_NAME=${TARGET_DEV#/dev/}
174 if cat /proc/partitions | grep -q $DEV_NAME; then
175 echo "ask_for_target_dev: $TARGET_DEV" >>$LOG
176 else
177 ERROR_MSG="La partition \Z2$TARGET_DEV\Zn ne semble pas exister."
178 error_message
179 ask_for_target_dev
180 fi
181 }
183 # Mkfs if needed/wanted.
184 ask_for_mkfs_target_dev()
185 {
186 $DIALOG --title " Formater " \
187 --backtitle "$BACKLIST" \
188 --clear --colors --yesno "\n
189 SliTaz va être installé sur la partition : $TARGET_DEV\n\n
190 Vous avez la possibilité de formater la partition en ext3 ou d'utiliser \
191 le système de fichiers déjà présent sur la partition. Le format ext3 est \
192 un système de fichiers propre à Linux, robuste, stable et jounalisé, c'est \
193 le format conseillé. Faites attention, si vous formatez toutes les données \
194 de cette partition seront définitivement détruites. Si vous conservez le \
195 système de fichiers actuel, la partition sera nettoyée et les données
196 utilisateurs conservées (/home).\n\n
197 \Z2Faut t'il formater la partition en ext3 ?\Zn" 18 70
198 retval=$?
199 case $retval in
200 0)
201 MKFS_TARGET_DEV="ext3"
202 echo "mkfs_target_dev: ext3" >>$LOG ;;
203 1)
204 CLEAN="clean"
205 echo "mkfs_target_dev: clean" >>$LOG ;;
206 255)
207 echo -e "ESC pressed.\n" && exit 0 ;;
208 esac
210 }
212 # Mount and mkfs with progress.
213 prepare_target_dev()
214 {
215 (
216 echo "XXX" && echo 30
217 echo -e "\nPréparation de la partition cible..."
218 echo "XXX"
219 # Mount point can be already used.
220 if mount | grep -q $TARGET_ROOT; then
221 umount $TARGET_ROOT 2>$LOG
222 fi
223 sleep 2
225 if [ "$MKFS_TARGET_DEV" == "ext3" ]; then
226 echo "XXX" && echo 60
227 echo -e "\nExécution de mkfs.ext3 sur $TARGET_DEV"
228 echo "XXX"
229 mkfs.ext3 $TARGET_DEV >>$LOG 2>>$LOG
230 else
231 echo "XXX" && echo 60
232 echo -e "\nLa partition ($TARGET_DEV) sera nettoyée..."
233 echo "XXX"
234 sleep 2
235 fi
237 echo "XXX" && echo 90
238 echo -e "\nCréation du point de montage: $TARGET_ROOT"
239 echo "XXX"
240 mkdir -p $TARGET_ROOT
241 sleep 2
243 ) |
244 $DIALOG --title " Préparation de la cible " \
245 --backtitle "$BACKLIST" \
246 --gauge "Target in preparation..." 18 70 0
247 # Mount target
248 mount $TARGET_DEV $TARGET_ROOT >>$LOG 2>>$LOG
249 }
251 # Ask for hostanme before installing files.
252 ask_for_hostname()
253 {
254 exec 3>&1
255 HOSTNAME=`$DIALOG --title " Hostname " \
256 --backtitle "$BACKLIST" --clear \
257 --colors --inputbox "\n
258 Veuillez indiquer le nom de machine à utiliser pour votre système SliTaz.\
259 Le nom de machine ou 'hostname' est utilisé pour identifier votre machine sur \
260 le réseau et en local par le système (defaut: slitaz). A noter que cette \
261 valeur peut aussi être modifiée une fois le système installé en utilisant
262 'netbox' graphiquement ou en ligne de commande.\n\n
263 \Z2Nom de machine:\Zn" 18 70 "slitaz" 2>&1 1>&3`
264 retval=$?
265 exec 3>&-
266 check_retval
267 # Empty value.
268 if [ -z $HOSTNAME ]; then
269 HOSTNAME="slitaz"
270 fi
271 }
273 # Get a clean target device (15%).
274 clean_target()
275 {
276 if [ "$CLEAN" == "clean" ]; then
277 echo "XXX" && echo 15
278 echo -e "\nNettoyage de la partition racine ($TARGET_DEV)..."
279 echo "XXX"
280 # Keep /home in case of reinstall.
281 cd $TARGET_ROOT
282 for dir in *
283 do
284 case "$dir" in
285 home)
286 mv $TARGET_ROOT/home $TARGET_ROOT/home.bak
287 echo "keeping /home found on: $TARGET_DEV" >>$LOG ;;
288 lost+found)
289 continue ;;
290 *)
291 echo "removing target: $dir" >>$LOG
292 rm -rf $dir 2>>$LOG ;;
293 esac
294 done
295 if [ -d $TARGET_ROOT/mklost+found ]; then
296 mklost+found 2>>$LOG
297 fi
298 fi
299 sleep 2
300 }
302 # Kernel is rename to standard vmlinuz-$VERSION.
303 install_kernel()
304 {
305 mkdir -p $TARGET_ROOT/boot
306 cp /media/cdrom/boot/bzImage $TARGET_ROOT/boot/$KERNEL
307 echo "install_kernel: $KERNEL" >> $LOG
308 sleep 2
309 }
311 # Copy isolinux r/w files (not syslinux, some files are read only).
312 copy_bootloaders()
313 {
314 if [ -d "/media/cdrom/boot/isolinux" ]; then
315 mkdir -p $TARGET_ROOT/boot/isolinux
316 cp -a /media/cdrom/boot/isolinux/*.cfg $TARGET_ROOT/boot/isolinux
317 cp -a /media/cdrom/boot/isolinux/*.kbd $TARGET_ROOT/boot/isolinux
318 cp -a /media/cdrom/boot/isolinux/*.txt $TARGET_ROOT/boot/isolinux
319 cp -a /media/cdrom/boot/isolinux/*.bin $TARGET_ROOT/boot/isolinux
320 cp -a /media/cdrom/boot/isolinux/*.msg $TARGET_ROOT/boot/isolinux
321 cp -a /media/cdrom/boot/isolinux/*.lss $TARGET_ROOT/boot/isolinux
322 cp -a /media/cdrom/boot/isolinux/*.c32 $TARGET_ROOT/boot/isolinux
323 fi
324 }
326 # Extract lzma'ed or gziped rootfs.
327 extract_rootfs()
328 {
329 cd $TARGET_ROOT
330 (zcat rootfs.gz 2>/dev/null || lzma d rootfs.gz -so || \
331 cat rootfs.gz) 2>>$LOG | cpio -id 2>>$LOG
332 rm -f rootfs.gz
333 # unpack /usr (double check...)
334 if ls etc/tazlito | grep -q ".extract"; then
335 for i in etc/tazlito/*.extract; do
336 [ -f "$i" ] && . $i /media/cdrom.
337 done
338 fi
339 }
341 # /etc/skel (60%)
342 gen_etc_skel()
343 {
344 #Maybe we don't have /home/hacker directory
345 if [ -d $TARGET_ROOT/home/hacker ]; then
346 echo "XXX" && echo 60
347 echo -e "\nCopie des fichiers utilisateurs par défaut (/etc/skel)..."
348 echo "XXX"
349 cp -a $TARGET_ROOT/home/hacker $TARGET_ROOT/etc/skel
350 else
351 echo "XXX" && echo 60
352 echo -e "\nCréation du répertoire (/etc/skel)..."
353 echo "XXX"
354 mkdir -p $TARGET_ROOT/etc/skel \
355 $TARGET_ROOT/etc/Documents \
356 $TARGET_ROOT/etc/skel/Images \
357 $TARGET_ROOT/etc/skel/.local/bin \
358 $TARGET_ROOT/etc/skel/.local/share
359 fi
360 sleep 2
361 }
363 # Pre configure freshly installed system (70 - 90%).
364 pre_config_system()
365 {
366 cd $TARGET_ROOT
367 # Restore backup of existing /home if exist.
368 # (created by prepare_target_dev)
369 if [ -d home.bak ]; then
370 echo "XXX" && echo 75
371 echo -e "\nRestauration du répertoire /home..."
372 echo "XXX"
373 rm -rf home
374 mv home.bak home
375 sleep 2
376 fi
377 # Add root device to CHECK_FS in rcS.conf to check filesystem
378 # on each boot.
379 echo "XXX" && echo 80
380 echo -e "\nAjout de $TARGET_DEV à CHECK_FS du fichier /etc/rcS.conf..."
381 echo "XXX"
382 sed -i s#'CHECK_FS=\"\"'#"CHECK_FS=\"$TARGET_DEV\""# etc/rcS.conf
383 sleep 2
384 # Set hostname.
385 echo "XXX" && echo 85
386 echo -e "\nConfiguration du nom de machine: $HOSTNAME"
387 echo "XXX"
388 echo $HOSTNAME > etc/hostname
389 sleep 2
390 }
392 # Determin GRUB partition number and GRUB disk number.
393 grub_config()
394 {
395 DISK_LETTER=${TARGET_DEV#/dev/[h-s]d}
396 DISK_LETTER=${DISK_LETTER%[0-9]}
397 GRUB_PARTITION=$((${TARGET_DEV#/dev/[h-s]d[a-z]}-1))
398 for disk in a b c d e f g h
399 do
400 nb=$(($nb+1))
401 if [ "$disk" = "$DISK_LETTER" ]; then
402 GRUB_DISK=$(($nb-1))
403 break
404 fi
405 done
406 GRUB_ROOT="(hd${GRUB_DISK},${GRUB_PARTITION})"
407 # Creat the target GRUB configuration.
408 mkdir -p $TARGET_ROOT/boot/grub
409 cat > $TARGET_ROOT/boot/grub/menu.lst << _EOF_
410 # /boot/grub/menu.lst: GRUB boot loader configuration.
411 #
413 # By default, boot the first entry.
414 default 0
416 # Boot automatically after 8 secs.
417 timeout 8
419 # Change the colors.
420 color yellow/brown light-green/black
422 # For booting SliTaz from : $TARGET_DEV
423 #
424 title SliTaz GNU/Linux (cooking) (Kernel $KERNEL)
425 root $GRUB_ROOT
426 kernel /boot/$KERNEL root=$TARGET_DEV
428 _EOF_
429 # log
430 echo "grub_config: $TARGET_ROOT/boot/grub/menu.lst" >>$LOG
431 sleep 2
432 }
434 # Files install with gauge, calling for functions or with cmds.
435 install_files()
436 {
437 (
439 echo "XXX" && echo 10
440 echo -e "\nNettoyage de la partition racine si nécessaire..."
441 echo "XXX"
442 clean_target
444 echo "XXX" && echo 20
445 echo -e "\nInstallation du noyau ($KERNEL)..."
446 echo "XXX"
447 install_kernel
449 echo "XXX" && echo 30
450 echo -e "\nCopie des bootloaders syslinux/isolinux..."
451 echo "XXX"
452 copy_bootloaders
454 echo "XXX" && echo 40
455 echo -e "\nCopie du système compressé (rootfs.gz)..."
456 echo "XXX"
457 cp /media/cdrom/boot/rootfs.gz $TARGET_ROOT
458 sleep 2
460 echo "XXX" && echo 50
461 echo -e "\nExtraction du système racine..."
462 echo "XXX"
463 extract_rootfs
465 echo "XXX" && echo 60
466 echo -e "\nCopie des fichiers utilisateurs par défaut (/etc/skel)..."
467 echo "XXX"
468 gen_etc_skel
469 sleep 2
471 echo "XXX" && echo 70
472 echo -e "\nPreconfiguration du système..."
473 echo "XXX"
474 pre_config_system
476 echo "XXX" && echo 90
477 echo -e "\nCréation du fichier de configuration de GRUB (menu.lst)..."
478 echo "XXX"
479 grub_config
481 echo "XXX" && echo 100
482 echo -e "\nFin de l'installation des fichiers..."
483 echo "XXX"
484 echo "install_files: OK" >>$LOG
485 sleep 4
487 ) |
488 $DIALOG --title " Installation des fichiers " \
489 --backtitle "$BACKLIST" \
490 --gauge "Starting to install files..." 18 70 0
491 }
493 # GRUB info with disk name used for grub-install
494 grub_install()
495 {
496 TARGET_DISK=`echo $TARGET_DEV | sed s/"[0-9]"/''/`
497 $DIALOG --title " GRUB install " \
498 --backtitle "$BACKLIST" \
499 --clear --colors --yesno "\n
500 Avant de redémarrer sur votre nouveau système SliTaz GNU/Linux, veuillez \
501 vous assurer qu'un gestionnaire de démarrage est bien installé. Si ce n'est \
502 pas le cas vous pouvez répondre oui et installer GRUB. Si vous n'installez \
503 pas GRUB, un fichier de configuration (menu.lst) a été généré pendant \
504 l'installation, il contient les lignes qui permettent de démarrer SliTaz.\n\n
505 Une fois installé, GRUB peut facilement être reconfiguré et propose un SHell \
506 interactif au boot.\n\n
507 \Z2Faut t'il installer GRUB sur: $TARGET_DISK ?\Zn" 18 70
508 retval=$?
509 case $retval in
510 0)
511 (
512 echo "XXX" && echo 50
513 echo -e "\nExécution de grub-install sur : $TARGET_DISK..."
514 echo "XXX"
515 grub-install --no-floppy \
516 --root-directory=$TARGET_ROOT $TARGET_DISK 2>>$LOG
517 echo "XXX" && echo 100
518 echo -e "\nFin de l'installation..."
519 echo "XXX"
520 sleep 2
521 ) |
522 $DIALOG --title " GRUB install " \
523 --backtitle "$BACKLIST" \
524 --gauge "Installation de GRUB..." 18 70 0 ;;
525 1)
526 echo "grub_install: NO" >>$LOG ;;
527 255)
528 echo -e "ESC pressed.\n" && exit 0 ;;
529 esac
530 }
532 # Copy log file, umount target and eject cdrom
533 umount_devices()
534 {
535 (
536 echo "XXX" && echo 25
537 echo -e "\nCopie du fichier de log ($LOG)..."
538 echo "XXX"
539 cp -a $LOG $TARGET_ROOT/var/log
540 sleep 2
541 echo "XXX" && echo 50
542 echo -e "\nDémontage de la cible ($TARGET_DEV)..."
543 echo "XXX"
544 if mount | grep -q $TARGET_ROOT; then
545 umount $TARGET_ROOT 2>/dev/null
546 fi
547 echo "XXX" && echo 75
548 echo -e "\nDémontage et éjection du cdrom..."
549 echo "XXX"
550 if mount | grep -q /media/cdrom; then
551 umount /media/cdrom
552 eject
553 fi
554 sleep 2
555 echo "XXX" && echo 100
556 echo -e "\n$TITLE..."
557 echo "XXX"
558 sleep 2
559 ) |
560 $DIALOG --title " $TITLE " \
561 --backtitle "$BACKLIST" \
562 --gauge "$TITLE starting..." 18 70 0
563 }
565 # End of installation
566 end_of_install()
567 {
568 echo "end_of_install: `date`" >>$LOG
569 $DIALOG --title " Installation terminée " \
570 --backtitle "$BACKLIST" \
571 --yes-label "Exit" \
572 --no-label "Reboot" \
573 --clear --colors --yesno "\n
574 L'installation est terminée. Vous pouvez dès maintenant redémarrer (reboot) \
575 sur votre nouveau système SliTaz GNU/Linux et commencer à finement le \
576 configurer en fonction de vos besoins et préférences. Vous trouverez de l'aide \
577 ou un support technique gratuit via la liste de discussion et/ou le forum \
578 officiel du projet. Pour bien commencer à utiliser le système, vous pouvez \
579 vous référer aux documents du Handbook de SliTaz et utiliser le gestionnaire \
580 de paquets Tazpkg pour installer de nouveaux logiciels prêts à savourer." 18 70
581 retval=$?
582 case $retval in
583 0)
584 TITLE="Exiting"
585 umount_devices ;;
586 1)
587 TITLE="Rebooting"
588 umount_devices
589 reboot || reboot -f ;;
590 255)
591 echo -e "ESC pressed.\n" && exit 0 ;;
592 esac
593 }
595 #####################
596 # Upgrade functions #
597 #####################
599 # We need a partition to upgrade SliTaz.
600 ask_for_upgrade_dev()
601 {
602 exec 3>&1
603 UPGRADE_DEV=`$DIALOG --title " Cible à mettre jour " \
604 --backtitle "$BACKLIST" --clear \
605 --extra-label "List" --extra-button \
606 --colors --inputbox "\n
607 L'installateur va mettre à jour le système cible en commançant par sauver tous \
608 les fichiers de configuration et la liste des paquets installés. Ensuite, il va \
609 nettoyer la partition et installer la version de SliTaz contenue sur le cdrom, \
610 restaurer les fichiers de configuration et réinstaller l'ensemble des paquets \
611 qui ne sont pas présents sur le LiveCD. Il vous font donc une connection internet \
612 active avant de mettre à jour.\n\n
613 \Z2Partition contenant le système à mettre à jour:\Zn" 18 70 2>&1 1>&3`
614 retval=$?
615 exec 3>&-
616 check_retval
617 # Display list and comme back.
618 if [ "$retval" = "3" ]; then
619 fdisk_list
620 ask_for_upgrade_dev
621 fi
622 # Empty value.
623 if [ -z $UPGRADE_DEV ]; then
624 ask_for_upgrade_dev
625 fi
626 # Check if specified device exist in /proc/partitions.
627 DEV_NAME=${UPGRADE_DEV#/dev/}
628 if cat /proc/partitions | grep -q $DEV_NAME; then
629 echo "ask_for_target_dev: $TARGET_DEV" >>$LOG
630 else
631 ERROR_MSG="La partition \Z2$UPGRADE_DEV\Zn ne semble pas exister."
632 error_message
633 ask_for_upgrade_dev
634 fi
635 echo "partition to upgrade: $UPGRADE_DEV" >>$LOG
636 }
638 # Prepare the part to upgrade, backup, install, restore configs
639 # and reinstall pkgs.
640 upgrade_process()
641 {
642 (
643 echo "XXX" && echo 5
644 echo -e "\nPréparation de la partition cible..."
645 echo "XXX"
646 # Mount point can be already used.
647 if mount | grep -q $TARGET_ROOT; then
648 umount $TARGET_ROOT 2>$LOG
649 fi
650 mkdir -p $TARGET_ROOT && sleep 2
651 # Mount target
652 mount $UPGRADE_DEV $TARGET_ROOT >>$LOG 2>>$LOG
653 cd $TARGET_ROOT
654 TARGET_DEV=$UPGRADE_DEV
656 echo "XXX" && echo 10
657 echo -e "\nRecherch de /etc/slitaz-release"
658 echo "XXX"
659 if [ -f etc/slitaz-release ]; then
660 release=`cat etc/slitaz-release`
661 echo "XXX" && echo 15
662 echo -e "\nSliTaz release: $release"
663 echo "XXX"
664 else
665 ERROR_MSG="La partition \Z2$UPGRADE_DEV\Zn ne semble pas contenir de \
666 système SliTaz, le fichier: /etc/slitaz-release n'existe pas."
667 error_message
668 exit 0
669 fi && sleep 2
671 echo "XXX" && echo 20
672 echo -e "\nSauvegarde de /etc, /home et de la liste des paquets..."
673 echo "XXX"
674 # Backup target packages list
675 ls -1 var/lib/tazpkg/installed > home/packages-selection.list
676 for dir in *
677 do
678 case "$dir" in
679 boot)
680 # Upgrade dont prompt for grub install, so backup and creat a
681 # new grub menu.lst.
682 rm -rf $TARGET_ROOT/boot/vmlinuz-*
683 mv $TARGET_ROOT/boot/grub/menu.lst \
684 $TARGET_ROOT/boot/grub/menu.lst.bak 2>/dev/null
685 grub_config ;;
686 home)
687 mv $TARGET_ROOT/home $TARGET_ROOT/home.bak
688 echo "keeping /home found on: $UPGRADE_DEV" >>$LOG ;;
689 etc)
690 tar czf $TARGET_ROOT/etc.tar.gz etc
691 mv $TARGET_ROOT/etc $TARGET_ROOT/etc.bak
692 echo "keeping /etc found on: $UPGRADE_DEV" >>$LOG ;;
693 var)
694 if [ -d $TARGET_ROOT/var/www ]; then
695 mv $TARGET_ROOT/var/www $TARGET_ROOT/www.bak
696 fi
697 rm -rf $TARGET_ROOT/var ;;
698 lost+found)
699 continue ;;
700 *)
701 echo "removing target: $dir" >>$LOG
702 rm -rf $TARGET_ROOT/$dir 2>>$LOG ;;
703 esac
704 done
705 if [ -d $TARGET_ROOT/mklost+found ]; then
706 mklost+found 2>>$LOG
707 fi
708 sleep 2
710 echo "XXX" && echo 25
711 echo -e "\nInstallation du noyau ($KERNEL)..."
712 echo "XXX"
713 install_kernel
715 echo "XXX" && echo 30
716 echo -e "\nCopie des bootloaders syslinux/isolinux..."
717 echo "XXX"
718 copy_bootloaders
720 echo "XXX" && echo 35
721 echo -e "\nCopie du système compressé (rootfs.gz)..."
722 echo "XXX"
723 cp /media/cdrom/boot/rootfs.gz $TARGET_ROOT
724 sleep 2
726 echo "XXX" && echo 40
727 echo -e "\nExtraction du système racine..."
728 echo "XXX"
729 extract_rootfs
731 # Restore backups.
732 echo "XXX" && echo 42
733 echo -e "\nRestauration des fichiers de configuration..."
734 echo "XXX"
735 rm -rf $TARGET_ROOT/home
736 mv $TARGET_ROOT/home.bak $TARGET_ROOT/home
737 rm -rf $TARGET_ROOT/etc
738 mv $TARGET_ROOT/etc.bak $TARGET_ROOT/etc
739 if [ -d $TARGET_ROOT/www.bak ]; then
740 rm -rf $TARGET_ROOT/var/www
741 mv $TARGET_ROOT/www.bak $TARGET_ROOT/var/www
742 fi
743 echo "backups restored: `date`" >> $LOG
745 # /var/lib/slitaz-installer
746 mkdir $TARGET_ROOT/var/lib/slitaz-installer
747 mv $TARGET_ROOT/etc.tar.gz $TARGET_ROOT/var/lib/slitaz-installer
748 mv $TARGET_ROOT/home/packages-selection.list $TARGET_ROOT/var/lib/slitaz-installer
749 cd $TARGET_ROOT/var/lib/slitaz-installer
751 # LiveCD packages list.
752 echo "XXX" && echo 46
753 echo -e "\nCréation des listes de paquets..."
754 echo "XXX"
755 ls -1 $TARGET_ROOT/var/lib/tazpkg/installed > packages-cdrom.list || exit 1
756 echo "packages-cdrom.list: done" >> $LOG
757 # Diff
758 diff packages-cdrom.list packages-selection.list | \
759 grep ^+[a-z] | sed s/^+// > packages-selection.diff
760 echo "packages-selection.diff: done" >> $LOG
761 # Get mirror list.
762 tazpkg recharge >>$LOG 2>>$LOG
763 if [ ! -f /var/lib/tazpkg/packages.list ]; then
764 ERROR_MSG="La liste des paquets disponibles sur le miroir n'a pas pu \
765 être téléchargée. Aucun paquets manquants ne sera réintallés maintenant, mais
766 vous pourrez le faire plus tard en vous aidant de la liste: \n\n
768 /var/lib/slitaz-installer/packages-selection.diff"
769 error_message
770 fi
771 sleep 2
773 # Check if the pkg is on the mirror
774 echo "XXX" && echo 48
775 echo -e "\nVérification de la disponibilité des paquets..."
776 echo "XXX"
777 touch packages-to-install.list
778 packages=0
779 diff=`cat packages-selection.diff | sort`
780 for pkg in $diff
781 do
782 if grep -q ^$pkg-[0-9] /var/lib/tazpkg/packages.list; then
783 packages=$(($packages+1))
784 echo "$pkg" >> packages-to-install.list
785 fi
786 done
788 # Calculate the pourcent for one package and install.
789 echo "XXX" && echo 50
790 echo -e "\nInstallation des éventuels paquets..."
791 echo "XXX"
792 sleep 2
793 if [ "$packages" == "0" ]; then
794 echo "packages to install: 0" >> $LOG
795 else
796 onepkg=$((48/$packages))
797 pct=50
798 # Get-install all missing pkgs.
799 for pkg in `cat packages-to-install.list`
800 do
801 pct=$(($pct+$onepkg))
802 echo "XXX" && echo $pct
803 echo -e "\nInstallation de: $pkg..."
804 echo "XXX"
805 # Log please.
806 echo "get-install: $pkg" >>$LOG
807 # Get install package and anser yes in case of dependencies.
808 pkgname=`grep ^$pkg /var/lib/tazpkg/packages.list`
809 tazpkg get $pkg >/dev/null 2>/dev/null
810 yes "" | tazpkg install $pkgname.tazpkg --root=$TARGET_ROOT >/dev/null 2>/dev/null
811 rm -f $pkgname.tazpkg
812 done
813 fi
814 echo "XXX" && echo 100
815 echo -e "\nInstallation des paquets terminée..."
816 echo "XXX"
817 sleep 2
818 ) |
819 $DIALOG --title " Processus de mise à jour " \
820 --backtitle "$BACKLIST" \
821 --gauge "Target in preparation..." 18 70 0
822 }
824 # End of system upgrade
825 end_of_upgrade()
826 {
827 TARGET_DEV=$UPGRADE_DEV
828 pkgscd=`cat $TARGET_ROOT/var/lib/slitaz-installer/packages-cdrom.list | wc -l`
829 pkginst=`cat $TARGET_ROOT/var/lib/slitaz-installer/packages-to-install.list | wc -l`
830 echo "end_of_upgrade: `date`" >>$LOG
831 $DIALOG --title " Mise à jour terminée " \
832 --backtitle "$BACKLIST" \
833 --yes-label "Exit" \
834 --no-label "Reboot" \
835 --clear --colors --yesno "\n
836 Mise à jour terminée. Vous pouvez dès maintenant redémarrer (reboot) \
837 sur votre système SliTaz GNU/Linux à jour.\n\n
838 Paquets présents sur le cdrom : $pkgscd\n
839 Paquets installés depuis le miroir : $pkginst\n" 18 70
840 retval=$?
841 case $retval in
842 0)
843 TITLE="Exiting"
844 umount_devices ;;
845 1)
846 TITLE="Rebooting"
847 umount_devices
848 reboot || reboot -f ;;
849 255)
850 echo -e "ESC pressed.\n" && exit 0 ;;
851 esac
852 }
854 ######################
855 # Installer sequence #
856 ######################
858 check_root
859 start_installer
861 case $ACTION in
862 upgrade)
863 BACKLIST="$BACKLIST (Mise à jour)"
864 mount_cdrom
865 ask_for_upgrade_dev
866 upgrade_process
867 end_of_upgrade
868 ;;
869 install|*)
870 mount_cdrom
871 ask_for_target_dev
872 ask_for_mkfs_target_dev
873 prepare_target_dev
874 ask_for_hostname
875 install_files
876 grub_install
877 end_of_install
878 ;;
879 esac
881 exit 0