Advertisement
Guest User

Untitled

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