Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /bin/bash
- shopt -s expand_aliases # Active l'expansion d'alias.
- alias Chroot='chroot $Mont'
- # Ecrit par : esclapion
- # Version : 1.5
- # Date : 12 Mars 2012
- if [ `whoami` != root ]; then
- echo Script à lancer en tant que root
- exit 1
- fi
- # ***************************************************
- # *
- # Variables globales à paramétrer par l'utilisateur *
- # *
- # ***************************************************
- Mont=/mnt/arch
- Root=/dev/sda7
- Home=/dev/sda8
- Swap=
- User=pat
- # Labels servant au montage des partitions
- LabelRoot=RootArch
- LabelHome=HomeArch
- LabelSwap=SwapArch
- # Architecture 64 bits, doit être la même que celle de la machine hôte.
- # Pour l'instant, le 32 bits n'est pas supporté.
- Arch=x86_64
- # Miroir utilisé pour l'installation
- Miroir=http://mir.archlinux.fr
- # Nom de la machine cible. Par défaut, celui de la machine hôte.
- #Host=`hostname`
- Host=arch
- # Emplacement du Grub, par défaut sur la machine hôte. Mettre à blanc pour éviter son installation
- Grub=`df / | grep '/$' | sed 's/[0-9][0-9]*.*//'`
- # Bureau par défaut. Doit valoir Gnome, Cinnammon,ou Xfce. Sinon, pas de bureau installé.
- Bureau=Gnome
- # Navigateur par déFaut. Peut être vide, contenir Chromium ou Firefox
- Navig=Chromium
- # Gestionnaire de courrier par défaut. Peut être vide ou Thunderbird
- # ------------------------------------------------------------------
- Email=Thunderbird
- # Installation du Wifi s'il y en a un
- # -----------------------------------
- Wifi="wlan0" # Mettre à blanc si pas de Wifi
- Essid=Rominet # Nom de la box
- Clewpa="2CCAD128FF" # Clé de sécurité de la Box
- # Fin paramètrage
- # ---------------
- # Mémoriser le répertoire de lancemnt (sert à installation sans réseau)
- Cwd=$PWD
- # Formatage et montage des partitions
- # -----------------------------------
- umount -a 2>/dev/null # Virer les partitions parasites du système hôte
- echo "Formatage de la partition système."
- mkfs.ext4 -q -L $LabelRoot $Root || exit 1
- mkdir -p $Mont
- mount $Root $Mont
- mkdir -p $Mont/home
- # Si une partition home séparée a été déclarée
- if [ $Home ]; then
- e2label $Home $LabelHome # Etiqueter cette partition
- mount $Home $Mont/home # La monter sur /home
- fi
- # Si une partition de swap a été déclarée
- [ $Swap ] && mkswap -L $LabelSwap $Swap # Etiqueter cette partition et la préparer
- echo -e '\n\E[37;44m'"\033[1m Debut de l'installation \033[0m\n"
- cd $Mont
- [ -e tmp ] || mkdir tmp
- chmod 1777 tmp
- # Téléchargement du chroot minimal
- # --------------------------------
- echo
- cd tmp
- echo -e '\E[37;44m'"\033[1m Téléchargement du chroot minimal... \033[0m"
- Minichrooturl="$Miroir/~tuxce/chroot"
- Minichrootarchive="archlinux.chroot.${Arch}.tgz"
- if [ -e "$Cwd/${Minichrootarchive}" ]; then
- echo "Archive trouvée dans $Mont/tmp"
- else
- if wget -q "${Minichrooturl}/${Minichrootarchive}"; then
- echo "$Minichrootarchive : téléchargée."
- mv $Minichrootarchive $Cwd
- else
- echo "Erreur lors du téléchargement de ${Minichrooturl}/${Minichrootarchive} !"
- exit 1
- fi
- fi
- cd ..
- echo -e '\n\E[37;44m'"\033[1m Décompression... \033[0m"
- tar xf "$Cwd/${Minichrootarchive}" && echo "${Minichrootarchive} : fait." || exit
- # Appliquer le miroir
- [ -e "$Mont/etc/pacman.d" ] || mkdir -p "$Mont"/etc/pacman.d
- echo "Server = $Miroir/\$repo/os/$Arch/" > "$Mont"/etc/pacman.d/mirrorlist
- # Restauration du cache de pacman s'il y en a une sauvegarde
- [ -e $Cwd/pacman.tar ] && tar xf $Cwd/pacman.tar
- # Installation système de base
- # ----------------------------
- echo -e '\n\E[37;44m'"\033[1m Installation du système de base... \033[0m"
- # Montage des dossiers système pour chrooter
- mount -o bind /proc "$Mont"/proc || (echo "Ne peut pas monter /proc";exit 1) && echo "/proc montée."
- mount -o bind /dev "$Mont"/dev || (echo "Ne peut pas monter /dev";exit 1) && echo "/dev montée."
- mount -o bind /sys "$Mont"/sys || (echo "Ne peut pas monter /sys";exit 1) && echo "/sys montée."
- cp /etc/resolv.conf "$Mont"/etc/
- Chroot pacman -Syf base --noconfirm || exit 1
- # resolv.conf semble cassé par l'install précédente
- cp /etc/resolv.conf "$Mont"/etc/
- echo -e '\n\E[37;44m'"\033[1m Système de base installé. \033[0m"
- # Traitement rc.conf
- # ------------------
- echo -e '\n\E[37;44m'"\033[1m Traitement rc.conf \033[0m"
- sed -i "
- /^HARDWARECLOCK=$/s/$/localtime/
- /^TIMEZONE=$/s/$/Europe\/Paris/
- /^KEYMAP=$/s/$/fr-pc/
- /^CONSOLEFONT=$/s/$/lat9w-16/
- /^LOCALE=$/s/$/fr_FR.utf8/
- /^HOSTNAME=$/s/$/$Host/
- /^interface=$/s/$/eth0/
- " $Mont/etc/rc.conf
- # Rajout nom du PC dans /etc/hosts
- sed -i "/localhost$/s/$/ $Host/" $Mont/etc/hosts
- # Traitement locale.gen
- # ---------------------
- echo -e '\n\E[37;44m'"\033[1m Traitement locale.gen \033[0m"
- sed -i '
- /^#fr_FR.UTF-8/s/#//
- ' $Mont/etc/locale.gen
- Chroot locale-gen # || exit 1
- # Traitement fstab et mtab
- # ------------------------
- echo -e '\n\E[37;44m'"\033[1m Traitement fstab et mtab \033[0m"
- echo 'none /dev/shm tmpfs defaults,size=792M,noexec,nodev,nosuid 0 0
- tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
- tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0
- tmpfs /var/lock tmpfs defaults,noatime,mode=1777 0 0
- tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0' > $Mont/etc/fstab
- # Test si disque système est un SSD
- tmp=`echo $Root | sed -e 's/\/.*\///' -e 's/[0-9]*$//'`
- Ssdr=
- [ `cat /sys/block/$tmp/queue/rotational` -eq 0 ] && Ssdr=1
- # Si c'est un SSD, ajouter l'option discard pour activer le TRIM
- if [ $Ssdr ]; then
- echo "LABEL=$LabelRoot / ext4 discard,noatime,nodiratime 0 1" >> $Mont/etc/fstab
- else
- # Si disque normal
- [ $Home ] && echo "LABEL=$LabelRoot / ext4 defaults 0 1">>$Mont/etc/fstab
- fi
- # Test si partition utilisateur sur un SSD
- if [ $Home ]; then
- tmp=`echo $Home | sed -e 's/\/.*\///' -e 's/[0-9]*$//'`
- Ssdh=
- [ `cat /sys/block/$tmp/queue/rotational` -eq 0 ] && Ssdh=1
- # Si c'est un SSD, ajouter l'option discard pour activer le TRIM
- if [ $Ssdh ]; then
- echo "LABEL=$LabelHome /home ext4 discard,noatime,nodiratime 0 1" >> $Mont/etc/fstab
- else
- # Si disque normal
- echo "LABEL=$LabelHome /home ext4 defaults 0 1">>$Mont/etc/fstab
- fi
- fi
- # Déclaration d'un swap éventuel
- [ $Swap ] && echo "LABEL=$LabelSwap swap swap defaults 0 0">>$Mont/etc/fstab
- # Traitement mirrorlist
- # ---------------------
- echo
- echo -e '\E[37;44m'"\033[1m Traitement mirrorlist \033[0m"
- tmp=`basename $Miroir`
- sed -i /$tmp/s/^#// $Mont/etc/pacman.d/mirrorlist
- # Installation de yaourt
- # ----------------------
- echo -e '\n\E[37;44m'"\033[1m Installation de yaourt \033[0m"
- # rajout de réference à AUR pour installation yaourt
- echo '
- [archlinuxfr]
- # SigLevel = PackageOptional
- Server = http://repo.archlinux.fr/$arch
- ' >> $Mont/etc/pacman.conf
- Chroot pacman -Sy
- Chroot pacman -S yaourt --noconfirm
- # suppression référence directe à AUR (dangereux, sinon)
- sed -i '/^\[archlinuxfr\]/,+2s/^/# /' $Mont/etc/pacman.conf
- Chroot yaourt -Sy
- echo -e '\E[37;44m'"\033[1m Installation base-devel \033[0m"
- Chroot pacman -Syf base-devel --noconfirm
- # Montage cache de Yaourt en local
- sed -i '/EXPORTDIR=/s/.*/EXPORTDIR=\/var\/cache\/pacman\/pkg-local/' $Mont/etc/yaourtrc
- mkdir -p $Mont/var/cache/pacman/pkg-local
- chmod 766 $Mont/var/cache/pacman/pkg-local
- # Installation pilote carte graphique
- # -----------------------------------
- echo -e '\n\E[37;44m'"\033[1m Installation carte Graphique \033[0m"
- lspci | grep VGA
- Carte=`lspci | grep VGA | awk '{print $5}' | tr 'a-z' 'A-Z'`
- echo Pilote $Carte détecté.
- case $Carte in
- ATI)
- echo Ajout du module radeon à mkinitcpio.conf.
- sed -i /^MODULE/s/\"\"/\"radeon\"/ $Mont/etc/mkinitcpio.conf
- echo Installation du pilote libre.
- Chroot pacman -S xf86-video-ati --noconfirm
- ;;
- NVIDIA)
- echo Ajout du module nouveau à mkinitcpio.conf.
- sed -i /^MODULE/s/\"\"/\"nouveau\"/ $Mont/etc/mkinitcpio.conf
- echo Installation du pilote libre.
- Chroot pacman -S xf86-video-nouveau nouveau-dri --noconfirm
- echo '
- Section "Device"
- Identifier "nvidia card"
- Driver "nouveau"
- EndSection' > $Mont/etc/X11/xorg.conf.d/20-nouveau.conf
- ;;
- INTEL)
- Chroot pacman -S xf86-video-intel --noconfirm
- ;;
- *)
- echo Type de carte graphique $Carte ; pilote Vesa par défaut
- Chroot pacman -S xf86-video-vesa --noconfirm
- ;;
- esac
- # Metre à jour le firmware du noyau
- Chroot pacman -S linux-firmware --noconfirm
- Chroot mkinitcpio -p linux
- # Installation interface graphique Xorg
- # --------------------------------------
- echo -e '\n\E[37;44m'"\033[1m Installation interface graphique Xorg \033[0m"
- Chroot pacman -Syu xorg-server xorg-xinit xorg-utils xorg-server-utils --noconfirm
- # OPTIONNEL, A REVOIR
- # Permet un test autonome de Xorg
- Chroot pacman -S xorg-twm xorg-xclock xterm --noconfirm
- # Ajout de polices bien lissées
- Chroot pacman -S xorg-fonts-type1 ttf-dejavu artwiz-fonts font-bh-ttf \
- font-bitstream-speedo gsfonts sdl_ttf ttf-bitstream-vera \
- ttf-cheapskate ttf-liberation --noconfirm
- # Configuration du clavier
- ex $Mont/etc/X11/xorg.conf.d/10-evdev.conf <<=
- /MatchIsKeyboard/+2a
- Option "XkbLayout" "fr"
- Option "XkbVariant" "latin9"
- Option "XkbOptions" "compose:menu,terminate:ctrl_alt_bksp"
- .
- wq
- =
- # Déclaration des utilisateurs
- # -- -------------------------
- echo -e '\n\E[37;44m'"\033[1m Déclaration des utilisateurs \033[0m"
- [ $User ] && Chroot useradd -G users,wheel,audio,optical,lp,scanner,log,power,floppy,storage,video -m $User
- # récupération des mots de passe depuis le /etc/shadow de l'hôte
- echo -n `sed -n "/^root/p" /etc/shadow | awk -F: '{print $1":"$2}'` > /tmp/toto
- tmp=`sed -n "/^root/p" $Mont/etc/shadow | awk -F: '{print $3":"$4":::::"}'`
- echo ":"$tmp >> /tmp/toto
- ex $Mont/etc/shadow <<=
- /^root:/
- .d
- .-1r /tmp/toto
- wq
- =
- if [ $User ]; then
- echo -n `sed -n "/^$User/p" /etc/shadow | awk -F: '{print $1":"$2}'` > /tmp/toto
- tmp=`sed -n "/^$User/p" $Mont/etc/shadow | awk -F: '{print $3":"$4":"$5":"$6":::"}'`
- echo ":"$tmp >> /tmp/toto
- ex $Mont/etc/shadow <<=
- /^$User:/
- .d
- .-1r /tmp/toto
- wq
- =
- fi
- rm -f /tmp/toto
- # Installation d'un Navigateur
- # ----------------------------
- echo -e '\n\E[37;44m'"\033[1m Installation navigateur $Navig \033[0m"
- case $Navig in
- Chromium)
- Chroot pacman -S chromium flashplugin --noconfirm
- # correction mauvais affichage des caractères
- echo '
- <match target="font">
- <edit name="autohint" mode="assign">
- <bool>true</bool>
- </edit>
- <edit name="hinting" mode="assign">
- <bool>true</bool>
- </edit>
- <edit mode="assign" name="hintstyle">
- <const>hintslight</const>
- </edit>
- </match>
- ' > $Mont/home/$User/.fonts.conf
- ;;
- Firefox)
- Chroot pacman -S firefox firefox-i18n-fr --noconfirm
- ;;
- *)
- echo "Pas de navigateur défini."
- ;;
- esac
- # Installation d'un gestionnaire de courrier
- # ------------------------------------------
- echo -e '\n\E[37;44m'"\033[1m Installation gestionnaire de courrier $Email \033[0m"
- case $Email in
- Thunderbird)
- Chroot pacman -S thunderbird thunderbird-i18n-fr libcanberra --noconfirm
- ;;
- *)
- echo "Pas de gestionnaire de courrier défini."
- ;;
- esac
- # Installation environnement graphique
- # ------------------------------------
- case $Bureau in
- Gnome|Cinnamon)
- echo -e '\n\E[37;44m'"\033[1m Installation bureau $Bureau \033[0m"
- # Installation paquet gnome
- Chroot pacman -S gnome --noconfirm
- # Ajout de gdm pour avoir une interface graphique de connexion
- Chroot pacman -S gdm --noconfirm
- # optionnel
- Chroot pacman -S gnome-extra --noconfirm
- # Optionnel : plugins multimedia
- Chroot pacman -S gstreamer0.10-plugins --noconfirm
- # Ajout de dbus et gdm aux services dans /etc/rc.conf
- sed -i '/^DAEMONS=/s/)/ dbus gdm)/' $Mont/etc/rc.conf
- # Ouverture de session automatique
- sed -i '
- /^\[daemon\]/ a\
- TimedLoginEnable=0\
- AutomaticLogin=pat\
- AutomaticLoginEnable=1
- ' $Mont/etc/gdm/custom.conf
- # Partie spécifique Cinnamon
- if [ $Bureau == Cinnamon ]; then
- # Ajout de base-devel, nécessaire pour compiler muffin
- Chroot pacman -Sf base-devel --noconfirm
- # Installation de Cinnmmon (y compris muffin)
- Chroot yaourt -Sf cinnamon --noconfirm
- fi
- ;;
- Xfce)
- echo -e '\n\E[37;44m'"\033[1m Installation bureau $Bureau \033[0m"
- # Installation paquet xfce
- Chroot pacman -S xfce4 --noconfirm
- # Optionnel
- Chroot pacman -S xfce4-goodies --noconfirm
- # Ajout de DBus aux services dans /etc/rc.conf
- sed -i '/^DAEMONS=/s/)/ dbus)/' $Mont/etc/rc.conf
- # Optionnel : lancement automatique de Xfce au démarrage
- echo '
- # Démarrer Xfce automatiquement
- if [ "$(tty)" = "/dev/tty1" -o "$(tty)" = "/dev/vc/1" ];
- then startxfce4
- fi' > $Mont/home/$User/.bashrc
- ;;
- *)
- echo -e '\n\E[37;44m'"\033[1m Pas de bureau installé. \033[0m"
- ;;
- esac
- # Optionnel : installation polices Microsoft
- Chroot yaourt -S ttf-ms-fonts --noconfirm
- # Installation optionnelle du Wifi
- # --------------------------------
- if [ "$Wifi" ] ; then
- # Wifi=`echo $tmp | awk '{print $1}'` # nom de la liaison
- # Essid=`echo $tmp | awk -F'"' '{print $2}'` # Nom du point d'accès utilisé
- Chroot pacman -S netcfg --noconfirm
- sed "
- /^INTERFACE=/s/wlan0/$Wifi/
- /^ESSID=/s/MyNetwork/$Essid/
- /^KEY/s/WirelessKey/$Clewpa/
- " $Mont/etc/network.d/examples/wireless-wpa > $Mont/etc/network.d/I$Wifi
- sed -i "
- /HOSTNAME/ a\
- NETWORKS=(I$Wifi)
- " $Mont/etc/rc.conf
- sed -i '/^DAEMONS=/s/(/(@net-profiles /' $Mont/etc/rc.conf
- fi
- # Installation du Grub 2 si demandé
- # ---------------------------------
- if [ "$Grub" ]; then
- echo -e '\n\E[37;44m'"\033[1m Installation de Grub 2 \033[0m"
- # Suppression du paquet Grub Legacy
- Chroot pacman -R grub --noconfirm
- # Installation paquet Grub 2
- Chroot pacman -Sf grub2-bios --noconfirm
- # Installation os-prober (pour récupérer un boot Windows)
- Chroot pacman -S os-prober --noconfirm
- # Ajout du système hôte au menu du Grub
- sed '
- 1,/10_linux/d
- /10_linux/,$d
- ' /boot/grub/grub.cfg >> $Mont/etc/grub.d/40_custom
- # Installation du Grub
- Chroot grub-install $Grub
- # Si Root sur SSD, passer le scheduler de cfq à noop
- [ $Ssdr ] && sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT=/s/"$/ elevator=noop splash"/' $Mont/etc/default/grub
- # Créer fichiers de configuration du Grub
- Chroot grub-mkconfig -o /boot/grub/grub.cfg
- fi
- # Sauvegarde du cache de pacman (pour nouvelle installation ou pas de réseau)
- # ---------------------------------------------------------------------------
- tar cf $Cwd/pacman.tar var/cache/pacman
- rm -rf var/cache/pacman/*
- umount $Mont/sys && echo "/sys démontée."
- umount $Mont/dev && echo "/dev démontée."
- umount $Mont/proc && echo "/proc démontée."
- [ $Home ] && umount $Home
- umount -l $Root
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement