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

Corrected typo in slitaz-installer
author Julien Rabier <julien.rabier@gmail.com>
date Wed Feb 27 01:24:04 2008 +0100 (2008-02-27)
parents 8d24e280df36
children d3bda4c7b851
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. L'installateur va commencer par monter le cdrom, vous \
36 demander la partition à utiliser comme racine du système et vous proposer \
37 de la formater. Ensuite il va copier les fichiers depuis le cdrom, les \
38 décompresser, les installer et va préconfigurer le système. Pour finir,
39 vous aurez aussi la possibilité d'installer le gestionnaire de démarrage
40 GRUB, si besoin est.\n\n
41 \Z2Commencer l'installation ?\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_install()
87 {
88 $DIALOG --title " Débuter l'installation " \
89 --backtitle "$BACKLIST" \
90 --clear --colors --yesno "$START_INSTALL_MSG" 18 70
91 retval=$?
92 check_retval
93 echo "start_infos: `date`" > $LOG
94 }
96 # Mount cdrom and verify if it's realy SliTaz CD.
97 mount_cdrom()
98 {
99 ERROR_MSG=""
100 umount /media/cdrom 2>/dev/null
101 (
102 echo "XXX" && echo 30
103 echo -e "\nCréation du point de montage (/media/cdrom)..."
104 echo "XXX"
105 mkdir -p /media/cdrom
106 sleep 1
107 echo "XXX" && echo 60
108 echo -e "\nMontage du cdrom ($CDROM)..."
109 echo "XXX"
110 mount -t iso9660 $CDROM /media/cdrom 2>>$LOG
111 echo "XXX" && echo 90
112 echo -e "\nVérification du media d'installation..."
113 echo "XXX"
114 sleep 2
115 ) |
116 $DIALOG --title " Montage du cdrom " \
117 --backtitle "$BACKLIST" \
118 --gauge "Préparation du media d'installation..." 18 70 0
119 # Exit with error msg if no rootfs.gz found
120 if [ ! -f /media/cdrom/boot/rootfs.gz ]; then
121 ERROR_MSG="\
122 Impossible de trouver : rootfs.gz\n\n
123 L'archive du système de fichiers racine n'est pas présente sur le cdrom. \
124 Il se peut que cette erreur soit due au fait que le LiveCD de SliTaz ne soit \
125 pas inséré dans le premier lecteur CD/DVD et que le media n'as pas pu être \
126 correctement monté. Arrêt."
127 error_message
128 echo "missing: /media/cdrom/boot/rootfs.gz" >>$LOG
129 exit 1
130 fi
131 }
133 # Display a list of available partition.
134 fdisk_list()
135 {
136 LIST_PARTITIONS=`fdisk -l | grep ^/dev | sed s/'e Win95'/'e'/g`
137 $DIALOG --title " Partitions tables " \
138 --backtitle "$BACKLIST" \
139 --clear --msgbox "\n
140 Liste des partitions disponibles :\n\n
141 $LIST_PARTITIONS" 18 70
142 }
144 # We need a partition to install (inputbox).
145 ask_for_target_dev()
146 {
147 exec 3>&1
148 TARGET_DEV=`$DIALOG --title " Partition racine " \
149 --backtitle "$BACKLIST" --clear \
150 --extra-label "List" --extra-button \
151 --colors --inputbox "\n
152 Veuillez indiquer la partition à utiliser pour installer SliTaz GNU/Linux, \
153 exemple: '/dev/hda1'. Vous pouvez utiliser le bouton 'List' pour afficher \
154 une liste des partitions disponibles sur le ou les disques durs et revenir \
155 ensuite à cet écran. A noter qu'il faut au minimum 100 Mb pour le coeur du \
156 système et que si vous prévoyez d'installer de nouveaux paquets, vous serez \
157 plus à l'aise avec environ 400 Mb.\n\n
158 \Z2Partition à utiliser:\Zn" 18 70 2>&1 1>&3`
159 retval=$?
160 exec 3>&-
161 check_retval
162 # Display list and comme back.
163 if [ "$retval" = "3" ]; then
164 fdisk_list
165 ask_for_target_dev
166 fi
167 # Empty value.
168 if [ -z $TARGET_DEV ]; then
169 ask_for_target_dev
170 fi
171 # Check if specified device exist in /proc/partitions.
172 DEV_NAME=${TARGET_DEV#/dev/}
173 if cat /proc/partitions | grep -q $DEV_NAME; then
174 echo "ask_for_target_dev: $TARGET_DEV" >>$LOG
175 else
176 ERROR_MSG="La partition \Z2$TARGET_DEV\Zn ne semble pas exister."
177 error_message
178 ask_for_target_dev
179 fi
180 }
182 # Mkfs if needed/wanted.
183 ask_for_mkfs_target_dev()
184 {
185 $DIALOG --title " Formater " \
186 --backtitle "$BACKLIST" \
187 --clear --colors --yesno "\n
188 SliTaz va être installé sur la partition : $TARGET_DEV\n\n
189 Vous avez la possibilité de formater la partition en ext3 ou d'utiliser \
190 le système de fichiers déjà présent sur la partition. Le format ext3 est \
191 un système de fichiers propre à Linux, robuste, stable et jounalisé, c'est \
192 le format conseillé. Faites attention, si vous formatez toutes les données \
193 de cette partition seront définitivement détruites. Si vous conservez le \
194 système de fichiers actuel, la partition sera nettoyée et les données
195 utilisateurs conservées (/home).\n\n
196 \Z2Faut t'il formater la partition en ext3 ?\Zn" 18 70
197 retval=$?
198 case $retval in
199 0)
200 MKFS_TARGET_DEV="ext3"
201 echo "mkfs_target_dev: ext3" >>$LOG ;;
202 1)
203 CLEAN="clean"
204 echo "mkfs_target_dev: clean" >>$LOG ;;
205 255)
206 echo -e "ESC pressed.\n" && exit 0 ;;
207 esac
209 }
211 # Mount and mkfs with progress.
212 prepare_target_dev()
213 {
214 (
215 echo "XXX" && echo 30
216 echo -e "\nPréparation de la partition cible..."
217 echo "XXX"
218 # Mount point can be already used.
219 if mount | grep -q $TARGET_ROOT; then
220 umount $TARGET_ROOT 2>$LOG
221 fi
222 sleep 2
224 if [ "$MKFS_TARGET_DEV" == "ext3" ]; then
225 echo "XXX" && echo 60
226 echo -e "\nExécution de mkfs.ext3 sur $TARGET_DEV"
227 echo "XXX"
228 mkfs.ext3 $TARGET_DEV >>$LOG 2>>$LOG
229 else
230 echo "XXX" && echo 60
231 echo -e "\nLa partition ($TARGET_DEV) sera nettoyée..."
232 echo "XXX"
233 sleep 2
234 fi
236 echo "XXX" && echo 90
237 echo -e "\nCréation du point de montage: $TARGET_ROOT"
238 echo "XXX"
239 mkdir -p $TARGET_ROOT
240 sleep 2
242 ) |
243 $DIALOG --title " Préparation de la cible " \
244 --backtitle "$BACKLIST" \
245 --gauge "Target in preparation..." 18 70 0
246 # Mount target
247 mount $TARGET_DEV $TARGET_ROOT >>$LOG 2>>$LOG
248 }
250 # Ask for hostanme before installing files.
251 ask_for_hostname()
252 {
253 exec 3>&1
254 HOSTNAME=`$DIALOG --title " Hostname " \
255 --backtitle "$BACKLIST" --clear \
256 --colors --inputbox "\n
257 Veuillez indiquer le nom de machine à utiliser pour votre système SliTaz.\
258 Le nom de machine ou 'hostname' est utilisé pour identifier votre machine sur
259 le réseau et en local par le système (defaut: slitaz). A noter que cette\
260 valeur peut aussi être modifiée une fois le système installé en utilisant
261 'netbox' graphiquement ou en ligne de commande.\n\n
262 \Z2Nom de machine:\Zn" 18 70 2>&1 1>&3`
263 retval=$?
264 exec 3>&-
265 check_retval
266 # Empty value.
267 if [ -z $HOSTNAME ]; then
268 HOSTNAME="slitaz"
269 fi
270 }
272 # Get a clean target device (15%).
273 clean_target()
274 {
275 if [ "$CLEAN" == "clean" ]; then
276 echo "XXX" && echo 15
277 echo -e "\nNettoyage de la partition racine ($TARGET_DEV)..."
278 echo "XXX"
279 cd $TARGET_ROOT
280 # Keep /home in case of reinstall.
281 for dir in *
282 do
283 case "$dir" in
284 home)
285 mv home home.bak
286 echo "keeping /home found on: $TARGET_DEV" >>$LOG ;;
287 lost+found)
288 break ;;
289 *)
290 rm -rf $dir 2>$LOG ;;
291 esac
292 done
293 if [ -d $TARGET_ROOT/mklost+found ]; then
294 mklost+found 2>>$LOG
295 fi
296 fi
297 sleep 2
298 }
300 # Kernel is rename to standard vmlinuz-$VERSION.
301 install_kernel()
302 {
303 mkdir -p $TARGET_ROOT/boot
304 cp /media/cdrom/boot/bzImage $TARGET_ROOT/boot/$KERNEL
305 echo "install_kernel: $KERNEL" >>$LOG
306 sleep 2
307 }
309 # Copy isolinux r/w files (not syslinux, some files are read only).
310 copy_bootloaders()
311 {
312 if [ -d "/media/cdrom/boot/isolinux" ]; then
313 mkdir -p $TARGET_ROOT/boot/isolinux
314 cp -a /media/cdrom/boot/isolinux/*.cfg $TARGET_ROOT/boot/isolinux
315 cp -a /media/cdrom/boot/isolinux/*.kbd $TARGET_ROOT/boot/isolinux
316 cp -a /media/cdrom/boot/isolinux/*.txt $TARGET_ROOT/boot/isolinux
317 cp -a /media/cdrom/boot/isolinux/*.bin $TARGET_ROOT/boot/isolinux
318 cp -a /media/cdrom/boot/isolinux/*.msg $TARGET_ROOT/boot/isolinux
319 cp -a /media/cdrom/boot/isolinux/*.lss $TARGET_ROOT/boot/isolinux
320 cp -a /media/cdrom/boot/isolinux/*.c32 $TARGET_ROOT/boot/isolinux
321 fi
322 }
324 # Extract lzma'ed or gziped rootfs.
325 extract_rootfs()
326 {
327 cd $TARGET_ROOT
328 (zcat rootfs.gz 2>/dev/null || lzma d rootfs.gz -so 2>/dev/null || \
329 cat rootfs.gz) 2>>$LOG | cpio -id 2>>$LOG
330 rm -f rootfs.gz
331 # remove link to cdrom
332 [ -d cdrom ] && rmdir cdrom
333 if [ -L usr ]; then
334 rm usr
335 cp -a /media/cdrom/usr .
336 fi
337 # unpack /usr
338 sqfs="/media/cdrom/usr.sqfs"
339 [ -f $sqfs ] || sqfs=".usr.sqfs"
340 if [ -f $sqfs ]; then
341 rmdir usr
342 sbin/unsquashfs -d usr $sqfs
343 [ "$sqfs" = ".usr.sqfs" ] && rm -f $sqfs
344 fi
345 if [ -d usr/.moved ]; then
346 ( cd usr/.moved ; find * -print ) | \
347 while read file; do
348 [ -L "$file" ] || continue
349 rm -f "$file"
350 mv "usr/.moved/$file" "$file"
351 done
352 rm -rf usr/.moved
353 fi
354 }
356 # /etc/skel (60%)
357 gen_etc_skel()
358 {
359 #Maybe we don't have /home/hacker directory
360 if [ -d $TARGET_ROOT/home/hacker ]; then
361 echo "XXX" && echo 60
362 echo -e "\nCopie des fichiers utilisateurs par défaut (/etc/skel)..."
363 echo "XXX"
364 cp -a $TARGET_ROOT/home/hacker $TARGET_ROOT/etc/skel
365 else
366 echo "XXX" && echo 60
367 echo -e "\nCréation du répertoire (/etc/skel)..."
368 echo "XXX"
369 mkdir -p $TARGET_ROOT/etc/skel \
370 $TARGET_ROOT/etc/Documents \
371 $TARGET_ROOT/etc/skel/Images \
372 $TARGET_ROOT/etc/skel/.local/bin \
373 $TARGET_ROOT/etc/skel/.local/share
374 fi
375 sleep 2
376 }
378 # Pre configure freshly installed system (70 - 90%).
379 pre_config_system()
380 {
381 cd $TARGET_ROOT
382 # Restore backup of existing /home if exist.
383 # (created by prepare_target_dev)
384 if [ -d home.bak ]; then
385 echo "XXX" && echo 75
386 echo -e "\nRestauration du répertoire /home..."
387 echo "XXX"
388 rm -rf home
389 mv home.bak home
390 sleep 2
391 fi
392 # Add root device to CHECK_FS in rcS.conf to check filesystem
393 # on each boot.
394 echo "XXX" && echo 80
395 echo -e "\nAjout de $TARGET_DEV à CHECK_FS du fichier /etc/rcS.conf..."
396 echo "XXX"
397 sed -i s#'CHECK_FS=\"\"'#"CHECK_FS=\"$TARGET_DEV\""# etc/rcS.conf
398 sleep 2
399 # Set hostname.
400 echo "XXX" && echo 85
401 echo -e "\nConfiguration du nom de machine: $HOSTNAME"
402 echo "XXX"
403 echo $HOSTNAME > etc/hostname
404 sleep 2
405 }
407 # Determin GRUB partition number and GRUB disk number.
408 grub_config()
409 {
410 DISK_LETTER=${TARGET_DEV#/dev/[h-s]d}
411 DISK_LETTER=${DISK_LETTER%[0-9]}
412 GRUB_PARTITION=$((${TARGET_DEV#/dev/[h-s]d[a-z]}-1))
413 for disk in a b c d e f g h
414 do
415 nb=$(($nb+1))
416 if [ "$disk" = "$DISK_LETTER" ]; then
417 GRUB_DISK=$(($nb-1))
418 break
419 fi
420 done
421 GRUB_ROOT="(hd${GRUB_DISK},${GRUB_PARTITION})"
422 # Creat the target GRUB configuration.
423 mkdir -p $TARGET_ROOT/boot/grub
424 cat > $TARGET_ROOT/boot/grub/menu.lst << _EOF_
425 # /boot/grub/menu.lst: GRUB boot loader configuration.
426 #
428 # By default, boot the first entry.
429 default 0
431 # Boot automatically after 8 secs.
432 timeout 8
434 # Change the colors.
435 color yellow/brown light-green/black
437 # For booting SliTaz from : $TARGET_DEV
438 #
439 title SliTaz GNU/Linux (cooking) (Kernel $KERNEL)
440 root $GRUB_ROOT
441 kernel /boot/$KERNEL root=$TARGET_DEV
443 _EOF_
444 # log
445 echo "grub_config: $TARGET_ROOT/boot/grub/menu.lst" >>$LOG
446 sleep 2
447 }
449 # Files install with gauge, calling for functions or with cmds.
450 install_files()
451 {
452 (
454 echo "XXX" && echo 10
455 echo -e "\nNettoyage de la partition racine si nécessaire..."
456 echo "XXX"
457 clean_target
459 echo "XXX" && echo 20
460 echo -e "\nInstallation du noyau ($KERNEL)..."
461 echo "XXX"
462 install_kernel
464 echo "XXX" && echo 30
465 echo -e "\nCopie des bootloaders syslinux/isolinux..."
466 echo "XXX"
467 copy_bootloaders
469 echo "XXX" && echo 40
470 echo -e "\nCopie du système compressé (rootfs.gz)..."
471 echo "XXX"
472 cp /media/cdrom/boot/rootfs.gz $TARGET_ROOT
473 sleep 2
475 echo "XXX" && echo 50
476 echo -e "\nExtraction du système racine..."
477 echo "XXX"
478 extract_rootfs
480 echo "XXX" && echo 60
481 echo -e "\nCopie des fichiers utilisateurs par défaut (/etc/skel)..."
482 echo "XXX"
483 gen_etc_skel
484 sleep 2
486 echo "XXX" && echo 70
487 echo -e "\nPreconfiguration du système..."
488 echo "XXX"
489 pre_config_system
491 echo "XXX" && echo 90
492 echo -e "\nCréation du fichier de configuration de GRUB (menu.lst)..."
493 echo "XXX"
494 grub_config
496 echo "XXX" && echo 100
497 echo -e "\nFin de l'installation des fichiers..."
498 echo "XXX"
499 echo "install_files: OK" >>$LOG
500 sleep 4
502 ) |
503 $DIALOG --title " Installation des fichiers " \
504 --backtitle "$BACKLIST" \
505 --gauge "Starting to install files..." 18 70 0
506 }
508 # GRUB info with disk name used for grub-install
509 grub_install()
510 {
511 TARGET_DISK=`echo $TARGET_DEV | sed s/"[0-9]"/''/`
512 $DIALOG --title " GRUB install " \
513 --backtitle "$BACKLIST" \
514 --clear --colors --yesno "\n
515 Avant de redémarrer sur votre nouveau système SliTaz GNU/Linux, veuillez \
516 vous assurer qu'un gestionnaire de démarrage est bien installé. Si ce n'est \
517 pas le cas vous pouvez répondre oui et installer GRUB. Si vous n'installez \
518 pas GRUB, un fichier de configuration (menu.lst) a été généré pendant \
519 l'installation, il contient les lignes qui permettent de démarrer SliTaz.\n\n
520 Une fois installé, GRUB peut facilement être reconfiguré et propose un SHell \
521 interactif au boot.\n\n
522 \Z2Faut t'il installer GRUB sur: $TARGET_DISK ?\Zn" 18 70
523 retval=$?
524 case $retval in
525 0)
526 (
527 echo "XXX" && echo 50
528 echo -e "\nExécution de grub-install sur : $TARGET_DISK..."
529 echo "XXX"
530 grub-install --no-floppy \
531 --root-directory=$TARGET_ROOT $TARGET_DISK 2>>$LOG
532 echo "XXX" && echo 100
533 echo -e "\nFin de l'installation..."
534 echo "XXX"
535 sleep 2
536 ) |
537 $DIALOG --title " GRUB install " \
538 --backtitle "$BACKLIST" \
539 --gauge "Installation de GRUB..." 18 70 0 ;;
540 1)
541 echo "grub_install: NO" >>$LOG ;;
542 255)
543 echo -e "ESC pressed.\n" && exit 0 ;;
544 esac
545 }
547 # Copy log file, umount target and eject cdrom
548 umount_devices()
549 {
550 (
551 echo "XXX" && echo 25
552 echo -e "\nCopie du fichier de log ($LOG)..."
553 echo "XXX"
554 cp -a $LOG $TARGET_ROOT/var/log
555 sleep 2
556 echo "XXX" && echo 50
557 echo -e "\nDémontage de la cible ($TARGET_DEV)..."
558 echo "XXX"
559 if mount | grep -q $TARGET_ROOT; then
560 umount $TARGET_ROOT 2>/dev/null
561 fi
562 echo "XXX" && echo 75
563 echo -e "\nDémontage et éjection du cdrom..."
564 echo "XXX"
565 if mount | grep -q /media/cdrom; then
566 umount /media/cdrom
567 eject
568 fi
569 sleep 2
570 echo "XXX" && echo 100
571 echo -e "\n$TITLE..."
572 echo "XXX"
573 sleep 2
574 ) |
575 $DIALOG --title " $TITLE " \
576 --backtitle "$BACKLIST" \
577 --gauge "$TITLE starting..." 18 70 0
578 }
580 # End of installation
581 end_of_install()
582 {
583 echo "end_of_install: `date`" >>$LOG
584 $DIALOG --title " Installation terminée " \
585 --backtitle "$BACKLIST" \
586 --yes-label "Exit" \
587 --no-label "Reboot" \
588 --clear --colors --yesno "\n
589 L'installation est terminée. Vous pouvez dès maintenant redémarrer (reboot) \
590 sur votre nouveau système SliTaz GNU/Linux et commencer à finement le \
591 configurer en fonction de vos besoins et préférences. Vous trouverez de l'aide \
592 ou un support technique gratuit via la liste de discussion et/ou le forum \
593 officiel du projet. Pour bien commencer à utiliser le système, vous pouvez \
594 vous référer aux documents du Handbook de SliTaz et utiliser le gestionnaire \
595 de paquets Tazpkg pour installer de nouveaux logiciels prêts à savourer." 18 70
596 retval=$?
597 case $retval in
598 0)
599 TITLE="Exiting"
600 umount_devices ;;
601 1)
602 TITLE="Rebooting"
603 umount_devices
604 reboot || reboot -f ;;
605 255)
606 echo -e "ESC pressed.\n" && exit 0 ;;
607 esac
608 }
610 #####################
611 # Upgrade functions #
612 #####################
614 # Start upgrade with basic informations (TODO).
615 start_upgrade()
616 {
617 $DIALOG --title " Mise à jour du système " \
618 --backtitle "$BACKLIST" \
619 --clear --colors --yesno "\n
620 La fonction de mise à jour complète du système n'est pas encore implémentée.
621 \n\n
622 * Montage de la partition.\n
623 * Sauvegarde des fichiers de configuration.\n
624 * Créer un diff entre les paquets du cdrom et ceux installés.\n
625 * Nettoyer la partition.\n
626 * Installer la version du cdrom.\n
627 * Restauration des fichiers de config.\n
628 * Réinstaller les paquets manquants depuis le miroir." 18 70
629 retval=$?
630 #check_retval
631 #echo "start_upgarde: `date`" > $LOG
632 exit 0
633 }
635 ######################
636 # Installer sequence #
637 ######################
639 case $ACTION in
640 upgrade)
641 check_root
642 start_upgrade
643 #mount_cdrom
644 ;;
645 install|*)
646 check_root
647 start_install
648 mount_cdrom
649 ask_for_target_dev
650 ask_for_mkfs_target_dev
651 prepare_target_dev
652 ask_for_hostname
653 install_files
654 grub_install
655 end_of_install
656 ;;
657 esac
659 exit 0