Advertisement
Guest User

Untitled

a guest
Mar 11th, 2012
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.54 KB | None | 0 0
  1. #! /bin/bash
  2. shopt -s expand_aliases # Active l'expansion d'alias.
  3. alias Chroot='chroot $Mont'
  4.  
  5. # Ecrit par : esclapion
  6. # Version : 1.4
  7. # Date : 11 Mars 2012
  8.  
  9. if [ `whoami` != root ]; then
  10. echo Script à lancer en tant que root
  11. exit 1
  12. fi
  13.  
  14.  
  15. # ***************************************************
  16. # *
  17. # Variables globales à paramétrer par l'utilisateur *
  18. # *
  19. # ***************************************************
  20.  
  21. Mont=/mnt/arch
  22. Root=/dev/sda7
  23. Home=/dev/sda8
  24. Swap=/dev/sdb3
  25. User=pat
  26.  
  27. # Labels servant au montage des partitions
  28. LabelRoot=RootArch
  29. LabelHome=HomeArch
  30. LabelSwap=SwapArch
  31.  
  32. # Architecture 64 bits, doit être la même que celle de la machine hôte.
  33. # Pour l'instant, le 32 bits n'est pas supporté.
  34. Arch=x86_64
  35.  
  36. # Miroir utilisé pour l'installation
  37. Miroir=http://mir.archlinux.fr
  38.  
  39. # Nom de la machine cible. Par défaut, celui de la machine hôte.
  40. #Host=`hostname`
  41. Host=arch
  42.  
  43. # Emplacement du Grub, par défaut sur la machine hôte. Mettre à blanc pour éviter son installation
  44. Grub=`df / | grep '/$' | sed 's/[0-9][0-9]*.*//'`
  45.  
  46. # Bureau par défaut. Doit valoir Gnome, Cinnammon,ou Xfce. Sinon, pas de bureau installé.
  47. Bureau=Gnome
  48.  
  49. # Navigateur par déFaut. Peut être vide, contenir Chromium ou Firefox
  50. Navig=Chromium
  51.  
  52. # Gestionnaire de courrier par défaut. Peut être vide ou Thunderbird
  53. # ------------------------------------------------------------------
  54. Email=Thunderbird
  55.  
  56. # Installation du Wifi s'il y en a un
  57. # -----------------------------------
  58. Wifi="wlan0" # Mettre à blanc si pas de Wifi
  59. Essid=Rominet # Nom de la box
  60. Clewpa="2CCAD128FF" # Clé de sécurité de la Box
  61.  
  62. # Fin paramètrage
  63. # ---------------
  64.  
  65.  
  66. # Formatage et montage des partitions
  67. # -----------------------------------
  68. umount -a 2>/dev/null # Virer les partitions parasites du système hôte
  69. echo "Formatage de la partition système."
  70. mkfs.ext4 -q -L $LabelRoot $Root || exit 1
  71. mkdir -p $Mont
  72. mount $Root $Mont
  73. mkdir -p $Mont/home
  74. # Si une partition home séparée a été déclarée
  75. if [ $Home ]; then
  76. e2label $Home $LabelHome # Etiqueter cette partition
  77. mount $Home $Mont/home # La monter sur /home
  78. fi
  79. # Si une partition de swap a été déclarée
  80. [ $Swap ] && mkswap -L $LabelSwap $Swap # Etiqueter cette partition et la préparer
  81.  
  82. echo -e '\n\E[37;44m'"\033[1m Debut de l'installation \033[0m\n"
  83.  
  84. cd $Mont
  85. [ -e tmp ] || mkdir tmp
  86. chmod 1777 tmp
  87.  
  88.  
  89. # Téléchargement du chroot minimal
  90. # --------------------------------
  91. echo
  92. cd tmp
  93. echo -e '\E[37;44m'"\033[1m Téléchargement du chroot minimal... \033[0m"
  94. Minichrooturl="$Miroir/~tuxce/chroot"
  95. Minichrootarchive="archlinux.chroot.${Arch}.tgz"
  96. if [ -e "${Minichrootarchive}" ]; then
  97. echo "Archive trouvée dans $Mont/tmp"
  98. else
  99. if wget -q "${Minichrooturl}/${Minichrootarchive}"; then
  100. echo "$Minichrootarchive : téléchargée."
  101. else
  102. echo "Erreur lors du téléchargement de ${Minichrooturl}/${Minichrootarchive} !"
  103. exit 1
  104. fi
  105. fi
  106. cd ..
  107.  
  108. echo -e '\n\E[37;44m'"\033[1m Décompression... \033[0m"
  109. tar xf "tmp/${Minichrootarchive}" && echo "${Minichrootarchive} : fait." || exit
  110.  
  111. # Appliquer le miroir
  112. [ -e "$Mont/etc/pacman.d" ] || mkdir -p "$Mont"/etc/pacman.d
  113. echo "Server = $Miroir/\$repo/os/$Arch/" > "$Mont"/etc/pacman.d/mirrorlist
  114.  
  115. # Installation système de base
  116. # ----------------------------
  117. echo -e '\n\E[37;44m'"\033[1m Installation du système de base... \033[0m"
  118.  
  119. # Montage des dossiers système pour chrooter
  120. mount -o bind /proc "$Mont"/proc || (echo "Ne peut pas monter /proc";exit 1) && echo "/proc montée."
  121. mount -o bind /dev "$Mont"/dev || (echo "Ne peut pas monter /dev";exit 1) && echo "/dev montée."
  122. mount -o bind /sys "$Mont"/sys || (echo "Ne peut pas monter /sys";exit 1) && echo "/sys montée."
  123.  
  124. cp /etc/resolv.conf "$Mont"/etc/
  125. Chroot pacman -Syf base --noconfirm || exit 1
  126. # resolv.conf semble cassé par l'install précédente
  127. cp /etc/resolv.conf "$Mont"/etc/
  128. echo -e '\n\E[37;44m'"\033[1m Système de base installé. \033[0m"
  129.  
  130.  
  131. # Traitement rc.conf
  132. # ------------------
  133. echo -e '\n\E[37;44m'"\033[1m Traitement rc.conf \033[0m"
  134. sed -i "
  135. /^HARDWARECLOCK=$/s/$/localtime/
  136. /^TIMEZONE=$/s/$/Europe\/Paris/
  137. /^KEYMAP=$/s/$/fr-pc/
  138. /^CONSOLEFONT=$/s/$/lat9w-16/
  139. /^LOCALE=$/s/$/fr_FR.utf8/
  140. /^HOSTNAME=$/s/$/$Host/
  141. /^interface=$/s/$/eth0/
  142. " $Mont/etc/rc.conf
  143. # Rajout nom du PC dans /etc/hosts
  144. sed -i "/localhost$/s/$/ $Host/" $Mont/etc/hosts
  145.  
  146.  
  147. # Traitement locale.gen
  148. # ---------------------
  149. echo -e '\n\E[37;44m'"\033[1m Traitement locale.gen \033[0m"
  150. sed -i '
  151. /^#fr_FR.UTF-8/s/#//
  152. ' $Mont/etc/locale.gen
  153. Chroot locale-gen # || exit 1
  154.  
  155.  
  156. # Traitement fstab et mtab
  157. # ------------------------
  158. echo -e '\n\E[37;44m'"\033[1m Traitement fstab et mtab \033[0m"
  159. echo 'none /dev/shm tmpfs defaults,size=792M,noexec,nodev,nosuid 0 0
  160. tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
  161. tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0
  162. tmpfs /var/lock tmpfs defaults,noatime,mode=1777 0 0
  163. tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0' > $Mont/etc/fstab
  164.  
  165. # Test si disque système est un SSD
  166. tmp=`echo $Root | sed -e 's/\/.*\///' -e 's/[0-9]*$//'`
  167. Ssdr=
  168. [ `cat /sys/block/$tmp/queue/rotational` -eq 0 ] && Ssdr=1
  169. # Si c'est un SSD, ajouter l'option discard pour activer le TRIM
  170. if [ $Ssdr ]; then
  171. echo "LABEL=$LabelRoot / ext4 discard,noatime,nodiratime 0 1" >> $Mont/etc/fstab
  172. else
  173. # Si disque normal
  174. [ $Home ] && echo "LABEL=$LabelRoot / ext4 defaults 0 1">>$Mont/etc/fstab
  175. fi
  176.  
  177. # Test si partition utilisateur sur un SSD
  178. if [ $Home ]; then
  179. tmp=`echo $Home | sed -e 's/\/.*\///' -e 's/[0-9]*$//'`
  180. Ssdh=
  181. [ `cat /sys/block/$tmp/queue/rotational` -eq 0 ] && Ssdh=1
  182. # Si c'est un SSD, ajouter l'option discard pour activer le TRIM
  183. if [ $Ssdh ]; then
  184. echo "LABEL=$LabelHome /home ext4 discard,noatime,nodiratime 0 1" >> $Mont/etc/fstab
  185. else
  186. # Si disque normal
  187. echo "LABEL=$LabelHome /home ext4 defaults 0 1">>$Mont/etc/fstab
  188. fi
  189. fi
  190.  
  191. # Déclaration d'un swap éventuel
  192. [ $Swap ] && echo "LABEL=$LabelSwap swap swap defaults 0 0">>$Mont/etc/fstab
  193.  
  194.  
  195. # Traitement mirrorlist
  196. # ---------------------
  197. echo
  198. echo -e '\E[37;44m'"\033[1m Traitement mirrorlist \033[0m"
  199. tmp=`basename $Miroir`
  200. sed -i /$tmp/s/^#// $Mont/etc/pacman.d/mirrorlist
  201.  
  202.  
  203. # Installation de yaourt
  204. # ----------------------
  205. echo -e '\n\E[37;44m'"\033[1m Installation de yaourt \033[0m"
  206. # rajout de réference à AUR pour installation yaourt
  207. echo '
  208. [archlinuxfr]
  209. # SigLevel = PackageOptional
  210. Server = http://repo.archlinux.fr/$arch
  211. ' >> $Mont/etc/pacman.conf
  212. Chroot pacman -Sy
  213. Chroot pacman -S yaourt --noconfirm
  214. # suppression référence directe à AUR (dangereux, sinon)
  215. sed -i '/^\[archlinuxfr\]/,+2s/^/# /' $Mont/etc/pacman.conf
  216. Chroot yaourt -Sy
  217. echo -e '\E[37;44m'"\033[1m Installation base-devel \033[0m"
  218. Chroot pacman -Syf base-devel -pycurl --noconfirm
  219.  
  220.  
  221. # Installation pilote carte graphique
  222. # -----------------------------------
  223. echo -e '\n\E[37;44m'"\033[1m Installation carte Graphique \033[0m"
  224. lspci | grep VGA
  225. Carte=`lspci | grep VGA | awk '{print $5}' | tr 'a-z' 'A-Z'`
  226. echo Pilote $Carte détecté.
  227. case $Carte in
  228. ATI)
  229. echo Ajout du module radeon à mkinitcpio.conf.
  230. sed -i /^MODULE/s/\"\"/\"radeon\"/ $Mont/etc/mkinitcpio.conf
  231. echo Installation du pilote libre.
  232. Chroot pacman -S xf86-video-ati --noconfirm
  233. ;;
  234. NVIDIA)
  235. echo Ajout du module nouveau à mkinitcpio.conf.
  236. sed -i /^MODULE/s/\"\"/\"nouveau\"/ $Mont/etc/mkinitcpio.conf
  237. echo Installation du pilote libre.
  238. Chroot pacman -S xf86-video-nouveau nouveau-dri --noconfirm
  239. echo '
  240. Section "Device"
  241. Identifier "nvidia card"
  242. Driver "nouveau"
  243. EndSection' > $Mont/etc/X11/xorg.conf.d/20-nouveau.conf
  244. ;;
  245. INTEL)
  246. Chroot pacman -S xf86-video-intel --noconfirm
  247. ;;
  248. *)
  249. echo Type de carte graphique $Carte ; pilote Vesa par défaut
  250. Chroot pacman -S xf86-video-vesa --noconfirm
  251. ;;
  252. esac
  253. # Metre à jour le firmware du noyau
  254. Chroot pacman -S linux-firmware --noconfirm
  255. Chroot mkinitcpio -p linux
  256.  
  257.  
  258. # Installation interface graphique Xorg
  259. # --------------------------------------
  260. echo -e '\n\E[37;44m'"\033[1m Installation interface graphique Xorg \033[0m"
  261. Chroot pacman -Syu xorg-server xorg-xinit xorg-utils xorg-server-utils --noconfirm
  262.  
  263. # OPTIONNEL, A REVOIR
  264. # Permet un test autonome de Xorg
  265. Chroot pacman -S xorg-twm xorg-xclock xterm --noconfirm
  266. # Ajout de polices bien lissées
  267. Chroot pacman -S xorg-fonts-type1 ttf-dejavu artwiz-fonts font-bh-ttf \
  268. font-bitstream-speedo gsfonts sdl_ttf ttf-bitstream-vera \
  269. ttf-cheapskate ttf-liberation --noconfirm
  270. # Configuration du clavier
  271. ex $Mont/etc/X11/xorg.conf.d/10-evdev.conf <<=
  272. /MatchIsKeyboard/+2a
  273. Option "XkbLayout" "fr"
  274. Option "XkbVariant" "latin9"
  275. Option "XkbOptions" "compose:menu,terminate:ctrl_alt_bksp"
  276. .
  277. wq
  278. =
  279.  
  280.  
  281. # Déclaration des utilisateurs
  282. # -- -------------------------
  283. echo -e '\n\E[37;44m'"\033[1m Déclaration des utilisateurs \033[0m"
  284. [ $User ] && Chroot useradd -G users,wheel,audio,optical,lp,scanner,log,power,floppy,storage,video -m $User
  285. # récupération des mots de passe depuis le /etc/shadow de l'hôte
  286. echo -n `sed -n "/^root/p" /etc/shadow | awk -F: '{print $1":"$2}'` > /tmp/toto
  287. tmp=`sed -n "/^root/p" $Mont/etc/shadow | awk -F: '{print $3":"$4":::::"}'`
  288. echo ":"$tmp >> /tmp/toto
  289. ex $Mont/etc/shadow <<=
  290. /^root:/
  291. .d
  292. .-1r /tmp/toto
  293. wq
  294. =
  295. if [ $User ]; then
  296. echo -n `sed -n "/^$User/p" /etc/shadow | awk -F: '{print $1":"$2}'` > /tmp/toto
  297. tmp=`sed -n "/^$User/p" $Mont/etc/shadow | awk -F: '{print $3":"$4":"$5":"$6":::"}'`
  298. echo ":"$tmp >> /tmp/toto
  299. ex $Mont/etc/shadow <<=
  300. /^$User:/
  301. .d
  302. .-1r /tmp/toto
  303. wq
  304. =
  305. fi
  306. rm -f /tmp/toto
  307.  
  308.  
  309. # Installation d'un Navigateur
  310. # ----------------------------
  311. echo -e '\n\E[37;44m'"\033[1m Installation navigateur $Navig \033[0m"
  312. case $Navig in
  313.  
  314. Chromium)
  315. Chroot pacman -S chromium flashplugin --noconfirm
  316. # correction mauvais affichage des caractères
  317. echo '
  318. <match target="font">
  319. <edit name="autohint" mode="assign">
  320. <bool>true</bool>
  321. </edit>
  322. <edit name="hinting" mode="assign">
  323. <bool>true</bool>
  324. </edit>
  325. <edit mode="assign" name="hintstyle">
  326. <const>hintslight</const>
  327. </edit>
  328. </match>
  329. ' > $Mont/home/$User/.fonts.conf
  330. ;;
  331. Firefox)
  332. Chroot pacman -S firefox firefox-i18n-fr --noconfirm
  333. ;;
  334. *)
  335. echo "Pas de navigateur défini."
  336. ;;
  337. esac
  338.  
  339.  
  340. # Installation d'un gestionnaire de courrier
  341. # ------------------------------------------
  342. echo -e '\n\E[37;44m'"\033[1m Installation gestionnaire de courrier $Email \033[0m"
  343. case $Email in
  344.  
  345. Thunderbird)
  346. Chroot pacman -S thunderbird thunderbird-i18n-fr libcanberra --noconfirm
  347. ;;
  348. *)
  349. echo "Pas de gestionnaire de courrier défini."
  350. ;;
  351. esac
  352.  
  353.  
  354. # Installation environnement graphique
  355. # ------------------------------------
  356. case $Bureau in
  357. Gnome|Cinnamon)
  358. echo -e '\n\E[37;44m'"\033[1m Installation bureau $Bureau \033[0m"
  359. # Installation paquet gnome
  360. Chroot pacman -S gnome --noconfirm
  361. # Ajout de gdm pour avoir une interface graphique de connexion
  362. Chroot pacman -S gdm --noconfirm
  363. # optionnel
  364. Chroot pacman -S gnome-extra --noconfirm
  365. # Optionnel : plugins multimedia
  366. Chroot pacman -S gstreamer0.10-plugins --noconfirm
  367. # Ajout de dbus et gdm aux services dans /etc/rc.conf
  368. sed -i '/^DAEMONS=/s/)/ dbus gdm)/' $Mont/etc/rc.conf
  369. # Ouverture de session automatique
  370. sed -i '
  371. /^\[daemon\]/ a\
  372. TimedLoginEnable=0\
  373. AutomaticLogin=pat\
  374. AutomaticLoginEnable=1
  375. ' $Mont/etc/gdm/custom.conf
  376. # Partie spécifique Cinnamon
  377. if [ $Bureau == Cinnamon ]; then
  378. # Ajout de base-devel, nécessaire pour compiler muffin
  379. Chroot pacman -Sf base-devel --noconfirm
  380. # Installation de Cinnmmon (y compris muffin)
  381. Chroot yaourt -Sf cinnamon --noconfirm
  382. fi
  383. ;;
  384. Xfce)
  385. echo -e '\n\E[37;44m'"\033[1m Installation bureau $Bureau \033[0m"
  386. # Installation paquet xfce
  387. Chroot pacman -S xfce4 --noconfirm
  388. # Optionnel
  389. Chroot pacman -S xfce4-goodies --noconfirm
  390. # Ajout de DBus aux services dans /etc/rc.conf
  391. sed -i '/^DAEMONS=/s/)/ dbus)/' $Mont/etc/rc.conf
  392. # Optionnel : lancement automatique de Xfce au démarrage
  393. echo '
  394. # Démarrer Xfce automatiquement
  395. if [ "$(tty)" = "/dev/tty1" -o "$(tty)" = "/dev/vc/1" ];
  396. then startxfce4
  397. fi' > $Mont/home/$User/.bashrc
  398. ;;
  399. *)
  400. echo -e '\n\E[37;44m'"\033[1m Pas de bureau installé. \033[0m"
  401. ;;
  402. esac
  403. # Optionnel : installation polices Microsoft
  404. Chroot yaourt -S ttf-ms-fonts --noconfirm
  405.  
  406.  
  407. # Installation optionnelle du Wifi
  408. # --------------------------------
  409. if [ "$tmp" ] ; then
  410. # Wifi=`echo $tmp | awk '{print $1}'` # nom de la liaison
  411. # Essid=`echo $tmp | awk -F'"' '{print $2}'` # Nom du point d'accès utilisé
  412. Chroot pacman -S netcfg --noconfirm
  413. sed "
  414. /^INTERFACE=/s/wlan0/$Wifi/
  415. /^ESSID=/s/MyNetwork/$Essid/
  416. /^KEY/s/WirelessKey/$Clewpa/
  417. " $Mont/etc/network.d/examples/wireless-wpa > $Mont/etc/network.d/I$Wifi
  418. sed -i "
  419. /HOSTNAME/ a\
  420. NETWORKS=(I$Wifi)
  421. " $Mont/etc/rc.conf
  422. sed -i '/^DAEMONS=/s/(/(@net-profiles /' $Mont/etc/rc.conf
  423. fi
  424.  
  425.  
  426. # Installation du Grub 2 si demandé
  427. # ---------------------------------
  428. if [ "$Grub" ]; then
  429. echo -e '\n\E[37;44m'"\033[1m Installation de Grub 2 \033[0m"
  430. # Suppression du paquet Grub Legacy
  431. Chroot pacman -R grub --noconfirm
  432. # Installation paquet Grub 2
  433. Chroot pacman -Sf grub2-bios --noconfirm
  434. # Installation os-prober (pour récupérer un boot Windows)
  435. Chroot pacman -S os-prober --noconfirm
  436. # Ajout du système hôte au menu du Grub
  437. sed '
  438. 1,/10_linux/d
  439. /10_linux/,$d
  440. ' /boot/grub/grub.cfg >> $Mont/etc/grub.d/40_custom
  441. # Installation du Grub
  442. Chroot grub-install $Grub
  443. # Si Root sur SSD, passer le scheduler de cfq à noop
  444. [ $Ssdr ] && sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT=/s/"$/ elevator=noop splash"/' $Mont/etc/default/grub
  445. # Créer fichiers de configuration du Grub
  446. Chroot grub-mkconfig -o /boot/grub/grub.cfg
  447.  
  448. fi
  449.  
  450. umount $Mont/sys && echo "/sys démontée."
  451. umount $Mont/dev && echo "/dev démontée."
  452. umount $Mont/proc && echo "/proc démontée."
  453.  
  454. [ $Home ] && umount $Home
  455. umount -l $Root
  456.  
  457. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement