slitaz-tools annotate tinyutils/slitaz-installer.sh @ rev 56

Slitaz-installer.sh: squashfs'd /usr support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Feb 20 13:51:51 2008 +0100 (2008-02-20)
parents 73bec9331620
children bedae04e5027
rev   line source
pankso@8 1 #!/bin/sh
pankso@47 2 # slitaz-installer.sh - SliTaz GNU/Linux installer script.
pankso@8 3 #
pankso@47 4 # So this is SliTaz installer all in SHell script compatible Ash from Busybox.
pankso@47 5 # All the comments are in English but displayed messages are in French. The
pankso@47 6 # scrip starts with a few main variables, then all the functions and then
pankso@47 7 # a sequece of functions.
pankso@47 8 #
pankso@47 9 # (C) 2007-2008 SliTaz - GNU General Public License v3.
pankso@47 10 #
pankso@47 11 # Author : Christophe Lincoln <pankso@slitaz.org>
pankso@47 12 #
pankso@47 13 VERSION=0.1
pankso@8 14
pankso@47 15 # We need to know cdrom device and kernel version string
pankso@47 16 # to copy files.
pankso@8 17 DRIVE_NAME=`cat /proc/sys/dev/cdrom/info | grep "drive name" | cut -f 3`
pankso@8 18 CDROM=/dev/$DRIVE_NAME
pankso@47 19 TARGET_ROOT=/mnt/target
pankso@8 20 KERNEL=vmlinuz-`uname -r`
pankso@8 21
pankso@47 22 #######################
pankso@47 23 # Installer functions #
pankso@47 24 #######################
pankso@8 25
pankso@8 26 # Status function.
pankso@8 27 status()
pankso@8 28 {
pankso@8 29 local CHECK=$?
pankso@8 30 echo -en "\\033[70G[ "
pankso@8 31 if [ $CHECK = 0 ]; then
pankso@8 32 echo -en "\\033[1;33mOK"
pankso@8 33 else
pankso@8 34 echo -en "\\033[1;31mFailed"
pankso@8 35 fi
pankso@8 36 echo -e "\\033[0;39m ]"
pankso@8 37 }
pankso@8 38
pankso@47 39 # Start install with basic informations.
pankso@53 40 start_infos()
pankso@47 41 {
pankso@52 42 clear
pankso@47 43 echo ""
pankso@52 44 echo -e "\033[1mSliTaz GNU/Linux - Installateur mode texte\033[0m
pankso@52 45 ================================================================================
pankso@52 46
pankso@8 47 Bienvenue dans l'installateur en mode texte de SliTaz GNU/Linux. Il vous
pankso@8 48 suffirat de répondre à quelques questions lors des différentes étapes
pankso@8 49 d'installation. Avant de commencer, assurer vous de connaître le nom de la
pankso@8 50 partitions sur laquelle vous désirez installer SliTaz. L'installateur va
pankso@8 51 commencer par vous proposer de formater la partition cible et la monter.
pankso@8 52 Ensuite il va monter le cdrom, décompresser les fichiers et les installer
pankso@8 53 sur la cible. Pour finir, vous aurez aussi la possibilité d'installer le
pankso@8 54 gestionnaire de démarrage GRUB, si besoin est. A noter que pour continuer
pankso@8 55 cette installation, vous devez avoir les droits d'administrateur root, qui
pankso@52 56 peuvent s'obtenir via la commande 'su' et le mot de passe 'root'.
pankso@52 57
pankso@52 58 ================================================================================"
pankso@47 59 echo ""
pankso@47 60 echo -n "Commencer l'installation (oui/Non) ? "; read anser
pankso@47 61 if [ ! "$anser" = "oui" ]; then
pankso@47 62 echo -e "\nArrêt volontaire.\n"
pankso@47 63 exit 0
pankso@47 64 fi
pankso@47 65 }
pankso@8 66
pankso@8 67 # Exit install if user is not root.
pankso@47 68 check_root()
pankso@47 69 {
pankso@47 70 if test $(id -u) != 0 ; then
pankso@47 71 echo -e "
pankso@47 72 Vous devez être root pour continuer l'installation du système. Arrêt.
pankso@47 73 Vous pouvez utiliser 'su' suivi du mot de passe root pour devenir
pankso@47 74 administarteur.\n"
pankso@47 75 exit 0
pankso@47 76 fi
pankso@47 77 }
pankso@8 78
pankso@52 79 # Display a list of available partition.
pankso@52 80 fdisk_list()
pankso@52 81 {
pankso@52 82 echo ""
pankso@52 83 fdisk -l | grep ^/dev
pankso@52 84 echo ""
pankso@52 85 }
pankso@52 86
pankso@47 87 # We need a partition to install.
pankso@47 88 ask_for_target_dev()
pankso@47 89 {
pankso@47 90 echo ""
pankso@52 91 echo -e "\033[1mPartition racine\033[0m
pankso@52 92 ================================================================================
pankso@52 93
pankso@52 94 Veuilliez indiquer la partition à utiliser pour installer SliTaz GNU/Linux,
pankso@52 95 exemple : '/dev/hda1'. Vous pouvez tapez 'list' pour afficher une liste
pankso@52 96 des partitions disponibles sur le ou les disques durs."
pankso@52 97 echo ""
pankso@52 98 echo -n "Partition à utiliser : "; read anser
pankso@52 99 while [ "$anser" == "list" ]; do
pankso@52 100 fdisk_list
pankso@52 101 echo -n "Partition à utiliser : "; read anser
pankso@52 102 done
pankso@47 103 if [ "$anser" == "" ]; then
pankso@47 104 echo -e "\nPas de partition spécifiée. Arrêt.\n"
pankso@47 105 exit 0
pankso@47 106 else
pankso@47 107 TARGET_DEV=$anser
pankso@47 108 fi
pankso@47 109 }
pankso@8 110
pankso@8 111 # Mkfs if needed/wanted.
pankso@47 112 mkfs_target_dev()
pankso@47 113 {
pankso@52 114 echo ""
pankso@54 115 echo "SliTaz va être installé sur la partition : $TARGET_DEV"
pankso@47 116 echo ""
pankso@47 117 echo -n "Faut t'il formater la partition en ext3 (oui/Non) ? "; read anser
pankso@47 118 if [ "$anser" == "oui" ]; then
pankso@47 119 mkfs.ext3 $TARGET_DEV
pankso@47 120 else
pankso@47 121 echo "Le système de fichiers déjà présent sera utilisé..."
pankso@47 122 fi
pankso@47 123 }
pankso@8 124
pankso@47 125 # Mount target device and cdrom.
pankso@47 126 mount_devices()
pankso@47 127 {
pankso@53 128 echo ""
pankso@47 129 mkdir -p $TARGET_ROOT /media/cdrom
pankso@47 130 echo "Montage de la partitions et du cdrom..."
pankso@53 131 # Mount points can be already used.
pankso@52 132 if mount | grep $TARGET_ROOT; then
pankso@52 133 umount $TARGET_ROOT
pankso@52 134 fi
pankso@53 135 if mount | grep /media/cdrom; then
pankso@53 136 umount /media/cdrom
pankso@53 137 fi
pankso@47 138 mount $TARGET_DEV $TARGET_ROOT
pankso@52 139 mount -t iso9660 $CDROM /media/cdrom || exit 1
pankso@47 140 }
pankso@8 141
pankso@47 142 # Copy and install Kernel.
pankso@47 143 install_kernel()
pankso@47 144 {
pankso@53 145 echo ""
pankso@47 146 echo -n "Création du répertoire /boot..."
pankso@47 147 mkdir -p $TARGET_ROOT/boot
pankso@47 148 status
pankso@47 149 echo -n "Copie du noyau Linux..."
pankso@47 150 cp /media/cdrom/boot/bzImage $TARGET_ROOT/boot/$KERNEL
pankso@47 151 status
pankso@47 152 }
pankso@8 153
pankso@47 154 # Syslinux/isolinux.
pankso@47 155 copy_bootloaders()
pankso@47 156 {
pankso@47 157 echo -n "Copie des bootloaders syslinux/isolinux..."
pankso@47 158 if [ -d "/media/cdrom/boot/syslinux" ]; then
pankso@47 159 cp -a /media/cdrom/boot/syslinux $TARGET_ROOT/boot
pankso@47 160 fi
pankso@47 161 if [ -d "/media/cdrom/boot/isolinux" ]; then
pankso@47 162 cp -a /media/cdrom/boot/isolinux $TARGET_ROOT/boot
pankso@47 163 fi
pankso@47 164 status
pankso@47 165 }
pankso@14 166
pankso@47 167 # Copy and extract lzma'ed or gziped rootfs.
pankso@47 168 copy_extract_rootfs()
pankso@47 169 {
pankso@47 170 echo -n "Copie du système de fichier racine..."
pankso@47 171 cp /media/cdrom/boot/rootfs.gz $TARGET_ROOT
pankso@47 172 status
pankso@47 173 echo "Extraction du système de fichiers racine (rootfs.gz)..."
pankso@47 174 cd $TARGET_ROOT
pascal@56 175 ( zcat rootfs.gz 2>/dev/null || lzma d rootfs.gz -so 2>/dev/null || \
pascal@56 176 cat rootfs.gz ) | cpio -id
pascal@56 177 if [ -f .usr.sqfs ]; then
pascal@56 178 echo -en "\nDécompression de /usr... "
pascal@56 179 /sbin/unsquashfs .usr.sqfs
pascal@56 180 if [ -d squashfs-root/.moved ]; then
pascal@56 181 ( cd squashfs-root/.moved ; find * -print ) | \
pascal@56 182 while read $file; do
pascal@56 183 rm -f $file
pascal@56 184 mv squashfs-root/.moved/$file $file
pascal@56 185 done
pascal@56 186 rmdir squashfs-root/.moved
pascal@56 187 fi
pascal@56 188 mv squashfs-root/* usr
pascal@56 189 rmdir squashfs-root
pascal@56 190 fi
pankso@53 191 echo ""
pankso@47 192 echo -n "Suppression des fichiers copiés..."
pascal@56 193 rm -f rootfs.gz init
pankso@47 194 status
pankso@47 195 }
pankso@27 196
pankso@53 197 # Pre configure freshly installed system.
pankso@53 198 pre_config_system()
pankso@47 199 {
pankso@53 200 # /etc/skel with hacker default personnal files.
pankso@47 201 echo -n "Copie des fichiers personnels de hacker dans : /etc/skel..."
pankso@47 202 cp -a $TARGET_ROOT/home/hacker $TARGET_ROOT/etc/skel
pankso@47 203 status
pankso@53 204 # Add root device to CHECK_FS in rcS.conf to check filesystem
pankso@53 205 # on each boot.
pankso@53 206 echo -n "Configuration de CHECK_FS dans /etc/rcS.conf..."
pankso@53 207 sed -i s#'CHECK_FS=\"\"'#"CHECK_FS=\"$TARGET_DEV\""# $TARGET_ROOT/etc/rcS.conf
pankso@53 208 status
pankso@53 209 sleep 2
pankso@47 210 }
pankso@47 211
pankso@47 212 # Determin disk letter, GRUB partition number and GRUB disk number.
pankso@47 213 grub_install()
pankso@47 214 {
pankso@47 215 DISK_LETTER=${TARGET_DEV#/dev/[h-s]d}
pankso@47 216 DISK_LETTER=${DISK_LETTER%[0-9]}
pankso@52 217 GRUB_PARTITION=$((${TARGET_DEV#/dev/[h-s]d[a-z]}-1))
pankso@47 218 for disk in a b c d e f g h
pankso@47 219 do
pankso@47 220 nb=$(($nb+1))
pankso@47 221 if [ "$disk" = "$DISK_LETTER" ]; then
pankso@47 222 GRUB_DISK=$(($nb-1))
pankso@47 223 break
pankso@47 224 fi
pankso@47 225 done
pankso@47 226 GRUB_ROOT="(hd${GRUB_DISK},${GRUB_PARTITION})"
pankso@47 227
pankso@47 228 # Creat the target GRUB configuration.
pankso@47 229 echo -n "Création du fichier de configuration de GRUB (menu.lst)..."
pankso@47 230 mkdir -p $TARGET_ROOT/boot/grub
pankso@47 231 cat > $TARGET_ROOT/boot/grub/menu.lst << _EOF_
pankso@16 232 # /boot/grub/menu.lst: GRUB boot loader configuration.
pankso@16 233 #
pankso@16 234
pankso@16 235 # By default, boot the first entry.
pankso@16 236 default 0
pankso@16 237
pankso@54 238 # Boot automatically after 8 secs.
pankso@54 239 timeout 8
pankso@16 240
pankso@16 241 # Change the colors.
pankso@16 242 color yellow/brown light-green/black
pankso@16 243
pankso@16 244 # For booting SliTaz from : $TARGET_DEV
pankso@16 245 #
pankso@16 246 title SliTaz GNU/Linux (cooking) (Kernel $KERNEL)
pankso@47 247 root $GRUB_ROOT
pankso@16 248 kernel /boot/$KERNEL root=$TARGET_DEV
pankso@16 249
pankso@47 250 _EOF_
pankso@47 251 status
pankso@47 252 # GRUB info with disk name used for grub-install
pankso@47 253 TARGET_DISK=`echo $TARGET_DEV | sed s/"[0-9]"/''/`
pankso@47 254 echo ""
pankso@47 255 echo -e "\033[1mGRUB - Informations et installation\033[0m
pankso@8 256 ================================================================================
pankso@8 257
pankso@8 258 Avant de redémarrer sur votre nouveau système SliTaz GNU/Linux, veuillez vous
pankso@8 259 assurer qu'un gestionnaire de démarrage est bien installé. Si ce n'est pas le
pankso@47 260 cas vous pouvez répondre oui et installer GRUB ou lancer la commande :
pankso@8 261
pankso@47 262 # grub-install --no-floppy --root-directory=$TARGET_ROOT $TARGET_DISK
pankso@8 263
pankso@16 264 Les lignes suivantes on été ajoutées au fichier de configuration de GRUB
pankso@47 265 /boot/grub/menu.lst de la cible. Elles feront démarrer SliTaz en installant
pankso@47 266 GRUB. Si vous n'installez pas GRUB, vous pouvez utiliser ces même lignes dans
pankso@47 267 un autre fichier menu.lst, situé sur une autre partitions :
pankso@8 268
pankso@8 269 title SliTaz GNU/Linux (cooking) (Kernel $KERNEL)
pankso@47 270 root $GRUB_ROOT
pankso@8 271 kernel /boot/$KERNEL root=$TARGET_DEV
pankso@8 272
pankso@8 273 ================================================================================"
pankso@47 274 echo ""
pankso@47 275
pankso@47 276 # GRUB install
pankso@47 277 echo -n "Installer GRUB sur le disque : $TARGET_DISK (oui/Non) ? "; read anser
pankso@47 278 if [ "$anser" = "oui" ]; then
pankso@47 279 grub-install --no-floppy --root-directory=$TARGET_ROOT $TARGET_DISK
pankso@53 280 else
pankso@53 281 echo "GRUB n'a pas été installé."
pankso@47 282 fi
pankso@47 283 }
pankso@47 284
pankso@47 285 # End of installation
pankso@47 286 end_of_install()
pankso@47 287 {
pankso@52 288 echo ""
pankso@52 289 echo -e "\033[1mFin de l'installation\033[0m
pankso@47 290 ================================================================================
pankso@52 291
pankso@47 292 Installation terminée. Vous pouvez dès maintenant redémarrer sur votre nouveau
pankso@47 293 système SliTaz GNU/Linux et commencer à finement le configurer en fonction de
pankso@47 294 vos besoins et préférences. Vous trouverez un support technique gratuit via
pankso@53 295 la liste de discussion et/ou le forum officiel du projet."
pankso@47 296 echo ""
pankso@47 297 }
pankso@47 298
pankso@47 299 ######################
pankso@47 300 # Installer sequence #
pankso@47 301 ######################
pankso@47 302
pankso@53 303 start_infos
pankso@47 304 check_root
pankso@47 305 ask_for_target_dev
pankso@47 306 mkfs_target_dev
pankso@47 307 mount_devices
pankso@47 308 install_kernel
pankso@47 309 copy_bootloaders
pankso@47 310 copy_extract_rootfs
pankso@53 311 pre_config_system
pankso@47 312 grub_install
pankso@47 313 end_of_install
pankso@47 314
pankso@47 315 exit 0