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

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